Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hel 537/page admin #410

Closed
wants to merge 69 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
b96cac8
(hel-537) make admin page reachable for role 1 and role 2
schlaifa Nov 13, 2023
8d19f9a
(hel-537) settings routes
schlaifa Nov 14, 2023
7a63a62
(hel-537) hel-537/[Profil]- Création console pour les administrateurs
Adolato Nov 16, 2023
d008aac
(hel-537) hel-537/[Profil]- Création console pour les administrateurs
Adolato Nov 16, 2023
722db11
(hel-537) hel-537/page-admin
Adolato Nov 20, 2023
a534830
(hel-537) hel-537/page-admin
Adolato Nov 21, 2023
439d1e5
(hel-537) hel-537/page-admin
Adolato Nov 21, 2023
b2a530a
(hel-537) hel-537/page-admin
Adolato Nov 21, 2023
e78d0a1
(hel-537) hel-537/page-admin
Adolato Nov 21, 2023
db0b7e6
(hel-537) hel-537/page-admin
Adolato Nov 22, 2023
132f54e
(hel-537) hel-537/page-admin
Adolato Nov 23, 2023
b17b6ea
(hel-537) hel-537/page-admin
Adolato Nov 23, 2023
1187f74
(hel-537) hel-537/page-admin
Adolato Nov 23, 2023
621d864
(hel-537) hel-537/page-admin
Adolato Nov 23, 2023
92af3e1
(hel-537) hel-537/page-admin
Adolato Nov 24, 2023
5f7f0a8
(hel-537) hel-537/page-admin
Adolato Nov 27, 2023
90952fe
(hel-537) hel-537/page-admin
Adolato Nov 28, 2023
99a7a6e
(hel-537) hel-537/page-admin
Adolato Nov 28, 2023
5b17967
(hel-537) hel-537/page-admin
Adolato Nov 28, 2023
461cf8d
(hel-537) hel-537/page-admin
Adolato Nov 28, 2023
f296dd8
(hel-537) hel-537/page-admin
Adolato Dec 1, 2023
03dd8ef
(hel-537) hel-537/page-admin
Adolato Dec 1, 2023
4972450
(hel-537) hel-537/page-admin
Adolato Dec 2, 2023
458ce49
(hel-537) hel-537/page-admin
Adolato Dec 2, 2023
fd24649
(hel-537) hel-537/page-admin
Adolato Dec 2, 2023
a17a97c
(hel-537) hel-537/page-admin
Adolato Dec 3, 2023
af46df8
(hel-537) hel-537/page-admin
Adolato Dec 3, 2023
636dec4
(hel-537) hel-537/page-admin
Adolato Dec 3, 2023
c088d45
(hel-537) hel-537/page-admin
Adolato Dec 3, 2023
e06098d
(hel-537) hel-537/page-admin
Adolato Dec 4, 2023
f39c42d
(hel-537) hel-537/page-admin
Adolato Dec 5, 2023
e103cad
(hel-537) hel-537/page-admin
Adolato Dec 6, 2023
05356ed
(hel-537) hel-537/page-admin
Adolato Dec 7, 2023
4e89d4a
(hel-537) hel-537/page-admin
Adolato Dec 7, 2023
f922068
(hel-537) hel-537/page-admin
Adolato Dec 7, 2023
915ff84
(hel-537) hel-537/page-admin
Adolato Dec 8, 2023
c75655f
(hel-537) hel-537/page-admin
Adolato Dec 8, 2023
1891b6d
(hel-537) hel-537/page-admin fix session
Adolato Dec 14, 2023
bcb8e07
(hel-537) hel-537/page-admin fix session
Adolato Dec 14, 2023
bf070fe
(hel-537) hel-537/page-admin fix session
Adolato Dec 14, 2023
7cfca7d
(hel-537) hel-537/page-admin fix session
Adolato Dec 15, 2023
fbeed8b
(hel-537) hel-537/page-admin acl
Adolato Dec 15, 2023
719a66f
(hel-537) hel-537/page-admin acl
Adolato Dec 18, 2023
f8ca238
(hel-537) hel-537/page-admin acl
Adolato Dec 18, 2023
1582a88
(hel-537) hel-537/page-admin acl
Adolato Dec 18, 2023
4b01995
(hel-537) hel-537/page-admin acl
Adolato Dec 19, 2023
08e2d89
(hel-537) hel-537/page-admin acl
Adolato Dec 20, 2023
bb5f034
(hel-537) hel-537/page-admin acl
Adolato Dec 20, 2023
52bdbdf
(hel-537) hel-537/page-admin acl
Adolato Dec 20, 2023
4e4b1e0
(hel-537) hel-537/page-admin merge develop & fix conflicts
Adolato Dec 20, 2023
993af75
(hel-537) hel-537/page-admin merge develop & fix conflicts
Adolato Dec 20, 2023
3f7b296
(hel-537) hel-537/page-admin merge develop & fix conflicts
Adolato Dec 20, 2023
210e8e9
(hel-537) hel-537/page-admin merge develop & fix conflicts
Adolato Dec 21, 2023
7d4382c
(hel-572) hel-572/inactivation_d_un_compte
Adolato Dec 21, 2023
c9c3f46
(hel-572) hel-572/inactivation_d_un_compte
Adolato Dec 22, 2023
a61b3ed
(hel-537) fix header menu
schlaifa Dec 27, 2023
53c79d1
(hel-537) remove search bar from header
schlaifa Dec 27, 2023
c377341
(hel-537) fix profiles routers and breadcrumb
schlaifa Dec 27, 2023
f4b1d52
(hel-537) fix get profiles in server side
schlaifa Dec 27, 2023
5b8e1db
(hel-537) fix code region type issue
schlaifa Dec 27, 2023
30d9e33
(hel-537) fix wording
schlaifa Dec 27, 2023
be49c0a
(hel-537) fix clean code
schlaifa Dec 28, 2023
5da1128
(hel-537) clean code and add connexion date at login
schlaifa Dec 28, 2023
ab3b114
(hel-537) clean code
schlaifa Dec 29, 2023
454f02c
(hel-537) profile settings available only for national admins
schlaifa Dec 29, 2023
6aa8bd3
(hel-537) fix last connexion date in table
schlaifa Jan 2, 2024
f77c175
(hel-537) merge hel-572/inactivation_d_un_compte
Adolato Jan 2, 2024
0ff83fa
(hel-537) fix pb after merge step 1
Adolato Jan 2, 2024
90210fe
(hel-537) fix pb after merge step 2
Adolato Jan 2, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion database/dataSource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ import { AjoutRefDepartementRegion1694523233904 } from "./migrations/16945232339
import { AjoutRégionDansEntitéJuridique1694616724703 } from "./migrations/1694616724703-AjoutRégionDansEntitéJuridique";
import { AjoutRégionDansEtablissementTerritorial1694617579347 } from "./migrations/1694617579347-AjoutRégionDansEtablissementTerritorial";
import { AjoutProfilsDansUtilisateurs1696841163367 } from "./migrations/1696841163367-AjoutProfilsDansUtilisateurs";
import { AjouterSoftDeleteUtilisateur1701782042926 } from "./migrations/1701782042926-AjouterSoftDeleteUtilisateur";
import { ajoutTableProfil1795731844298 } from "./migrations/1795731844278-ajoutTableProfil";
import { updateProfileTable1796422585498 } from "./migrations/1796422585498-updateProfileTable";
import { ActivitéMédicoSocialModel } from "./models/ActivitéMédicoSocialModel";
Expand Down Expand Up @@ -78,7 +79,7 @@ dotEnvConfig();
const environmentVariables = new NodeEnvironmentVariables(logger);

// eslint-disable-next-line no-console
console.log('environmentVariables.DATABASE_URL', environmentVariables.DATABASE_URL);
console.log("environmentVariables.DATABASE_URL", environmentVariables.DATABASE_URL);

export default new DataSource({
entities: [
Expand Down Expand Up @@ -154,6 +155,7 @@ export default new DataSource({
AjoutRégionDansEtablissementTerritorial1694617579347,
ajoutTableProfil1795731844298,
AjoutProfilsDansUtilisateurs1696841163367,
AjouterSoftDeleteUtilisateur1701782042926,
updateProfileTable1796422585498,
],
type: "postgres",
Expand Down
19 changes: 19 additions & 0 deletions database/migrations/1701782042926-AjouterSoftDeleteUtilisateur.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { MigrationInterface, QueryRunner } from "typeorm";

export class AjouterSoftDeleteUtilisateur1701782042926 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`
ALTER TABLE utilisateur
ADD ut_date_soft_delete timestamp,
ADD ut_date_last_connection timestamp;
`);
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`
ALTER TABLE utilisateur
DROP COLUMN ut_date_soft_delete;
DROP COLUMN ut_date_last_connection;
`);
}
}
29 changes: 14 additions & 15 deletions database/migrations/1795731844278-ajoutTableProfil.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { MigrationInterface, QueryRunner } from "typeorm"
import { MigrationInterface, QueryRunner } from "typeorm";

import { DefaultProfile } from "../../src/frontend/configuration/DefaultProfile";

export class ajoutTableProfil1795731844298 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`
CREATE TABLE profil(
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`
CREATE TABLE public.profil(
profil_id bigserial NOT NULL,
profil_code uuid NOT NULL default gen_random_uuid(),
profil_label character varying(255) NOT NULL,
Expand All @@ -15,17 +15,16 @@ export class ajoutTableProfil1795731844298 implements MigrationInterface {
PRIMARY KEY (profil_id)
);`);

await queryRunner.query(
`INSERT INTO profil(profil_label, profil_value, profil_date_creation) VALUES ($1, $2, $3)`,
['Utilisateur lambda', DefaultProfile, new Date()]
);
await queryRunner.query(`INSERT INTO public.profil(profil_label, profil_value, profil_date_creation) VALUES ($1, $2, $3)`, [
"Utilisateur lambda",
DefaultProfile,
new Date(),
]);
}

}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`
DROP TABLE profil;
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`
DROP TABLE public.profil;
`);
}

}
}
28 changes: 14 additions & 14 deletions database/models/ProfilModel.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn } from "typeorm";

export type ProfileValue = Readonly<{
institution: { profilEJ: object, profilETSanitaire: object, profilMédicoSocial: object };
autreRegion: { profilEJ: object, profilETSanitaire: object, profilMédicoSocial: object };
institution: { profilEJ: object; profilETSanitaire: object; profilMédicoSocial: object };
autreRegion: { profilEJ: object; profilETSanitaire: object; profilMédicoSocial: object };
}>;

@Entity({ name: "profil" })
export class ProfilModel {
@PrimaryGeneratedColumn({ name: "profil_id" })
public id!: number;
@PrimaryGeneratedColumn({ name: "profil_id" })
public id!: number;

@Column({ name: "profil_code" })
public code!: string;
@Column({ name: "profil_code" })
public code!: string;

@Column({ name: "profil_label" })
public label!: string;
@Column({ name: "profil_label" })
public label!: string;

@Column({ name: "profil_value", type: 'jsonb', default: {} })
public value!: ProfileValue;
@Column({ name: "profil_value", type: "jsonb", default: {} })
public value!: ProfileValue;

@CreateDateColumn({ name: "profil_date_creation" })
public dateCreation!: Date;
@CreateDateColumn({ name: "profil_date_creation" })
public dateCreation!: Date;

@UpdateDateColumn({ name: "profil_date_modification" })
public dateModification!: Date;
@UpdateDateColumn({ name: "profil_date_modification" })
public dateModification!: Date;
}
21 changes: 10 additions & 11 deletions database/models/UtilisateurModel.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,4 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
ManyToOne,
JoinColumn,
BeforeInsert,
BeforeUpdate,
} from "typeorm";
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, ManyToOne, JoinColumn, BeforeInsert, BeforeUpdate } from "typeorm";

import { InstitutionModel } from "./InstitutionModel";
import { RoleModel } from "./RoleModel";
Expand Down Expand Up @@ -40,6 +30,9 @@ export class UtilisateurModel {
@JoinColumn({ name: "ut_institution", referencedColumnName: "id" })
public institution!: InstitutionModel;

@Column({ name: "ut_institution" })
public institutionId!: number;

@Column({ name: "ut_actif", default: false })
public actif!: boolean;

Expand All @@ -62,6 +55,12 @@ export class UtilisateurModel {
@UpdateDateColumn({ name: "ut_date_modification" })
public dateModification!: Date;

@Column({ type: "date", name: "ut_date_soft_delete", nullable: true })
public deletedDate!: Date | null;

@Column({ name: "ut_date_last_connection" })
public lastConnectionDate!: Date;

@Column({ name: "ut_cree_par", nullable: true })
public creePar!: number;

Expand Down
5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -84,13 +84,16 @@
"chart.js": "^3.8.0",
"chartjs-plugin-datalabels": "^2.0.0",
"crypto": "^1.0.1",
"date-fns": "^2.30.0",
"dompurify": "^3.0.6",
"dotenv-defaults": "^5.0.0",
"husky": "^7.0.4",
"joi": "^17.9.2",
"jsonwebtoken": "^9.0.0",
"next": "13",
"next-auth": "^4.22.1",
"next-usequerystate": "^1.12.2",
"node-cache": "^5.1.2",
"node-fetch": "2.6.7",
"pg": "^8.7.3",
"react": "18.0.0",
Expand Down Expand Up @@ -150,4 +153,4 @@
"node": "16.16"
},
"packageManager": "yarn@3.2.4"
}
}
13 changes: 0 additions & 13 deletions src/backend/infrastructure/controllers/checkIfAdminEndpoint.ts

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { LoginUseCase } from "../../métier/use-cases/LoginUseCase";
import { Dependencies } from "../dependencies";

export async function checkUserIsNotAdminAndInactifEndpoint(dependencies: Dependencies, email: string): Promise<boolean> {
try {
const loginUseCase = new LoginUseCase(dependencies.utilisateurLoader);

return await loginUseCase.checkUserIsNotAdminAndInactif(email);
} catch (error) {
dependencies.logger.error(error);
throw error;
}
}
12 changes: 12 additions & 0 deletions src/backend/infrastructure/controllers/deleteUserEndpoint.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { UtilisateursUseCase } from "../../métier/use-cases/UtilisateursUseCase";
import { Dependencies } from "../dependencies";

export async function deleteUserEndpoint(dependencies: Dependencies, userCode: string): Promise<string | void> {
try {
const UtilisateurUseCase = new UtilisateursUseCase(dependencies.utilisateurLoader);
return await UtilisateurUseCase.deleteUser(userCode);
} catch (error) {
dependencies.logger.error(error);
throw error;
}
}
13 changes: 13 additions & 0 deletions src/backend/infrastructure/controllers/getAllRolesEndpoint.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { RoleModel } from "../../../../database/models/RoleModel";
import { RolesUseCase } from "../../métier/use-cases/RolesUseCase";
import { Dependencies } from "../dependencies";

export async function getAllRolesEndpoint(dependencies: Dependencies): Promise<RoleModel[]> {
try {
const RoleUseCase = new RolesUseCase(dependencies.roleLoader);
return await RoleUseCase.getAllRoles();
} catch (error) {
dependencies.logger.error(error);
throw error;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { InstitutionModel } from "../../../../database/models/InstitutionModel";
import { InstitutionsUseCase } from "../../métier/use-cases/InstitutionsUseCase";
import { Dependencies } from "../dependencies";

export async function getInstitutionByCodeEndpoint(dependencies: Dependencies, code: string): Promise<InstitutionModel | null> {
try {
const InstitutionUseCase = new InstitutionsUseCase(dependencies.institutionLoader);
return await InstitutionUseCase.getInstitutionByCode(code);
} catch (error) {
dependencies.logger.error(error);
throw error;
}
}
13 changes: 13 additions & 0 deletions src/backend/infrastructure/controllers/getUserByCodeEndpoint.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { UtilisateurModel } from "../../../../database/models/UtilisateurModel";
import { UtilisateursUseCase } from "../../métier/use-cases/UtilisateursUseCase";
import { Dependencies } from "../dependencies";

export async function getUserByCodeEndpoint(dependencies: Dependencies, code: string): Promise<UtilisateurModel | null> {
try {
const UtilisateurUseCase = new UtilisateursUseCase(dependencies.utilisateurLoader);
return await UtilisateurUseCase.getUserByCode(code);
} catch (error) {
dependencies.logger.error(error);
throw error;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { UtilisateursUseCase } from "../../métier/use-cases/UtilisateursUseCase";
import { Dependencies } from "../dependencies";

export async function getUsersListPaginatedEndpoint(
dependencies: Dependencies,
key: string,
pdescrtion: number,
institutionId: number,
roleId: number,
profilId: string,
etatId: string,
itemsPerPage: number,
orderBy: string,
sortDir: string
): Promise<any> {
try {
const UtilisateurUseCase = new UtilisateursUseCase(dependencies.utilisateurLoader);
return await UtilisateurUseCase.getUsersListPaginated(key, pdescrtion, institutionId, roleId, profilId, etatId, itemsPerPage, orderBy, sortDir);
} catch (error) {
dependencies.logger.error(error);
throw error;
}
}
12 changes: 12 additions & 0 deletions src/backend/infrastructure/controllers/reactivateUserEndpoint.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { UtilisateursUseCase } from "../../métier/use-cases/UtilisateursUseCase";
import { Dependencies } from "../dependencies";

export async function reactivateUserEndpoint(dependencies: Dependencies, userCode: string): Promise<string | void> {
try {
const UtilisateurUseCase = new UtilisateursUseCase(dependencies.utilisateurLoader);
return await UtilisateurUseCase.reactivateUser(userCode);
} catch (error) {
dependencies.logger.error(error);
throw error;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { LoginUseCase } from "../../métier/use-cases/LoginUseCase";
import { Dependencies } from "../dependencies";

export async function updateLastConnectionDateEndpoint(dependencies: Dependencies, email: string): Promise<boolean> {
try {
const loginUseCase = new LoginUseCase(dependencies.utilisateurLoader);

return await loginUseCase.updateLastConnectionDate(email);
} catch (error) {
dependencies.logger.error(error);
throw error;
}
}
20 changes: 20 additions & 0 deletions src/backend/infrastructure/controllers/updateUserEndpoint.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { UtilisateursUseCase } from "../../métier/use-cases/UtilisateursUseCase";
import { Dependencies } from "../dependencies";

export async function updateUserEndpoint(
dependencies: Dependencies,
userCode: string,
roleCode: string,
institutionCode: string,
profilsCode: string[],
firstname: string,
lastname: string
): Promise<void> {
try {
const UtilisateurUseCase = new UtilisateursUseCase(dependencies.utilisateurLoader);
return await UtilisateurUseCase.updateUser(userCode, roleCode, institutionCode, profilsCode, firstname, lastname);
} catch (error) {
dependencies.logger.error(error);
throw error;
}
}
10 changes: 8 additions & 2 deletions src/backend/infrastructure/dependencies.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,12 @@ import { TypeOrmEntitéJuridiqueLoader } from "./gateways/entité-juridique-load
import { NodeEnvironmentVariables } from "./gateways/environnement-variables/NodeEnvironmentVariables";
import { TypeOrmFavorisLoader } from "./gateways/favoris-loader/TypeOrmFavorisLoader";
import { TypeOrmForgetPasswordLoader } from "./gateways/forget-password-loader/TypeOrmForgetPasswordLoader";
import { TypeOrmInstitutionLoader } from "./gateways/institution-loader/TypeOrmInstitutionLoader";
import { ConsoleLogger } from "./gateways/logger/ConsoleLogger";
import { typeOrmOrm } from "./gateways/orm/typeOrmOrm";
import { TypeOrmProfileLoader } from "./gateways/profile-loader/TypeOrmProfileLoader";
import { TypeOrmRechercheLoader } from "./gateways/recherche-loader/TypeOrmRechercheLoader";
import { TypeOrmRoleLoader } from "./gateways/role-loader/TypeOrmRoleLoader";
import { TypeOrmSearchHistoryLoader } from "./gateways/search-history-loader/TypeOrmSearchHistoryLoader";
import { TypeOrmUtilisateurLoader } from "./gateways/utilisateur-loader/TypeOrmUtilisateurLoader";
import { TypeOrmÉtablissementTerritorialMédicoSocialLoader } from "./gateways/établissement-territorial-loader/TypeOrmÉtablissementTerritorialMédicoSocialLoader";
Expand All @@ -40,7 +42,9 @@ export type Dependencies = Readonly<{
changePasswordLoader: ChangePasswordLoader;
forgetPasswordLoader: TypeOrmForgetPasswordLoader;
searchHistoryLoader: SearchHistoryLoader;
profileLoader: TypeOrmProfileLoader
profileLoader: TypeOrmProfileLoader;
roleLoader: TypeOrmRoleLoader;
institutionLoader: TypeOrmInstitutionLoader;
}>;

const createDependencies = (): Dependencies => {
Expand Down Expand Up @@ -68,7 +72,9 @@ const createDependencies = (): Dependencies => {
changePasswordLoader: new TypeOrmChangePasswordLoader(orm),
forgetPasswordLoader: new TypeOrmForgetPasswordLoader(orm),
searchHistoryLoader: new TypeOrmSearchHistoryLoader(orm),
profileLoader: new TypeOrmProfileLoader(orm)
profileLoader: new TypeOrmProfileLoader(orm),
roleLoader: new TypeOrmRoleLoader(orm),
institutionLoader: new TypeOrmInstitutionLoader(orm),
};
};

Expand Down
Loading
Loading