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 509/search history #349

Merged
merged 26 commits into from
Aug 21, 2023
Merged
Changes from 1 commit
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
54055d5
(hel-508) page favoris + userContext
schlaifa Jul 7, 2023
d99a56f
(hel-508) les ws getAllFavoris, addToFavoris et removeFromFavoris
schlaifa Jul 12, 2023
d92eb6d
(hel-508) page favoris
schlaifa Jul 13, 2023
fa64941
(hel-508) Add star component to summary page and clean code
schlaifa Jul 17, 2023
d52e478
(hel-508) merge develop into favoris
schlaifa Jul 18, 2023
16e3bd4
(hel-508) add a popover to star button
schlaifa Jul 19, 2023
004718e
(hel-508) retour demo
schlaifa Jul 19, 2023
b7a86d7
(hel-509) merge favoris into search history
schlaifa Jul 20, 2023
d1a780c
(hel-509) save search history back and front
schlaifa Jul 20, 2023
767e26e
(hel-509) get all user search history front and back
schlaifa Jul 20, 2023
45d33dd
(hel-509) get only the newest searchs
schlaifa Jul 24, 2023
e95ca0d
(hel-508) create migration script to add favori table
schlaifa Aug 7, 2023
8518f5c
(hel-509) add migrattion script to create search_history table
schlaifa Aug 7, 2023
8431a03
(hel-508) correct PR errors
schlaifa Aug 8, 2023
a9d8ac2
(hel-509) correct code issues
schlaifa Aug 8, 2023
8999f4f
(hel-508) fix merge conflict
schlaifa Aug 8, 2023
f89bd9c
(hel-509) fix merge conflict
schlaifa Aug 8, 2023
79d3d09
(hel-509) fix merge conflicts
schlaifa Aug 16, 2023
428ddf5
(hel-509) fix merge conflicts
schlaifa Aug 16, 2023
5c260ea
(hel-509) fix code issues
schlaifa Aug 16, 2023
84c35a4
(hel-509) fix code issues
schlaifa Aug 16, 2023
3f184b2
(hel-509) fix code issues
schlaifa Aug 21, 2023
6674201
(hel-509) fix code issues
schlaifa Aug 21, 2023
a06cf96
(hel-509) protect favoris and history routes
schlaifa Aug 21, 2023
f4eb046
(hel-509) fix code issues
schlaifa Aug 21, 2023
e1d16b1
(hel-509) fix code issues
schlaifa Aug 21, 2023
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
Prev Previous commit
Next Next commit
(hel-509) merge favoris into search history
  • Loading branch information
schlaifa committed Jul 20, 2023
commit b7a86d73b65cd3e90b48a1281dc9ad660d8425d9
4 changes: 3 additions & 1 deletion database/dataSource.ts
Original file line number Diff line number Diff line change
@@ -38,7 +38,7 @@ import { AjouterBlocBudgetFinanceEJ1677495763184 } from "./migrations/1677495763
import { AjouteHAD1680014929754 } from "./migrations/1680014929754-AjouteHAD";
import { AjoutCapacitesSanitaireEJ1680076022425 } from "./migrations/1680076022425-AjoutCapacitesSanitaireEJ";
import { AjoutTableUtilisateurRoleEtablissement1686646154737 } from "./migrations/1686646154737-AjoutTableUtilisateurRoleEtablissement";
import { ModificationTableInstitution1688376404752 } from "./migrations/1688376404752-ModificationTableInstitution"
import { ModificationTableInstitution1688376404752 } from "./migrations/1688376404752-ModificationTableInstitution";
import { ActivitéMédicoSocialModel } from "./models/ActivitéMédicoSocialModel";
import { ActivitéSanitaireEntitéJuridiqueModel } from "./models/ActivitéSanitaireEntitéJuridiqueModel";
import { ActivitéSanitaireModel } from "./models/ActivitéSanitaireModel";
@@ -58,6 +58,7 @@ import { RechercheModel } from "./models/RechercheModel";
import { ReconnaissanceContractuelleSanitaireModel } from "./models/ReconnaissanceContractuelleSanitaireModel";
import { RessourcesHumainesMédicoSocialModel } from "./models/RessourcesHumainesMédicoSocialModel";
import { RoleModel } from "./models/RoleModel";
import { SearchHistoryModel } from "./models/SearchHistoryModel";
import { UtilisateurModel } from "./models/UtilisateurModel";
import { ÉquipementMatérielLourdSanitaireModel } from "./models/ÉquipementMatérielLourdSanitaireModel";
import { ÉtablissementTerritorialIdentitéModel } from "./models/ÉtablissementTerritorialIdentitéModel";
@@ -90,6 +91,7 @@ export default new DataSource({
UtilisateurModel,
RoleModel,
InstitutionModel,
SearchHistoryModel,
],
logger: "debug",
logging: [environmentVariables.ORM_DEBUG] as LoggerOptions,
26 changes: 26 additions & 0 deletions database/models/SearchHistoryModel.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, JoinColumn } from "typeorm";

import { UtilisateurModel } from "./UtilisateurModel";

@Entity({ name: "search_history" })
export class SearchHistoryModel {
@PrimaryGeneratedColumn({ name: "id" })
public id!: number;

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

@Column({ name: "finess_number" })
public finessNumber!: string;

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

@Column({ name: 'user_id' })
public userId!: string;

@ManyToOne(() => UtilisateurModel)
@JoinColumn({ name: "user_id", referencedColumnName: "id" })
public user!: UtilisateurModel;

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

export async function saveSearchHistoryEndpoint(dependencies: Dependencies, titre: string, idUser: string, finessNumber: string): Promise<void> {
try {
// eslint-disable-next-line no-console
console.log('from endpoint', idUser);
const saveSearchHistoryUseCase = new SaveSearchHistoryUseCase(dependencies.searchHistoryLoader);

return await saveSearchHistoryUseCase.exécute(titre, idUser, finessNumber);
} catch (error) {
dependencies.logger.error(error);
throw error;
}
}
6 changes: 5 additions & 1 deletion src/backend/infrastructure/dependencies.ts
Original file line number Diff line number Diff line change
@@ -6,6 +6,7 @@ import { EnvironmentVariables } from "../métier/gateways/EnvironmentVariables";
import { FavorisLoader } from "../métier/gateways/FavorisLoader";
import { Logger } from "../métier/gateways/Logger";
import { RechercheLoader } from "../métier/gateways/RechercheLoader";
import { SearchHistoryLoader } from "../métier/gateways/SearchHistoryLoader";
import { UtilisateurLoader } from "../métier/gateways/UtilisateurLoader";
import { ÉtablissementTerritorialMédicoSocialLoader } from "../métier/gateways/ÉtablissementTerritorialMédicoSocialLoader";
import { ÉtablissementTerritorialRattachéLoader } from "../métier/gateways/ÉtablissementTerritorialRattachéLoader";
@@ -19,6 +20,7 @@ import { TypeOrmForgetPasswordLoader } from "./gateways/forget-password-loader/T
import { ConsoleLogger } from "./gateways/logger/ConsoleLogger";
import { typeOrmOrm } from "./gateways/orm/typeOrmOrm";
import { TypeOrmRechercheLoader } from "./gateways/recherche-loader/TypeOrmRechercheLoader";
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";
import { TypeOrmÉtablissementTerritorialRattachéLoader } from "./gateways/établissement-territorial-loader/TypeOrmÉtablissementTerritorialRattachéLoader";
@@ -36,6 +38,7 @@ export type Dependencies = Readonly<{
favorisLoader: FavorisLoader;
changePasswordLoader: ChangePasswordLoader;
forgetPasswordLoader: TypeOrmForgetPasswordLoader;
searchHistoryLoader: SearchHistoryLoader
}>;

const createDependencies = (): Dependencies => {
@@ -61,7 +64,8 @@ const createDependencies = (): Dependencies => {
établissementTerritorialSanitaireLoader: new TypeOrmÉtablissementTerritorialSanitaireLoader(orm),
favorisLoader: new TypeOrmFavorisLoader(orm),
changePasswordLoader: new TypeOrmChangePasswordLoader(orm),
forgetPasswordLoader: new TypeOrmForgetPasswordLoader(orm)
forgetPasswordLoader: new TypeOrmForgetPasswordLoader(orm),
searchHistoryLoader: new TypeOrmSearchHistoryLoader(orm)
};
};

Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { DataSource } from "typeorm";

import { SearchHistoryModel } from "../../../../../database/models/SearchHistoryModel";
import { SearchHistoryLoader } from "../../../métier/gateways/SearchHistoryLoader";

export class TypeOrmSearchHistoryLoader implements SearchHistoryLoader {
constructor(private readonly orm: Promise<DataSource>) { }


async saveSearchHistory(title: string, idUser: string, finessNumber: string) {
const searchHistory = new SearchHistoryModel();
searchHistory.date = new Date();
searchHistory.finessNumber = finessNumber;
searchHistory.title = title;
searchHistory.userId = idUser;
await (await this.orm).getRepository(SearchHistoryModel).save(searchHistory);
}
}
3 changes: 3 additions & 0 deletions src/backend/métier/gateways/SearchHistoryLoader.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export interface SearchHistoryLoader {
saveSearchHistory(titre: string, idUser: string, finessNumber: string): Promise<void>;
}
9 changes: 9 additions & 0 deletions src/backend/métier/use-cases/saveSearchHistoryUseCase.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { SearchHistoryLoader } from "../gateways/SearchHistoryLoader";

export class SaveSearchHistoryUseCase {
constructor(private searchHistoryLoader: SearchHistoryLoader) { }

async exécute(titre: string, idUser: string, finessNumber: string): Promise<void> {
return await this.searchHistoryLoader.saveSearchHistory(titre, idUser, finessNumber);
}
}
5 changes: 5 additions & 0 deletions src/frontend/configuration/wording/Wording.tsx
Original file line number Diff line number Diff line change
@@ -346,4 +346,9 @@ export interface Wording {
readonly MOT_DE_PASSE: string;
readonly CONFIRMER_MOT_DE_PASSE: string;
readonly CONFIRM_CHANGE_PASSWORD: string;

// Historique de recherche
readonly HISTORIQUE_DE_RECHERECHE_TITRE: string;
readonly ETABLISSEMENT_CONSULTE: string;
readonly DATE: string;
}
5 changes: 5 additions & 0 deletions src/frontend/configuration/wording/WordingFr.tsx
Original file line number Diff line number Diff line change
@@ -436,4 +436,9 @@ export class WordingFr implements Wording {
readonly MOT_DE_PASSE: string = "Nouveau mot de passe";
readonly CONFIRMER_MOT_DE_PASSE: string = "Confirmation mot de passe";
readonly CONFIRM_CHANGE_PASSWORD: string = "Confirmer la demande de réinitialisation";

// Historique de recherche
readonly HISTORIQUE_DE_RECHERECHE_TITRE: string = "Historique des derniers établissements consultés suite à une recherche";
readonly ETABLISSEMENT_CONSULTE: string = "Etablissements consultés";
readonly DATE: string = "Date";
}
8 changes: 8 additions & 0 deletions src/frontend/ui/entité-juridique/PageEntitéJuridique.tsx
Original file line number Diff line number Diff line change
@@ -6,6 +6,7 @@ import { SeparatorHorizontal } from "../commun/Separateur/SeparatorHorizontal";
import { Titre } from "../commun/Titre/Titre";
import { RechercheViewModel } from "../home/RechercheViewModel";
import { useRecherche } from "../home/useRecherche";
import { useSearchHistory } from "../search-history/useSearchHistory";
import { BlocActivitéSanitaire } from "./bloc-activité/BlocActivitéSanitaire";
import { BlocAutorisationsCapacites } from "./bloc-autorisations-capacites/BlocAutorisationsCapacites";
import { BlocBudgetFinance } from "./bloc-budget-finance/BlocBudgetFinance";
@@ -28,6 +29,13 @@ export const PageEntitéJuridique = ({ entitéJuridiqueViewModel, établissement
path: "",
},
]);
const { saveSearchHistory } = useSearchHistory();
useEffect(() => {
// eslint-disable-next-line no-console
console.log('use effect ran');
saveSearchHistory(entitéJuridiqueViewModel.titre, '7eb4d131-718d-4e06-9952-4e048a145b37', entitéJuridiqueViewModel.numéroFiness);

}, [])

const { rechercher, résultats } = useRecherche();
const [rechercheViewModel, setRechercheViewModel] = useState<RechercheViewModel>();
9 changes: 9 additions & 0 deletions src/frontend/ui/search-history/SearchHistory.module.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
.title {
text-align: center;
margin-top: 2rem;
color: #000091;
}

.align table {
display: table;
}
33 changes: 33 additions & 0 deletions src/frontend/ui/search-history/SearchHistoryPage.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import "@gouvfr/dsfr/dist/component/table/table.min.css";
import { useDependencies } from "../commun/contexts/useDependencies";
import styles from "./SearchHistory.module.css";

export const SearchHistoryPage = () => {
const { wording } = useDependencies();

return (
<main className="fr-container">
<h1 className={styles["title"]}>{wording.HISTORIQUE_DE_RECHERECHE_TITRE}</h1>
<div className={"fr-table fr-table--blue-ecume fr-mt-8w " + styles["align"]}>
<table>
<thead>
<tr>
<th scope="col">{wording.ETABLISSEMENT_CONSULTE}</th>
<th scope="col">{wording.DATE}</th>
</tr>
</thead>
<tbody>
<tr>
<td>{wording.ETABLISSEMENT_CONSULTE}</td>
<td>{wording.DATE}</td>
</tr>
<tr>
<td>{wording.ETABLISSEMENT_CONSULTE}</td>
<td>{wording.DATE}</td>
</tr>
</tbody>
</table>
</div>
</main>
);
};
13 changes: 13 additions & 0 deletions src/frontend/ui/search-history/useSearchHistory.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
export function useSearchHistory() {
const saveSearchHistory = (title: string, idUser: string, finessNumber: string) => {
fetch("/api/history/save-search-history", {
body: JSON.stringify({ title, idUser, finessNumber }),
headers: { "Content-Type": "application/json" },
method: "POST",
})
}

return {
saveSearchHistory,
};
}
17 changes: 17 additions & 0 deletions src/pages/api/history/save-search-history.ts
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

file name "add"

Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { NextApiRequest, NextApiResponse } from "next";

import { saveSearchHistoryEndpoint } from "../../../backend/infrastructure/controllers/saveSearchHistoryEndpoint";
import { dependencies } from "../../../backend/infrastructure/dependencies";

export default async function handler(request: NextApiRequest, response: NextApiResponse) {
if (request.method !== "POST") {
return response.status(405).send("Method not allowed");
}

const { title, idUser, finessNumber } = request.body;
// eslint-disable-next-line no-console
console.log('from pages api', idUser);
const recherche = await saveSearchHistoryEndpoint(dependencies, title, idUser, finessNumber);

return response.status(200).json(recherche);
}
5 changes: 5 additions & 0 deletions src/pages/history.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { SearchHistoryPage } from "../frontend/ui/search-history/SearchHistoryPage";

export default function Favoris() {
return <SearchHistoryPage />;
}