Skip to content

Commit 9d36ccc

Browse files
Add create activity route
1 parent a3ece4e commit 9d36ccc

File tree

5 files changed

+73
-3
lines changed

5 files changed

+73
-3
lines changed

server/src/modules/controllers/professorControllers.ts

+16-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { ValidateProfessorUseCase } from "../services/professor/ValidateProfesso
55
import { ValidateRecoveryUseCase } from "../services/professor/ValidateRecoveryUseCase";
66
import { RecoveryProfessorUseCase } from "../services/professor/RecoveryProfessorUseCase";
77
import { RefreshTokenUseCase } from "../services/professor/RefreshTokenUseCase";
8+
import { CreateActivityUseCase } from "../services/professor/CreateActivityUseCase";
89

910
export class InitProfessorController {
1011
async handle(req: Request, res: Response) {
@@ -76,4 +77,18 @@ export class RefreshTokenController {
7677

7778
return res.status(201).json(result);
7879
}
79-
}
80+
}
81+
82+
export class CreateActivityController {
83+
async handle(req: Request, res: Response) {
84+
const professorId = req.body.entidade.id;
85+
const {title, descricao} = req.body;
86+
const imagem = req.file as Express.Multer.File;
87+
88+
const createActivityUseCase = new CreateActivityUseCase();
89+
90+
const result = await createActivityUseCase.execute({title, descricao, professorId, imagem});
91+
92+
return res.status(201).json(result);
93+
}
94+
}

server/src/modules/interfaces/professorDTOs.ts

+7
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,11 @@ export interface ValidateRecoveryDTO {
2222
email: string,
2323
recoveryPass: string,
2424
newPass: string
25+
}
26+
27+
export interface CreateActivityDTO {
28+
title: string;
29+
descricao: string;
30+
professorId: string;
31+
imagem: Express.Multer.File;
2532
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import { Professor } from "@prisma/client";
2+
import { prisma } from "../../../prisma/client";
3+
import { AppError } from "../../../errors/error";
4+
import { CreateActivityDTO } from "../../interfaces/professorDTOs";
5+
import { clearUploads } from "../shared/helpers/helpers";
6+
import { uploadToMinio } from "../../../minioService";
7+
8+
9+
export class CreateActivityUseCase {
10+
async execute({ title, descricao, professorId, imagem }: CreateActivityDTO) {
11+
if (!title || !descricao || !professorId || !imagem) {
12+
throw new AppError("Parâmetros insuficientes ou inválidos.");
13+
}
14+
15+
const professor = await prisma.professor.findUnique({
16+
where: { id: professorId }
17+
});
18+
19+
if (!professor) {
20+
throw new Error('Professor não encontrado');
21+
}
22+
23+
const bucketName = 'boot';
24+
const objectName = `atividades/${professor.email}/title`;
25+
26+
try {
27+
const filePath = imagem.path;
28+
await uploadToMinio(bucketName, objectName, filePath);
29+
30+
clearUploads();
31+
await prisma.atividade.create({
32+
data: {
33+
title,
34+
descricao,
35+
professorId,
36+
imagem: objectName
37+
}
38+
});
39+
40+
return "Atividade criada com sucesso1";
41+
} catch (error) {
42+
throw new AppError(`Error uploading image: ${error}`);
43+
}
44+
}
45+
}

server/src/router/routes/imports/professor.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ import {
1313
InitProfessorController,
1414
RecoveryProfessorController,
1515
ValidateRecoveryController,
16-
RefreshTokenController
16+
RefreshTokenController,
17+
CreateActivityController
1718
} from "../../../modules/controllers/professorControllers";
1819

1920
export const createControllers = () => ({
@@ -29,5 +30,6 @@ export const createControllers = () => ({
2930
getVinculosController: new GetVinculosController(),
3031
getUnlinkedsController: new GetUnlinkedsController(),
3132
refreshTokenController: new RefreshTokenController(),
32-
createMessageController: new CreateMessageController()
33+
createMessageController: new CreateMessageController(),
34+
createActivityController: new CreateActivityController()
3335
});

server/src/router/routes/professor.routes.ts

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ professorRoutes.post("/link/accept", controllers.acceptVinculoController.handle)
1919
professorRoutes.post("/link/reject", controllers.ignoreVinculoController.handle);
2020
professorRoutes.post("/link/delete", controllers.deleteVinculoController.handle);
2121
professorRoutes.post("/message/send", controllers.createMessageController.handle);
22+
professorRoutes.post("/activity/create", controllers.createActivityController.handle);
2223

2324
professorRoutes.get("/auth", (req, res) => {
2425
res.status(200).send("Professor autenticado com sucesso.");

0 commit comments

Comments
 (0)