diff --git a/src/app/api/idnot/UserController.ts b/src/app/api/idnot/UserController.ts index 24863fff..4e15195f 100644 --- a/src/app/api/idnot/UserController.ts +++ b/src/app/api/idnot/UserController.ts @@ -49,6 +49,7 @@ export default class UserController extends ApiController { //success this.httpSuccess(response, { accessToken, refreshToken }); } catch (error) { + console.log(error); this.httpInternalError(response); return; } diff --git a/src/app/api/super-admin/DeedTypesController.ts b/src/app/api/super-admin/DeedTypesController.ts index d890bc2c..02805535 100644 --- a/src/app/api/super-admin/DeedTypesController.ts +++ b/src/app/api/super-admin/DeedTypesController.ts @@ -3,11 +3,12 @@ import { Controller, Get, Post, Put } from "@ControllerPattern/index"; import ApiController from "@Common/system/controller-pattern/ApiController"; import { Service } from "typedi"; import DeedTypesService from "@Services/super-admin/DeedTypesService/DeedTypesService"; -import { DeedTypes } from "@prisma/client"; +import { DeedTypes, Prisma } from "@prisma/client"; import { DeedType } from "le-coffre-resources/dist/SuperAdmin"; import { validateOrReject } from "class-validator"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; +import deedTypeHandler from "@App/middlewares/OfficeMembershipHandlers/DeedTypeHandler"; @Controller() @Service() @@ -25,6 +26,10 @@ export default class DeedTypesController extends ApiController { try { //get query const query = JSON.parse(req.query["q"] as string); + const officeId: string = req.body.user.office_Id; + const officeWhereInput: Prisma.DeedTypesWhereInput = {office: {uid: officeId}}; + query.where = officeWhereInput; + //call service to get prisma entity const deedTypeEntities: DeedTypes[] = await this.deedTypesService.get(query); @@ -43,7 +48,7 @@ export default class DeedTypesController extends ApiController { * @description Create a new deedtype * @returns Deedtype created */ - @Post("/api/v1/super-admin/deed-types", [authHandler,ruleHandler]) + @Post("/api/v1/super-admin/deed-types", [authHandler,ruleHandler,deedTypeHandler]) protected async post(req: Request, response: Response) { try { //init DeedType resource with request body values @@ -72,7 +77,7 @@ export default class DeedTypesController extends ApiController { * @description Modify a specific deedtype by uid * @returns Deedtype modified */ - @Put("/api/v1/super-admin/deed-types/:uid", [authHandler,ruleHandler]) + @Put("/api/v1/super-admin/deed-types/:uid", [authHandler,ruleHandler,deedTypeHandler]) protected async put(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -114,7 +119,7 @@ export default class DeedTypesController extends ApiController { * @description Get a specific deedtype by uid * @returns IDeedtype */ - @Get("/api/v1/super-admin/deed-types/:uid", [authHandler,ruleHandler]) + @Get("/api/v1/super-admin/deed-types/:uid", [authHandler,ruleHandler,deedTypeHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/DeedsController.ts b/src/app/api/super-admin/DeedsController.ts index 2dd94592..e08a4163 100644 --- a/src/app/api/super-admin/DeedsController.ts +++ b/src/app/api/super-admin/DeedsController.ts @@ -3,11 +3,12 @@ import { Controller, Get, Put } from "@ControllerPattern/index"; import ApiController from "@Common/system/controller-pattern/ApiController"; import DeedsService from "@Services/super-admin/DeedsService/DeedsService"; import { Service } from "typedi"; -import { Deeds } from "@prisma/client"; +import { Deeds, Prisma } from "@prisma/client"; import { Deed } from "le-coffre-resources/dist/SuperAdmin"; import { validateOrReject } from "class-validator"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; +import deedHandler from "@App/middlewares/OfficeMembershipHandlers/DeedHandler"; @Controller() @Service() @@ -25,6 +26,10 @@ export default class DeedsController extends ApiController { try { //get query const query = JSON.parse(req.query["q"] as string); + const officeId: string = req.body.user.office_Id; + const officeWhereInput: Prisma.DeedsWhereInput = { deed_type: {office: {uid: officeId}}}; + query.where = officeWhereInput; + //call service to get prisma entity const deedEntities: Deeds[] = await this.deedsService.get(query); @@ -43,7 +48,7 @@ export default class DeedsController extends ApiController { * @description Get a specific deed by uid * @returns Deed */ - @Get("/api/v1/super-admin/deeds/:uid", [authHandler,ruleHandler]) + @Get("/api/v1/super-admin/deeds/:uid", [authHandler,ruleHandler,deedHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -81,7 +86,7 @@ export default class DeedsController extends ApiController { /** * @description Modify a specific deed by uid */ - @Put("/api/v1/super-admin/deeds/:uid", [authHandler,ruleHandler]) + @Put("/api/v1/super-admin/deeds/:uid", [authHandler,ruleHandler,deedHandler]) protected async put(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/DocumentTypesController.ts b/src/app/api/super-admin/DocumentTypesController.ts index 99cef9ac..7251fee5 100644 --- a/src/app/api/super-admin/DocumentTypesController.ts +++ b/src/app/api/super-admin/DocumentTypesController.ts @@ -3,12 +3,13 @@ import { Controller, Get, Post, Put } from "@ControllerPattern/index"; import ApiController from "@Common/system/controller-pattern/ApiController"; import { Service } from "typedi"; import DocumentTypesService from "@Services/super-admin/DocumentTypesService/DocumentTypesService"; -import { DocumentTypes } from "@prisma/client"; +import { DocumentTypes, Prisma } from "@prisma/client"; import ObjectHydrate from "@Common/helpers/ObjectHydrate"; import { DocumentType } from "le-coffre-resources/dist/SuperAdmin"; import { validateOrReject } from "class-validator"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; +import documentTypeHandler from "@App/middlewares/OfficeMembershipHandlers/DocumentTypeHandler"; @Controller() @Service() @@ -25,6 +26,9 @@ export default class DocumentTypesController extends ApiController { try { //get query const query = JSON.parse(req.query["q"] as string); + const officeId: string = req.body.user.office_Id; + const officeWhereInput: Prisma.DocumentTypesWhereInput = {office: {uid: officeId}}; + query.where = officeWhereInput; //call service to get prisma entity const documentTypeEntities: DocumentTypes[] = await this.documentTypesService.get(query); @@ -45,7 +49,7 @@ export default class DocumentTypesController extends ApiController { /** * @description Create a new documentType */ - @Post("/api/v1/super-admin/document-types", [authHandler,ruleHandler]) + @Post("/api/v1/super-admin/document-types", [authHandler,ruleHandler,documentTypeHandler]) protected async post(req: Request, response: Response) { try { //init DocumentType resource with request body values @@ -69,7 +73,7 @@ export default class DocumentTypesController extends ApiController { /** * @description Modify a specific documentType by uid */ - @Put("/api/v1/super-admin/document-types/:uid", [authHandler,ruleHandler]) + @Put("/api/v1/super-admin/document-types/:uid", [authHandler,ruleHandler,documentTypeHandler]) protected async put(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -109,7 +113,7 @@ export default class DocumentTypesController extends ApiController { /** * @description Get a specific documentType by uid */ - @Get("/api/v1/super-admin/document-types/:uid", [authHandler,ruleHandler]) + @Get("/api/v1/super-admin/document-types/:uid", [authHandler,ruleHandler,documentTypeHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -128,13 +132,8 @@ export default class DocumentTypesController extends ApiController { documentTypeEntity = await this.documentTypesService.getByUid(uid); } - if (!documentTypeEntity) { - this.httpNotFoundRequest(response, "document not found"); - return; - } - //Hydrate ressource with prisma entity - const user = ObjectHydrate.hydrate(new DocumentType(), documentTypeEntity, { strategy: "excludeAll" }); + const user = ObjectHydrate.hydrate(new DocumentType(), documentTypeEntity!, { strategy: "excludeAll" }); //success this.httpSuccess(response, user); diff --git a/src/app/api/super-admin/DocumentsController.ts b/src/app/api/super-admin/DocumentsController.ts index cfc5bb2f..e4800a7b 100644 --- a/src/app/api/super-admin/DocumentsController.ts +++ b/src/app/api/super-admin/DocumentsController.ts @@ -3,11 +3,12 @@ import { Controller, Delete, Get, Post, Put } from "@ControllerPattern/index"; import ApiController from "@Common/system/controller-pattern/ApiController"; import { Service } from "typedi"; import DocumentsService from "@Services/super-admin/DocumentsService/DocumentsService"; -import { Documents } from "@prisma/client"; +import { Documents, Prisma } from "@prisma/client"; import { Document } from "le-coffre-resources/dist/SuperAdmin"; import { validateOrReject } from "class-validator"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; +import documentHandler from "@App/middlewares/OfficeMembershipHandlers/DocumentHandler"; @Controller() @Service() @@ -25,9 +26,12 @@ export default class DocumentsController extends ApiController { try { //get query const query = JSON.parse(req.query["q"] as string); + const officeId: string = req.body.user.office_Id; + const officeWhereInput: Prisma.DocumentsWhereInput = { document_type: {office: {uid: officeId}}}; + query.where = officeWhereInput; //call service to get prisma entity - const documentEntities: Documents[] = await this.documentsService.get(query); + const documentEntities = await this.documentsService.get(query); //Hydrate ressource with prisma entity const documents = Document.hydrateArray(documentEntities, { strategy: "excludeAll" }); @@ -44,7 +48,7 @@ export default class DocumentsController extends ApiController { * @description Create a new document * @returns IDocument created */ - @Post("/api/v1/super-admin/documents", [authHandler,ruleHandler]) + @Post("/api/v1/super-admin/documents", [authHandler,ruleHandler,documentHandler]) protected async post(req: Request, response: Response) { try { //init Document resource with request body values @@ -72,7 +76,7 @@ export default class DocumentsController extends ApiController { /** * @description Update a specific document */ - @Put("/api/v1/super-admin/documents/:uid", [authHandler,ruleHandler]) + @Put("/api/v1/super-admin/documents/:uid", [authHandler,ruleHandler,documentHandler]) protected async update(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -111,7 +115,7 @@ export default class DocumentsController extends ApiController { /** * @description Delete a specific document */ - @Delete("/api/v1/super-admin/documents/:uid", [authHandler,ruleHandler]) + @Delete("/api/v1/super-admin/documents/:uid", [authHandler,ruleHandler,documentHandler]) protected async delete(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -144,7 +148,7 @@ export default class DocumentsController extends ApiController { /** * @description Get a specific document by uid */ - @Get("/api/v1/super-admin/documents/:uid", [authHandler,ruleHandler]) + @Get("/api/v1/super-admin/documents/:uid", [authHandler,ruleHandler,documentHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/FilesController.ts b/src/app/api/super-admin/FilesController.ts index 465e684f..915596e3 100644 --- a/src/app/api/super-admin/FilesController.ts +++ b/src/app/api/super-admin/FilesController.ts @@ -3,12 +3,13 @@ import { Controller, Delete, Get, Post, Put } from "@ControllerPattern/index"; import ApiController from "@Common/system/controller-pattern/ApiController"; import { Service } from "typedi"; import FilesService from "@Services/common/FilesService/FilesService"; -import { Files } from "@prisma/client"; +import { Files, Prisma } from "@prisma/client"; import { File } from "le-coffre-resources/dist/SuperAdmin"; import { validateOrReject } from "class-validator"; import DocumentsService from "@Services/super-admin/DocumentsService/DocumentsService"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; +import fileHandler from "@App/middlewares/FileHandler"; @Controller() @Service() @@ -26,7 +27,9 @@ export default class FilesController extends ApiController { try { //get query const query = JSON.parse(req.query["q"] as string); - + const officeId: string = req.body.user.office_Id; + const officeWhereInput: Prisma.FilesWhereInput = {document: {folder: {office: {uid: officeId}}}}; + query.where = officeWhereInput; //call service to get prisma entity const fileEntities = await this.filesService.get(query); @@ -44,7 +47,7 @@ export default class FilesController extends ApiController { /** * @description Get a specific File by uid */ - @Get("/api/v1/super-admin/files/download/:uid", [authHandler,ruleHandler]) + @Get("/api/v1/super-admin/files/download/:uid", [authHandler,ruleHandler,fileHandler]) protected async download(req: Request, response: Response) { const uid = req.params["uid"]; if (!uid) { @@ -73,7 +76,7 @@ export default class FilesController extends ApiController { * @description Create a new File * @returns File created */ - @Post("/api/v1/super-admin/files", [authHandler,ruleHandler]) + @Post("/api/v1/super-admin/files", [authHandler,ruleHandler,fileHandler]) protected async post(req: Request, response: Response) { try { //get file @@ -114,7 +117,7 @@ export default class FilesController extends ApiController { /** * @description Update a specific file */ - @Put("/api/v1/super-admin/files/:uid", [authHandler,ruleHandler]) + @Put("/api/v1/super-admin/files/:uid", [authHandler,ruleHandler,fileHandler]) protected async update(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -152,7 +155,7 @@ export default class FilesController extends ApiController { /** * @description Delete a specific File */ - @Delete("/api/v1/super-admin/files/:uid", [authHandler,ruleHandler]) + @Delete("/api/v1/super-admin/files/:uid", [authHandler,ruleHandler,fileHandler]) protected async delete(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -190,7 +193,7 @@ export default class FilesController extends ApiController { /** * @description Get a specific File by uid */ - @Get("/api/v1/super-admin/files/:uid", [authHandler,ruleHandler]) + @Get("/api/v1/super-admin/files/:uid", [authHandler,ruleHandler,fileHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/OfficeFoldersController.ts b/src/app/api/super-admin/OfficeFoldersController.ts index 6999e03b..c4b037c4 100644 --- a/src/app/api/super-admin/OfficeFoldersController.ts +++ b/src/app/api/super-admin/OfficeFoldersController.ts @@ -3,11 +3,12 @@ import { Controller, Delete, Get, Post, Put } from "@ControllerPattern/index"; import ApiController from "@Common/system/controller-pattern/ApiController"; import OfficeFoldersService from "@Services/super-admin/OfficeFoldersService/OfficeFoldersService"; import { Service } from "typedi"; -import { OfficeFolders } from "@prisma/client"; +import { OfficeFolders, Prisma } from "@prisma/client"; import { OfficeFolder } from "le-coffre-resources/dist/SuperAdmin"; import { validateOrReject } from "class-validator"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; +import folderHandler from "@App/middlewares/OfficeMembershipHandlers/FolderHandler"; @Controller() @Service() @@ -24,7 +25,9 @@ export default class OfficeFoldersController extends ApiController { try { //get query const query = JSON.parse(req.query["q"] as string); - + const officeId: string = req.body.user.office_Id; + const officeWhereInput: Prisma.OfficeFoldersWhereInput = {office: {uid: officeId}}; + query.where = officeWhereInput; //call service to get prisma entity const officeFolderEntities: OfficeFolders[] = await this.officeFoldersService.get(query); @@ -43,25 +46,12 @@ export default class OfficeFoldersController extends ApiController { /** * @description Create a new folder */ - @Post("/api/v1/super-admin/folders", [authHandler,ruleHandler]) + @Post("/api/v1/super-admin/folders", [authHandler,ruleHandler,folderHandler]) protected async post(req: Request, response: Response) { try { //init OfficeFolder resource with request body values const officeFolderRessource = OfficeFolder.hydrate(req.body); await officeFolderRessource.validateOrReject?.({ groups: ["createFolder"] , forbidUnknownValues: false }); - - const officeFolderNumberExist = await this.officeFoldersService.get({where: {folder_number: officeFolderRessource.folder_number}}); - - - if (officeFolderNumberExist.length > 0) { - this.httpValidationError(response, [{ - property: "folder_number", - constraints: { - unique: "folder_number must be unique", - }, - }]); - return; - } //call service to get prisma entity const officeFolderEntity = await this.officeFoldersService.create(officeFolderRessource); @@ -80,7 +70,7 @@ export default class OfficeFoldersController extends ApiController { /** * @description Modify a specific folder by uid */ - @Put("/api/v1/super-admin/folders/:uid", [authHandler,ruleHandler]) + @Put("/api/v1/super-admin/folders/:uid", [authHandler,ruleHandler,folderHandler]) protected async put(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -122,7 +112,7 @@ export default class OfficeFoldersController extends ApiController { * @description Get a specific folder by uid * @returns IFolder */ - @Get("/api/v1/super-admin/folders/:uid", [authHandler,ruleHandler]) + @Get("/api/v1/super-admin/folders/:uid", [authHandler,ruleHandler,folderHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -161,7 +151,7 @@ export default class OfficeFoldersController extends ApiController { /** * @description Delete a specific folder */ - @Delete("/api/v1/super-admin/folders/:uid", [authHandler,ruleHandler]) + @Delete("/api/v1/super-admin/folders/:uid", [authHandler,ruleHandler,folderHandler]) protected async delete(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/OfficeRolesController.ts b/src/app/api/super-admin/OfficeRolesController.ts index dd7de7a0..2d5c422d 100644 --- a/src/app/api/super-admin/OfficeRolesController.ts +++ b/src/app/api/super-admin/OfficeRolesController.ts @@ -5,9 +5,10 @@ import OfficeRolesService from "@Services/super-admin/OfficeRolesService/OfficeR import { Service } from "typedi"; import { validateOrReject } from "class-validator"; import { OfficeRole } from "le-coffre-resources/dist/Notary"; -import { OfficeRoles } from "@prisma/client"; +import { OfficeRoles, Prisma } from "@prisma/client"; import authHandler from "@App/middlewares/AuthHandler"; import ruleHandler from "@App/middlewares/RulesHandler"; +import officeRoleHandler from "@App/middlewares/OfficeMembershipHandlers/OfficeRoleHandler"; @Controller() @Service() @@ -24,7 +25,10 @@ export default class OfficeRolesController extends ApiController { try { //get query const query = JSON.parse(req.query["q"] as string); - + const officeId: string = req.body.user.office_Id; + const officeWhereInput: Prisma.OfficeRolesWhereInput = {office: {uid: officeId}}; + query.where = officeWhereInput; + //call service to get prisma entity const officeRolesEntities = await this.officeRolesService.get(query); @@ -42,7 +46,7 @@ export default class OfficeRolesController extends ApiController { /** * @description Create a new officeRole */ - @Post("/api/v1/super-admin/office-roles", [authHandler,ruleHandler]) + @Post("/api/v1/super-admin/office-roles", [authHandler,ruleHandler,officeRoleHandler]) protected async getAddresses(req: Request, response: Response) { try { //init IOfficeRole resource with request body values @@ -70,7 +74,7 @@ export default class OfficeRolesController extends ApiController { /** * @description Modify a specific officeRole by uid */ - @Put("/api/v1/super-admin/office-roles/:uid", [authHandler,ruleHandler]) + @Put("/api/v1/super-admin/office-roles/:uid", [authHandler,ruleHandler,officeRoleHandler]) protected async put(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -111,7 +115,7 @@ export default class OfficeRolesController extends ApiController { /** * @description Get a specific officeRole by uid */ - @Get("/api/v1/super-admin/office-roles/:uid", [authHandler,ruleHandler]) + @Get("/api/v1/super-admin/office-roles/:uid", [authHandler,ruleHandler,officeRoleHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/super-admin/UsersController.ts b/src/app/api/super-admin/UsersController.ts index aa2de89c..0d2032ef 100644 --- a/src/app/api/super-admin/UsersController.ts +++ b/src/app/api/super-admin/UsersController.ts @@ -43,7 +43,7 @@ export default class UsersController extends ApiController { * @description Create a new user */ @Post("/api/v1/super-admin/users", [authHandler, ruleHandler]) - protected async getAddresses(req: Request, response: Response) { + protected async create(req: Request, response: Response) { try { //init IUser resource with request body values const userEntity = User.hydrate(req.body); diff --git a/src/app/middlewares/OfficeMembershipHandlers/DeedHandler.ts b/src/app/middlewares/OfficeMembershipHandlers/DeedHandler.ts new file mode 100644 index 00000000..7c674676 --- /dev/null +++ b/src/app/middlewares/OfficeMembershipHandlers/DeedHandler.ts @@ -0,0 +1,35 @@ +import HttpCodes from "@Common/system/controller-pattern/HttpCodes"; +import DeedsService from "@Services/super-admin/DeedsService/DeedsService"; +import { DocumentType } from "le-coffre-resources/dist/SuperAdmin"; +import { NextFunction, Request, Response } from "express"; +import Container from "typedi"; + +export default async function deedHandler(req: Request, response: Response, next: NextFunction) { + const officeId = req.body.user.office_Id; + const uid = req.path && req.path.split("/")[5]; + const documentTypes: DocumentType[] = req.body.document_types; + + const deedService = Container.get(DeedsService); + const deed = await deedService.getOneByUidWithOffice(uid!); + + if (!deed) { + response.sendStatus(HttpCodes.NOT_FOUND); + return; + } + + if (deed.deed_type.office.uid != officeId) { + response.sendStatus(HttpCodes.UNAUTHORIZED); + return; + } + + if(documentTypes) { + documentTypes.forEach((documentType) => { + if (documentType.office?.uid != officeId) { + response.sendStatus(HttpCodes.UNAUTHORIZED); + return; + } + }); + } + + next(); +} diff --git a/src/app/middlewares/OfficeMembershipHandlers/DeedTypeHandler.ts b/src/app/middlewares/OfficeMembershipHandlers/DeedTypeHandler.ts new file mode 100644 index 00000000..1f2ae532 --- /dev/null +++ b/src/app/middlewares/OfficeMembershipHandlers/DeedTypeHandler.ts @@ -0,0 +1,43 @@ +import HttpCodes from "@Common/system/controller-pattern/HttpCodes"; +import DeedTypesService from "@Services/super-admin/DeedTypesService/DeedTypesService"; +import { DocumentType } from "le-coffre-resources/dist/SuperAdmin"; +import { NextFunction, Request, Response } from "express"; +import Container from "typedi"; + +export default async function deedTypeHandler(req: Request, response: Response, next: NextFunction) { + const officeId = req.body.user.office_Id; + const uid = req.path && req.path.split("/")[5]; + const documentTypes: DocumentType[] = req.body.document_types; + const office = req.body.office; + + if(office && office.uid != officeId) { + response.sendStatus(HttpCodes.UNAUTHORIZED); + return; + } + + if (uid) { + const deedTypeService = Container.get(DeedTypesService); + const deedType = await deedTypeService.getByUidWithOffice(uid!); + + if (!deedType) { + response.sendStatus(HttpCodes.NOT_FOUND); + return; + } + + if (deedType.office.uid != officeId) { + response.sendStatus(HttpCodes.UNAUTHORIZED); + return; + } + } + + if (documentTypes) { + documentTypes.forEach((documentType) => { + if (documentType.office?.uid != officeId) { + response.sendStatus(HttpCodes.UNAUTHORIZED); + return; + } + }); + } + + next(); +} diff --git a/src/app/middlewares/OfficeMembershipHandlers/DocumentHandler.ts b/src/app/middlewares/OfficeMembershipHandlers/DocumentHandler.ts new file mode 100644 index 00000000..8690b0c6 --- /dev/null +++ b/src/app/middlewares/OfficeMembershipHandlers/DocumentHandler.ts @@ -0,0 +1,40 @@ +import HttpCodes from "@Common/system/controller-pattern/HttpCodes"; +import { DocumentType } from "le-coffre-resources/dist/SuperAdmin"; +import { NextFunction, Request, Response } from "express"; +import Container from "typedi"; +import { OfficeFolder } from "le-coffre-resources/dist/SuperAdmin"; +import DocumentsService from "@Services/super-admin/DocumentsService/DocumentsService"; + +export default async function documentHandler(req: Request, response: Response, next: NextFunction) { + const officeId = req.body.user.office_Id; + const uid = req.path && req.path.split("/")[5]; + const documentType: DocumentType = req.body.document_type; + const folder: OfficeFolder = req.body.folder; + + if (folder && folder.office?.uid != officeId) { + response.sendStatus(HttpCodes.UNAUTHORIZED); + return; + } + + if (documentType && documentType.office?.uid != officeId) { + response.sendStatus(HttpCodes.UNAUTHORIZED); + return; + } + + if (uid) { + const documentService = Container.get(DocumentsService); + const document = await documentService.getByUidWithOffice(uid!); + + if (!document) { + response.sendStatus(HttpCodes.NOT_FOUND); + return; + } + + if (document.document_type.office.uid != officeId) { + response.sendStatus(HttpCodes.UNAUTHORIZED); + return; + } + } + + next(); +} diff --git a/src/app/middlewares/OfficeMembershipHandlers/DocumentTypeHandler.ts b/src/app/middlewares/OfficeMembershipHandlers/DocumentTypeHandler.ts new file mode 100644 index 00000000..14d0a148 --- /dev/null +++ b/src/app/middlewares/OfficeMembershipHandlers/DocumentTypeHandler.ts @@ -0,0 +1,32 @@ +import HttpCodes from "@Common/system/controller-pattern/HttpCodes"; +import { NextFunction, Request, Response } from "express"; +import Container from "typedi"; +import DocumentTypesService from "@Services/super-admin/DocumentTypesService/DocumentTypesService"; + +export default async function documentTypeHandler(req: Request, response: Response, next: NextFunction) { + const officeId = req.body.user.office_Id; + const uid = req.path && req.path.split("/")[5]; + const office = req.body.office; + + if (office && office.uid != officeId) { + response.sendStatus(HttpCodes.UNAUTHORIZED); + return; + } + + if (uid) { + const documentTypeService = Container.get(DocumentTypesService); + const documentType = await documentTypeService.getByUidWithOffice(uid!); + + if (!documentType) { + response.sendStatus(HttpCodes.NOT_FOUND); + return; + } + + if (documentType.office.uid != officeId) { + response.sendStatus(HttpCodes.UNAUTHORIZED); + return; + } + } + + next(); +} diff --git a/src/app/middlewares/OfficeMembershipHandlers/FileHandler.ts b/src/app/middlewares/OfficeMembershipHandlers/FileHandler.ts new file mode 100644 index 00000000..446c411b --- /dev/null +++ b/src/app/middlewares/OfficeMembershipHandlers/FileHandler.ts @@ -0,0 +1,35 @@ +import HttpCodes from "@Common/system/controller-pattern/HttpCodes"; +import { NextFunction, Request, Response } from "express"; +import Container from "typedi"; +import { OfficeFolder } from "le-coffre-resources/dist/SuperAdmin"; +import FilesService from "@Services/common/FilesService/FilesService"; + +export default async function fileHandler(req: Request, response: Response, next: NextFunction) { + const officeId = req.body.user.office_Id; + let uid = req.path && req.path.split("/")[5]; + const folder: OfficeFolder = req.body.document.folder; + + if (folder && folder.office?.uid != officeId) { + response.sendStatus(HttpCodes.UNAUTHORIZED); + return; + } + + if(!uid) uid = req.path && req.path.split("/")[6]; + + if (uid) { + const fileService = Container.get(FilesService); + const file = await fileService.getByUidWithOffice(uid!); + + if (!file) { + response.sendStatus(HttpCodes.NOT_FOUND); + return; + } + + if (file.document.folder.office.uid != officeId) { + response.sendStatus(HttpCodes.UNAUTHORIZED); + return; + } + } + + next(); +} diff --git a/src/app/middlewares/OfficeMembershipHandlers/FolderHandler.ts b/src/app/middlewares/OfficeMembershipHandlers/FolderHandler.ts new file mode 100644 index 00000000..34a587fa --- /dev/null +++ b/src/app/middlewares/OfficeMembershipHandlers/FolderHandler.ts @@ -0,0 +1,57 @@ +import HttpCodes from "@Common/system/controller-pattern/HttpCodes"; +import { NextFunction, Request, Response } from "express"; +import Container from "typedi"; +import OfficeFoldersService from "@Services/super-admin/OfficeFoldersService/OfficeFoldersService"; +import DeedTypesService from "@Services/super-admin/DeedTypesService/DeedTypesService"; + +export default async function folderHandler(req: Request, response: Response, next: NextFunction) { + const officeId = req.body.user.office_Id; + const uid = req.path && req.path.split("/")[5]; + const office = req.body.office; + const officeFolderNumber = req.body.folder_number; + const deedType = req.body.deed.deed_type; + + if (office && office.uid != officeId) { + response.sendStatus(HttpCodes.UNAUTHORIZED); + return; + } + + if(deedType) { + const deedTypeService = Container.get(DeedTypesService); + const deedTypeWithOffice = await deedTypeService.getByUidWithOffice(deedType.uid!); + if (!deedTypeWithOffice) { + response.sendStatus(HttpCodes.NOT_FOUND); + return; + } + if(deedTypeWithOffice.office.uid != officeId) { + response.sendStatus(HttpCodes.UNAUTHORIZED); + return; + } + } + + const officeFolderService = Container.get(OfficeFoldersService); + + if (officeFolderNumber) { + const officeFoldersWithSameNumber = await officeFolderService.get({ where: { folder_number: officeFolderNumber, office: {uid: officeId}}}); + if (officeFoldersWithSameNumber.length) { + response.sendStatus(HttpCodes.BAD_REQUEST); + return; + } + } + + if (uid) { + const officeFolder = await officeFolderService.getByUidWithOffice(uid!); + + if (!officeFolder) { + response.sendStatus(HttpCodes.NOT_FOUND); + return; + } + + if (officeFolder.office.uid != officeId) { + response.sendStatus(HttpCodes.UNAUTHORIZED); + return; + } + } + + next(); +} diff --git a/src/app/middlewares/OfficeMembershipHandlers/OfficeRoleHandler.ts b/src/app/middlewares/OfficeMembershipHandlers/OfficeRoleHandler.ts new file mode 100644 index 00000000..3d53f901 --- /dev/null +++ b/src/app/middlewares/OfficeMembershipHandlers/OfficeRoleHandler.ts @@ -0,0 +1,32 @@ +import HttpCodes from "@Common/system/controller-pattern/HttpCodes"; +import { NextFunction, Request, Response } from "express"; +import Container from "typedi"; +import OfficeRolesService from "@Services/super-admin/OfficeRolesService/OfficeRolesService"; + +export default async function officeRoleHandler(req: Request, response: Response, next: NextFunction) { + const officeId = req.body.user.office_Id; + const uid = req.path && req.path.split("/")[5]; + const office = req.body.office; + + if (office && office.uid != officeId) { + response.sendStatus(HttpCodes.UNAUTHORIZED); + return; + } + + if (uid) { + const officeRoleService = Container.get(OfficeRolesService); + const officeRole = await officeRoleService.getByUidWithOffice(uid!); + + if (!officeRole) { + response.sendStatus(HttpCodes.NOT_FOUND); + return; + } + + if (officeRole.office.uid != officeId) { + response.sendStatus(HttpCodes.UNAUTHORIZED); + return; + } + } + + next(); +} diff --git a/src/app/middlewares/OfficeMembershipHandlers/UserHandler.ts b/src/app/middlewares/OfficeMembershipHandlers/UserHandler.ts new file mode 100644 index 00000000..2d007397 --- /dev/null +++ b/src/app/middlewares/OfficeMembershipHandlers/UserHandler.ts @@ -0,0 +1,32 @@ +import HttpCodes from "@Common/system/controller-pattern/HttpCodes"; +import { NextFunction, Request, Response } from "express"; +import Container from "typedi"; +import UsersService from "@Services/super-admin/UsersService/UsersService"; + +export default async function userHandler(req: Request, response: Response, next: NextFunction) { + const officeId = req.body.user.office_Id; + const uid = req.path && req.path.split("/")[5]; + const office = req.body.office_membership; + + if (office && office.uid != officeId) { + response.sendStatus(HttpCodes.UNAUTHORIZED); + return; + } + + if (uid) { + const userService = Container.get(UsersService); + const user = await userService.getByUidWithOffice(uid!); + + if (!user) { + response.sendStatus(HttpCodes.NOT_FOUND); + return; + } + + if (user.office_membership.uid != officeId) { + response.sendStatus(HttpCodes.UNAUTHORIZED); + return; + } + } + + next(); +} diff --git a/src/common/databases/migrations/20230703120600_v9/migration.sql b/src/common/databases/migrations/20230703120600_v9/migration.sql new file mode 100644 index 00000000..720264aa --- /dev/null +++ b/src/common/databases/migrations/20230703120600_v9/migration.sql @@ -0,0 +1,23 @@ +-- DropForeignKey +ALTER TABLE "users" DROP CONSTRAINT "users_contact_uid_fkey"; + +-- DropForeignKey +ALTER TABLE "users" DROP CONSTRAINT "users_office_role_uid_fkey"; + +-- DropForeignKey +ALTER TABLE "users" DROP CONSTRAINT "users_office_uid_fkey"; + +-- DropForeignKey +ALTER TABLE "users" DROP CONSTRAINT "users_roles_uid_fkey"; + +-- AddForeignKey +ALTER TABLE "users" ADD CONSTRAINT "users_contact_uid_fkey" FOREIGN KEY ("contact_uid") REFERENCES "contacts"("uid") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "users" ADD CONSTRAINT "users_roles_uid_fkey" FOREIGN KEY ("roles_uid") REFERENCES "roles"("uid") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "users" ADD CONSTRAINT "users_office_role_uid_fkey" FOREIGN KEY ("office_role_uid") REFERENCES "office_roles"("uid") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "users" ADD CONSTRAINT "users_office_uid_fkey" FOREIGN KEY ("office_uid") REFERENCES "offices"("uid") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/src/common/databases/migrations/20230703122557_v10/migration.sql b/src/common/databases/migrations/20230703122557_v10/migration.sql new file mode 100644 index 00000000..8d7c8594 --- /dev/null +++ b/src/common/databases/migrations/20230703122557_v10/migration.sql @@ -0,0 +1,15 @@ +/* + Warnings: + + - A unique constraint covering the columns `[idNot,uid]` on the table `users` will be added. If there are existing duplicate values, this will fail. + - A unique constraint covering the columns `[contact_uid,uid]` on the table `users` will be added. If there are existing duplicate values, this will fail. + +*/ +-- DropIndex +DROP INDEX "users_idNot_key"; + +-- CreateIndex +CREATE UNIQUE INDEX "users_idNot_uid_key" ON "users"("idNot", "uid"); + +-- CreateIndex +CREATE UNIQUE INDEX "users_contact_uid_uid_key" ON "users"("contact_uid", "uid"); diff --git a/src/common/databases/migrations/20230703123246_v11/migration.sql b/src/common/databases/migrations/20230703123246_v11/migration.sql new file mode 100644 index 00000000..842ec44e --- /dev/null +++ b/src/common/databases/migrations/20230703123246_v11/migration.sql @@ -0,0 +1,14 @@ +/* + Warnings: + + - A unique constraint covering the columns `[idNot]` on the table `users` will be added. If there are existing duplicate values, this will fail. + +*/ +-- DropIndex +DROP INDEX "users_contact_uid_uid_key"; + +-- DropIndex +DROP INDEX "users_idNot_uid_key"; + +-- CreateIndex +CREATE UNIQUE INDEX "users_idNot_key" ON "users"("idNot"); diff --git a/src/common/repositories/DeedTypesRepository.ts b/src/common/repositories/DeedTypesRepository.ts index 3004726a..41106d37 100644 --- a/src/common/repositories/DeedTypesRepository.ts +++ b/src/common/repositories/DeedTypesRepository.ts @@ -88,4 +88,16 @@ export default class DeedTypesRepository extends BaseRepository { include: query, }); } + + /** + * @description : Find unique deed type with relations + */ + public async findOneByUidWithOffice(uid: string) { + return this.model.findUnique({ + where: { + uid: uid, + }, + include: { office: true }, + }); + } } diff --git a/src/common/repositories/DeedsRepository.ts b/src/common/repositories/DeedsRepository.ts index 80fbe59a..7b488515 100644 --- a/src/common/repositories/DeedsRepository.ts +++ b/src/common/repositories/DeedsRepository.ts @@ -90,4 +90,19 @@ export default class DeedsRepository extends BaseRepository { include: query, }); } + + /** + * @description : Find unique deed + */ + public async findOneByUidWithOffice(uid: string) { + return this.model.findUnique({ + where: { + uid: uid, + }, + include: { + deed_type: {include: {office: true}}, + document_types: {include: {office: true}}, + } + }); + } } diff --git a/src/common/repositories/DocumentTypesRepository.ts b/src/common/repositories/DocumentTypesRepository.ts index 0a0eab32..3b3cbf65 100644 --- a/src/common/repositories/DocumentTypesRepository.ts +++ b/src/common/repositories/DocumentTypesRepository.ts @@ -78,4 +78,16 @@ export default class DocumentTypesRepository extends BaseRepository { include: query, }); } + + /** + * @description : Find unique document type with relations + */ + public async findOneByUidWithOffice(uid: string) { + return this.model.findUnique({ + where: { + uid: uid, + }, + include: {office: true}, + }); + } } diff --git a/src/common/repositories/DocumentsRepository.ts b/src/common/repositories/DocumentsRepository.ts index 2f1f08d6..ba4de950 100644 --- a/src/common/repositories/DocumentsRepository.ts +++ b/src/common/repositories/DocumentsRepository.ts @@ -133,4 +133,16 @@ export default class DocumentsRepository extends BaseRepository { include: query, }); } + + /** + * @description : Find unique document with relations + */ + public async findOneByUidWithOffice(uid: string) { + return this.model.findUnique({ + where: { + uid: uid, + }, + include: {folder: {include: {office: true}}, document_type: {include: {office: true}}}, + }); + } } diff --git a/src/common/repositories/FilesRepository.ts b/src/common/repositories/FilesRepository.ts index d7998b54..f7d7a2f9 100644 --- a/src/common/repositories/FilesRepository.ts +++ b/src/common/repositories/FilesRepository.ts @@ -91,4 +91,16 @@ export default class FilesRepository extends BaseRepository { include: query, }); } + + /** + * @description : Find unique file with office + */ + public async findOneByUidWithOffice(uid: string) { + return this.model.findUnique({ + where: { + uid: uid, + }, + include: {document: {include: {folder: {include: {office: true}}}}}, + }); + } } diff --git a/src/common/repositories/OfficeFoldersRepository.ts b/src/common/repositories/OfficeFoldersRepository.ts index 70530560..96db2950 100644 --- a/src/common/repositories/OfficeFoldersRepository.ts +++ b/src/common/repositories/OfficeFoldersRepository.ts @@ -112,6 +112,18 @@ export default class OfficeFoldersRepository extends BaseRepository { }); } + /** + * @description : Find one office folder + */ + public async findOneByUidWithOffice(uid: string) { + return this.model.findUnique({ + where: { + uid: uid, + }, + include: {office: true}, + }); + } + /** * @description : Delete a folder */ diff --git a/src/common/repositories/OfficeRolesRepository.ts b/src/common/repositories/OfficeRolesRepository.ts index 781920ef..b7c5edb1 100644 --- a/src/common/repositories/OfficeRolesRepository.ts +++ b/src/common/repositories/OfficeRolesRepository.ts @@ -80,6 +80,18 @@ export default class OfficeRolesRepository extends BaseRepository { }); } + /** + * @description : Find one officeRole with office + */ + public async findOneByUidWithOffice(uid: string) { + return this.model.findUnique({ + where: { + uid: uid, + }, + include: {office: true}, + }); + } + /** * @description : Delete a officeRole */ diff --git a/src/common/repositories/UsersRepository.ts b/src/common/repositories/UsersRepository.ts index a2f89268..6838dfd7 100644 --- a/src/common/repositories/UsersRepository.ts +++ b/src/common/repositories/UsersRepository.ts @@ -55,10 +55,9 @@ export default class UsersRepository extends BaseRepository { first_name: user.contact!.first_name, last_name: user.contact!.last_name, email: user.contact!.email, - phone_number: user.contact!.phone_number, + phone_number: user.contact?.phone_number, cell_phone_number: user.contact!.cell_phone_number, - civility: ECivility[user.contact!.civility as keyof typeof ECivility], - address: {}, + civility: ECivility[user.contact?.civility as keyof typeof ECivility] }, }, role: { @@ -82,7 +81,7 @@ export default class UsersRepository extends BaseRepository { }, }; } - return this.model.create({ ...createArgs, include: { contact: true, office_membership: { include: { address: true } } } }); + return this.model.create(createArgs); } /** @@ -129,19 +128,18 @@ export default class UsersRepository extends BaseRepository { first_name: user.contact!.first_name, last_name: user.contact!.last_name, email: user.contact!.email, - phone_number: user.contact!.phone_number, - cell_phone_number: user.contact!.cell_phone_number, - civility: ECivility[user.contact!.civility as keyof typeof ECivility], - address: {}, + phone_number: user.contact?.phone_number, + cell_phone_number: user.contact?.cell_phone_number, + civility: ECivility[user.contact?.civility as keyof typeof ECivility] }, }, }, }; - if (user.contact!.address) { + if (user.contact?.address) { updateArgs.data.contact!.update!.address!.update = { - address: user.contact!.address!.address, - zip_code: user.contact!.address!.zip_code, - city: user.contact!.address!.city, + address: user.contact?.address?.address, + zip_code: user.contact?.address?.zip_code, + city: user.contact?.address?.city, }; } if (user.office_role) { @@ -166,6 +164,18 @@ export default class UsersRepository extends BaseRepository { }); } + /** + * @description : Find one user with office + */ + public async findOneByUidWithOffice(uid: string){ + return this.model.findUnique({ + where: { + uid: uid, + }, + include: {office_membership: true}, + }); + } + /** * @description : Find one user */ diff --git a/src/services/common/AuthService/AuthService.ts b/src/services/common/AuthService/AuthService.ts index 0a6088a7..4c496cf0 100644 --- a/src/services/common/AuthService/AuthService.ts +++ b/src/services/common/AuthService/AuthService.ts @@ -14,7 +14,7 @@ interface IJwtPayload { providerName: PROVIDER_OPENID; userId: string | number; }; - office_IdNot_Id: string; + office_Id: string; role: string; rules: string[]; } @@ -38,7 +38,7 @@ export default class AuthService extends BaseService { return { userId: user.uid, openId: { providerName: providerName, userId: user.idNot }, - office_IdNot_Id: user.office_membership.idNot, + office_Id: user.office_membership.uid, role: user.role.name, rules: rules, }; @@ -50,7 +50,7 @@ export default class AuthService extends BaseService { return { userId: user.uid, openId: { providerName: providerName, userId: user.idNot }, - office_IdNot_Id: user.office_membership.idNot, + office_Id: user.office_membership.uid, role: user.role.name, rules: rules, }; diff --git a/src/services/common/FilesService/FilesService.ts b/src/services/common/FilesService/FilesService.ts index 6118a4eb..a1618ec1 100644 --- a/src/services/common/FilesService/FilesService.ts +++ b/src/services/common/FilesService/FilesService.ts @@ -7,7 +7,7 @@ import IpfsService from "../IpfsService/IpfsService"; import { BackendVariables } from "@Common/config/variables/Variables"; import { Readable } from "stream"; import {v4} from "uuid"; -import { Files } from "@prisma/client"; +import { Files, Prisma } from "@prisma/client"; import fetch from "node-fetch"; @@ -26,7 +26,7 @@ export default class FilesService extends BaseService { * @description : Get all files * @throws {Error} If files cannot be ge */ - public async get(query: any): Promise { + public async get(query: Prisma.FilesFindManyArgs) { return this.filesRepository.findMany(query); } @@ -34,8 +34,16 @@ export default class FilesService extends BaseService { * @description : Get a file by uid * @throws {Error} If project cannot be created */ - public async getByUid(uid: string): Promise { - return this.filesRepository.findOneByUid(uid); + public async getByUid(uid: string, query?: Prisma.FilesInclude) { + return this.filesRepository.findOneByUid(uid, query); + } + + /** + * @description : Get a file by uid with office + * @throws {Error} If project cannot be created + */ + public async getByUidWithOffice(uid: string) { + return this.filesRepository.findOneByUidWithOffice(uid); } /** diff --git a/src/services/super-admin/DeedTypesService/DeedTypesService.ts b/src/services/super-admin/DeedTypesService/DeedTypesService.ts index 7bb48f09..6e5fda52 100644 --- a/src/services/super-admin/DeedTypesService/DeedTypesService.ts +++ b/src/services/super-admin/DeedTypesService/DeedTypesService.ts @@ -1,4 +1,4 @@ -import { DeedTypes } from "@prisma/client"; +import { DeedTypes, Prisma } from "@prisma/client"; import DeedTypesRepository from "@Repositories/DeedTypesRepository"; import BaseService from "@Services/BaseService"; import { DeedType } from "le-coffre-resources/dist/SuperAdmin"; @@ -16,7 +16,7 @@ export default class DeedTypesService extends BaseService { * @description : Get all deed-types * @throws {Error} If deed-types cannot be get */ - public async get(query: any): Promise { + public async get(query: Prisma.DeedTypesFindManyArgs) { return this.deedTypeRepository.findMany(query); } @@ -40,7 +40,15 @@ export default class DeedTypesService extends BaseService { * @description : Get a deedtype by uid * @throws {Error} If deed-type cannot be get by uid */ - public async getByUid(uid: string, query?: any): Promise { + public async getByUid(uid: string, query?: Prisma.DeedTypesInclude): Promise { return this.deedTypeRepository.findOneByUid(uid, query); } + + /** + * @description : Get a deedtype by uid + * @throws {Error} If deed-type cannot be get by uid + */ + public async getByUidWithOffice(uid: string) { + return this.deedTypeRepository.findOneByUidWithOffice(uid); + } } diff --git a/src/services/super-admin/DeedsService/DeedsService.ts b/src/services/super-admin/DeedsService/DeedsService.ts index 055d24cf..cc7acfe4 100644 --- a/src/services/super-admin/DeedsService/DeedsService.ts +++ b/src/services/super-admin/DeedsService/DeedsService.ts @@ -1,4 +1,4 @@ -import { Deeds } from "@prisma/client"; +import { Deeds, Prisma } from "@prisma/client"; import DeedsRepository from "@Repositories/DeedsRepository"; import BaseService from "@Services/BaseService"; import { Deed } from "le-coffre-resources/dist/SuperAdmin"; @@ -14,7 +14,7 @@ export default class DeedsService extends BaseService { * @description : Get all deeds * @throws {Error} If deeds cannot be get */ - public async get(query: any) { + public async get(query: Prisma.DeedsFindManyArgs) { return this.deedRepository.findMany(query); } @@ -38,7 +38,11 @@ export default class DeedsService extends BaseService { * @description : Get a deed by uid * @throws {Error} If deed-type cannot be get by uid */ - public async getByUid(uid: string, query?: any): Promise { + public async getByUid(uid: string, query?: Prisma.DeedsInclude) { return this.deedRepository.findOneByUid(uid, query); } + + public async getOneByUidWithOffice(uid: string) { + return this.deedRepository.findOneByUidWithOffice(uid); + } } diff --git a/src/services/super-admin/DocumentTypesService/DocumentTypesService.ts b/src/services/super-admin/DocumentTypesService/DocumentTypesService.ts index 0f93d721..678c58f9 100644 --- a/src/services/super-admin/DocumentTypesService/DocumentTypesService.ts +++ b/src/services/super-admin/DocumentTypesService/DocumentTypesService.ts @@ -1,4 +1,4 @@ -import { DocumentTypes } from "@prisma/client"; +import { DocumentTypes, Prisma } from "@prisma/client"; import DocumentTypesRepository from "@Repositories/DocumentTypesRepository"; import BaseService from "@Services/BaseService"; import { DocumentType } from "le-coffre-resources/dist/SuperAdmin"; @@ -14,7 +14,7 @@ export default class DocumentTypesService extends BaseService { * @description : Get all document-types * @throws {Error} If document-types cannot be get */ - public async get(query: any): Promise { + public async get(query: Prisma.DocumentTypesFindManyArgs) { return this.documentTypeRepository.findMany(query); } @@ -38,7 +38,15 @@ export default class DocumentTypesService extends BaseService { * @description : Get a document-type by uid * @throws {Error} If document-type is not found */ - public async getByUid(uid: string, query?: any): Promise { + public async getByUid(uid: string, query?: Prisma.DocumentTypesInclude): Promise { return this.documentTypeRepository.findOneByUid(uid, query); } + + /** + * @description : Get a document-type by uid with relations + * @throws {Error} If document-type is not found + */ + public async getByUidWithOffice(uid: string) { + return this.documentTypeRepository.findOneByUidWithOffice(uid); + } } diff --git a/src/services/super-admin/DocumentsService/DocumentsService.ts b/src/services/super-admin/DocumentsService/DocumentsService.ts index 5310e5bb..581aa563 100644 --- a/src/services/super-admin/DocumentsService/DocumentsService.ts +++ b/src/services/super-admin/DocumentsService/DocumentsService.ts @@ -1,4 +1,4 @@ -import { Documents } from "@prisma/client"; +import { Documents, Prisma } from "@prisma/client"; import { Document } from "le-coffre-resources/dist/SuperAdmin"; import DocumentsRepository from "@Repositories/DocumentsRepository"; import BaseService from "@Services/BaseService"; @@ -14,7 +14,7 @@ export default class DocumentsService extends BaseService { * @description : Get all documents * @throws {Error} If documents cannot be get */ - public async get(query: any) { + public async get(query: Prisma.DocumentsFindManyArgs) { return this.documentsRepository.findMany(query); } @@ -61,7 +61,15 @@ export default class DocumentsService extends BaseService { * @description : Get a document by uid * @throws {Error} If document cannot be get by uid */ - public async getByUid(uid: string, query?: any): Promise { + public async getByUid(uid: string, query?: Prisma.DocumentsInclude) { return this.documentsRepository.findOneByUid(uid, query); } + + /** + * @description : Get a document by uid + * @throws {Error} If document cannot be get by uid + */ + public async getByUidWithOffice(uid: string) { + return this.documentsRepository.findOneByUidWithOffice(uid); + } } diff --git a/src/services/super-admin/OfficeFoldersService/OfficeFoldersService.ts b/src/services/super-admin/OfficeFoldersService/OfficeFoldersService.ts index 6de0e5dc..32d142cf 100644 --- a/src/services/super-admin/OfficeFoldersService/OfficeFoldersService.ts +++ b/src/services/super-admin/OfficeFoldersService/OfficeFoldersService.ts @@ -5,6 +5,7 @@ import { OfficeFolder } from "le-coffre-resources/dist/SuperAdmin"; import { Service } from "typedi"; import DeedTypesService from "../DeedTypesService/DeedTypesService"; import DeedsRepository from "@Repositories/DeedsRepository"; +import { Prisma } from "@prisma/client"; @Service() @@ -21,7 +22,7 @@ export default class OfficeFoldersService extends BaseService { * @description : Get all folders * @throws {Error} If folders cannot be get */ - public async get(query: any): Promise { + public async get(query: Prisma.OfficeFoldersFindManyArgs) { return this.officeFoldersRepository.findMany(query); } @@ -50,10 +51,18 @@ export default class OfficeFoldersService extends BaseService { * @description : Get a folder by uid * @throws {Error} If folder cannot be get by uid */ - public async getByUid(uid: string, query?: any): Promise { + public async getByUid(uid: string, query?: Prisma.OfficeFoldersInclude) { return this.officeFoldersRepository.findOneByUid(uid, query); } + /** + * @description : Get a folder by uid + * @throws {Error} If folder cannot be get by uid + */ + public async getByUidWithOffice(uid: string) { + return this.officeFoldersRepository.findOneByUidWithOffice(uid); + } + /** * @description : Delete a folder * @throws {Error} If document cannot be deleted diff --git a/src/services/super-admin/OfficeRolesService/OfficeRolesService.ts b/src/services/super-admin/OfficeRolesService/OfficeRolesService.ts index e50ac7e4..69d1e80d 100644 --- a/src/services/super-admin/OfficeRolesService/OfficeRolesService.ts +++ b/src/services/super-admin/OfficeRolesService/OfficeRolesService.ts @@ -14,7 +14,7 @@ export default class OfficeRolesService extends BaseService { * @description : Get all officeRoles * @throws {Error} If officeRoles cannot be get */ - public get(query: Prisma.OfficeRolesFindManyArgs): Promise { + public get(query: Prisma.OfficeRolesFindManyArgs) { return this.officeRoleRepository.findMany(query); } @@ -38,7 +38,15 @@ export default class OfficeRolesService extends BaseService { * @description : Get a officeRole by uid * @throws {Error} If officeRole cannot be get by uid */ - public getByUid(uid: string, query?: any): Promise { + public getByUid(uid: string, query?: Prisma.OfficeRolesInclude) { return this.officeRoleRepository.findOneByUid(uid, query); } + + /** + * @description : Get a officeRole by uid + * @throws {Error} If officeRole cannot be get by uid + */ + public getByUidWithOffice(uid: string) { + return this.officeRoleRepository.findOneByUidWithOffice(uid); + } } diff --git a/src/services/super-admin/UsersService/UsersService.ts b/src/services/super-admin/UsersService/UsersService.ts index 4c2a27b3..832e86eb 100644 --- a/src/services/super-admin/UsersService/UsersService.ts +++ b/src/services/super-admin/UsersService/UsersService.ts @@ -39,10 +39,18 @@ export default class UsersService extends BaseService { * @description : Get a user by uid * @throws {Error} If user cannot be get by uid */ - public getByUid(uid: string, query?: any): Promise { + public getByUid(uid: string, query?: Prisma.UsersInclude) { return this.userRepository.findOneByUid(uid, query); } + /** + * @description : Get a user by uid with office + * @throws {Error} If user cannot be get by uid + */ + public getByUidWithOffice(uid: string) { + return this.userRepository.findOneByUidWithOffice(uid); + } + /** * @description : Get a user by uid * @throws {Error} If user cannot be get by uid