feat(api): add template room picture endpoint

This commit is contained in:
avicenan
2026-03-13 16:02:46 +07:00
parent f2363e84af
commit 688ea3b510
2 changed files with 34 additions and 0 deletions

View File

@ -422,6 +422,11 @@ export class RoomController {
const param: { file_name: string } = await schema.validateAsync(req.body); const param: { file_name: string } = await schema.validateAsync(req.body);
// Prevent deletion of files starting with "template_"
if (param.file_name.startsWith("template_")) {
return ReturnHelper.errorResponse(res, 403, 403, Language.lang.failed_delete, "Cannot delete files that start with 'template_'");
}
// const env = process.env.NODE_ENV + '/' // const env = process.env.NODE_ENV + '/'
const fixedPath = 'uploads/room-picture/'; const fixedPath = 'uploads/room-picture/';
const file_path = fixedPath + param.file_name; const file_path = fixedPath + param.file_name;
@ -442,4 +447,32 @@ export class RoomController {
return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_delete, err.message); return ReturnHelper.errorResponse(res, 500, 402, Language.lang.failed_delete, err.message);
} }
} }
static async gettemplatepicture(req: Request, res: Response, next: NextFunction): Promise<Response> {
/*
#swagger.tags = ['Room']
#swagger.security = [{ "bearerAuth": [] }]
#swagger.description = 'Get all room pictures from uploads/room-picture/template directory".'
*/
try {
const filePath = 'uploads/room-picture/template/';
if (!fs.existsSync(filePath)) {
return ReturnHelper.successResponseAny(res, 200, Language.lang.success_view, []);
}
const files = fs.readdirSync(filePath)
const photoBaseUrl = "https://his.shiblysolution.id/service-master-data/uploads/room-picture/template/";
const filesWithUrl = files.map(filename => ({
name: `template/${filename}`,
url: photoBaseUrl + filename
}));
return ReturnHelper.successResponseAny(res, 200, Language.lang.success_view, filesWithUrl);
} catch (e: unknown) {
log.error(e);
const err = e as Error;
return ReturnHelper.errorResponse(res, 500, 401, Language.lang.failed_view, err.message);
}
}
} }

View File

@ -139,6 +139,7 @@ export class RoutePrivate {
app.put('/api/room/restore/:id', RoomController.restore) app.put('/api/room/restore/:id', RoomController.restore)
app.post('/api/room/upload-picture', RoomController.uploadpicture) app.post('/api/room/upload-picture', RoomController.uploadpicture)
app.delete('/api/room/delete-picture', RoomController.deletepicture) app.delete('/api/room/delete-picture', RoomController.deletepicture)
app.get('/api/room/get-template-picture', RoomController.gettemplatepicture)
app.get('/api/laboratory/list', LaboratoryController.list) app.get('/api/laboratory/list', LaboratoryController.list)