From 3012d5045eb30b3b27405115fe00969f7eaeeef3 Mon Sep 17 00:00:00 2001 From: OxSaitama Date: Wed, 6 Sep 2023 17:13:02 +0200 Subject: [PATCH] update middleware and add correct namespace for API --- package.json | 2 +- .../Admin/DocumentTypes/DocumentTypes.ts | 2 +- .../LeCoffreApi/Notary/Customers/Customers.ts | 90 +++++++++++++ .../LeCoffreApi/Notary/DeedTypes/DeedTypes.ts | 84 +++++++++++++ .../Api/LeCoffreApi/Notary/Deeds/Deeds.ts | 72 +++++++++++ .../Notary/DocumentTypes/DocumentTypes.ts | 86 +++++++++++++ .../LeCoffreApi/Notary/Documents/Documents.ts | 93 ++++++++++++++ .../Api/LeCoffreApi/Notary/Folders/Folders.ts | 119 ++++++++++++++++++ .../Api/LeCoffreApi/Notary/Users/Users.ts | 37 ++---- .../DesignSystem/BlockList/index.tsx | 18 +-- .../DefaultCollaboratorDashboard/index.tsx | 2 +- .../DefaultDeedTypeDashboard/index.tsx | 4 +- .../DefaultDocumentTypesDashboard/index.tsx | 2 +- .../DefaultNotaryDashboard/index.tsx | 2 +- .../DefaultUserDashboard/index.tsx | 2 +- .../DocumentTypesCreate/index.tsx | 11 +- .../DocumentTypes/DocumentTypesEdit/index.tsx | 4 +- .../DocumentTypesInformations/index.tsx | 4 +- .../Folder/AddClientToFolder/index.tsx | 4 +- .../Layouts/Folder/AskDocuments/index.tsx | 8 +- .../Layouts/Folder/CreateFolder/index.tsx | 13 +- .../Folder/FolderInformation/index.tsx | 2 +- .../Layouts/Folder/UpdateClient/index.tsx | 2 +- .../UpdateFolderCollaborators/index.tsx | 11 +- .../Folder/UpdateFolderDescription/index.tsx | 2 +- .../Folder/UpdateFolderMetadata/index.tsx | 2 +- .../Layouts/Folder/ViewDocuments/index.tsx | 6 +- .../FolderInformation/index.tsx | 2 +- src/front/Components/Layouts/Login/index.tsx | 2 +- .../Components/Layouts/SelectFolder/index.tsx | 17 +-- src/front/Services/JwtService/JwtService.ts | 6 + src/middleware.ts | 5 +- 32 files changed, 623 insertions(+), 93 deletions(-) create mode 100644 src/front/Api/LeCoffreApi/Notary/Customers/Customers.ts create mode 100644 src/front/Api/LeCoffreApi/Notary/DeedTypes/DeedTypes.ts create mode 100644 src/front/Api/LeCoffreApi/Notary/Deeds/Deeds.ts create mode 100644 src/front/Api/LeCoffreApi/Notary/DocumentTypes/DocumentTypes.ts create mode 100644 src/front/Api/LeCoffreApi/Notary/Documents/Documents.ts create mode 100644 src/front/Api/LeCoffreApi/Notary/Folders/Folders.ts diff --git a/package.json b/package.json index d929bb34..879bcacf 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "eslint-config-next": "13.2.4", "form-data": "^4.0.0", "jwt-decode": "^3.1.2", - "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.71", "next": "13.2.4", "prettier": "^2.8.7", "react": "18.2.0", diff --git a/src/front/Api/LeCoffreApi/Admin/DocumentTypes/DocumentTypes.ts b/src/front/Api/LeCoffreApi/Admin/DocumentTypes/DocumentTypes.ts index 05003ce4..67851626 100644 --- a/src/front/Api/LeCoffreApi/Admin/DocumentTypes/DocumentTypes.ts +++ b/src/front/Api/LeCoffreApi/Admin/DocumentTypes/DocumentTypes.ts @@ -1,4 +1,4 @@ -import { DocumentType } from "le-coffre-resources/dist/SuperAdmin"; +import { DocumentType } from "le-coffre-resources/dist/Admin"; import BaseAdmin from "../BaseAdmin"; diff --git a/src/front/Api/LeCoffreApi/Notary/Customers/Customers.ts b/src/front/Api/LeCoffreApi/Notary/Customers/Customers.ts new file mode 100644 index 00000000..c6c3918e --- /dev/null +++ b/src/front/Api/LeCoffreApi/Notary/Customers/Customers.ts @@ -0,0 +1,90 @@ +import { Contact, Customer } from "le-coffre-resources/dist/Notary"; + +import BaseNotary from "../BaseNotary"; +import { ECivility } from "le-coffre-resources/dist/Customer/Contact"; + +// TODO Type get query params -> Where + inclue + orderby +export interface IGetCustomersparams { + where?: {}; + include?: {}; +} + +// TODO Type getbyuid query params + +export type IPutCustomersParams = { + uid?: Customer["uid"]; + contact?: Customer["contact"]; +}; + +export interface IPostCustomersParams { + first_name: string; + last_name: string; + email: string; + cell_phone_number: string; + civility: ECivility; + address?: Contact["address"]; +} + +export default class Customers extends BaseNotary { + private static instance: Customers; + private readonly baseURl = this.namespaceUrl.concat("/customers"); + + private constructor() { + super(); + } + + public static getInstance() { + if (!this.instance) { + return new this(); + } else { + return this.instance; + } + } + + public async get(q: IGetCustomersparams): Promise { + const url = new URL(this.baseURl); + const query = { q }; + Object.entries(query).forEach(([key, value]) => url.searchParams.set(key, JSON.stringify(value))); + try { + return await this.getRequest(url); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + /** + * @description : Create a Customer + */ + public async post(body: any): Promise { + const url = new URL(this.baseURl); + try { + return await this.postRequest(url, body); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + public async getByUid(uid: string, q?: any): Promise { + const url = new URL(this.baseURl.concat(`/${uid}`)); + const query = { q }; + if (q) Object.entries(query).forEach(([key, value]) => url.searchParams.set(key, JSON.stringify(value))); + try { + return await this.getRequest(url); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + public async put(uid: string, body: IPutCustomersParams): Promise { + const url = new URL(this.baseURl.concat(`/${uid}`)); + try { + return await this.putRequest(url, body); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } +} diff --git a/src/front/Api/LeCoffreApi/Notary/DeedTypes/DeedTypes.ts b/src/front/Api/LeCoffreApi/Notary/DeedTypes/DeedTypes.ts new file mode 100644 index 00000000..e4889a18 --- /dev/null +++ b/src/front/Api/LeCoffreApi/Notary/DeedTypes/DeedTypes.ts @@ -0,0 +1,84 @@ +import { DeedType } from "le-coffre-resources/dist/Notary"; + +import BaseNotary from "../BaseNotary"; + +export type IPutDeedTypesParams = { + uid?: DeedType["uid"]; + name?: DeedType["name"]; + description?: DeedType["description"]; + deed?: DeedType["deed"]; + office?: DeedType["office"]; + archived_at?: DeedType["archived_at"]; + document_types?: DeedType["document_types"]; +}; + +export type IPostDeedTypesParams = { + name?: DeedType["name"]; + description?: DeedType["description"]; +}; + +export type IGetDeedTypesParams = { + where?: {}; + include?: {}; + select?: {}; +}; + +export default class DeedTypes extends BaseNotary { + private static instance: DeedTypes; + private readonly baseURl = this.namespaceUrl.concat("/deed-types"); + + private constructor() { + super(); + } + + public static getInstance() { + if (!this.instance) { + return new DeedTypes(); + } else { + return this.instance; + } + } + + public async get(q?: IGetDeedTypesParams): Promise { + const url = new URL(this.baseURl); + const query = { q }; + Object.entries(query).forEach(([key, value]) => url.searchParams.set(key, JSON.stringify(value))); + try { + return await this.getRequest(url); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + public async getByUid(uid: string, q?: any): Promise { + const url = new URL(this.baseURl.concat(`/${uid}`)); + if (q) Object.entries(q).forEach(([key, value]) => url.searchParams.set(key, JSON.stringify(value))); + try { + return await this.getRequest(url); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + public async put(uid: string, body: IPutDeedTypesParams) { + const url = new URL(this.baseURl.concat(`/${uid}`)); + try { + return await this.putRequest(url, body); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + public async post(body: IPostDeedTypesParams) { + const url = new URL(this.baseURl); + try { + return await this.postRequest(url, body); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } +} \ No newline at end of file diff --git a/src/front/Api/LeCoffreApi/Notary/Deeds/Deeds.ts b/src/front/Api/LeCoffreApi/Notary/Deeds/Deeds.ts new file mode 100644 index 00000000..6e4c4dba --- /dev/null +++ b/src/front/Api/LeCoffreApi/Notary/Deeds/Deeds.ts @@ -0,0 +1,72 @@ +import { Deed, OfficeFolder } from "le-coffre-resources/dist/Notary"; + +import BaseAdmin from "../BaseNotary"; + +export type IGetDeedsParams = { + where?: {}; + include?: {}; + select?: {}; +}; + +export type IPutDeedsParams = { + uid?: OfficeFolder["uid"]; + folder_number?: OfficeFolder["folder_number"]; + name?: OfficeFolder["name"]; + description?: OfficeFolder["description"]; + archived_description?: OfficeFolder["archived_description"]; + status?: OfficeFolder["status"]; + document_types?: Deed["document_types"]; +}; + +export default class Deeds extends BaseAdmin { + private static instance: Deeds; + private readonly baseURl = this.namespaceUrl.concat("/deeds"); + + private constructor() { + super(); + } + + public static getInstance() { + if (!this.instance) { + return new Deeds(); + } else { + return this.instance; + } + } + + public async get(q: IGetDeedsParams): Promise { + const url = new URL(this.baseURl); + const query = { q }; + Object.entries(query).forEach(([key, value]) => url.searchParams.set(key, JSON.stringify(value))); + try { + return await this.getRequest(url); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + public async getByUid(uid: string, q?: any): Promise { + const url = new URL(this.baseURl.concat(`/${uid}`)); + if (q) Object.entries(q).forEach(([key, value]) => url.searchParams.set(key, JSON.stringify(value))); + try { + return await this.getRequest(url); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + /** + * @description : Update the folder description + */ + public async put(uid: string, body: IPutDeedsParams): Promise { + const url = new URL(this.baseURl.concat(`/${uid}`)); + try { + return await this.putRequest(url, body); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } +} diff --git a/src/front/Api/LeCoffreApi/Notary/DocumentTypes/DocumentTypes.ts b/src/front/Api/LeCoffreApi/Notary/DocumentTypes/DocumentTypes.ts new file mode 100644 index 00000000..3737ddf3 --- /dev/null +++ b/src/front/Api/LeCoffreApi/Notary/DocumentTypes/DocumentTypes.ts @@ -0,0 +1,86 @@ +import { DocumentType } from "le-coffre-resources/dist/Notary"; + +import BaseNotary from "../BaseNotary"; + +// TODO Type get query params -> Where + inclue + orderby +export interface IGetDocumentTypesparams { + where?: {}; + include?: {}; +} + +// TODO Type getbyuid query params + +export type IPutDocumentTypesParams = {}; + +export interface IPostDocumentTypesParams { + name: string; + public_description: string; + private_description: string | null; + office?: { + uid?: string; + }; +} + +export default class DocumentTypes extends BaseNotary { + private static instance: DocumentTypes; + private readonly baseURl = this.namespaceUrl.concat("/document-types"); + + private constructor() { + super(); + } + + public static getInstance() { + if (!this.instance) { + return new this(); + } else { + return this.instance; + } + } + + public async get(q: IGetDocumentTypesparams): Promise { + const url = new URL(this.baseURl); + const query = { q }; + if (q) Object.entries(query).forEach(([key, value]) => url.searchParams.set(key, JSON.stringify(value))); + try { + return await this.getRequest(url); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + /** + * @description : Create a Document + */ + public async post(body: IPostDocumentTypesParams): Promise { + const url = new URL(this.baseURl); + try { + return await this.postRequest(url, body as any); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + public async getByUid(uid: string, q?: any): Promise { + const url = new URL(this.baseURl.concat(`/${uid}`)); + const query = { q }; + if (q) Object.entries(query).forEach(([key, value]) => url.searchParams.set(key, JSON.stringify(value))); + try { + return await this.getRequest(url); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + public async put(uid: string, body: IPutDocumentTypesParams): Promise { + const url = new URL(this.baseURl.concat(`/${uid}`)); + try { + return await this.putRequest(url, body); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } +} diff --git a/src/front/Api/LeCoffreApi/Notary/Documents/Documents.ts b/src/front/Api/LeCoffreApi/Notary/Documents/Documents.ts new file mode 100644 index 00000000..45e68b9e --- /dev/null +++ b/src/front/Api/LeCoffreApi/Notary/Documents/Documents.ts @@ -0,0 +1,93 @@ +import { EDocumentStatus } from "le-coffre-resources/dist/Customer/Document"; +import { Document } from "le-coffre-resources/dist/Notary"; + +import BaseNotary from "../BaseNotary"; + +// TODO Type get query params -> Where + inclue + orderby +export interface IGetDocumentsparams { + where?: {}; + include?: {}; +} + +// TODO Type getbyuid query params + +export type IPutDocumentsParams = { + document_status?: EDocumentStatus; + refused_reason?: string; +}; + +export interface IPostDocumentsParams {} + +export default class Documents extends BaseNotary { + private static instance: Documents; + private readonly baseURl = this.namespaceUrl.concat("/documents"); + + private constructor() { + super(); + } + + public static getInstance() { + if (!this.instance) { + return new this(); + } else { + return this.instance; + } + } + + public async get(q: IGetDocumentsparams): Promise { + const url = new URL(this.baseURl); + const query = { q }; + if (q) Object.entries(query).forEach(([key, value]) => url.searchParams.set(key, JSON.stringify(value))); + try { + return await this.getRequest(url); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + /** + * @description : Create a Document + */ + public async post(body: any): Promise { + const url = new URL(this.baseURl); + try { + return await this.postRequest(url, body); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + public async getByUid(uid: string, q?: any): Promise { + const url = new URL(this.baseURl.concat(`/${uid}`)); + const query = { q }; + if (q) Object.entries(query).forEach(([key, value]) => url.searchParams.set(key, JSON.stringify(value))); + try { + return await this.getRequest(url); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + public async put(uid: string, body: IPutDocumentsParams): Promise { + const url = new URL(this.baseURl.concat(`/${uid}`)); + try { + return await this.putRequest(url, body); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + public async delete(uid: string): Promise { + const url = new URL(this.baseURl.concat(`/${uid}`)); + try { + return await this.deleteRequest(url); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } +} diff --git a/src/front/Api/LeCoffreApi/Notary/Folders/Folders.ts b/src/front/Api/LeCoffreApi/Notary/Folders/Folders.ts new file mode 100644 index 00000000..800d3c96 --- /dev/null +++ b/src/front/Api/LeCoffreApi/Notary/Folders/Folders.ts @@ -0,0 +1,119 @@ +import { type OfficeFolder } from "le-coffre-resources/dist/Notary"; + +import BaseNotary from "../BaseNotary"; +import EFolderStatus from "le-coffre-resources/dist/Customer/EFolderStatus"; + +// TODO Type get query params -> Where + inclue + orderby +export interface IGetFoldersParams { + q?: { + select?: {}; + where?: {}; + include?: {}; + }; +} + +export default class Folders extends BaseNotary { + private static instance: Folders; + private readonly baseURl = this.namespaceUrl.concat("/folders"); + + private constructor() { + super(); + } + + public static getInstance() { + if (!this.instance) { + return new this(); + } else { + return this.instance; + } + } + + /** + * @description : Get all folders + */ + public async get(q: IGetFoldersParams): Promise { + const url = new URL(this.baseURl); + Object.entries(q).forEach(([key, value]) => url.searchParams.set(key, JSON.stringify(value))); + try { + return await this.getRequest(url); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + /** + * @description : Get a folder by uid + */ + public async getByUid(uid: string, q?: any): Promise { + const url = new URL(this.baseURl.concat(`/${uid}`)); + if (q) Object.entries(q).forEach(([key, value]) => url.searchParams.set(key, JSON.stringify(value))); + try { + return await this.getRequest(url); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + /** + * @description : Create a folder + */ + public async post(officeFolder: Partial): Promise { + const url = new URL(this.baseURl); + try { + return await this.postRequest(url, officeFolder); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + /** + * @description : Update the folder description + */ + public async put(uid: string, body: Partial): Promise { + const url = new URL(this.baseURl.concat(`/${uid}`)); + try { + return await this.putRequest(url, body); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + /** + * @description : Delete a folder only if the folder don't contains customers + */ + public async delete(uid: string): Promise { + const url = new URL(this.baseURl.concat(`/${uid}`)); + const targetedFolder = await this.getByUid(uid); + if (targetedFolder.customers) return Promise.reject(`The folder ${uid} contains customers`); + try { + return await this.deleteRequest(url); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + public async archive(uid: string, body: Partial): Promise { + body.status = EFolderStatus.ARCHIVED; + try { + return await this.put(uid, body); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + public async restore(uid: string, body: Partial): Promise { + body.status = EFolderStatus.LIVE; + try { + return await this.put(uid, body); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } +} diff --git a/src/front/Api/LeCoffreApi/Notary/Users/Users.ts b/src/front/Api/LeCoffreApi/Notary/Users/Users.ts index 15da8be9..14f31371 100644 --- a/src/front/Api/LeCoffreApi/Notary/Users/Users.ts +++ b/src/front/Api/LeCoffreApi/Notary/Users/Users.ts @@ -1,9 +1,15 @@ import BaseNotary from "../BaseNotary"; import User from "le-coffre-resources/dist/Notary"; +export type IGetUsersParams = { + where?: {}; + include?: {}; + select?: {}; +}; + export default class Users extends BaseNotary { private static instance: Users; - private readonly baseURl = this.namespaceUrl.concat("/Users"); + private readonly baseURl = this.namespaceUrl.concat("/users"); private constructor() { super(); @@ -17,8 +23,10 @@ export default class Users extends BaseNotary { } } - public async get(): Promise { + public async get(q?: IGetUsersParams): Promise { const url = new URL(this.baseURl); + const query = { q }; + if (q) Object.entries(query).forEach(([key, value]) => url.searchParams.set(key, JSON.stringify(value))); try { return await this.getRequest(url); } catch (err) { @@ -27,21 +35,6 @@ export default class Users extends BaseNotary { } } - public async getAuthorizationCode(): Promise { - try { - const url = new URL(`https://qual-connexion.idnot.fr/IdPOAuth2/authorize/idnot_idp_v1? - client_id=4501646203F3EF67 - &redirect_uri=https://app.stg.lecoffre.smart-chain.fr/ - &scope=openid,profile,offline_access - &response_type=code`); - // const url = new URL("https://jsonplaceholder.typicode.com/todos/1"); - await this.getRequest(url); - } catch (err) { - this.onError(err); - return Promise.reject(err); - } - } - public async getByUid(uid: string): Promise { const url = new URL(this.baseURl.concat("/").concat(uid)); try { @@ -51,14 +44,4 @@ export default class Users extends BaseNotary { return Promise.reject(err); } } - - // public async post(params: User): Promise { - // const url = new URL(this.baseURl); - // try { - // return await this.postRequest(url, params); - // } catch (err) { - // this.onError(err); - // return Promise.reject(err); - // } - // } } diff --git a/src/front/Components/DesignSystem/BlockList/index.tsx b/src/front/Components/DesignSystem/BlockList/index.tsx index c1e46485..2f2b7410 100644 --- a/src/front/Components/DesignSystem/BlockList/index.tsx +++ b/src/front/Components/DesignSystem/BlockList/index.tsx @@ -4,28 +4,28 @@ import Typography, { ITypo } from "../Typography"; import ChevronIcon from "@Assets/Icons/chevron.svg"; import Image from "next/image"; -export type IFolder = { +export type IBlock = { name: string; id: string; selected: boolean; }; type IProps = { - list: IFolder[]; - onSelectedFolder: (block: IFolder) => void; + blocks: IBlock[]; + onSelectedBlock: (block: IBlock) => void; }; -export default function FolderList({ list, onSelectedFolder }: IProps) { - const selectFolder = useCallback( +export default function BlockList({ blocks, onSelectedBlock }: IProps) { + const selectBlock = useCallback( (e: React.MouseEvent) => { - onSelectedFolder && onSelectedFolder(list.find((folder) => folder.id === e.currentTarget.id)!); + onSelectedBlock && onSelectedBlock(blocks.find((folder) => folder.id === e.currentTarget.id)!); }, - [list, onSelectedFolder], + [blocks, onSelectedBlock], ); return (
- {list.map((folder) => { + {blocks.map((folder) => { return ( -
+
{folder.name} diff --git a/src/front/Components/LayoutTemplates/DefaultCollaboratorDashboard/index.tsx b/src/front/Components/LayoutTemplates/DefaultCollaboratorDashboard/index.tsx index 4e66fb9b..6b3c124b 100644 --- a/src/front/Components/LayoutTemplates/DefaultCollaboratorDashboard/index.tsx +++ b/src/front/Components/LayoutTemplates/DefaultCollaboratorDashboard/index.tsx @@ -7,7 +7,7 @@ import BackArrow from "@Front/Components/Elements/BackArrow"; import JwtService from "@Front/Services/JwtService/JwtService"; import WindowStore from "@Front/Stores/WindowStore"; import classNames from "classnames"; -import User from "le-coffre-resources/dist/Notary"; +import User from "le-coffre-resources/dist/Admin"; import Image from "next/image"; import React, { ReactNode } from "react"; diff --git a/src/front/Components/LayoutTemplates/DefaultDeedTypeDashboard/index.tsx b/src/front/Components/LayoutTemplates/DefaultDeedTypeDashboard/index.tsx index f85aa32a..b68bc64c 100644 --- a/src/front/Components/LayoutTemplates/DefaultDeedTypeDashboard/index.tsx +++ b/src/front/Components/LayoutTemplates/DefaultDeedTypeDashboard/index.tsx @@ -1,12 +1,12 @@ import ChevronIcon from "@Assets/Icons/chevron.svg"; -import DeedTypes, { IGetDeedTypesParams } from "@Front/Api/LeCoffreApi/Admin/DeedTypes/DeedTypes"; +import DeedTypes, { IGetDeedTypesParams } from "@Front/Api/LeCoffreApi/Notary/DeedTypes/DeedTypes"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import Header from "@Front/Components/DesignSystem/Header"; import Version from "@Front/Components/DesignSystem/Version"; import BackArrow from "@Front/Components/Elements/BackArrow"; import WindowStore from "@Front/Stores/WindowStore"; import classNames from "classnames"; -import { Deed, DeedType } from "le-coffre-resources/dist/Admin"; +import { Deed, DeedType } from "le-coffre-resources/dist/Notary"; import Image from "next/image"; import React, { ReactNode } from "react"; diff --git a/src/front/Components/LayoutTemplates/DefaultDocumentTypesDashboard/index.tsx b/src/front/Components/LayoutTemplates/DefaultDocumentTypesDashboard/index.tsx index 7616bf7a..124e58c7 100644 --- a/src/front/Components/LayoutTemplates/DefaultDocumentTypesDashboard/index.tsx +++ b/src/front/Components/LayoutTemplates/DefaultDocumentTypesDashboard/index.tsx @@ -1,5 +1,5 @@ import ChevronIcon from "@Assets/Icons/chevron.svg"; -import DocumentTypes from "@Front/Api/LeCoffreApi/SuperAdmin/DocumentTypes/DocumentTypes"; +import DocumentTypes from "@Front/Api/LeCoffreApi/Notary/DocumentTypes/DocumentTypes"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import Header from "@Front/Components/DesignSystem/Header"; import Version from "@Front/Components/DesignSystem/Version"; diff --git a/src/front/Components/LayoutTemplates/DefaultNotaryDashboard/index.tsx b/src/front/Components/LayoutTemplates/DefaultNotaryDashboard/index.tsx index 911d7385..37148adb 100644 --- a/src/front/Components/LayoutTemplates/DefaultNotaryDashboard/index.tsx +++ b/src/front/Components/LayoutTemplates/DefaultNotaryDashboard/index.tsx @@ -1,5 +1,5 @@ import ChevronIcon from "@Assets/Icons/chevron.svg"; -import Folders, { IGetFoldersParams } from "@Front/Api/LeCoffreApi/SuperAdmin/Folders/Folders"; +import Folders, { IGetFoldersParams } from "@Front/Api/LeCoffreApi/Notary/Folders/Folders"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import FolderListContainer from "@Front/Components/DesignSystem/FolderListContainer"; import Header from "@Front/Components/DesignSystem/Header"; diff --git a/src/front/Components/LayoutTemplates/DefaultUserDashboard/index.tsx b/src/front/Components/LayoutTemplates/DefaultUserDashboard/index.tsx index c65a6560..0b32d8ca 100644 --- a/src/front/Components/LayoutTemplates/DefaultUserDashboard/index.tsx +++ b/src/front/Components/LayoutTemplates/DefaultUserDashboard/index.tsx @@ -6,7 +6,7 @@ import Version from "@Front/Components/DesignSystem/Version"; import BackArrow from "@Front/Components/Elements/BackArrow"; import WindowStore from "@Front/Stores/WindowStore"; import classNames from "classnames"; -import User from "le-coffre-resources/dist/Notary"; +import User from "le-coffre-resources/dist/SuperAdmin"; import Image from "next/image"; import React, { ReactNode } from "react"; diff --git a/src/front/Components/Layouts/DocumentTypes/DocumentTypesCreate/index.tsx b/src/front/Components/Layouts/DocumentTypes/DocumentTypesCreate/index.tsx index 2793df38..f6dfa2a5 100644 --- a/src/front/Components/Layouts/DocumentTypes/DocumentTypesCreate/index.tsx +++ b/src/front/Components/Layouts/DocumentTypes/DocumentTypesCreate/index.tsx @@ -1,4 +1,4 @@ -import DocumentTypes from "@Front/Api/LeCoffreApi/Admin/DocumentTypes/DocumentTypes"; +import DocumentTypes from "@Front/Api/LeCoffreApi/Notary/DocumentTypes/DocumentTypes"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import Form from "@Front/Components/DesignSystem/Form"; import TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField"; @@ -8,7 +8,7 @@ import DefaultDocumentTypesDashboard from "@Front/Components/LayoutTemplates/Def import Module from "@Front/Config/Module"; import JwtService from "@Front/Services/JwtService/JwtService"; import { validateOrReject, ValidationError } from "class-validator"; -import { DocumentType, Office } from "le-coffre-resources/dist/Admin"; +import { DocumentType, Office } from "le-coffre-resources/dist/Notary"; import { useRouter } from "next/router"; import { useCallback, useState } from "react"; @@ -24,11 +24,12 @@ export default function DocumentTypesCreate(props: IProps) { try { const jwt = JwtService.getInstance().decodeJwt(); if (!jwt) return; + const office = Office.hydrate({ + uid: jwt.office_Id, + }); const documentToCreate = DocumentType.hydrate({ ...values, - office: Office.hydrate({ - uid: jwt.office_Id, - }), + office: office }); await validateOrReject(documentToCreate, { groups: ["createDocumentType"] }); const documentTypeCreated = await DocumentTypes.getInstance().post(documentToCreate); diff --git a/src/front/Components/Layouts/DocumentTypes/DocumentTypesEdit/index.tsx b/src/front/Components/Layouts/DocumentTypes/DocumentTypesEdit/index.tsx index f1f3c3cc..2f811f0f 100644 --- a/src/front/Components/Layouts/DocumentTypes/DocumentTypesEdit/index.tsx +++ b/src/front/Components/Layouts/DocumentTypes/DocumentTypesEdit/index.tsx @@ -1,4 +1,4 @@ -import DocumentTypes from "@Front/Api/LeCoffreApi/Admin/DocumentTypes/DocumentTypes"; +import DocumentTypes from "@Front/Api/LeCoffreApi/Notary/DocumentTypes/DocumentTypes"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import Form from "@Front/Components/DesignSystem/Form"; import TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField"; @@ -7,7 +7,7 @@ import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography"; import DefaultDocumentTypesDashboard from "@Front/Components/LayoutTemplates/DefaultDocumentTypesDashboard"; import Module from "@Front/Config/Module"; import { validateOrReject } from "class-validator"; -import { DocumentType } from "le-coffre-resources/dist/Admin"; +import { DocumentType } from "le-coffre-resources/dist/Notary"; import { useRouter } from "next/router"; import { useCallback, useEffect, useState } from "react"; diff --git a/src/front/Components/Layouts/DocumentTypes/DocumentTypesInformations/index.tsx b/src/front/Components/Layouts/DocumentTypes/DocumentTypesInformations/index.tsx index 2ada9aa3..f07303e6 100644 --- a/src/front/Components/Layouts/DocumentTypes/DocumentTypesInformations/index.tsx +++ b/src/front/Components/Layouts/DocumentTypes/DocumentTypesInformations/index.tsx @@ -1,9 +1,9 @@ import PenICon from "@Assets/Icons/pen.svg"; -import DocumentTypes from "@Front/Api/LeCoffreApi/Admin/DocumentTypes/DocumentTypes"; +import DocumentTypes from "@Front/Api/LeCoffreApi/Notary/DocumentTypes/DocumentTypes"; import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; import DefaultDocumentTypesDashboard from "@Front/Components/LayoutTemplates/DefaultDocumentTypesDashboard"; import Module from "@Front/Config/Module"; -import { DocumentType } from "le-coffre-resources/dist/Admin"; +import { DocumentType } from "le-coffre-resources/dist/Notary"; import Image from "next/image"; import Link from "next/link"; import { useRouter } from "next/router"; diff --git a/src/front/Components/Layouts/Folder/AddClientToFolder/index.tsx b/src/front/Components/Layouts/Folder/AddClientToFolder/index.tsx index f39bec59..397a902b 100644 --- a/src/front/Components/Layouts/Folder/AddClientToFolder/index.tsx +++ b/src/front/Components/Layouts/Folder/AddClientToFolder/index.tsx @@ -1,5 +1,5 @@ -import Customers from "@Front/Api/LeCoffreApi/SuperAdmin/Customers/Customers"; -import Folders from "@Front/Api/LeCoffreApi/SuperAdmin/Folders/Folders"; +import Customers from "@Front/Api/LeCoffreApi/Notary/Customers/Customers"; +import Folders from "@Front/Api/LeCoffreApi/Notary/Folders/Folders"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import Form from "@Front/Components/DesignSystem/Form"; import { IOption } from "@Front/Components/DesignSystem/Form/SelectField"; diff --git a/src/front/Components/Layouts/Folder/AskDocuments/index.tsx b/src/front/Components/Layouts/Folder/AskDocuments/index.tsx index ff18c0c4..48dc1450 100644 --- a/src/front/Components/Layouts/Folder/AskDocuments/index.tsx +++ b/src/front/Components/Layouts/Folder/AskDocuments/index.tsx @@ -1,8 +1,8 @@ import PlusIcon from "@Assets/Icons/plus.svg"; -import Deeds from "@Front/Api/LeCoffreApi/SuperAdmin/Deeds/Deeds"; -import Documents from "@Front/Api/LeCoffreApi/SuperAdmin/Documents/Documents"; -import DocumentTypes from "@Front/Api/LeCoffreApi/SuperAdmin/DocumentTypes/DocumentTypes"; -import Folders from "@Front/Api/LeCoffreApi/SuperAdmin/Folders/Folders"; +import Deeds from "@Front/Api/LeCoffreApi/Notary/Deeds/Deeds"; +import Documents from "@Front/Api/LeCoffreApi/Notary/Documents/Documents"; +import DocumentTypes from "@Front/Api/LeCoffreApi/Notary/DocumentTypes/DocumentTypes"; +import Folders from "@Front/Api/LeCoffreApi/Notary/Folders/Folders"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import CheckBox from "@Front/Components/DesignSystem/CheckBox"; import Form from "@Front/Components/DesignSystem/Form"; diff --git a/src/front/Components/Layouts/Folder/CreateFolder/index.tsx b/src/front/Components/Layouts/Folder/CreateFolder/index.tsx index 4f30884c..be8558a2 100644 --- a/src/front/Components/Layouts/Folder/CreateFolder/index.tsx +++ b/src/front/Components/Layouts/Folder/CreateFolder/index.tsx @@ -1,7 +1,7 @@ import backgroundImage from "@Assets/images/404-background-image.jpeg"; -import DeedTypes from "@Front/Api/LeCoffreApi/SuperAdmin/DeedTypes/DeedTypes"; -import Folders from "@Front/Api/LeCoffreApi/SuperAdmin/Folders/Folders"; -import Users from "@Front/Api/LeCoffreApi/SuperAdmin/Users/Users"; +import DeedTypes from "@Front/Api/LeCoffreApi/Notary/DeedTypes/DeedTypes"; +import Folders from "@Front/Api/LeCoffreApi/Notary/Folders/Folders"; +import Users from "@Front/Api/LeCoffreApi/Notary/Users/Users"; import Button from "@Front/Components/DesignSystem/Button"; import Form from "@Front/Components/DesignSystem/Form"; import SelectField, { IOption } from "@Front/Components/DesignSystem/Form/SelectField"; @@ -152,13 +152,8 @@ class CreateFolderClass extends BasePage { public override async componentDidMount() { const deedTypes = await DeedTypes.getInstance().get(); - - // TODO SETUP userStore and get the user's office membership -> Replace IwJ70M471c by the user's office membership uid - const usersMock = await Users.getInstance().get({ include: { office_membership: true } }); - const userMock = usersMock[0]; - // ------------------- + // no need to pass query 'where' param here, default query for notaries include only users which are in the same office as the caller const collaborators = await Users.getInstance().get({ - where: { office_membership: { uid: userMock?.office_membership?.uid } }, include: { contact: true }, }); this.setState({ diff --git a/src/front/Components/Layouts/Folder/FolderInformation/index.tsx b/src/front/Components/Layouts/Folder/FolderInformation/index.tsx index b2dfb2ec..bb6a30c5 100644 --- a/src/front/Components/Layouts/Folder/FolderInformation/index.tsx +++ b/src/front/Components/Layouts/Folder/FolderInformation/index.tsx @@ -1,5 +1,5 @@ import ChevronIcon from "@Assets/Icons/chevron.svg"; -import Folders from "@Front/Api/LeCoffreApi/SuperAdmin/Folders/Folders"; +import Folders from "@Front/Api/LeCoffreApi/Notary/Folders/Folders"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import FolderBoxInformation, { EFolderBoxInformationType } from "@Front/Components/DesignSystem/FolderBoxInformation"; import TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField"; diff --git a/src/front/Components/Layouts/Folder/UpdateClient/index.tsx b/src/front/Components/Layouts/Folder/UpdateClient/index.tsx index 0905f976..df51d182 100644 --- a/src/front/Components/Layouts/Folder/UpdateClient/index.tsx +++ b/src/front/Components/Layouts/Folder/UpdateClient/index.tsx @@ -1,4 +1,4 @@ -import Customers from "@Front/Api/LeCoffreApi/SuperAdmin/Customers/Customers"; +import Customers from "@Front/Api/LeCoffreApi/Notary/Customers/Customers"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import Form from "@Front/Components/DesignSystem/Form"; import TextField from "@Front/Components/DesignSystem/Form/TextField"; diff --git a/src/front/Components/Layouts/Folder/UpdateFolderCollaborators/index.tsx b/src/front/Components/Layouts/Folder/UpdateFolderCollaborators/index.tsx index c207f938..4c3ea3ea 100644 --- a/src/front/Components/Layouts/Folder/UpdateFolderCollaborators/index.tsx +++ b/src/front/Components/Layouts/Folder/UpdateFolderCollaborators/index.tsx @@ -1,5 +1,5 @@ -import Folders from "@Front/Api/LeCoffreApi/SuperAdmin/Folders/Folders"; -import Users, { IGetUsersparams } from "@Front/Api/LeCoffreApi/SuperAdmin/Users/Users"; +import Folders from "@Front/Api/LeCoffreApi/Notary/Folders/Folders"; +import Users, { IGetUsersParams } from "@Front/Api/LeCoffreApi/Notary/Users/Users"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import Form from "@Front/Components/DesignSystem/Form"; import { IOption } from "@Front/Components/DesignSystem/Form/SelectField"; @@ -127,10 +127,8 @@ class UpdateFolderCollaboratorsClass extends BasePage { return; } - const userQuery: IGetUsersparams = { - where: { - office_uid: folder.office?.uid, - }, + // no need to pass query 'where' param here, default query for notaries include only users which are in the same office as the caller + const userQuery: IGetUsersParams = { include: { contact: { select: { @@ -142,6 +140,7 @@ class UpdateFolderCollaboratorsClass extends BasePage { }; const availableCollaborators = await Users.getInstance().get(userQuery); + console.log(availableCollaborators) this.setState({ availableCollaborators }); } diff --git a/src/front/Components/Layouts/Folder/UpdateFolderDescription/index.tsx b/src/front/Components/Layouts/Folder/UpdateFolderDescription/index.tsx index fb572b5d..211ec64f 100644 --- a/src/front/Components/Layouts/Folder/UpdateFolderDescription/index.tsx +++ b/src/front/Components/Layouts/Folder/UpdateFolderDescription/index.tsx @@ -1,4 +1,4 @@ -import Folders from "@Front/Api/LeCoffreApi/SuperAdmin/Folders/Folders"; +import Folders from "@Front/Api/LeCoffreApi/Notary/Folders/Folders"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import Form from "@Front/Components/DesignSystem/Form"; import TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField"; diff --git a/src/front/Components/Layouts/Folder/UpdateFolderMetadata/index.tsx b/src/front/Components/Layouts/Folder/UpdateFolderMetadata/index.tsx index b66a90f0..75501e12 100644 --- a/src/front/Components/Layouts/Folder/UpdateFolderMetadata/index.tsx +++ b/src/front/Components/Layouts/Folder/UpdateFolderMetadata/index.tsx @@ -1,4 +1,4 @@ -import Folders from "@Front/Api/LeCoffreApi/SuperAdmin/Folders/Folders"; +import Folders from "@Front/Api/LeCoffreApi/Notary/Folders/Folders"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import Form from "@Front/Components/DesignSystem/Form"; import Select, { IOption } from "@Front/Components/DesignSystem/Form/SelectField"; diff --git a/src/front/Components/Layouts/Folder/ViewDocuments/index.tsx b/src/front/Components/Layouts/Folder/ViewDocuments/index.tsx index c45a73df..81bb3a8d 100644 --- a/src/front/Components/Layouts/Folder/ViewDocuments/index.tsx +++ b/src/front/Components/Layouts/Folder/ViewDocuments/index.tsx @@ -1,6 +1,6 @@ import LeftArrowIcon from "@Assets/Icons/left-arrow.svg"; import RightArrowIcon from "@Assets/Icons/right-arrow.svg"; -import Documents from "@Front/Api/LeCoffreApi/SuperAdmin/Documents/Documents"; +import Documents from "@Front/Api/LeCoffreApi/Notary/Documents/Documents"; import ValidateAnchoringGif from "@Front/Assets/images/validate_anchoring.gif"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import CheckBox from "@Front/Components/DesignSystem/CheckBox"; @@ -9,8 +9,8 @@ import Confirm from "@Front/Components/DesignSystem/Modal/Confirm"; import Typography, { ITypo, ITypoColor } from "@Front/Components/DesignSystem/Typography"; import DefaultNotaryDashboard from "@Front/Components/LayoutTemplates/DefaultNotaryDashboard"; import Module from "@Front/Config/Module"; -import { Document, File } from "le-coffre-resources/dist/Customer"; -import { EDocumentStatus } from "le-coffre-resources/dist/Customer/Document"; +import { Document, File } from "le-coffre-resources/dist/Notary"; +import { EDocumentStatus } from "le-coffre-resources/dist/Notary/Document"; import Image from "next/image"; import { NextRouter, useRouter } from "next/router"; import React from "react"; diff --git a/src/front/Components/Layouts/FolderArchived/FolderInformation/index.tsx b/src/front/Components/Layouts/FolderArchived/FolderInformation/index.tsx index 0e8b2cc0..aa4a20bf 100644 --- a/src/front/Components/Layouts/FolderArchived/FolderInformation/index.tsx +++ b/src/front/Components/Layouts/FolderArchived/FolderInformation/index.tsx @@ -1,5 +1,5 @@ import ChevronIcon from "@Assets/Icons/chevron.svg"; -import Folders from "@Front/Api/LeCoffreApi/SuperAdmin/Folders/Folders"; +import Folders from "@Front/Api/LeCoffreApi/Notary/Folders/Folders"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import FolderBoxInformation, { EFolderBoxInformationType } from "@Front/Components/DesignSystem/FolderBoxInformation"; import QuantityProgressBar from "@Front/Components/DesignSystem/QuantityProgressBar"; diff --git a/src/front/Components/Layouts/Login/index.tsx b/src/front/Components/Layouts/Login/index.tsx index 2782c037..ac8d81e5 100644 --- a/src/front/Components/Layouts/Login/index.tsx +++ b/src/front/Components/Layouts/Login/index.tsx @@ -19,7 +19,7 @@ export default function Login() { const redirectUserOnConnection = useCallback(() => { async function getUser() { try { - await UserStore.instance.connect("er3ojfdlfnd"); + await UserStore.instance.connect("ljfeflecnmd"); await JwtService.getInstance().checkJwt(); router.push(Module.getInstance().get().modules.pages.Folder.props.path); } catch (e) { diff --git a/src/front/Components/Layouts/SelectFolder/index.tsx b/src/front/Components/Layouts/SelectFolder/index.tsx index 84b9cfb4..7d5068fd 100644 --- a/src/front/Components/Layouts/SelectFolder/index.tsx +++ b/src/front/Components/Layouts/SelectFolder/index.tsx @@ -1,5 +1,5 @@ import Folders from "@Front/Api/LeCoffreApi/Customer/Folders/Folders"; -import FolderList, { IFolder } from "@Front/Components/DesignSystem/BlockList"; +import BlockList, { IBlock } from "@Front/Components/DesignSystem/BlockList"; import Typography, { ITypo } from "@Front/Components/DesignSystem/Typography"; import DefaultDoubleSidePage from "@Front/Components/LayoutTemplates/DefaultDoubleSidePage"; import { OfficeFolder } from "le-coffre-resources/dist/Customer"; @@ -16,15 +16,16 @@ export default function SelectFolder() { useEffect(() => { async function getFolders() { - const jwt = JwtService.getInstance().decodeJwt(); + const jwt = JwtService.getInstance().decodeCustomerJwt(); if (!jwt) return; + console.log(jwt) const folders = await Folders.getInstance().get({ q: { where: { customers: { some: { - uid: jwt.userId, + uid: jwt.customerId, }, }, }, @@ -36,8 +37,8 @@ export default function SelectFolder() { getFolders(); }, []); - const handleSelectFolder = useCallback( - (folder: IFolder) => { + const handleSelectBlock = useCallback( + (folder: IBlock) => { router.push("/client-dashboard/" + folder.id); }, [router], @@ -51,9 +52,9 @@ export default function SelectFolder() { Vos dossiers
- { + { return { id: folder.uid!, name: folder.name!, diff --git a/src/front/Services/JwtService/JwtService.ts b/src/front/Services/JwtService/JwtService.ts index 3e5bde37..37a78e48 100644 --- a/src/front/Services/JwtService/JwtService.ts +++ b/src/front/Services/JwtService/JwtService.ts @@ -38,6 +38,12 @@ export default class JwtService { return jwt_decode(accessToken); } + public decodeCustomerJwt(): ICustomerJwtPayload | undefined { + const accessToken = CookieService.getInstance().getCookie("leCoffreAccessToken"); + if (!accessToken) return; + return jwt_decode(accessToken); + } + /** * @description : set a cookie with a name and a value that expire in 7 days * @throws {Error} If the name or the value is empty diff --git a/src/middleware.ts b/src/middleware.ts index 6856c43c..e5c65548 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -12,7 +12,7 @@ export async function middleware(request: NextRequest) { const requestUrlPath = request.nextUrl.pathname; if ( requestUrlPath.startsWith("/collaborators") || - requestUrlPath.startsWith("/document-types") || + requestUrlPath.startsWith("/deed-types") || requestUrlPath.startsWith("/customer") || requestUrlPath.startsWith("/offices") || requestUrlPath.startsWith("/roles") || @@ -21,7 +21,7 @@ export async function middleware(request: NextRequest) { if (userDecodedToken.role !== "admin" && userDecodedToken.role !== "super-admin") return NextResponse.redirect(new URL("/404", request.url)); } - if (requestUrlPath.startsWith("/my-account") && !userDecodedToken) return NextResponse.redirect(new URL("/404", request.url)); + if ((requestUrlPath.startsWith("/my-account") || requestUrlPath.startsWith("/document-types")) && !userDecodedToken) return NextResponse.redirect(new URL("/404", request.url)); if (requestUrlPath.startsWith("/client-dashboard") && !customerDecodedToken) return NextResponse.redirect(new URL("/404", request.url)); return NextResponse.next(); @@ -33,6 +33,7 @@ export const config = { "/collaborators/:path*", "/customer/:path*", "/document-types/:path*", + "/deed-types/:path*", "/folders/:path*", "/my-account/:path*", "/offices/:path*",