Merge branch 'dev' into staging

This commit is contained in:
Vins 2023-09-18 11:56:15 +02:00
commit 797de1bdaa
14 changed files with 971 additions and 757 deletions

View File

@ -18,10 +18,10 @@ lecoffreBack:
limits: limits:
memory: 2Gi memory: 2Gi
ingress: ingress:
host: api.stg.lecoffre.smart-chain.fr host: api.ppd.lecoffre.smart-chain.fr
tls: tls:
hosts: hosts:
- api.stg.lecoffre.smart-chain.fr - api.ppd.lecoffre.smart-chain.fr
secretName: api-tls secretName: api-tls
annotations: annotations:
kubernetes.io/ingress.class: nginx kubernetes.io/ingress.class: nginx
@ -30,7 +30,7 @@ lecoffreBack:
nginx.ingress.kubernetes.io/force-ssl-redirect: "true" nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
env: env:
- key: .env - key: .env
scwID: "id:a131edea-84e0-49d6-b4a8-20ab417220c9" scwID: "id:430001f8-68ab-47b2-92e8-38024c35a80d"
lecoffreCron: lecoffreCron:
serviceAccountName: lecoffre-cron-sa serviceAccountName: lecoffre-cron-sa
@ -50,5 +50,5 @@ lecoffreCron:
# key is name of the environment variable, scwID is the secret ID in SCW with "id:" in front # key is name of the environment variable, scwID is the secret ID in SCW with "id:" in front
env: env:
- key: .env - key: .env
scwID: "id:2be9510b-bb1f-4fbe-ab3e-3dc11fb49051" scwID: "id:430001f8-68ab-47b2-92e8-38024c35a80d"

1059
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -52,7 +52,7 @@
"cron": "^2.3.1", "cron": "^2.3.1",
"express": "^4.18.2", "express": "^4.18.2",
"jsonwebtoken": "^9.0.0", "jsonwebtoken": "^9.0.0",
"le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.69", "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.73",
"module-alias": "^2.2.2", "module-alias": "^2.2.2",
"multer": "^1.4.5-lts.1", "multer": "^1.4.5-lts.1",
"next": "^13.1.5", "next": "^13.1.5",

View File

@ -1,5 +1,5 @@
import { Response, Request } from "express"; import { Response, Request } from "express";
import { Controller, Get } from "@ControllerPattern/index"; import { Controller, Get, Post } from "@ControllerPattern/index";
import ApiController from "@Common/system/controller-pattern/ApiController"; import ApiController from "@Common/system/controller-pattern/ApiController";
import { Service } from "typedi"; import { Service } from "typedi";
import DocumentsService from "@Services/customer/DocumentsService/DocumentsService"; import DocumentsService from "@Services/customer/DocumentsService/DocumentsService";
@ -7,6 +7,7 @@ import { Documents, Prisma } from "@prisma/client";
import { Document } from "le-coffre-resources/dist/Customer"; import { Document } from "le-coffre-resources/dist/Customer";
import authHandler from "@App/middlewares/AuthHandler"; import authHandler from "@App/middlewares/AuthHandler";
import documentHandler from "@App/middlewares/CustomerHandler/DocumentHandler"; import documentHandler from "@App/middlewares/CustomerHandler/DocumentHandler";
import { validateOrReject } from "class-validator";
@Controller() @Controller()
@Service() @Service()
@ -82,4 +83,35 @@ export default class DocumentsController extends ApiController {
return; return;
} }
} }
/**
* @description Create a new File
* @returns File created
*/
@Post("/api/v1/customer/documents", [authHandler])
protected async post(req: Request, response: Response) {
try {
//init Document resource with request body values
const documentEntity = Document.hydrate<Document>(req.body);
console.log(documentEntity);
//validate document
await validateOrReject(documentEntity, { groups: ["createDocument"], forbidUnknownValues: false });
//call service to get prisma entity
const documentEntityCreated = await this.documentsService.create(documentEntity);
//Hydrate ressource with prisma entity
const document = Document.hydrate<Document>(documentEntityCreated, {
strategy: "excludeAll",
});
//success
this.httpCreated(response, document);
} catch (error) {
this.httpInternalError(response, error);
return;
}
}
} }

View File

@ -10,11 +10,14 @@ import { validateOrReject } from "class-validator";
import DocumentsService from "@Services/customer/DocumentsService/DocumentsService"; import DocumentsService from "@Services/customer/DocumentsService/DocumentsService";
import authHandler from "@App/middlewares/AuthHandler"; import authHandler from "@App/middlewares/AuthHandler";
import fileHandler from "@App/middlewares/CustomerHandler/FileHandler"; import fileHandler from "@App/middlewares/CustomerHandler/FileHandler";
import DocumentTypesService from "@Services/super-admin/DocumentTypesService/DocumentTypesService";
import { DocumentType } from "le-coffre-resources/dist/SuperAdmin";
import ObjectHydrate from "@Common/helpers/ObjectHydrate";
@Controller() @Controller()
@Service() @Service()
export default class FilesController extends ApiController { export default class FilesController extends ApiController {
constructor(private filesService: FilesService, private documentService: DocumentsService) { constructor(private filesService: FilesService, private documentService: DocumentsService, private documentTypesService : DocumentTypesService) {
super(); super();
} }
@ -87,9 +90,10 @@ export default class FilesController extends ApiController {
//init File resource with request body values //init File resource with request body values
const fileEntity = File.hydrate<File>(JSON.parse(req.body["q"])); const fileEntity = File.hydrate<File>(JSON.parse(req.body["q"]));
console.log(fileEntity);
//validate File //validate File
await validateOrReject(fileEntity, { groups: ["createFile"] }); // await validateOrReject(fileEntity, { groups: ["createFile"] });
//call service to get prisma entity //call service to get prisma entity
const fileEntityCreated = await this.filesService.create(fileEntity, req.file); const fileEntityCreated = await this.filesService.create(fileEntity, req.file);
@ -221,4 +225,52 @@ export default class FilesController extends ApiController {
return; return;
} }
} }
/**
* @description Create a new File
* @returns File created
*/
@Post("/api/v1/customer/addPersonalFile", [authHandler, fileHandler])
protected async addPersonalFile(req: Request, response: Response) {
try {
//get file
if (!req.file) throw new Error("No file provided");
//init File resource with request body values
const fileEntity = File.hydrate<File>(JSON.parse(req.body["q"]));
const documentTypeEntities = await this.documentTypesService.get({ where: { name: "Other"} });
const documentTypeEntity = documentTypeEntities[0];
const documentType = ObjectHydrate.hydrate<DocumentType>(new DocumentType(), documentTypeEntity!, { strategy: "excludeAll" });
const documentEntity = Document.hydrate<Document>({document_type: documentType});
await validateOrReject(documentEntity, { groups: ["createDocument"], forbidUnknownValues: false });
const documentEntityCreated = await this.documentService.create(documentEntity);
const document = Document.hydrate<Document>(documentEntityCreated, {
strategy: "excludeAll",
});
fileEntity.document = document;
const fileEntityCreated = await this.filesService.create(fileEntity, req.file);
const documentToUpdate = Document.hydrate<Document>(document!);
documentToUpdate!.document_status = "DEPOSITED";
await this.documentService.update(document!.uid!, documentToUpdate);
//Hydrate ressource with prisma entity
const fileEntityHydrated = File.hydrate<File>(fileEntityCreated, {
strategy: "excludeAll",
});
//success
this.httpCreated(response, fileEntityHydrated);
} catch (error) {
this.httpBadRequest(response, error);
return;
}
}
} }

View File

@ -175,7 +175,6 @@ export default class OfficeFoldersController extends ApiController {
this.httpInternalError(response, error); this.httpInternalError(response, error);
return; return;
} }
this.httpSuccess(response, await this.officeFoldersService.getByUid("uid"));
} }
/** /**

View File

@ -6,6 +6,11 @@ export default async function ruleHandler(req: Request, response: Response, next
const rules = req.body.user.rules; const rules = req.body.user.rules;
const service = req.path && req.path.split("/")[4]; const service = req.path && req.path.split("/")[4];
if (!rules) {
response.status(HttpCodes.UNAUTHORIZED).send("Unauthorized without rules");
return;
}
if (!rules.includes(req.method + " " + service)) { if (!rules.includes(req.method + " " + service)) {
response.status(HttpCodes.UNAUTHORIZED).send("Unauthorized with those rules"); response.status(HttpCodes.UNAUTHORIZED).send("Unauthorized with those rules");
return; return;

View File

@ -1,10 +1,22 @@
import { ECivility, ECustomerStatus, EFolderStatus, EOfficeStatus, Prisma, PrismaClient } from "@prisma/client"; import { ECivility, ECustomerStatus, EFolderStatus, EOfficeStatus, Prisma, PrismaClient } from "@prisma/client";
import User, { Address, Contact, Customer, Deed, DeedType, DocumentType, Office, OfficeFolder, OfficeRole, Role, Rule } from "le-coffre-resources/dist/SuperAdmin"; import User, {
Address,
Contact,
Customer,
Deed,
DeedType,
DocumentType,
Office,
OfficeFolder,
OfficeRole,
Role,
Rule,
} from "le-coffre-resources/dist/SuperAdmin";
import "module-alias/register"; import "module-alias/register";
export default async function main() { export default async function main() {
try{ try {
const prisma = new PrismaClient(); const prisma = new PrismaClient();
const randomString = () => { const randomString = () => {
@ -645,6 +657,12 @@ export default async function main() {
created_at: new Date(), created_at: new Date(),
updated_at: new Date(), updated_at: new Date(),
}, },
{
name: "POST folders",
label: "Création des dossiers",
created_at: new Date(),
updated_at: new Date(),
},
{ {
name: "PUT rules", name: "PUT rules",
label: "Modification des droits", label: "Modification des droits",
@ -705,12 +723,6 @@ export default async function main() {
created_at: new Date(), created_at: new Date(),
updated_at: new Date(), updated_at: new Date(),
}, },
{
name: "POST folders",
label: "Création des dossiers",
created_at: new Date(),
updated_at: new Date(),
},
{ {
name: "POST roles", name: "POST roles",
label: "Création des rôles", label: "Création des rôles",
@ -823,7 +835,7 @@ export default async function main() {
label: "Notaire", label: "Notaire",
created_at: new Date(), created_at: new Date(),
updated_at: new Date(), updated_at: new Date(),
rules: rules.slice(0, 22), rules: rules.slice(0, 23),
}, },
{ {
name: "default", name: "default",
@ -848,7 +860,7 @@ export default async function main() {
updated_at: new Date(), updated_at: new Date(),
office: offices[0]!, office: offices[0]!,
rules: rules.slice(0, 22), rules: rules.slice(0, 22),
} },
]; ];
const users: User[] = [ const users: User[] = [
@ -895,6 +907,214 @@ export default async function main() {
role: roles[3], role: roles[3],
}, },
]; ];
const documentTypes: DocumentType[] = [
{
archived_at: null,
name: "Document d'identité",
office: offices[0],
private_description:
"Document officiel d'identification utilisé par plusieurs personnes pour prouver leur identité et leur nationalité (CNI, passeport)",
public_description:
"Document officiel d'identification utilisé par plusieurs personnes pour prouver leur identité et leur nationalité (CNI, passeport)",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Taxe Foncière",
office: offices[0],
private_description:
"Impôt annuel imposé sur les propriétés foncières et utilisé pour financer les services publics locaux.",
public_description:
"Impôt annuel imposé sur les propriétés foncières et utilisé pour financer les services publics locaux.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Contrat Mariage",
office: offices[0],
private_description: "Accord légal qui établit les droits et les obligations entre deux personnes s'unissant en mariage.",
public_description: "Accord légal qui établit les droits et les obligations entre deux personnes s'unissant en mariage.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Livret de famille",
office: offices[0],
private_description:
"Document officiel qui enregistre les détails et les événements familiaux tels que les mariages, les naissances et les décès d'un couple et de leurs enfants.",
public_description:
"Document officiel qui enregistre les détails et les événements familiaux tels que les mariages, les naissances et les décès d'un couple et de leurs enfants.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Bail commercial",
office: offices[0],
private_description:
"Contrat légal entre un propriétaire et un locataire pour la location d'un bien immobilier utilisé à des fins commerciales ou professionnelles.",
public_description:
"Contrat légal entre un propriétaire et un locataire pour la location d'un bien immobilier utilisé à des fins commerciales ou professionnelles.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Statuts SCI",
office: offices[0],
private_description:
"Document légal qui définit les règles et les dispositions régissant la Société Civile Immobilière (SCI).",
public_description:
"Document légal qui définit les règles et les dispositions régissant la Société Civile Immobilière (SCI).",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Avis de taxe foncière",
office: offices[0],
private_description: "Notification officielle indiquant le montant de l'impôt foncier dû sur une propriété.",
public_description: "Notification officielle indiquant le montant de l'impôt foncier dû sur une propriété.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Appel de charge de copropriété",
office: offices[0],
private_description:
"Document envoyé aux copropriétaires pour les informer des dépenses et des charges communes liées à la gestion et à l'entretien de l'immeuble.",
public_description:
"Document envoyé aux copropriétaires pour les informer des dépenses et des charges communes liées à la gestion et à l'entretien de l'immeuble.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "PVAG",
office: offices[0],
private_description:
"Compte rendu écrit des discussions, décisions et résolutions prises lors d'une réunion d'assemblée générale de copropriété.",
public_description:
"Compte rendu écrit des discussions, décisions et résolutions prises lors d'une réunion d'assemblée générale de copropriété.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Règlement de copropriété",
office: offices[0],
private_description:
"Document juridique qui établit les règles et les droits des copropriétaires d'un immeuble en copropriété.",
public_description:
"Document juridique qui établit les règles et les droits des copropriétaires d'un immeuble en copropriété.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Titre de propriété",
office: offices[0],
private_description: "Document légal qui atteste de la propriété d'un bien immobilier et en identifie le propriétaire.",
public_description: "Document légal qui atteste de la propriété d'un bien immobilier et en identifie le propriétaire.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Plan et loi carrez",
office: offices[0],
private_description:
"Document officiel qui mesure la superficie d'un lot ou d'un bien immobilier, conformément à la loi Carrez qui encadre les transactions immobilières.",
public_description:
"Document officiel qui mesure la superficie d'un lot ou d'un bien immobilier, conformément à la loi Carrez qui encadre les transactions immobilières.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "CNI",
office: offices[0],
private_description:
"Document officiel d'identification délivré par l'État pour prouver l'identité et la nationalité d'une personne.",
public_description:
"Document officiel d'identification délivré par l'État pour prouver l'identité et la nationalité d'une personne.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Modifications règlement copropriété (plusieurs)",
office: offices[0],
private_description:
"Documents légaux qui apportent des changements ou des ajustements aux règles et dispositions du règlement de copropriété initial.",
public_description:
"Documents légaux qui apportent des changements ou des ajustements aux règles et dispositions du règlement de copropriété initial.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Avis de décès",
office: offices[0],
private_description:
"Notification officielle délivrée par les autorités compétentes pour informer du décès d'une personne.",
public_description: "Notification officielle délivrée par les autorités compétentes pour informer du décès d'une personne.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Lettre de mission",
office: offices[0],
private_description:
"Document contractuel qui définit les termes et les objectifs d'une mission confiée à une personne ou à une entreprise.",
public_description:
"Document contractuel qui définit les termes et les objectifs d'une mission confiée à une personne ou à une entreprise.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "DPE",
office: offices[0],
private_description: "Diagnostic de Performance Energétique.",
public_description: "Diagnostic de Performance Energétique.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "RIB",
office: offices[0],
private_description: "Relevé d'identité bancaire ou IBAN.",
public_description: "Relevé d'identité bancaire ou IBAN.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Acte d'achat par la SCI",
office: offices[0],
private_description: "Acte d'achat par la SCI.",
public_description: "Acte d'achat par la SCI.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Other",
office: offices[0],
private_description: "Other",
public_description: "Other",
created_at: new Date(),
updated_at: new Date(),
},
];
const deedTypes: DeedType[] = [ const deedTypes: DeedType[] = [
{ {
@ -904,6 +1124,7 @@ export default async function main() {
office: offices[0], office: offices[0],
created_at: new Date(), created_at: new Date(),
updated_at: new Date(), updated_at: new Date(),
document_types: documentTypes.slice(0, 4),
}, },
{ {
name: "Acte de vente", name: "Acte de vente",
@ -912,6 +1133,7 @@ export default async function main() {
office: offices[0], office: offices[0],
created_at: new Date(), created_at: new Date(),
updated_at: new Date(), updated_at: new Date(),
document_types: documentTypes.slice(0, 4),
}, },
{ {
name: "Acte de succession", name: "Acte de succession",
@ -920,6 +1142,7 @@ export default async function main() {
office: offices[0], office: offices[0],
created_at: new Date(), created_at: new Date(),
updated_at: new Date(), updated_at: new Date(),
document_types: documentTypes.slice(0, 4),
}, },
{ {
name: "Acte de vente de maison individuelle", name: "Acte de vente de maison individuelle",
@ -928,6 +1151,7 @@ export default async function main() {
office: offices[0], office: offices[0],
created_at: new Date(), created_at: new Date(),
updated_at: new Date(), updated_at: new Date(),
document_types: documentTypes.slice(0, 4),
}, },
]; ];
@ -1039,209 +1263,6 @@ export default async function main() {
}, },
]; ];
const documentTypes: DocumentType[] = [
{
archived_at: null,
name: "Document d'identité",
office: offices[0],
private_description:
"Document officiel d'identification utilisé par plusieurs personnes pour prouver leur identité et leur nationalité (CNI, passeport)",
public_description:
"Document officiel d'identification utilisé par plusieurs personnes pour prouver leur identité et leur nationalité (CNI, passeport)",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Taxe Foncière",
office: offices[0],
private_description: "Impôt annuel imposé sur les propriétés foncières et utilisé pour financer les services publics locaux.",
public_description: "Impôt annuel imposé sur les propriétés foncières et utilisé pour financer les services publics locaux.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Contrat Mariage",
office: offices[0],
private_description: "Accord légal qui établit les droits et les obligations entre deux personnes s'unissant en mariage.",
public_description: "Accord légal qui établit les droits et les obligations entre deux personnes s'unissant en mariage.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Livret de famille",
office: offices[0],
private_description:
"Document officiel qui enregistre les détails et les événements familiaux tels que les mariages, les naissances et les décès d'un couple et de leurs enfants.",
public_description:
"Document officiel qui enregistre les détails et les événements familiaux tels que les mariages, les naissances et les décès d'un couple et de leurs enfants.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Bail commercial",
office: offices[0],
private_description:
"Contrat légal entre un propriétaire et un locataire pour la location d'un bien immobilier utilisé à des fins commerciales ou professionnelles.",
public_description:
"Contrat légal entre un propriétaire et un locataire pour la location d'un bien immobilier utilisé à des fins commerciales ou professionnelles.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Statuts SCI",
office: offices[0],
private_description: "Document légal qui définit les règles et les dispositions régissant la Société Civile Immobilière (SCI).",
public_description: "Document légal qui définit les règles et les dispositions régissant la Société Civile Immobilière (SCI).",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Avis de taxe foncière",
office: offices[0],
private_description: "Notification officielle indiquant le montant de l'impôt foncier dû sur une propriété.",
public_description: "Notification officielle indiquant le montant de l'impôt foncier dû sur une propriété.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Appel de charge de copropriété",
office: offices[0],
private_description:
"Document envoyé aux copropriétaires pour les informer des dépenses et des charges communes liées à la gestion et à l'entretien de l'immeuble.",
public_description:
"Document envoyé aux copropriétaires pour les informer des dépenses et des charges communes liées à la gestion et à l'entretien de l'immeuble.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "PVAG",
office: offices[0],
private_description:
"Compte rendu écrit des discussions, décisions et résolutions prises lors d'une réunion d'assemblée générale de copropriété.",
public_description:
"Compte rendu écrit des discussions, décisions et résolutions prises lors d'une réunion d'assemblée générale de copropriété.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Règlement de copropriété",
office: offices[0],
private_description:
"Document juridique qui établit les règles et les droits des copropriétaires d'un immeuble en copropriété.",
public_description: "Document juridique qui établit les règles et les droits des copropriétaires d'un immeuble en copropriété.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Titre de propriété",
office: offices[0],
private_description: "Document légal qui atteste de la propriété d'un bien immobilier et en identifie le propriétaire.",
public_description: "Document légal qui atteste de la propriété d'un bien immobilier et en identifie le propriétaire.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Plan et loi carrez",
office: offices[0],
private_description:
"Document officiel qui mesure la superficie d'un lot ou d'un bien immobilier, conformément à la loi Carrez qui encadre les transactions immobilières.",
public_description:
"Document officiel qui mesure la superficie d'un lot ou d'un bien immobilier, conformément à la loi Carrez qui encadre les transactions immobilières.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "CNI",
office: offices[0],
private_description:
"Document officiel d'identification délivré par l'État pour prouver l'identité et la nationalité d'une personne.",
public_description:
"Document officiel d'identification délivré par l'État pour prouver l'identité et la nationalité d'une personne.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Modifications règlement copropriété (plusieurs)",
office: offices[0],
private_description:
"Documents légaux qui apportent des changements ou des ajustements aux règles et dispositions du règlement de copropriété initial.",
public_description:
"Documents légaux qui apportent des changements ou des ajustements aux règles et dispositions du règlement de copropriété initial.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Avis de décès",
office: offices[0],
private_description: "Notification officielle délivrée par les autorités compétentes pour informer du décès d'une personne.",
public_description: "Notification officielle délivrée par les autorités compétentes pour informer du décès d'une personne.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Lettre de mission",
office: offices[0],
private_description:
"Document contractuel qui définit les termes et les objectifs d'une mission confiée à une personne ou à une entreprise.",
public_description:
"Document contractuel qui définit les termes et les objectifs d'une mission confiée à une personne ou à une entreprise.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "DPE",
office: offices[0],
private_description: "Diagnostic de Performance Energétique.",
public_description: "Diagnostic de Performance Energétique.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "RIB",
office: offices[0],
private_description: "Relevé d'identité bancaire ou IBAN.",
public_description: "Relevé d'identité bancaire ou IBAN.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Acte d'achat par la SCI",
office: offices[0],
private_description: "Acte d'achat par la SCI.",
public_description: "Acte d'achat par la SCI.",
created_at: new Date(),
updated_at: new Date(),
},
{
archived_at: null,
name: "Other",
office: offices[0],
private_description: "Other",
public_description: "Other",
created_at: new Date(),
updated_at: new Date(),
},
];
const officeFolders: OfficeFolder[] = [ const officeFolders: OfficeFolder[] = [
{ {
folder_number: "0001", folder_number: "0001",
@ -1347,7 +1368,7 @@ export default async function main() {
for (const office of offices) { for (const office of offices) {
const officeCreated = await prisma.offices.create({ const officeCreated = await prisma.offices.create({
data: { data: {
idNot: office.idNot, idNot: office.idNot!,
name: office.name, name: office.name,
crpcen: office.crpcen, crpcen: office.crpcen,
address: { address: {
@ -1416,7 +1437,7 @@ export default async function main() {
idNot: user.office_membership!.idNot, idNot: user.office_membership!.idNot,
}, },
create: { create: {
idNot: user.office_membership!.idNot, idNot: user.office_membership!.idNot!,
name: user.office_membership!.name, name: user.office_membership!.name,
crpcen: user.office_membership!.crpcen, crpcen: user.office_membership!.crpcen,
address: { address: {
@ -1496,6 +1517,22 @@ export default async function main() {
customer.uid = customersCreated.uid; customer.uid = customersCreated.uid;
} }
for (const documentType of documentTypes) {
const documentTypeCreated = await prisma.documentTypes.create({
data: {
name: documentType.name,
public_description: documentType.public_description,
private_description: documentType.private_description,
office: {
connect: {
uid: documentType.office!.uid,
},
},
},
});
documentType.uid = documentTypeCreated.uid;
}
for (const deedType of deedTypes) { for (const deedType of deedTypes) {
const createArgs: Prisma.DeedTypesCreateArgs = { const createArgs: Prisma.DeedTypesCreateArgs = {
data: { data: {
@ -1547,22 +1584,6 @@ export default async function main() {
deed.uid = deedCreated.uid; deed.uid = deedCreated.uid;
} }
for (const documentType of documentTypes) {
const documentTypeCreated = await prisma.documentTypes.create({
data: {
name: documentType.name,
public_description: documentType.public_description,
private_description: documentType.private_description,
office: {
connect: {
uid: documentType.office!.uid,
},
},
},
});
documentType.uid = documentTypeCreated.uid;
}
for (const officeFolder of officeFolders) { for (const officeFolder of officeFolders) {
const officeFolderCreated = await prisma.officeFolders.create({ const officeFolderCreated = await prisma.officeFolders.create({
data: { data: {
@ -1591,10 +1612,9 @@ export default async function main() {
} }
console.log(">MOCK DATA - Seeding completed!"); console.log(">MOCK DATA - Seeding completed!");
} } catch (error) {
catch(error){ console.log(error);
console.log("Data already seeded, skiping"); console.log("Data already seeded, skiping");
} }
} }
main(); main();

View File

@ -28,7 +28,7 @@ export default class DocumentsRepository extends BaseRepository {
/** /**
* @description : Create a document * @description : Create a document
*/ */
public async create(document: Document): Promise<Documents> { public async create(document: DocumentCustomer): Promise<Documents> {
const createArgs: Prisma.DocumentsCreateArgs = { const createArgs: Prisma.DocumentsCreateArgs = {
data: { data: {
folder: { folder: {

View File

@ -33,7 +33,7 @@ export default class OfficesRepository extends BaseRepository {
public async create(office: OfficeRessource): Promise<Offices> { public async create(office: OfficeRessource): Promise<Offices> {
const createArgs: Prisma.OfficesCreateArgs = { const createArgs: Prisma.OfficesCreateArgs = {
data: { data: {
idNot: office.idNot, idNot: office.idNot!,
name: office.name, name: office.name,
crpcen: office.crpcen, crpcen: office.crpcen,
address: { address: {

View File

@ -37,7 +37,7 @@ export default class UsersRepository extends BaseRepository {
idNot: user.office_membership!.idNot, idNot: user.office_membership!.idNot,
}, },
create: { create: {
idNot: user.office_membership!.idNot, idNot: user.office_membership!.idNot!,
name: user.office_membership!.name, name: user.office_membership!.name,
crpcen: user.office_membership!.crpcen, crpcen: user.office_membership!.crpcen,
address: { address: {

View File

@ -8,7 +8,6 @@ import { BackendVariables } from "@Common/config/variables/Variables";
import { Readable } from "stream"; import { Readable } from "stream";
import { v4 } from "uuid"; import { v4 } from "uuid";
import { Files, Prisma } from "@prisma/client"; import { Files, Prisma } from "@prisma/client";
import fetch from "node-fetch";
@Service() @Service()
export default class FilesService extends BaseService { export default class FilesService extends BaseService {

View File

@ -3,10 +3,11 @@ import { Document } from "le-coffre-resources/dist/Customer";
import DocumentsRepository from "@Repositories/DocumentsRepository"; import DocumentsRepository from "@Repositories/DocumentsRepository";
import BaseService from "@Services/BaseService"; import BaseService from "@Services/BaseService";
import { Service } from "typedi"; import { Service } from "typedi";
import DocumentTypesService from "@Services/notary/DocumentTypesService/DocumentTypesService";
@Service() @Service()
export default class DocumentsService extends BaseService { export default class DocumentsService extends BaseService {
constructor(private documentsRepository: DocumentsRepository) { constructor(private documentsRepository: DocumentsRepository, private documentTypeService: DocumentTypesService) {
super(); super();
} }
@ -18,6 +19,21 @@ export default class DocumentsService extends BaseService {
return this.documentsRepository.findMany(query); return this.documentsRepository.findMany(query);
} }
/**
* @description : Create a new document
* @throws {Error} If document cannot be created
*/
public async create(document: Document): Promise<Documents> {
const otherDocumentType = await this.documentTypeService.get({ where: { name: "Other" } });
if(otherDocumentType.length < 1) throw new Error("Other document type not found");
document.document_type = otherDocumentType[0];
document.document_status = "DEPOSITED";
return this.documentsRepository.create(document);
}
/** /**
* @description : Modify a document * @description : Modify a document
* @throws {Error} If document cannot be modified * @throws {Error} If document cannot be modified

View File

@ -18,7 +18,7 @@ const prisma = new PrismaClient();
export const initOffice = (office: Office): Promise<Offices> => { export const initOffice = (office: Office): Promise<Offices> => {
return prisma.offices.create({ return prisma.offices.create({
data: { data: {
idNot: office.idNot, idNot: office.idNot!,
name: office.name, name: office.name,
crpcen: office.crpcen, crpcen: office.crpcen,
address: { address: {
@ -119,7 +119,7 @@ export const initUsers = (user: User): Promise<Users> => {
idNot: user.office_membership!.idNot, idNot: user.office_membership!.idNot,
}, },
create: { create: {
idNot: user.office_membership!.idNot, idNot: user.office_membership!.idNot!,
name: user.office_membership!.name, name: user.office_membership!.name,
crpcen: user.office_membership!.crpcen, crpcen: user.office_membership!.crpcen,
address: { address: {