Skip to content

Develop #363

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 39 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
e6dddca
QAGDEV-681 - Подключение проекта к S3
nik1999777 Dec 31, 2024
18e0aa4
Merge pull request #361 from qa-guru/QAGDEV-681
nik1999777 Dec 31, 2024
b32da43
QAGDEV-689 - Дать возможность администратору менять статус ДЗ у студента
nik1999777 Jan 13, 2025
f7e31ed
Merge pull request #362 from qa-guru/QAGDEV-689
nik1999777 Jan 13, 2025
edc0e02
QAGDEV-681 - Подключение проекта к S3 v2.0
nik1999777 Jan 15, 2025
3f0343b
Merge pull request #364 from qa-guru/QAGDEV-681
nik1999777 Jan 15, 2025
683af6a
QAGDEV-681 - Подключение проекта к S3
nik1999777 Mar 3, 2025
cf7438f
QAGDEV-681 - Подключение проекта к S3
nik1999777 Mar 3, 2025
8109000
Merge pull request #365 from qa-guru/QAGDEV-681
nik1999777 Mar 3, 2025
1fb1b4d
QAGDEV-681 - Подключение проекта к S3
nik1999777 Mar 3, 2025
1f4e7c3
Merge pull request #366 from qa-guru/QAGDEV-681
nik1999777 Mar 3, 2025
6f54b15
QAGDEV-681 - Подключение проекта к S3
nik1999777 Mar 5, 2025
2deca83
Merge pull request #367 from qa-guru/QAGDEV-681
nik1999777 Mar 5, 2025
00c2334
QAGDEV-681 - Подключение проекта к S3
nik1999777 Mar 7, 2025
51794f9
Merge pull request #368 from qa-guru/QAGDEV-681
nik1999777 Mar 7, 2025
f458eec
Jenkins tests
georg3k Mar 23, 2025
0458389
QAGDEV-681 - Подключение проекта к S3
nik1999777 Apr 2, 2025
69b8028
QAGDEV-681 - Подключение проекта к S3
nik1999777 Apr 2, 2025
9539a52
Merge pull request #369 from qa-guru/QAGDEV-681
nik1999777 Apr 2, 2025
742b80f
QAGDEV-707 - Невозможно перетащить домашнее задание по борде (Новые -…
nik1999777 Apr 6, 2025
a9a4785
Merge pull request #370 from qa-guru/QAGDEV-707
nik1999777 Apr 6, 2025
9fa7f48
QAGDEV-717 - При удалении одного файла/картинки из s3 - удаляются все…
nik1999777 Apr 27, 2025
79878f7
Merge pull request #371 from qa-guru/QAGDEV-717
nik1999777 Apr 27, 2025
fadbe35
QAGDEV-703 - После регистрации пользователя в профиле не возвращается…
nik1999777 Apr 27, 2025
33fa1f5
Merge pull request #372 from qa-guru/QAGDEV-703
nik1999777 Apr 27, 2025
5b23a27
QAGDEV-704 - Нестабильное отображение доступных курсов
nik1999777 Apr 28, 2025
56d86c0
Merge pull request #373 from qa-guru/QAGDEV-704
nik1999777 Apr 28, 2025
fea12ea
QAGDEV-716 - Детализация заданий не занимает весь фрейм
nik1999777 May 1, 2025
5d9678c
Merge pull request #374 from qa-guru/QAGDEV-716
nik1999777 May 1, 2025
6e79f23
QAGDEV-721 - Удаление файла и возвращение его через command+Z / cntrl+Z
nik1999777 Jun 9, 2025
646f743
Merge pull request #375 from qa-guru/QAGDEV-721
nik1999777 Jun 9, 2025
ef8d3e5
QAGDEV-721 - Удаление файла и возвращение его через command+Z / cntrl+Z
nik1999777 Jun 24, 2025
60ad522
Merge pull request #376 from qa-guru/QAGDEV-721
nik1999777 Jun 24, 2025
eed2aaf
QAGDEV-723 - [FE] Прикрепления тестов к заданиям (v1)
nik1999777 Jul 20, 2025
5f76851
Merge pull request #377 from qa-guru/QAGDEV-723
nik1999777 Jul 20, 2025
afcb98b
QAGDEV-726 - Бесконечная загрузка при открытии урока на тарифе Самост…
nik1999777 Jul 20, 2025
c815579
Merge pull request #378 from qa-guru/QAGDEV-726
nik1999777 Jul 20, 2025
8db1c07
QAGDEV-726 - Бесконечная загрузка при открытии урока на тарифе Самост…
nik1999777 Jul 26, 2025
087c488
Merge pull request #379 from qa-guru/QAGDEV-726
nik1999777 Jul 26, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 13 additions & 4 deletions .env.development
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,16 @@ VITE_AVATAR_UPLOAD_URI=/upload/avatar
VITE_AVATAR_DELETE_URI=/upload/avatar
VITE_TRAINING_UPLOAD_URI=/upload/training/:id
VITE_TRAINING_DELETE_URI=/upload/training/:id
VITE_HOMEWORK_FILE_UPLOAD_URI=/homework/:homeWorkId/file
VITE_HOMEWORK_FILE_GET_URI=/homework/:homeWorkId/file/:fileId
VITE_HOMEWORK_FILE_DELETE_URI=/homework/:homeWorkId/file
VITE_APP_ENDPOINT="http://app-stage.qa.guru:8080"
VITE_HOMEWORK_FILE_UPLOAD_URI=/student/homework/:homeWorkId/file
VITE_HOMEWORK_FILE_GET_URI=/student/homework/:homeWorkId/file/:fileId
VITE_HOMEWORK_FILE_DELETE_URI=/student/homework/:homeWorkId/file/:fileId
VITE_LECTURE_FILE_UPLOAD_URI=/lecture/:lectureId/file
VITE_LECTURE_FILE_GET_URI=/lecture/:lectureId/file/:fileId
VITE_LECTURE_FILE_DELETE_URI=/lecture/:lectureId/file/:fileId
VITE_LECTURE_HOMEWORK_FILE_UPLOAD_URI=/lecture/:lectureId/homework/file
VITE_LECTURE_HOMEWORK_FILE_GET_URI=/lecture/:lectureId/homework/file/:fileId
VITE_LECTURE_HOMEWORK_FILE_DELETE_URI=/lecture/:lectureId/homework/file/:fileId
VITE_HOMEWORK_COMMENT_FILE_UPLOAD_URI=/homework/comment/:commentId/file
VITE_HOMEWORK_COMMENT_FILE_GET_URI=/homework/comment/:commentId/file/:fileId
VITE_HOMEWORK_COMMENT_FILE_DELETE_URI=/homework/comment/:commentId/file/:fileId
VITE_APP_ENDPOINT="http://app-stage.qa.guru:8080"
15 changes: 12 additions & 3 deletions .env.production
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,15 @@ VITE_AVATAR_UPLOAD_URI=/api/upload/avatar
VITE_AVATAR_DELETE_URI=/api/upload/avatar
VITE_TRAINING_UPLOAD_URI=/api/upload/training/:id
VITE_TRAINING_DELETE_URI=/api/upload/training/:id
VITE_HOMEWORK_FILE_UPLOAD_URI=/api/homework/:homeWorkId/file
VITE_HOMEWORK_FILE_GET_URI=/api/homework/:homeWorkId/file/:fileId
VITE_HOMEWORK_FILE_DELETE_URI=/api/homework/:homeWorkId/file
VITE_HOMEWORK_FILE_UPLOAD_URI=/api/student/homework/:homeWorkId/file
VITE_HOMEWORK_FILE_GET_URI=/api/student/homework/:homeWorkId/file/:fileId
VITE_HOMEWORK_FILE_DELETE_URI=/api/student/homework/:homeWorkId/file/:fileId
VITE_LECTURE_FILE_UPLOAD_URI=/api/lecture/:lectureId/file
VITE_LECTURE_FILE_GET_URI=/api/lecture/:lectureId/file/:fileId
VITE_LECTURE_FILE_DELETE_URI=/api/lecture/:lectureId/file/:fileId
VITE_LECTURE_HOMEWORK_FILE_UPLOAD_URI=/api/lecture/:lectureId/homework/file
VITE_LECTURE_HOMEWORK_FILE_GET_URI=/api/lecture/:lectureId/homework/file/:fileId
VITE_LECTURE_HOMEWORK_FILE_DELETE_URI=/api/lecture/:lectureId/homework/file/:fileId
VITE_HOMEWORK_COMMENT_FILE_UPLOAD_URI=/api/homework/comment/:commentId/file
VITE_HOMEWORK_COMMENT_FILE_GET_URI=/api/homework/comment/:commentId/file/:fileId
VITE_HOMEWORK_COMMENT_FILE_DELETE_URI=/api/homework/comment/:commentId/file/:fileId
9 changes: 9 additions & 0 deletions .github/workflows/frontend_deploy_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,12 @@ jobs:
run:
# rm -rf /var/www/app.qa.guru/html/*
cp -r dist/* /var/www/app-stage.qa.guru/html/

runtest_jenkins:
runs-on: stage-runner
needs: yarn-and-node
steps:
- name: jenkins
run: curl -X POST "https://jenkins.autotests.cloud/buildByToken/buildWithParameters?job=qa-guru-app-tests&token=$TOKEN&TAG=UI"
env:
TOKEN: ${{ secrets.JENKINS_TOKEN }}
5 changes: 4 additions & 1 deletion codegen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@ import type { CodegenConfig } from "@graphql-codegen/cli";
import "dotenv/config";

const config: CodegenConfig = {
schema: `${process.env.APP_ENDPOINT}${process.env.GRAPHQL_URI}`,
schema: [
`${process.env.APP_ENDPOINT}${process.env.GRAPHQL_URI}`,
"src/api/schema.graphql",
],
documents: ["src/**/*.graphql"],
generates: {
"src/api/graphql/generated/graphql.tsx": {
Expand Down
1 change: 1 addition & 0 deletions src/api/graphql/homework/create-homework-to-check.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ mutation createHomeWorkToCheck(
answer
status
training {
id
techStack
}
student {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ query homeWorkByLectureAndTraining($lectureId: ID!, $trainingId: ID!) {
answer
status
training {
id
techStack
}
student {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@ mutation sendHomeWorkToCheck($homeWorkId: ID!) {
lecture {
id
subject
description
contentHomeWork
}
answer
status
training {
techStack
}
answer
student {
id
firstName
Expand All @@ -29,7 +29,15 @@ mutation sendHomeWorkToCheck($homeWorkId: ID!) {
rating
}
}
filesHomeWork {
id
creationDate
fileName
contentType
size
}
creationDate
updateDate
startCheckingDate
endCheckingDate
}
Expand Down
8 changes: 8 additions & 0 deletions src/api/graphql/homework/update-homework.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ mutation updateHomework($id: ID!, $content: String!) {
answer
status
training {
id
techStack
}
student {
Expand All @@ -29,6 +30,13 @@ mutation updateHomework($id: ID!, $content: String!) {
rating
}
}
filesHomeWork {
id
creationDate
fileName
contentType
size
}
creationDate
startCheckingDate
endCheckingDate
Expand Down
8 changes: 8 additions & 0 deletions src/api/graphql/lecture/lecture.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,13 @@ query lecture($id: ID!) {
subject
description
content
files {
id
homeWork
creationDate
fileName
contentType
size
}
}
}
1 change: 1 addition & 0 deletions src/api/graphql/user/user.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ query user {
linkedin
avatar
creationDate
phoneNumber
rating {
rating
}
Expand Down
3 changes: 1 addition & 2 deletions src/api/rest/auth-service.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import axios, { type AxiosResponse } from "axios";
import { LOGIN_URI, LOGOUT_URI, REFRESH_TOKEN_URI } from "config";
import qs from "qs";

import { LOGIN_URI, LOGOUT_URI, REFRESH_TOKEN_URI } from "../../config";

export interface LoginResponse {
username: string;
password: string;
Expand Down
3 changes: 1 addition & 2 deletions src/api/rest/avatar-upload-service.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import axios, { type AxiosResponse } from "axios";

import { AVATAR_UPLOAD_URI, AVATAR_DELETE_URI } from "../../config";
import { AVATAR_DELETE_URI, AVATAR_UPLOAD_URI } from "config";

export interface AvatarUploadResponse {
file: string | File;
Expand Down
71 changes: 71 additions & 0 deletions src/api/rest/homework-comment-serivce.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import axios, { type AxiosResponse } from "axios";
import {
HOMEWORK_COMMENT_FILE_UPLOAD_URI,
HOMEWORK_COMMENT_FILE_GET_URI,
HOMEWORK_COMMENT_FILE_DELETE_URI,
} from "config";

import { createUrlWithParams } from "shared/utils";

export interface HomeworkFileResponse {
id: string;
fileName: string;
contentType: string;
size: number;
creationDate: string;
}

export default class HomeworkCommentFileService {
static uploadFile(
commentId: string,
file: File
): Promise<AxiosResponse<HomeworkFileResponse>> {
const formData = new FormData();
formData.append("file", file);

const uploadFileUrl = createUrlWithParams(
HOMEWORK_COMMENT_FILE_UPLOAD_URI,
{
commentId,
}
);

return axios({
method: "POST",
url: uploadFileUrl,
headers: { "Content-Type": "multipart/form-data" },
data: formData,
});
}

static getFile(
commentId: string,
fileId: string
): Promise<AxiosResponse<Blob>> {
const getFileUrl = createUrlWithParams(HOMEWORK_COMMENT_FILE_GET_URI, {
commentId,
fileId,
});

return axios({
method: "GET",
url: getFileUrl,
responseType: "blob",
});
}

static deleteFile(
commentId: string,
fileId: string
): Promise<AxiosResponse<void>> {
const deleteUrl = createUrlWithParams(HOMEWORK_COMMENT_FILE_DELETE_URI, {
commentId,
fileId,
});

return axios({
method: "DELETE",
url: deleteUrl,
});
}
}
31 changes: 17 additions & 14 deletions src/api/rest/homework-file-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import {
HOMEWORK_FILE_UPLOAD_URI,
} from "config";

import { createUrlWithParams } from "shared/utils";

export interface HomeworkFileResponse {
id: string;
fileName: string;
Expand All @@ -21,11 +23,9 @@ export default class HomeworkFileService {
const formData = new FormData();
formData.append("file", file);

const uploadFileUrl = HOMEWORK_FILE_UPLOAD_URI.replace(
// eslint-disable-next-line sonarjs/no-duplicate-string
":homeWorkId",
homeWorkId
);
const uploadFileUrl = createUrlWithParams(HOMEWORK_FILE_UPLOAD_URI, {
homeWorkId,
});

return axios({
method: "POST",
Expand All @@ -39,10 +39,10 @@ export default class HomeworkFileService {
homeWorkId: string,
fileId: string
): Promise<AxiosResponse<Blob>> {
const getFileUrl = HOMEWORK_FILE_GET_URI.replace(
":homeWorkId",
homeWorkId
).replace(":fileId", fileId);
const getFileUrl = createUrlWithParams(HOMEWORK_FILE_GET_URI, {
homeWorkId,
fileId,
});

return axios({
method: "GET",
Expand All @@ -51,11 +51,14 @@ export default class HomeworkFileService {
});
}

static deleteFile(homeWorkId: string): Promise<AxiosResponse<void>> {
const deleteUrl = HOMEWORK_FILE_DELETE_URI.replace(
":homeWorkId",
homeWorkId
);
static deleteFile(
homeWorkId: string,
fileId: string
): Promise<AxiosResponse<void>> {
const deleteUrl = createUrlWithParams(HOMEWORK_FILE_DELETE_URI, {
homeWorkId,
fileId,
});

return axios({
method: "DELETE",
Expand Down
68 changes: 68 additions & 0 deletions src/api/rest/lecture-file-service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import axios, { type AxiosResponse } from "axios";
import {
LECTURE_FILE_UPLOAD_URI,
LECTURE_FILE_GET_URI,
LECTURE_FILE_DELETE_URI,
} from "config";

import { createUrlWithParams } from "shared/utils";

export interface LectureFileResponse {
id: string;
fileName: string;
contentType: string;
size: number;
creationDate: string;
}

export default class LectureFileService {
static uploadFile(
lectureId: string,
file: File
): Promise<AxiosResponse<LectureFileResponse>> {
const formData = new FormData();
formData.append("file", file);

const uploadFileUrl = createUrlWithParams(LECTURE_FILE_UPLOAD_URI, {
lectureId,
});

return axios({
method: "POST",
url: uploadFileUrl,
headers: { "Content-Type": "multipart/form-data" },
data: formData,
});
}

static getFile(
lectureId: string,
fileId: string
): Promise<AxiosResponse<Blob>> {
const getFileUrl = createUrlWithParams(LECTURE_FILE_GET_URI, {
lectureId,
fileId,
});

return axios({
method: "GET",
url: getFileUrl,
responseType: "blob",
});
}

static deleteFile(
lectureId: string,
fileId: string
): Promise<AxiosResponse<void>> {
const deleteUrl = createUrlWithParams(LECTURE_FILE_DELETE_URI, {
lectureId,
fileId,
});

return axios({
method: "DELETE",
url: deleteUrl,
});
}
}
Loading