Skip to content

Commit ad15acd

Browse files
committed
#1527 - add endpoint to projects files
1 parent 390eb4d commit ad15acd

3 files changed

Lines changed: 38 additions & 0 deletions

File tree

src/backend/src/controllers/projects.controllers.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,17 @@ export default class ProjectsController {
269269
}
270270
}
271271

272+
static async deleteMaterial(req: Request, res: Response, next: NextFunction) {
273+
try {
274+
const { materialId } = req.params;
275+
const user: User = await getCurrentUser(res);
276+
const updatedMaterial = await ProjectsService.deleteMaterial(user, materialId);
277+
res.status(200).json(updatedMaterial);
278+
} catch (error: unknown) {
279+
next(error);
280+
}
281+
}
282+
272283
static async editMaterial(req: Request, res: Response, next: NextFunction) {
273284
try {
274285
const user = await getCurrentUser(res);

src/backend/src/routes/projects.routes.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,5 +112,6 @@ projectRouter.post(
112112
projectRouter.delete('/bom/material-type/:materialTypeId/delete', ProjectsController.deleteMaterialType);
113113

114114
projectRouter.delete('/bom/assembly/:assemblyId/delete', ProjectsController.deleteAssemblyType);
115+
projectRouter.post('/bom/material/:materialId/delete', ProjectsController.deleteMaterial);
115116

116117
export default projectRouter;

src/backend/src/services/projects.services.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,6 +1038,32 @@ export default class ProjectsService {
10381038
return deletedMaterialType;
10391039
}
10401040

1041+
/**
1042+
* Delete material in the database
1043+
* @param materialId the id number of the given material
1044+
* @param currentUser the current user currently accessing the material
1045+
* @returns the deleted material
1046+
* @throws if the user does not have permission, or materidal already deleted
1047+
*/
1048+
static async deleteMaterial(currentUser: User, materialId: string): Promise<string> {
1049+
if (!isLeadership(currentUser.role)) {
1050+
throw new AccessDeniedException('Only Leadership can delete materials');
1051+
}
1052+
1053+
const material = await prisma.material.findUnique({ where: { materialId } });
1054+
1055+
if (!material) throw new NotFoundException('Material', materialId);
1056+
1057+
if (material.dateDeleted) throw new DeletedException('Material', materialId);
1058+
1059+
const deletedMaterial = await prisma.material.update({
1060+
where: { materialId },
1061+
data: { dateDeleted: new Date(), userDeletedId: currentUser.userId }
1062+
});
1063+
1064+
return deletedMaterial.materialId;
1065+
}
1066+
10411067
/**
10421068
* Update a material
10431069
* @param submitter the submitter of the request

0 commit comments

Comments
 (0)