From bbecec09a3c5484df5418ae14271185b560aa189 Mon Sep 17 00:00:00 2001 From: Vins Date: Fri, 19 Apr 2024 11:47:55 +0200 Subject: [PATCH 1/8] Rules and user access --- src/app/api/admin/OfficeRolesController.ts | 14 ++++ src/app/api/admin/StripeController.ts | 31 +------- src/app/api/admin/SubscriptionsController.ts | 78 ++------------------ src/app/api/idnot/UserController.ts | 2 +- src/app/api/notary/OfficeRibController.ts | 7 +- src/common/databases/seeders/seeder.ts | 21 ++++++ src/common/emails/EmailBuilder.ts | 2 +- 7 files changed, 50 insertions(+), 105 deletions(-) diff --git a/src/app/api/admin/OfficeRolesController.ts b/src/app/api/admin/OfficeRolesController.ts index cb3162bd..816d4cbb 100644 --- a/src/app/api/admin/OfficeRolesController.ts +++ b/src/app/api/admin/OfficeRolesController.ts @@ -75,6 +75,20 @@ export default class OfficeRolesController extends ApiController { //init IOfficeRole resource with request body values const officeRoleEntity = OfficeRole.hydrate(req.body); + const allRules = await this.rulesService.get({ + where: { + OR: [ + { + namespace: "notary", + }, + { + namespace: "collaborator", + }, + ], + }, + }); + + officeRoleEntity.rules = allRules; //validate officeRole await validateOrReject(officeRoleEntity, { groups: ["createOfficeRole"] }); diff --git a/src/app/api/admin/StripeController.ts b/src/app/api/admin/StripeController.ts index 5dd28d3a..24b778f2 100644 --- a/src/app/api/admin/StripeController.ts +++ b/src/app/api/admin/StripeController.ts @@ -1,4 +1,5 @@ import authHandler from "@App/middlewares/AuthHandler"; +import ruleHandler from "@App/middlewares/RulesHandler"; // import roleHandler from "@App/middlewares/RolesHandler"; import ApiController from "@Common/system/controller-pattern/ApiController"; import { Controller, Get, Post} from "@ControllerPattern/index"; @@ -18,7 +19,7 @@ export default class StripeController extends ApiController { /** * @description Create a new checkout session */ - @Post("/api/v1/admin/stripe", [authHandler]) + @Post("/api/v1/admin/stripe", [authHandler, ruleHandler]) protected async createStripeSubscriptionCheckout(req: Request, response: Response) { try { const officeId: string = req.body.user.office_Id; @@ -41,33 +42,7 @@ export default class StripeController extends ApiController { } } - // @Put("/api/v1/admin/stripe/:uid") - // protected async createStripeSubscriptionUpdateCheckout(req: Request, response: Response) { - // try { - // const uid = req.params["uid"]; - // if (!uid) { - // this.httpBadRequest(response, "No uid provided"); - // return; - // } - // const officeId: string = req.body.user.office_Id; - // //add office id to request body - // req.body.office = { uid: officeId }; - - // //init Subscription resource with request body values - // const subscriptionEntity = Subscription.hydrate(req.body, { strategy: "excludeAll" }); - - // await validateOrReject(subscriptionEntity, { groups: ["updateSubscription"], forbidUnknownValues: false }); - - // const stripeSession = await this.stripeService.createCheckoutSessionUpdate(uid, subscriptionEntity); - - // this.httpCreated(response, stripeSession); - // } catch (error) { - // this.httpInternalError(response, error); - // return; - // } - // } - - @Get("/api/v1/admin/stripe/:uid", [authHandler]) + @Get("/api/v1/admin/stripe/:uid", [authHandler, ruleHandler]) protected async getClientPortalSession(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/app/api/admin/SubscriptionsController.ts b/src/app/api/admin/SubscriptionsController.ts index 3de788b2..c0f49241 100644 --- a/src/app/api/admin/SubscriptionsController.ts +++ b/src/app/api/admin/SubscriptionsController.ts @@ -2,16 +2,13 @@ import { Controller, Get, Post, Put } from "@ControllerPattern/index"; import { Response, Request } from "express"; import ApiController from "@Common/system/controller-pattern/ApiController"; import { Service } from "typedi"; -// import authHandler from "@App/middlewares/AuthHandler"; -// import roleHandler from "@App/middlewares/RolesHandler"; -// import ruleHandler from "@App/middlewares/RulesHandler"; import { Prisma } from "@prisma/client"; import SubscriptionsService from "@Services/admin/SubscriptionsService/SubscriptionsService.ts"; import { Subscription } from "le-coffre-resources/dist/Admin"; import ObjectHydrate from "@Common/helpers/ObjectHydrate"; -import roleHandler from "@App/middlewares/RolesHandler"; import authHandler from "@App/middlewares/AuthHandler"; import EmailBuilder from "@Common/emails/EmailBuilder"; +import ruleHandler from "@App/middlewares/RulesHandler"; @Controller() @Service() @@ -23,7 +20,7 @@ export default class SubscriptionsController extends ApiController { /** * @description Get all subscriptions */ - @Get("/api/v1/admin/subscriptions", [authHandler, roleHandler]) + @Get("/api/v1/admin/subscriptions", [authHandler, ruleHandler]) protected async get(req: Request, response: Response) { try { //get query @@ -51,9 +48,9 @@ export default class SubscriptionsController extends ApiController { } /** - * @description Get a specific documentType by uid + * @description Get a specific subscription by uid */ - @Get("/api/v1/admin/subscriptions/:uid", [authHandler, roleHandler]) + @Get("/api/v1/admin/subscriptions/:uid", [authHandler, ruleHandler]) protected async getOneByUid(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -80,34 +77,10 @@ export default class SubscriptionsController extends ApiController { } } - // /** - // * @description Create a new documentType - // */ - // @Post("/api/v1/admin/subscriptions", [authHandler, roleHandler]) - // protected async post(req: Request, response: Response) { - // try { - // //init Subscription resource with request body values - // const subscriptionEntity = Subscription.hydrate(req.body); - // //validate subscription - // await validateOrReject(subscriptionEntity, { groups: ["createSubscription"], forbidUnknownValues: false }); - // //call service to get prisma entity - // const subscriptionEntityCreated = await this.subscriptionsService.create(subscriptionEntity); - // //Hydrate ressource with prisma entity - // const subscription = Subscription.hydrate(subscriptionEntityCreated, { - // strategy: "excludeAll", - // }); - // //success - // this.httpCreated(response, subscription); - // } catch (error) { - // this.httpInternalError(response, error); - // return; - // } - // } - /** * @description Update a subscription */ - @Put("/api/v1/admin/subscriptions/:uid", [authHandler, roleHandler]) + @Put("/api/v1/admin/subscriptions/:uid", [authHandler, ruleHandler]) protected async put(req: Request, response: Response) { try { const uid = req.params["uid"]; @@ -147,7 +120,7 @@ export default class SubscriptionsController extends ApiController { * @description Invite collaborators to a subscription */ - @Post("/api/v1/admin/subscriptions/invite", [authHandler, roleHandler]) + @Post("/api/v1/admin/subscriptions/invite", [authHandler, ruleHandler]) protected async inviteCollaborators(req: Request, response: Response) { try { //get email list from body @@ -168,43 +141,4 @@ export default class SubscriptionsController extends ApiController { return; } } - - // /** - // * @description Update a subscription seats - // */ - // @Put("/api/v1/admin/subscriptions/:uid/seats", [authHandler, roleHandler]) - // protected async updateSubscriptionSeats(req: Request, response: Response) { - // try { - // const uid = req.params["uid"]; - // if (!uid) { - // this.httpBadRequest(response, "No uid provided"); - // return; - // } - - // const subscriptionFound = await this.subscriptionsService.getByUid(uid); - - // if (!subscriptionFound) { - // this.httpNotFoundRequest(response, "subscription not found"); - // return; - // } - - // //init Subscription resource with request body values - // const seatEntities = Seat.hydrateArray(req.body); - - // //call service to get prisma entity - // const subscriptionEntityUpdated = await this.subscriptionsService.update(uid, subscriptionEntity); - - // //Hydrate ressource with prisma entity - // const subscription = Subscription.hydrate(subscriptionEntityUpdated, { - // strategy: "excludeAll", - // }); - - // //success - // this.httpSuccess(response, subscription); - - // } catch (error) { - // this.httpInternalError(response, error); - // return; - // } - // } } diff --git a/src/app/api/idnot/UserController.ts b/src/app/api/idnot/UserController.ts index 9c77f745..44a62b42 100644 --- a/src/app/api/idnot/UserController.ts +++ b/src/app/api/idnot/UserController.ts @@ -100,7 +100,7 @@ export default class UserController extends ApiController { } } - if (userHydrated.role?.name === "admin") { + if (userHydrated.role?.name === "admin" || userHydrated.role?.name === "super-admin") { isSubscribed = true; } diff --git a/src/app/api/notary/OfficeRibController.ts b/src/app/api/notary/OfficeRibController.ts index 3a0fb9ae..035919e4 100644 --- a/src/app/api/notary/OfficeRibController.ts +++ b/src/app/api/notary/OfficeRibController.ts @@ -7,6 +7,7 @@ import OfficerRibService from "@Services/common/OfficeRibService/OfficeRibServic import authHandler from "@App/middlewares/AuthHandler"; import OfficesService from "@Services/notary/OfficesService/OfficesService"; import { Office as OfficeResource } from "le-coffre-resources/dist/Notary"; +import ruleHandler from "@App/middlewares/RulesHandler"; @Controller() @Service() @@ -15,7 +16,7 @@ export default class OfficeRibController extends ApiController { super(); } - @Get("/api/v1/notary/office/rib", [authHandler]) + @Get("/api/v1/notary/rib", [authHandler, ruleHandler]) protected async getRibStream(req: Request, response: Response) { const officeId: string = req.body.user.office_Id; if (!officeId) throw new Error("No officeId provided"); @@ -43,7 +44,7 @@ export default class OfficeRibController extends ApiController { } } - @Post("/api/v1/notary/office/rib", [authHandler]) + @Post("/api/v1/notary/rib", [authHandler, ruleHandler]) protected async post(req: Request, response: Response) { try { const officeId: string = req.body.user.office_Id; @@ -82,7 +83,7 @@ export default class OfficeRibController extends ApiController { } } - @Delete("/api/v1/notary/office/rib", [authHandler]) + @Delete("/api/v1/notary/rib", [authHandler, ruleHandler]) protected async delete(req: Request, response: Response) { try { const officeId: string = req.body.user.office_Id; diff --git a/src/common/databases/seeders/seeder.ts b/src/common/databases/seeders/seeder.ts index 5c007372..3f5b6b48 100644 --- a/src/common/databases/seeders/seeder.ts +++ b/src/common/databases/seeders/seeder.ts @@ -795,6 +795,27 @@ export default async function main() { updated_at: new Date(), namespace: "notary", }, + { + name: "GET rib", + label: "Lire le RIB de l'office", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + { + name: "POST rib", + label: "Déposer le RIB de l'office", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + { + name: "DELETE rib", + label: "Supprimer le RIB de l'office", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, { name: "GET subscriptions", label: "Récupérer les abonnements", diff --git a/src/common/emails/EmailBuilder.ts b/src/common/emails/EmailBuilder.ts index 59aefda8..5dcfb7b8 100644 --- a/src/common/emails/EmailBuilder.ts +++ b/src/common/emails/EmailBuilder.ts @@ -132,7 +132,7 @@ export default class EmailBuilder { nbTrySend: null, lastTrySendDate: null, }); - this.mailchimpService.sendEmails(); + // this.mailchimpService.sendEmails(); }); From 54af3cb2fb2dbf41f19e94e79feb7fffbea04a7c Mon Sep 17 00:00:00 2001 From: Vins Date: Fri, 19 Apr 2024 11:48:23 +0200 Subject: [PATCH 2/8] Seeder update for rib --- src/common/databases/seeders/seeder.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/common/databases/seeders/seeder.ts b/src/common/databases/seeders/seeder.ts index 3f5b6b48..706fe62e 100644 --- a/src/common/databases/seeders/seeder.ts +++ b/src/common/databases/seeders/seeder.ts @@ -881,7 +881,10 @@ export default async function main() { created_at: new Date(), updated_at: new Date(), rules : [ - "PUT rib" + "PUT rib", + "GET rib", + "POST rib", + "DELETE rib", ] }, ]; From 8254d33b35e56e3cd9d102df5e07efd4a4760648 Mon Sep 17 00:00:00 2001 From: Vins Date: Fri, 19 Apr 2024 14:36:06 +0200 Subject: [PATCH 3/8] RulesGroups wording seeder --- src/common/databases/seeders/seeder.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/databases/seeders/seeder.ts b/src/common/databases/seeders/seeder.ts index 706fe62e..eb0f5efa 100644 --- a/src/common/databases/seeders/seeder.ts +++ b/src/common/databases/seeders/seeder.ts @@ -855,7 +855,7 @@ export default async function main() { const rulesGroups = [ { - name: "Gestion des types d'actes et des documents", + name: "Gestion des matrices d'actes et des documents", created_at: new Date(), updated_at: new Date(), rules: [ @@ -877,7 +877,7 @@ export default async function main() { ] }, { - name: "Gestion du RIB", + name: "Intégration du RIB", created_at: new Date(), updated_at: new Date(), rules : [ From d5ab1a2b2f0661e90f85bb157e6baf74924e656c Mon Sep 17 00:00:00 2001 From: Vins Date: Fri, 19 Apr 2024 15:11:21 +0200 Subject: [PATCH 4/8] Get stripe subscription by uid --- src/app/api/admin/StripeController.ts | 20 +++++++- .../common/StripeService/StripeService.ts | 50 +------------------ 2 files changed, 21 insertions(+), 49 deletions(-) diff --git a/src/app/api/admin/StripeController.ts b/src/app/api/admin/StripeController.ts index 24b778f2..ed227eb6 100644 --- a/src/app/api/admin/StripeController.ts +++ b/src/app/api/admin/StripeController.ts @@ -42,7 +42,25 @@ export default class StripeController extends ApiController { } } - @Get("/api/v1/admin/stripe/:uid", [authHandler, ruleHandler]) + @Get("/api/v1/admin/stripe/:uid") + protected async getStripeSubscriptionByUid(req: Request, response: Response) { + try { + const uid = req.params["uid"]; + if (!uid) { + this.httpBadRequest(response, "No uid provided"); + return; + } + + const stripe_subscription = await this.stripeService.getStripeSubscriptionByUid(uid); + + this.httpSuccess(response, stripe_subscription); + } catch (error) { + this.httpInternalError(response, error); + return; + } + } + + @Get("/api/v1/admin/stripe/:uid/client-portal", [authHandler, ruleHandler]) protected async getClientPortalSession(req: Request, response: Response) { try { const uid = req.params["uid"]; diff --git a/src/services/common/StripeService/StripeService.ts b/src/services/common/StripeService/StripeService.ts index 8087b5a5..9bda32b9 100644 --- a/src/services/common/StripeService/StripeService.ts +++ b/src/services/common/StripeService/StripeService.ts @@ -38,54 +38,8 @@ export default class StripeService { } - public async createCheckoutSessionUpdate(uid: string, subscription: Subscription) { - - - - // return this.client.checkout.sessions.create({ - // mode: "payment", - // payment_method_types: ["card", "paypal"], - // billing_address_collection: "auto", - // success_url: this.variables.APP_HOST + "/subscription/success", - // cancel_url: this.variables.APP_HOST + "/subscription/error", - // metadata: { - // subscription: JSON.stringify(subscription), - // }, - // }); - - // const priceId = - // subscription.type === "STANDARD" - // ? this.variables.STRIPE_STANDARD_SUBSCRIPTION_PRICE_ID - // : this.variables.STRIPE_UNLIMITED_SUBSCRIPTION_PRICE_ID; - - // return this.client.checkout.sessions.create({ - // mode: "subscription", - // payment_method_types: ["card", "paypal"], - // billing_address_collection: "auto", - // line_items: [ - // { - // price: priceId, - // quantity: subscription.type === "STANDARD" ? subscription.nb_seats : 1, - // }, - // ], - // success_url: this.variables.APP_HOST + "/subscription/success", - // cancel_url: this.variables.APP_HOST + "/subscription/error", - // metadata: { - // subscription: JSON.stringify(subscription), - // }, - // }); - // const subscriptions = await this.client.subscriptions.retrieve(uid); - // const itemId = subscriptions.items.data[0]?.id; - - // return await this.client.subscriptions.update(uid, { - // items: [ - // { - // id: itemId, - // price: priceId, - // quantity: subscription.nb_seats, - // }, - // ], - // }); + public async getStripeSubscriptionByUid(subscriptionId: string) { + return await this.client.subscriptions.retrieve(subscriptionId); } public async createClientPortalSession(subscriptionId: string) { From c1a3fb68c460bb7722523c1de092bf001613b353 Mon Sep 17 00:00:00 2001 From: Vins Date: Fri, 19 Apr 2024 15:40:22 +0200 Subject: [PATCH 5/8] Changed seeder for RulesGroups deedtypes --- src/common/databases/seeders/seeder.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/common/databases/seeders/seeder.ts b/src/common/databases/seeders/seeder.ts index eb0f5efa..067cbf8f 100644 --- a/src/common/databases/seeders/seeder.ts +++ b/src/common/databases/seeders/seeder.ts @@ -859,9 +859,18 @@ export default async function main() { created_at: new Date(), updated_at: new Date(), rules: [ + "GET deeds", "POST deeds", "PUT deeds", "DELETE deeds", + "GET document-types", + "DELETE deed-types", + "PUT deed-types", + "DELETE document-types", + "GET deed-types", + "POST document-types", + "POST deed-types", + "PUT document-types", ] }, { From 4abe5822f2fa08692caf6fc8ff6ed88f250b07bf Mon Sep 17 00:00:00 2001 From: Vins Date: Fri, 19 Apr 2024 15:42:05 +0200 Subject: [PATCH 6/8] Fixed seeder --- src/common/databases/seeders/seeder.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/common/databases/seeders/seeder.ts b/src/common/databases/seeders/seeder.ts index 067cbf8f..160fe314 100644 --- a/src/common/databases/seeders/seeder.ts +++ b/src/common/databases/seeders/seeder.ts @@ -859,7 +859,6 @@ export default async function main() { created_at: new Date(), updated_at: new Date(), rules: [ - "GET deeds", "POST deeds", "PUT deeds", "DELETE deeds", From a2a9370e18336e69ab53145e59c24567742947b9 Mon Sep 17 00:00:00 2001 From: Vins Date: Mon, 22 Apr 2024 11:18:03 +0200 Subject: [PATCH 7/8] Fix rules --- src/app/api/admin/OfficeRolesController.ts | 30 +- src/common/databases/seeders/seeder.ts | 83 +- src/common/databases/seeders/seederOld.ts | 2194 ++++++++++++++++++++ 3 files changed, 2252 insertions(+), 55 deletions(-) create mode 100644 src/common/databases/seeders/seederOld.ts diff --git a/src/app/api/admin/OfficeRolesController.ts b/src/app/api/admin/OfficeRolesController.ts index 816d4cbb..649e4ade 100644 --- a/src/app/api/admin/OfficeRolesController.ts +++ b/src/app/api/admin/OfficeRolesController.ts @@ -29,7 +29,7 @@ export default class OfficeRolesController extends ApiController { let query: Prisma.OfficeRolesFindManyArgs = {}; if (req.query["q"]) { query = JSON.parse(req.query["q"] as string); - if(query.where?.uid) { + if (query.where?.uid) { this.httpBadRequest(response, "You can't filter by uid"); return; } @@ -79,10 +79,7 @@ export default class OfficeRolesController extends ApiController { where: { OR: [ { - namespace: "notary", - }, - { - namespace: "collaborator", + namespace: "global", }, ], }, @@ -128,23 +125,28 @@ export default class OfficeRolesController extends ApiController { } if (req.body.rules) { + console.log(req.body.rules); + const allRules = await this.rulesService.get({ where: { - OR: [ - { - namespace: "notary", - }, - { - namespace: "collaborator", - }, - ], + namespace: "global", + }, + }); + + const specificRules = await this.rulesService.get({ + where: { + namespace: "collaborator", }, }); req.body.rules = req.body.rules.filter((rule: any) => { - const ruleFound = allRules.find((r) => r.uid === rule.uid && (r.namespace === "notary" || r.namespace === "collaborator")); + const ruleFound = specificRules.find( + (r) => r.uid === rule.uid && (r.namespace === "collaborator"), + ); return ruleFound; }); + + req.body.rules = req.body.rules.concat(allRules); } //init IOfficeRole resource with request body values const officeRoleEntity = OfficeRole.hydrate(req.body); diff --git a/src/common/databases/seeders/seeder.ts b/src/common/databases/seeders/seeder.ts index 160fe314..70b74df4 100644 --- a/src/common/databases/seeders/seeder.ts +++ b/src/common/databases/seeders/seeder.ts @@ -527,28 +527,28 @@ export default async function main() { label: "Lecture des utilisateurs", created_at: new Date(), updated_at: new Date(), - namespace: "collaborator", + namespace: "global", }, { name: "GET offices", label: "Afficher des offices", created_at: new Date(), updated_at: new Date(), - namespace: "collaborator", + namespace: "global", }, { name: "GET customers", label: "Afficher des clients", created_at: new Date(), updated_at: new Date(), - namespace: "collaborator", + namespace: "global", }, { name: "GET deeds", label: "Voir des types d'acte", created_at: new Date(), updated_at: new Date(), - namespace: "collaborator", + namespace: "global", }, { name: "GET deed-types", @@ -562,7 +562,7 @@ export default async function main() { label: "Afficher des documents", created_at: new Date(), updated_at: new Date(), - namespace: "collaborator", + namespace: "global", }, { name: "GET document-types", @@ -576,112 +576,112 @@ export default async function main() { label: "Lecture des fichiers", created_at: new Date(), updated_at: new Date(), - namespace: "collaborator", + namespace: "global", }, { name: "GET folders", label: "Afficher les dossiers", created_at: new Date(), updated_at: new Date(), - namespace: "collaborator", + namespace: "global", }, { name: "GET roles", label: "Afficher les rôles", created_at: new Date(), updated_at: new Date(), - namespace: "collaborator", + namespace: "global", }, { name: "GET rules", label: "Afficher les droits", created_at: new Date(), updated_at: new Date(), - namespace: "collaborator", + namespace: "global", }, { name: "GET office-roles", label: "Lecture des rôles d'office", created_at: new Date(), updated_at: new Date(), - namespace: "collaborator", + namespace: "global", }, { name: "POST deeds", label: "Créer un template de type d'acte", created_at: new Date(), updated_at: new Date(), - namespace: "notary", + namespace: "collaborator", }, { name: "PUT deeds", label: "Modifier un type d'acte", created_at: new Date(), updated_at: new Date(), - namespace: "notary", + namespace: "collaborator", }, { name: "DELETE deeds", label: "Supprimer des types d'actes", created_at: new Date(), updated_at: new Date(), - namespace: "notary", + namespace: "collaborator", }, { name: "POST folders", label: "Créer un dossier", created_at: new Date(), updated_at: new Date(), - namespace: "notary", + namespace: "global", }, { name: "PUT folders", label: "Modifier des dossiers", created_at: new Date(), updated_at: new Date(), - namespace: "notary", + namespace: "global", }, { name: "DELETE folders", label: "Supprimer un dossier vide", created_at: new Date(), updated_at: new Date(), - namespace: "notary", + namespace: "global", }, { name: "POST documents", label: "Demander des documents à un client", created_at: new Date(), updated_at: new Date(), - namespace: "notary", + namespace: "global", }, { name: "PUT documents", label: "Valider des documents", created_at: new Date(), updated_at: new Date(), - namespace: "notary", + namespace: "global", }, { name: "DELETE documents", label: "Supprimer un document demandé", created_at: new Date(), updated_at: new Date(), - namespace: "notary", + namespace: "global", }, { name: "POST customers", label: "Créer des clients", created_at: new Date(), updated_at: new Date(), - namespace: "notary", + namespace: "global", }, { name: "PUT customers", label: "Modifier des clients", created_at: new Date(), updated_at: new Date(), - namespace: "notary", + namespace: "global", }, { name: "DELETE customers", @@ -695,56 +695,56 @@ export default async function main() { label: "Ancrer un dossier", created_at: new Date(), updated_at: new Date(), - namespace: "notary", + namespace: "global", }, { name: "GET anchors", label: "Vérifier l'ancrage un dossier", created_at: new Date(), updated_at: new Date(), - namespace: "notary", + namespace: "global", }, { name: "POST deed-types", label: "Création des types d'actes", created_at: new Date(), updated_at: new Date(), - namespace: "admin", + namespace: "collaborator", }, { name: "PUT deed-types", label: "Modification des types d'actes", created_at: new Date(), updated_at: new Date(), - namespace: "admin", + namespace: "collaborator", }, { name: "DELETE deed-types", label: "Suppression des types d'actes", created_at: new Date(), updated_at: new Date(), - namespace: "admin", + namespace: "collaborator", }, { name: "POST document-types", label: "Création des types de documents", created_at: new Date(), updated_at: new Date(), - namespace: "admin", + namespace: "collaborator", }, { name: "PUT document-types", label: "Modification des types de documents", created_at: new Date(), updated_at: new Date(), - namespace: "admin", + namespace: "collaborator", }, { name: "DELETE document-types", label: "Suppression des types de documents", created_at: new Date(), updated_at: new Date(), - namespace: "admin", + namespace: "collaborator", }, { name: "POST office-roles", @@ -793,63 +793,63 @@ export default async function main() { label: "Editer le RIB de l'office", created_at: new Date(), updated_at: new Date(), - namespace: "notary", + namespace: "collaborator", }, { name: "GET rib", label: "Lire le RIB de l'office", created_at: new Date(), updated_at: new Date(), - namespace: "notary", + namespace: "collaborator", }, { name: "POST rib", label: "Déposer le RIB de l'office", created_at: new Date(), updated_at: new Date(), - namespace: "notary", + namespace: "collaborator", }, { name: "DELETE rib", label: "Supprimer le RIB de l'office", created_at: new Date(), updated_at: new Date(), - namespace: "notary", + namespace: "collaborator", }, { name: "GET subscriptions", label: "Récupérer les abonnements", created_at: new Date(), updated_at: new Date(), - namespace: "notary", + namespace: "collaborator", }, { name: "POST subscriptions", label: "Inviter un collaborateur à l'abonnement", created_at: new Date(), updated_at: new Date(), - namespace: "notary", + namespace: "collaborator", }, { name: "PUT subscriptions", label: "Modifier l'abonnement", created_at: new Date(), updated_at: new Date(), - namespace: "notary", + namespace: "collaborator", }, { name: "GET stripe", label: "Gérer l'abonnement de l'office", created_at: new Date(), updated_at: new Date(), - namespace: "notary", + namespace: "collaborator", }, { name: "POST stripe", label: "Payer un abonnement", created_at: new Date(), updated_at: new Date(), - namespace: "notary", + namespace: "collaborator", }, ]; @@ -899,7 +899,8 @@ export default async function main() { const collaboratorRules = rules.filter((rule) => rule.namespace === "collaborator"); const notaryRules = [...collaboratorRules, ...rules.filter((rule) => rule.namespace === "notary")]; - const adminRules = [...notaryRules, ...rules.filter((rule) => rule.namespace === "admin")]; + const globalRules = [...notaryRules, ...rules.filter((rule) => rule.namespace === "global")]; + const adminRules = [...globalRules, ...rules.filter((rule) => rule.namespace === "admin")]; const superAdminRules = [...adminRules, ...rules.filter((rule) => rule.namespace === "super-admin")]; const roles: Role[] = [ @@ -939,14 +940,14 @@ export default async function main() { created_at: new Date(), updated_at: new Date(), office: offices[0]!, - rules: notaryRules, + rules: globalRules, }, { name: "Collaborateur", created_at: new Date(), updated_at: new Date(), office: offices[0]!, - rules: notaryRules, + rules: globalRules, }, ]; diff --git a/src/common/databases/seeders/seederOld.ts b/src/common/databases/seeders/seederOld.ts new file mode 100644 index 00000000..160fe314 --- /dev/null +++ b/src/common/databases/seeders/seederOld.ts @@ -0,0 +1,2194 @@ +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 "module-alias/register"; + +export default async function main() { + try { + const prisma = new PrismaClient(); + + const idNot3 = "rleenrenlnr"; + const idNot4 = "ljfeflecnmd"; + const idNot5 = "rflrefrjf"; + const idNot6 = "er3ojfdlfnd"; + + const addresses: Address[] = [ + { + address: "template", + city: "template", + zip_code: 0o00, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Rue Pierre Emillion", + city: "Pacé", + zip_code: 35740, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Rue Pierre Charles", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Rue Pierre Pologne", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Rue Pierre Marcel", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Rue Pierre Jacques", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Rue Pierre Pascal", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Rue Maxime Henry", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Rue Maxime Francis", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Avenue Paul Roger", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Avenue Paul Franck", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Avenue Paul Maréchal", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Avenue Marcel Denis", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Place Alexandre", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Place Alexandre Jacques", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Place Alexandre 2", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Rue du livre", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Place de la joie", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Rue Paul Henry", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + { + address: "Rue Marcelin", + city: "Rennes", + zip_code: 35000, + created_at: new Date(), + updated_at: new Date(), + }, + ]; + + const contacts: Contact[] = [ + { + address: addresses[0], + first_name: "Angela", + last_name: "Dubois", + email: "angela.dubois@gmail.com", + phone_number: "+33785186013", + cell_phone_number: "+33785186013", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.FEMALE, + }, + { + address: addresses[1], + first_name: "Maxime", + last_name: "Lalo", + email: "maxime.lalo@smart-chain.fr", + phone_number: "+33785186013", + cell_phone_number: "+33785186013", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.MALE, + }, + { + address: addresses[2], + first_name: "Vincent", + last_name: "Alamelle", + email: "vincent.alamelle@smart-chain.fr", + phone_number: "+33785186013", + cell_phone_number: "+33785186013", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.MALE, + }, + { + address: addresses[3], + first_name: "Melissa", + last_name: "Desde", + email: "melissa.desde@smart-chain.fr", + phone_number: "+33785186013", + cell_phone_number: "+33785186013", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.FEMALE, + }, + { + address: addresses[4], + first_name: "Maxime", + last_name: "Leroy", + email: "maxime.leroy@hotmail.fr", + phone_number: "+33785186013", + cell_phone_number: "+33785186013", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.MALE, + }, + { + address: addresses[5], + first_name: "Paul", + last_name: "Dupont", + email: "paul.dupont@outlook.com", + phone_number: "+33785186013", + cell_phone_number: "+33785186013", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.MALE, + }, + { + address: addresses[6], + first_name: "Jean", + last_name: "Dubignot", + email: "jean.dubignot@gmail.com", + phone_number: "+33785186013", + cell_phone_number: "+33785186013", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.FEMALE, + }, + { + address: addresses[7], + first_name: "Vincent", + last_name: "Martin", + email: "vincent.martin@gmail.com", + phone_number: "+33785186013", + cell_phone_number: "+33785186013", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.MALE, + }, + { + address: addresses[8], + first_name: "Lucie", + last_name: "Chevalier", + email: "lucie.chevalier@outlook.com", + phone_number: "+33785186013", + cell_phone_number: "+33785186013", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.FEMALE, + }, + { + address: addresses[9], + first_name: "Sébastien", + last_name: "Dubois", + email: "sebastien.dubois@gmail.com", + phone_number: "+33785186013", + cell_phone_number: "+33785186013", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.MALE, + }, + { + address: addresses[10], + first_name: "Mathilde", + last_name: "Durand", + email: "mathilde.durand@gmail.com", + phone_number: "+33785186013", + cell_phone_number: "+33785186013", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.FEMALE, + }, + { + address: addresses[11], + first_name: "Antoine", + last_name: "Bernard", + email: "antoine.bernard@outlook.com", + phone_number: "+33785186013", + cell_phone_number: "+33785186013", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.MALE, + }, + { + address: addresses[12], + first_name: "Camille", + last_name: "Laurent", + email: "camille.laurent@gmail.com", + phone_number: "+33785186013", + cell_phone_number: "+33785186013", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.FEMALE, + }, + { + address: addresses[13], + first_name: "Julien", + last_name: "Mercier", + email: "julien.mercier@hotmail.fr", + phone_number: "+33785186013", + cell_phone_number: "+33785186013", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.MALE, + }, + { + address: addresses[14], + first_name: "Charlotte", + last_name: "Lefebvre", + email: "charlotte.lefebvre@gmail.com", + phone_number: "+33785186013", + cell_phone_number: "+33785186013", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.FEMALE, + }, + { + address: addresses[15], + first_name: "Caroline", + last_name: "Pallut", + email: "caroline.pallut@gmail.com", + phone_number: "+33785186013", + cell_phone_number: "+33785186013", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.FEMALE, + }, + { + address: addresses[16], + first_name: "Nadège", + last_name: "Gauchet", + email: "nedege.gauchet@outlook.com", + phone_number: "+33785186013", + cell_phone_number: "+33785186013", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.FEMALE, + }, + { + address: addresses[17], + first_name: "Matthieu", + last_name: "Bougeard", + email: "matthieu.bougeard@gmail.com", + phone_number: "+33785186013", + cell_phone_number: "+33785186013", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.MALE, + }, + { + address: addresses[18], + first_name: "Cécile", + last_name: "Celton", + email: "cecile.celton@outlook.com", + phone_number: "+33785186013", + cell_phone_number: "+33785186013", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.FEMALE, + }, + { + address: addresses[19], + first_name: "Gwendal", + last_name: "Texier", + email: "gwendal.texier@gmail.com", + phone_number: "+33785186013", + cell_phone_number: "+33785186013", + birthdate: null, + created_at: new Date(), + updated_at: new Date(), + civility: ECivility.MALE, + }, + ]; + + const offices: Office[] = [ + { + idNot: "0000", + name: "Office Template", + crpcen: "0000", + address: addresses[0], + created_at: new Date(), + updated_at: new Date(), + office_status: EOfficeStatus.ACTIVATED, + }, + ]; + + const customers: Customer[] = [ + { + contact: contacts[0], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[5], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[6], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[7], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[8], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[9], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[10], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[11], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[12], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[13], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[14], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[15], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[16], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[17], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[18], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + { + contact: contacts[19], + created_at: new Date(), + updated_at: new Date(), + status: ECustomerStatus.PENDING, + }, + ]; + + const rules: Rule[] = [ + { + name: "GET users", + label: "Lecture des utilisateurs", + created_at: new Date(), + updated_at: new Date(), + namespace: "collaborator", + }, + { + name: "GET offices", + label: "Afficher des offices", + created_at: new Date(), + updated_at: new Date(), + namespace: "collaborator", + }, + { + name: "GET customers", + label: "Afficher des clients", + created_at: new Date(), + updated_at: new Date(), + namespace: "collaborator", + }, + { + name: "GET deeds", + label: "Voir des types d'acte", + created_at: new Date(), + updated_at: new Date(), + namespace: "collaborator", + }, + { + name: "GET deed-types", + label: "Lecture des types d'actes", + created_at: new Date(), + updated_at: new Date(), + namespace: "collaborator", + }, + { + name: "GET documents", + label: "Afficher des documents", + created_at: new Date(), + updated_at: new Date(), + namespace: "collaborator", + }, + { + name: "GET document-types", + label: "Lecture des types de documents", + created_at: new Date(), + updated_at: new Date(), + namespace: "collaborator", + }, + { + name: "GET files", + label: "Lecture des fichiers", + created_at: new Date(), + updated_at: new Date(), + namespace: "collaborator", + }, + { + name: "GET folders", + label: "Afficher les dossiers", + created_at: new Date(), + updated_at: new Date(), + namespace: "collaborator", + }, + { + name: "GET roles", + label: "Afficher les rôles", + created_at: new Date(), + updated_at: new Date(), + namespace: "collaborator", + }, + { + name: "GET rules", + label: "Afficher les droits", + created_at: new Date(), + updated_at: new Date(), + namespace: "collaborator", + }, + { + name: "GET office-roles", + label: "Lecture des rôles d'office", + created_at: new Date(), + updated_at: new Date(), + namespace: "collaborator", + }, + { + name: "POST deeds", + label: "Créer un template de type d'acte", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + { + name: "PUT deeds", + label: "Modifier un type d'acte", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + { + name: "DELETE deeds", + label: "Supprimer des types d'actes", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + { + name: "POST folders", + label: "Créer un dossier", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + { + name: "PUT folders", + label: "Modifier des dossiers", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + { + name: "DELETE folders", + label: "Supprimer un dossier vide", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + { + name: "POST documents", + label: "Demander des documents à un client", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + { + name: "PUT documents", + label: "Valider des documents", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + { + name: "DELETE documents", + label: "Supprimer un document demandé", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + { + name: "POST customers", + label: "Créer des clients", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + { + name: "PUT customers", + label: "Modifier des clients", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + { + name: "DELETE customers", + label: "Supprimer un client", + created_at: new Date(), + updated_at: new Date(), + namespace: "super-admin", + }, + { + name: "POST anchors", + label: "Ancrer un dossier", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + { + name: "GET anchors", + label: "Vérifier l'ancrage un dossier", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + { + name: "POST deed-types", + label: "Création des types d'actes", + created_at: new Date(), + updated_at: new Date(), + namespace: "admin", + }, + { + name: "PUT deed-types", + label: "Modification des types d'actes", + created_at: new Date(), + updated_at: new Date(), + namespace: "admin", + }, + { + name: "DELETE deed-types", + label: "Suppression des types d'actes", + created_at: new Date(), + updated_at: new Date(), + namespace: "admin", + }, + { + name: "POST document-types", + label: "Création des types de documents", + created_at: new Date(), + updated_at: new Date(), + namespace: "admin", + }, + { + name: "PUT document-types", + label: "Modification des types de documents", + created_at: new Date(), + updated_at: new Date(), + namespace: "admin", + }, + { + name: "DELETE document-types", + label: "Suppression des types de documents", + created_at: new Date(), + updated_at: new Date(), + namespace: "admin", + }, + { + name: "POST office-roles", + label: "Création des rôles d'office", + created_at: new Date(), + updated_at: new Date(), + namespace: "admin", + }, + { + name: "PUT office-roles", + label: "Modification des rôles d'office", + created_at: new Date(), + updated_at: new Date(), + namespace: "admin", + }, + { + name: "DELETE office-roles", + label: "Suppression des rôles d'office", + created_at: new Date(), + updated_at: new Date(), + namespace: "admin", + }, + { + name: "PUT users", + label: "Modification des utilisateurs", + created_at: new Date(), + updated_at: new Date(), + namespace: "admin", + }, + { + name: "DELETE office-roles", + label: "Suppression des rôles d'office", + created_at: new Date(), + updated_at: new Date(), + namespace: "super-admin", + }, + { + name: "PUT offices", + label: "Modification des offices", + created_at: new Date(), + updated_at: new Date(), + namespace: "super-admin", + }, + { + name: "PUT rib", + label: "Editer le RIB de l'office", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + { + name: "GET rib", + label: "Lire le RIB de l'office", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + { + name: "POST rib", + label: "Déposer le RIB de l'office", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + { + name: "DELETE rib", + label: "Supprimer le RIB de l'office", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + { + name: "GET subscriptions", + label: "Récupérer les abonnements", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + { + name: "POST subscriptions", + label: "Inviter un collaborateur à l'abonnement", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + { + name: "PUT subscriptions", + label: "Modifier l'abonnement", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + { + name: "GET stripe", + label: "Gérer l'abonnement de l'office", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + { + name: "POST stripe", + label: "Payer un abonnement", + created_at: new Date(), + updated_at: new Date(), + namespace: "notary", + }, + ]; + + const rulesGroups = [ + { + name: "Gestion des matrices d'actes et des documents", + created_at: new Date(), + updated_at: new Date(), + rules: [ + "POST deeds", + "PUT deeds", + "DELETE deeds", + "GET document-types", + "DELETE deed-types", + "PUT deed-types", + "DELETE document-types", + "GET deed-types", + "POST document-types", + "POST deed-types", + "PUT document-types", + ] + }, + { + name: "Gestion de l'abonnement", + created_at: new Date(), + updated_at: new Date(), + rules : [ + "GET subscriptions", + "POST subscriptions", + "PUT subscriptions", + "GET stripe", + "POST stripe", + ] + }, + { + name: "Intégration du RIB", + created_at: new Date(), + updated_at: new Date(), + rules : [ + "PUT rib", + "GET rib", + "POST rib", + "DELETE rib", + ] + }, + ]; + + const collaboratorRules = rules.filter((rule) => rule.namespace === "collaborator"); + const notaryRules = [...collaboratorRules, ...rules.filter((rule) => rule.namespace === "notary")]; + const adminRules = [...notaryRules, ...rules.filter((rule) => rule.namespace === "admin")]; + const superAdminRules = [...adminRules, ...rules.filter((rule) => rule.namespace === "super-admin")]; + + const roles: Role[] = [ + { + name: "super-admin", + label: "Super administrateur", + created_at: new Date(), + updated_at: new Date(), + rules: superAdminRules, + }, + { + name: "admin", + label: "Administrateur", + created_at: new Date(), + updated_at: new Date(), + rules: adminRules, + }, + { + name: "notary", + label: "Notaire", + created_at: new Date(), + updated_at: new Date(), + rules: [], + }, + { + name: "default", + label: "Utilisateur", + created_at: new Date(), + updated_at: new Date(), + rules: [], + }, + ]; + + const officeRoles: OfficeRole[] = [ + { + name: "Notaire", + created_at: new Date(), + updated_at: new Date(), + office: offices[0]!, + rules: notaryRules, + }, + { + name: "Collaborateur", + created_at: new Date(), + updated_at: new Date(), + office: offices[0]!, + rules: notaryRules, + }, + ]; + + const users: User[] = [ + { + created_at: new Date(), + updated_at: new Date(), + idNot: idNot3, + contact: contacts[1], + office_membership: offices[0], + role: roles[1], + }, + { + created_at: new Date(), + updated_at: new Date(), + idNot: idNot4, + contact: contacts[2], + office_membership: offices[0], + role: roles[2], + office_role: officeRoles[2], + }, + { + created_at: new Date(), + updated_at: new Date(), + idNot: idNot5, + contact: contacts[3], + office_membership: offices[0], + role: roles[1], + office_role: officeRoles[3], + }, + { + created_at: new Date(), + updated_at: new Date(), + idNot: idNot6, + contact: contacts[4], + office_membership: offices[0], + role: roles[3], + }, + ]; + + const documentTypes: DocumentType[] = [ + { + archived_at: null, + name: "Carte Nationale d'Identité recto-verso", + office: offices[0], + private_description: "Document d'identité", + public_description: "Document d'identité", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Contrat de mariage", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Convention de PACS", + office: offices[0], + private_description: " ", + public_description: "Avec précision du régime", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Titre de propriété", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Cahier des charges du lotissement", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Règlement du lotissement", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Cahier de prescriptions architecturales", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Statuts de l'association syndicale libre", + office: offices[0], + private_description: " ", + public_description: "Avec nom et adresse du président", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Etat descriptif de division et règlement de copropriété", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Etat descriptif de division et règlement de copropriété modificatifs", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Carnet d'entretien", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Trois derniers PV D'AG", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Trois derniers relevés de charge", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Bail ou congé délivré", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Certificat d'assainissement", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Facture ou contrat d'electricité", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Facture ou contrat de gaz", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Loi carrez", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Etat parasitaire", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Amiante", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Facture des travaux", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Garanties décénales des entreprises", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "PV de réception des travaux", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Permis de construire et modificatifs", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Déclaration attestation l'achèvement des travaux", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Attestation de non opposition", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Assurance décenale", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Dommage ouvrage", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Dernière facture ramonage", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Liste du mobilier", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "RIB daté et signé", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Extrait KBIS et statuts de la société", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Document arpentage et plan de division", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Accord de prêt", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Offre de prêt", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Attestation dépôt de permis de construire", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Permis de construire", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Extrait acte de décès", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Fiche de renseignements d'états civils", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Donation entre epoux", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Testament", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Liste des banques avce un compte bancaire", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Contrat d'assurance-vie", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Liste des caisses versant une retraite ou une pension", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Dernière déclaration de revenus", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Avis d'imposition (revenus et ISF)", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Avis d'imposition (foncier et habitation)", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Liste des emprunts en cours", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Actes de donation", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Déclarations de dons faites aux impôts", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Actes de succession", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Actes de vente de biens", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Factures de travaux", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Bail de location", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Nom et adresse du Syndic", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Liste des autres biens", + office: offices[0], + private_description: " ", + public_description: + "Exemple: PEE, PER, parts de société, bijoux de valeur et oeuvres d'art, fonds de commerce, fonds artisanal, entreprise commerciale, exploitation agricole...", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Caution, Prestation compensatoire, Pension alimentaire", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Titre de propriété des biens", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Tableaux d'amortissement des prêts immobiliers", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Cartes grises et cotes ARGUS des véhicules", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Etat des avoirs bancaires", + office: offices[0], + private_description: " ", + public_description: "Joints ou individuels au jour de la séparation", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Avoirs mobiliers", + office: offices[0], + private_description: " ", + public_description: + "arrêtés à la date de la séparation (relevés de comptes épargne entreprise, épargne retraite, assurance-vie...)", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Livret de famille", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Dernières régularisations de charges", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Diagnostic de Performance Energétique (DPE)", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Avis d'imposition N-1", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Avis d'imposition N-2", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Contrat de travail", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Trois derniers bulletins de salaire", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Bilan comptable", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Trois dernières quittances de loyers ou attestation d'hébergement", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Taxe foncière", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + archived_at: null, + name: "Justificatif de domicile", + office: offices[0], + private_description: " ", + public_description: " ", + created_at: new Date(), + updated_at: new Date(), + }, + { + name: "Autres documents", + archived_at: null, + public_description: "Autres documents", + private_description: "Autres documents", + office: offices[0], + created_at: new Date(), + updated_at: new Date(), + }, + ]; + + const deedTypes: DeedType[] = [ + { + name: "Promesse de vente", + archived_at: null, + description: "Promesse de vente entre deux partis", + office: offices[0], + created_at: new Date(), + updated_at: new Date(), + document_types: [...documentTypes.slice(0, 31), documentTypes[66]!], + }, + { + name: "Acte de vente", + archived_at: null, + description: "Acte de vente", + office: offices[0], + created_at: new Date(), + updated_at: new Date(), + document_types: documentTypes.slice(30, 36), + }, + { + name: "Acte de succession", + archived_at: null, + description: "Acte de succession", + office: offices[0], + created_at: new Date(), + updated_at: new Date(), + document_types: [...documentTypes.slice(36, 56), documentTypes[62]!, documentTypes[30]!], + }, + { + name: "Acte de divorce", + archived_at: null, + description: "Acte de divorce", + office: offices[0], + created_at: new Date(), + updated_at: new Date(), + document_types: [...documentTypes.slice(57, 62), documentTypes[30]!, documentTypes[0]!], + }, + { + name: "Acte de donation", + archived_at: null, + description: "Acte de donation", + office: offices[0], + created_at: new Date(), + updated_at: new Date(), + document_types: [documentTypes[0]!, documentTypes[62]!, documentTypes[57]!], + }, + { + name: "Bail d'habitation", + archived_at: null, + description: "Bail d'habitation", + office: offices[0], + created_at: new Date(), + updated_at: new Date(), + document_types: [documentTypes[0]!, documentTypes[30]!, documentTypes[57]!, ...documentTypes.slice(62)], + }, + ]; + + const deeds: Deed[] = [ + { + deed_type: deedTypes[0], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[0], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[0], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[0], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[0], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[0], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[0], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[1], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[1], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[1], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[1], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[1], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[1], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[1], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[2], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[2], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[2], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[2], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[2], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[2], + created_at: new Date(), + updated_at: new Date(), + }, + { + deed_type: deedTypes[2], + created_at: new Date(), + updated_at: new Date(), + }, + ]; + + const officeFolders: OfficeFolder[] = [ + { + folder_number: "0001", + name: "Vente par Mme. Simon au profit de Mme. Lextrait", + deed: deeds[0], + status: EFolderStatus.LIVE, + created_at: new Date(), + updated_at: new Date(), + office: offices[0], + description: null, + archived_description: null, + }, + { + folder_number: "0002", + name: "Donation des parts sociales de la société SARL FLORE", + deed: deeds[1], + status: EFolderStatus.LIVE, + created_at: new Date(), + updated_at: new Date(), + office: offices[0], + description: null, + archived_description: null, + }, + { + folder_number: "0003", + name: "Vente par Mme. Lefebvre au profit de Mme. Mathieu", + deed: deeds[2], + status: EFolderStatus.LIVE, + created_at: new Date(), + updated_at: new Date(), + office: offices[0], + description: null, + archived_description: null, + }, + { + folder_number: "0004", + name: "Vente par Mme. Chevalier au profit de M. Daveau", + deed: deeds[3], + status: EFolderStatus.LIVE, + created_at: new Date(), + updated_at: new Date(), + office: offices[0], + description: null, + archived_description: null, + }, + { + folder_number: "0005", + name: "Vente par M. Lalo au profit de Mme. Pigale", + deed: deeds[4], + status: EFolderStatus.LIVE, + created_at: new Date(), + updated_at: new Date(), + office: offices[0], + description: null, + archived_description: null, + }, + { + folder_number: "0006", + name: "Donation des parts sociales de la société SMART-TALENT", + deed: deeds[5], + status: EFolderStatus.LIVE, + created_at: new Date(), + updated_at: new Date(), + office: offices[0], + description: null, + archived_description: null, + }, + { + folder_number: "0007", + name: "Vente par M. Girard au profit de M. Louis", + deed: deeds[6], + status: EFolderStatus.LIVE, + created_at: new Date(), + updated_at: new Date(), + office: offices[0], + description: null, + archived_description: null, + }, + { + folder_number: "0008", + name: "Vente par Mme. Leclerc au profit de M. Louis", + deed: deeds[7], + status: EFolderStatus.LIVE, + created_at: new Date(), + updated_at: new Date(), + office: offices[0], + description: null, + archived_description: null, + }, + { + folder_number: "0009", + name: "Vente par M. Lambert au profit de M. Holmes", + deed: deeds[8], + status: EFolderStatus.LIVE, + created_at: new Date(), + updated_at: new Date(), + office: offices[0], + description: null, + archived_description: null, + }, + ]; + + for (const office of offices) { + const officeCreated = await prisma.offices.create({ + data: { + idNot: office.idNot!, + name: office.name, + crpcen: office.crpcen, + address: { + create: { + address: office.address!.address, + zip_code: office.address!.zip_code, + city: office.address!.city, + }, + }, + office_status: EOfficeStatus.ACTIVATED, + }, + }); + office.uid = officeCreated.uid; + } + for (const rule of rules) { + const ruleCreated = await prisma.rules.create({ + data: { + name: rule.name, + label: rule.label, + namespace: rule.namespace, + }, + }); + rule.uid = ruleCreated.uid; + } + + for (const role of roles) { + const roleCreated = await prisma.roles.create({ + data: { + name: role.name, + label: role.label, + rules: { + connect: role.rules?.map((rule) => ({ + uid: rule.uid!, + })), + }, + }, + }); + role.uid = roleCreated.uid; + } + + for (const ruleGroup of rulesGroups) { + await prisma.rulesGroups.create({ + data: { + name: ruleGroup.name, + rules: { + connect: ruleGroup.rules?.map((rule) => ({ + uid: rules.find((r) => r.name === rule)!.uid!, + })), + }, + }, + }); + } + + for (const officeRole of officeRoles) { + const officeRoleCreated = await prisma.officeRoles.create({ + data: { + name: officeRole.name, + office: { + connect: { + uid: officeRole.office.uid, + }, + }, + rules: { + connect: officeRole.rules?.map((rule) => ({ + uid: rule.uid!, + })), + }, + }, + }); + officeRole.uid = officeRoleCreated.uid; + } + + for (const user of users) { + const createArgs: Prisma.UsersCreateArgs = { + data: { + idNot: user.idNot, + office_membership: { + connectOrCreate: { + where: { + idNot: user.office_membership!.idNot, + }, + create: { + idNot: user.office_membership!.idNot!, + name: user.office_membership!.name, + crpcen: user.office_membership!.crpcen, + address: { + create: { + address: user.office_membership!.address!.address, + zip_code: user.office_membership!.address!.zip_code, + city: user.office_membership!.address!.city, + }, + }, + }, + }, + }, + contact: { + create: { + 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: {}, + }, + }, + role: { + connect: { + uid: user.role!.uid, + }, + }, + }, + }; + if (user.contact!.address) { + createArgs.data.contact!.create!.address!.create = { + address: user.contact!.address.address, + zip_code: user.contact!.address.zip_code, + city: user.contact!.address.city, + }; + } + if (user.office_role) { + createArgs.data.office_role = { + connect: { + uid: user.office_role.uid, + }, + }; + } + const userCreated = await prisma.users.create(createArgs); + user.uid = userCreated.uid; + } + + for (const customer of customers) { + const createArgs: Prisma.CustomersCreateArgs = { + data: { + status: ECustomerStatus.PENDING, + contact: { + create: { + first_name: customer.contact!.first_name, + last_name: customer.contact!.last_name, + email: customer.contact!.email, + phone_number: customer.contact!.phone_number, + cell_phone_number: customer.contact!.cell_phone_number, + civility: ECivility[customer.contact!.civility as keyof typeof ECivility], + address: {}, + }, + }, + }, + }; + + if (customer.contact?.address) { + createArgs.data.contact!.create!.address = { + create: { + address: customer.contact?.address?.address, + zip_code: customer.contact?.address?.zip_code, + city: customer.contact?.address?.city, + }, + }; + } + const customersCreated = await prisma.customers.create(createArgs); + 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) { + const createArgs: Prisma.DeedTypesCreateArgs = { + data: { + name: deedType.name, + description: deedType.description || "", + office: { + connect: { + uid: deedType.office!.uid, + }, + }, + }, + }; + if (deedType.document_types) { + createArgs.data.document_types = { + connect: deedType.document_types.map((documentType) => ({ + uid: documentType.uid, + })), + }; + } + const deedTypeCreated = await prisma.deedTypes.create(createArgs); + deedType.uid = deedTypeCreated.uid; + } + + for (const deed of deeds) { + const createArgs: Prisma.DeedsCreateArgs = { + data: { + deed_type: { + connect: { + uid: deed.deed_type!.uid, + }, + }, + }, + }; + const deedTypeWithDocumentTypes = await prisma.deedTypes.findUniqueOrThrow({ + where: { + uid: deed.deed_type!.uid, + }, + include: { document_types: true }, + }); + + if (deedTypeWithDocumentTypes.document_types) { + createArgs.data.document_types = { + connect: deedTypeWithDocumentTypes.document_types.map((documentType) => ({ + uid: documentType.uid, + })), + }; + } + const deedCreated = await prisma.deeds.create(createArgs); + deed.uid = deedCreated.uid; + } + + for (const officeFolder of officeFolders) { + const officeFolderCreated = await prisma.officeFolders.create({ + data: { + folder_number: officeFolder.folder_number, + name: officeFolder.name, + description: officeFolder.description, + status: EFolderStatus.LIVE, + deed: { + connect: { + uid: officeFolder.deed?.uid, + }, + }, + office: { + connect: { + uid: officeFolder.office!.uid, + }, + }, + stakeholders: { + connect: officeFolder.stakeholders?.map((stakeholder) => ({ + uid: stakeholder.uid!, + })), + }, + }, + }); + officeFolder.uid = officeFolderCreated.uid; + } + + console.log(">MOCK DATA - Seeding completed!"); + } catch (error) { + console.log(error); + console.log("Data already seeded, skiping"); + } +} +main(); From ce8ce2970ac04656d379b957763e6a8ccd48d477 Mon Sep 17 00:00:00 2001 From: Yanis JEDRZEJCZAK Date: Mon, 22 Apr 2024 11:21:37 +0200 Subject: [PATCH 8/8] Adding LEcoffre deploy to cicd --- .github/workflows/stg.yml | 103 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) diff --git a/.github/workflows/stg.yml b/.github/workflows/stg.yml index baceacb7..90fc7369 100644 --- a/.github/workflows/stg.yml +++ b/.github/workflows/stg.yml @@ -8,6 +8,11 @@ env: PROJECT_ID: c0ed1e9e-d945-461f-920c-98c844ef1ad4 NAMESPACE_ID: 9f949ff2-97bc-4979-ade2-1994dcaabde0 CONTAINER_REGISTRY_ENDPOINT: rg.fr-par.scw.cloud/funcscwlecoffrestgqhhn4ixh + + PROJECT_ID_LECOFFRE: 72d08499-37c2-412b-877e-f8af0471654a + NAMESPACE_ID_LECOFFRE: f8137e85-47ad-46a5-9e2e-18af5de829c5 + CONTAINER_REGISTRY_ENDPOINT_LECOFFRE: rg.fr-par.scw.cloud/funcscwlecoffrestgbqbfhtv6 + IMAGE_NAME: back CONTAINER_NAME: back @@ -40,6 +45,34 @@ jobs: run: docker build -f Dockerfile-Cron . -t ${{ env.CONTAINER_REGISTRY_ENDPOINT }}/cron - name: Push the Cron Image to Scaleway Container Registry run: docker push ${{ env.CONTAINER_REGISTRY_ENDPOINT }}/cron + build-and-push-images-lecoffre: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Setup SSH + run: | + mkdir -p ~/.ssh + echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts + env: + SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} + - name: Copy SSH + run: cp ~/.ssh/id_rsa id_rsa + - name: Login to Scaleway Container Registry + uses: docker/login-action@v3 + with: + username: nologin + password: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }} + registry: ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }} + - name: Build the Back Image + run: docker build . -t ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }}/${{ env.IMAGE_NAME }} + - name: Push the Back Image to Scaleway Container Registry + run: docker push ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }}/${{ env.IMAGE_NAME }} + - name: Build the Cron Image + run: docker build -f Dockerfile-Cron . -t ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }}/cron + - name: Push the Cron Image to Scaleway Container Registry + run: docker push ${{ env.CONTAINER_REGISTRY_ENDPOINT_LECOFFRE }}/cron deploy-back: needs: build-and-push-images runs-on: ubuntu-latest @@ -75,6 +108,41 @@ jobs: SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY }} SCW_DEFAULT_PROJECT_ID: ${{ env.PROJECT_ID }} SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID }} + deploy-back-lecoffre: + needs: build-and-push-images-lecoffre + runs-on: ubuntu-latest + environment: staging + steps: + - name: Install CLI + uses: scaleway/action-scw@v0 + - name: Get container ID + run: | + echo "CONTAINER_ID=$(scw container container list namespace-id=${{ env.NAMESPACE_ID_LECOFFRE }} -o json | jq -r '.[] | select(.name == "${{ env.CONTAINER_NAME }}") | .id')" >> $GITHUB_ENV + env: + SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY_LECOFFRE }} + SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }} + SCW_DEFAULT_PROJECT_ID: ${{ env.PROJECT_ID_LECOFFRE }} + SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID_LECOFFRE }} + - name: Deploy the container based on the new image + run: | + env_string="" + while IFS= read -r line; do + if [[ "$line" == *"="* ]]; then + key=$(echo "$line" | cut -d '=' -f 1) + value=$(echo "$line" | cut -d '=' -f 2-) + if [[ -n "$key" ]]; then + env_string+="environment-variables.$key=$value " + fi + fi + done <<< "$ENV_VARS" + env_string=$(echo $env_string | sed 's/ $//') + scw container container update ${{ env.CONTAINER_ID }} $env_string + env: + ENV_VARS: ${{ secrets.ENV }} + SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY_LECOFFRE }} + SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }} + SCW_DEFAULT_PROJECT_ID: ${{ env.PROJECT_ID_LECOFFRE }} + SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID_LECOFFRE }} deploy-cron: needs: build-and-push-images runs-on: ubuntu-latest @@ -110,3 +178,38 @@ jobs: SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY }} SCW_DEFAULT_PROJECT_ID: ${{ env.PROJECT_ID }} SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID }} + deploy-cron-lecoffre: + needs: build-and-push-images-lecoffre + runs-on: ubuntu-latest + environment: staging + steps: + - name: Install CLI + uses: scaleway/action-scw@v0 + - name: Get container ID + run: | + echo "CONTAINER_ID=$(scw container container list namespace-id=${{env.NAMESPACE_ID}} -o json | jq -r '.[] | select(.name == "cron") | .id')" >> $GITHUB_ENV + env: + SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY_LECOFFRE }} + SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }} + SCW_DEFAULT_PROJECT_ID: ${{ env.PROJECT_ID_LECOFFRE }} + SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID_LECOFFRE }} + - name: Deploy the container based on the new image + run: | + env_string="" + while IFS= read -r line; do + if [[ "$line" == *"="* ]]; then + key=$(echo "$line" | cut -d '=' -f 1) + value=$(echo "$line" | cut -d '=' -f 2-) + if [[ -n "$key" ]]; then + env_string+="environment-variables.$key=$value " + fi + fi + done <<< "$ENV_VARS" + env_string=$(echo $env_string | sed 's/ $//') + scw container container update ${{ env.CONTAINER_ID }} $env_string + env: + ENV_VARS: ${{ secrets.ENV_LECOFFRE }} + SCW_ACCESS_KEY: ${{ secrets.SCW_ACCESS_KEY_LECOFFRE }} + SCW_SECRET_KEY: ${{ secrets.SCW_SECRET_KEY_LECOFFRE }} + SCW_DEFAULT_PROJECT_ID: ${{ env.PROJECT_ID_LECOFFRE }} + SCW_DEFAULT_ORGANIZATION_ID: ${{ secrets.SCW_ORGANIZATION_ID_LECOFFRE }}