Skip to content

Commit

Permalink
utilisation du presenter existant
Browse files Browse the repository at this point in the history
  • Loading branch information
dlamande committed Mar 3, 2025
1 parent b0863fe commit 1b7b02f
Show file tree
Hide file tree
Showing 7 changed files with 43 additions and 49 deletions.
30 changes: 15 additions & 15 deletions src/components/pages/PageCatalogueActions.vue
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,16 @@
<div class="fr-grid-row fr-grid-row--gutters">
<div class="fr-col-md-4 fr-col-12">
<CatalogueActionsFiltres
v-if="catalogueViewModel"
:filtres="catalogueViewModel.filtres"
v-if="filtresViewModel"
:filtres="filtresViewModel.filtres"
@rechercher-par-deja-vu="rechercherParDejaVu"
@rechercher-par-titre="rechercherParTitre"
@update-thematiques="updateThematiques"
/>
</div>

<div class="fr-col-md-8 fr-col-12" v-if="catalogueViewModel">
<h4 class="fr-h4">{{ catalogueViewModel.phraseNombreActions }}</h4>
<div v-if="filtresViewModel" class="fr-col-md-8 fr-col-12">
<h4 class="fr-h4">{{ filtresViewModel.phraseNombreActions }}</h4>

<CatalogueActionsComposant
v-if="actionsViewModel"
Expand All @@ -30,34 +30,35 @@
import { onMounted, ref } from 'vue';
import CatalogueActionsComposant from '@/components/custom/Action/Catalogue/CatalogueActionsComposant.vue';
import CatalogueActionsFiltres from '@/components/custom/Action/Catalogue/CatalogueActionsFiltres.vue';
import { ActionsPresenterImpl } from '@/domaines/actions/adapters/actions.presenter.impl';
import { ActionsRepositoryAxios } from '@/domaines/actions/adapters/actions.repository.axios';
import { CatalogueActionsPresenterImpl } from '@/domaines/actions/adapters/catalogueActions.presenter.impl';
import { FiltrerCatalogueActionsUsecase } from '@/domaines/actions/filtrerCatalogueActions.usecase';
import { ActionViewModel } from '@/domaines/actions/ports/actions.presenter';
import { CatalogueActionsViewModel } from '@/domaines/actions/ports/catalogueActions.presenter';
import { FiltresCatalogueActionsViewModel } from '@/domaines/actions/ports/catalogueActions.presenter';
import { RecupererCatalogueActionsUsecase } from '@/domaines/actions/recupererCatalogueActions.usecase';
import { utilisateurStore } from '@/store/utilisateur';
const isLoading = ref<boolean>(false);
const idUtilisateur = utilisateurStore().utilisateur.id;
const actionsViewModel = ref<ActionViewModel[]>();
const catalogueViewModel = ref<CatalogueActionsViewModel>();
const catalogueActionsPresenter = new CatalogueActionsPresenterImpl(catalogue => {
catalogueViewModel.value = catalogue;
});
const actionsPresenter = new ActionsPresenterImpl(actions => {
actionsViewModel.value = actions;
});
const filtresViewModel = ref<FiltresCatalogueActionsViewModel>();
const catalogueActionsPresenter = new CatalogueActionsPresenterImpl(
filtres => {
filtresViewModel.value = filtres;
},
actions => {
actionsViewModel.value = actions;
},
);
const rechercheTitre = ref<string>('');
const filtresThematiques = ref<string[]>([]);
const filtreDejaVu = ref<boolean>(false);
onMounted(async () => {
const usecase = new RecupererCatalogueActionsUsecase(new ActionsRepositoryAxios());
await usecase.execute(idUtilisateur, catalogueActionsPresenter, actionsPresenter);
await usecase.execute(idUtilisateur, catalogueActionsPresenter);
});
const updateThematiques = async thematiques => {
Expand All @@ -84,7 +85,6 @@
rechercheTitre.value,
filtreDejaVu.value,
catalogueActionsPresenter,
actionsPresenter,
);
isLoading.value = false;
}
Expand Down
18 changes: 13 additions & 5 deletions src/domaines/actions/adapters/catalogueActions.presenter.impl.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,22 @@
import { ActionsPresenterImpl } from '@/domaines/actions/adapters/actions.presenter.impl';
import { ActionViewModel } from '@/domaines/actions/ports/actions.presenter';
import { CatalogueActions } from '@/domaines/actions/ports/actions.repository';
import {
CatalogueActionsPresenter,
CatalogueActionsViewModel,
FiltresCatalogueActionsViewModel,
} from '@/domaines/actions/ports/catalogueActions.presenter';

export class CatalogueActionsPresenterImpl implements CatalogueActionsPresenter {
constructor(private readonly viewModel: (viewModel: CatalogueActionsViewModel) => void) {}
export class CatalogueActionsPresenterImpl extends ActionsPresenterImpl implements CatalogueActionsPresenter {
constructor(
private readonly filtresCallBack: (viewModel: FiltresCatalogueActionsViewModel) => void,
private readonly actionsCallBack: (viewModel: ActionViewModel[]) => void,
) {
super(actionsCallBack);
}

async presente(catalogueActions: CatalogueActions): Promise<void> {
this.viewModel({
async presenteCatalogue(catalogueActions: CatalogueActions): Promise<void> {
await super.presente(catalogueActions.actions);
this.filtresCallBack({
phraseNombreActions: `${catalogueActions.actions.length} action${catalogueActions.actions.length > 1 ? 's' : ''}`,
filtres: catalogueActions.filtres.map(filtre => ({
id: filtre.code,
Expand Down
5 changes: 1 addition & 4 deletions src/domaines/actions/filtrerCatalogueActions.usecase.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { ActionsPresenter } from '@/domaines/actions/ports/actions.presenter';
import { ActionsRepository } from '@/domaines/actions/ports/actions.repository';
import { CatalogueActionsPresenter } from '@/domaines/actions/ports/catalogueActions.presenter';

Expand All @@ -11,15 +10,13 @@ export class FiltrerCatalogueActionsUsecase {
titre: string,
filtreDejaVu: boolean,
catalogueActionsPresenter: CatalogueActionsPresenter,
actionsPresenter: ActionsPresenter,
): Promise<void> {
const catalogue = await this.actionsRepository.filtrerCatalogueActions(
idUtilisateur,
filtresThematiques,
titre,
filtreDejaVu,
);
catalogueActionsPresenter.presente(catalogue);
actionsPresenter.presente(catalogue.actions);
catalogueActionsPresenter.presenteCatalogue(catalogue);
}
}
4 changes: 2 additions & 2 deletions src/domaines/actions/ports/catalogueActions.presenter.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { CatalogueActions } from '@/domaines/actions/ports/actions.repository';

export interface CatalogueActionsViewModel {
export interface FiltresCatalogueActionsViewModel {
phraseNombreActions: string;
filtres: { id: string; label: string; checked: boolean }[];
}

export interface CatalogueActionsPresenter {
presente(catalogueActions: CatalogueActions): void;
presenteCatalogue(catalogueActions: CatalogueActions): Promise<void>;
}
10 changes: 2 additions & 8 deletions src/domaines/actions/recupererCatalogueActions.usecase.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,11 @@
import { ActionsPresenter } from '@/domaines/actions/ports/actions.presenter';
import { ActionsRepository } from '@/domaines/actions/ports/actions.repository';
import { CatalogueActionsPresenter } from '@/domaines/actions/ports/catalogueActions.presenter';

export class RecupererCatalogueActionsUsecase {
constructor(private readonly actionsRepository: ActionsRepository) {}

async execute(
idUtilisateur: string,
catalogueActionsPresenter: CatalogueActionsPresenter,
actionsPresenter: ActionsPresenter,
): Promise<void> {
async execute(idUtilisateur: string, catalogueActionsPresenter: CatalogueActionsPresenter): Promise<void> {
const catalogueActions = await this.actionsRepository.chargerCatalogueActions(idUtilisateur);
catalogueActionsPresenter.presente(catalogueActions);
actionsPresenter.presente(catalogueActions.actions);
catalogueActionsPresenter.presenteCatalogue(catalogueActions);
}
}
11 changes: 5 additions & 6 deletions tests/actions/filtrerCatalogueActions.usecase.spec.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import { ActionsRepositoryMock } from './adapters/actions.repository.mock';
import { CatalogueActionsPresenterImpl } from '@/domaines/actions/adapters/catalogueActions.presenter.impl';
import { CatalogueActionsViewModel } from '@/domaines/actions/ports/catalogueActions.presenter';
import { FiltresCatalogueActionsViewModel } from '@/domaines/actions/ports/catalogueActions.presenter';
import { Action, CatalogueActions, TypeAction } from '@/domaines/actions/ports/actions.repository';
import { ActionViewModel } from '@/domaines/actions/ports/actions.presenter';
import { ActionsPresenterImpl } from '@/domaines/actions/adapters/actions.presenter.impl';
import { ClefThematiqueAPI } from '@/domaines/thematiques/MenuThematiques';
import { FiltrerCatalogueActionsUsecase } from '@/domaines/actions/filtrerCatalogueActions.usecase';

Expand Down Expand Up @@ -47,8 +46,7 @@ describe("Fichier de tests concernant la récupération du catalogue d'actions",
[ClefThematiqueAPI.alimentation],
'2',
true,
new CatalogueActionsPresenterImpl(expectedCatalogue),
new ActionsPresenterImpl(expectedActions),
new CatalogueActionsPresenterImpl(expectedFiltres, expectedActions),
);

// THEN
Expand All @@ -71,8 +69,9 @@ describe("Fichier de tests concernant la récupération du catalogue d'actions",
},
]);
}
function expectedCatalogue(viewModel: CatalogueActionsViewModel): void {
expect(viewModel).toStrictEqual<CatalogueActionsViewModel>({

function expectedFiltres(viewModel: FiltresCatalogueActionsViewModel): void {
expect(viewModel).toStrictEqual<FiltresCatalogueActionsViewModel>({
filtres: [
{
id: ClefThematiqueAPI.transports,
Expand Down
14 changes: 5 additions & 9 deletions tests/actions/recupererCatalogueActions.usecase.spec.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { ActionsRepositoryMock } from './adapters/actions.repository.mock';
import { RecupererCatalogueActionsUsecase } from '@/domaines/actions/recupererCatalogueActions.usecase';
import { CatalogueActionsPresenterImpl } from '@/domaines/actions/adapters/catalogueActions.presenter.impl';
import { CatalogueActionsViewModel } from '@/domaines/actions/ports/catalogueActions.presenter';
import { FiltresCatalogueActionsViewModel } from '@/domaines/actions/ports/catalogueActions.presenter';
import { Action, CatalogueActions, TypeAction } from '@/domaines/actions/ports/actions.repository';
import { ActionViewModel } from '@/domaines/actions/ports/actions.presenter';
import { ActionsPresenterImpl } from '@/domaines/actions/adapters/actions.presenter.impl';
import { ClefThematiqueAPI } from '@/domaines/thematiques/MenuThematiques';

describe("Fichier de tests concernant la récupération du catalogue d'actions", () => {
Expand Down Expand Up @@ -52,11 +51,7 @@ describe("Fichier de tests concernant la récupération du catalogue d'actions",

// WHEN
const usecase = new RecupererCatalogueActionsUsecase(ActionsRepositoryMock.avecCatalogue(catalogue));
await usecase.execute(
'id-utilisateur',
new CatalogueActionsPresenterImpl(expectedCatalogue),
new ActionsPresenterImpl(expectedActions),
);
await usecase.execute('id-utilisateur', new CatalogueActionsPresenterImpl(expectedFiltres, expectedActions));

// THEN
function expectedActions(viewModel: ActionViewModel[]): void {
Expand Down Expand Up @@ -93,8 +88,9 @@ describe("Fichier de tests concernant la récupération du catalogue d'actions",
},
]);
}
function expectedCatalogue(viewModel: CatalogueActionsViewModel): void {
expect(viewModel).toStrictEqual<CatalogueActionsViewModel>({

function expectedFiltres(viewModel: FiltresCatalogueActionsViewModel): void {
expect(viewModel).toStrictEqual<FiltresCatalogueActionsViewModel>({
filtres: [
{
id: ClefThematiqueAPI.transports,
Expand Down

0 comments on commit 1b7b02f

Please sign in to comment.