Skip to content

Commit

Permalink
tech: refactor done, besoin de fix tests/tsc
Browse files Browse the repository at this point in the history
  • Loading branch information
Matteo-OCTO committed Feb 27, 2025
1 parent aa90a73 commit 34b40e3
Show file tree
Hide file tree
Showing 11 changed files with 104 additions and 71 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<template>
<div class="fr-grid-row fr-grid-row--gutters">
<section v-for="action in catalogueViewModel?.actions" :key="action.code" :class="cardClasses">
<section v-for="action in actions" :key="action.code" :class="cardClasses">
<div class="fr-card fr-enlarge-link fr-card--horizontal relative">
<div class="fr-card__body">
<div class="fr-card__content">
Expand All @@ -23,10 +23,10 @@
</template>

<script lang="ts" setup>
import { CatalogueActionsViewModel } from '@/domaines/actions/ports/catalogueActions.presenter';
import { ActionViewModel } from '@/domaines/actions/ports/actions.presenter';
defineProps<{
catalogueViewModel: CatalogueActionsViewModel;
actions: ActionViewModel[];
cardClasses: string;
}>();
</script>
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,13 @@

<script lang="ts" setup>
import { ref } from 'vue';
import { ActionDuCatalogueViewModel } from '@/domaines/actions/ports/catalogueActions.presenter';
import { ActionViewModel } from '@/domaines/actions/ports/actions.presenter';
import { ThematiquesRepositoryAxios } from '@/domaines/thematiques/adapters/thematiques.repository.axios';
import { SupprimerActionDesActionsRecommandeesUsecase } from '@/domaines/thematiques/supprimerActionDesActionsRecommandees.usecase';
import { utilisateurStore } from '@/store/utilisateur';
const props = defineProps<{
actions: ActionDuCatalogueViewModel[];
actions: ActionViewModel[];
cardClasses: string;
thematiqueId: string;
rafraichirActions: () => Promise<void>;
Expand Down
26 changes: 21 additions & 5 deletions src/components/pages/PageCatalogueActions.vue
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@
<div class="fr-col-md-8 fr-col-12" v-if="catalogueViewModel">
<h4 class="fr-h4">{{ catalogueViewModel.phraseNombreActions }}</h4>

<CatalogueActionsComposant :catalogue-view-model="catalogueViewModel" card-classes="fr-col-12 fr-col-md-6" />
<CatalogueActionsComposant
v-if="actionsViewModel"
:actions="actionsViewModel"
card-classes="fr-col-12 fr-col-md-6"
/>
</div>
</div>
</section>
Expand All @@ -26,19 +30,25 @@
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 { 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 presenter = new CatalogueActionsPresenterImpl(actions => {
catalogueViewModel.value = actions;
const catalogueActionsPresenter = new CatalogueActionsPresenterImpl(catalogue => {
catalogueViewModel.value = catalogue;
});
const actionsPresenter = new ActionsPresenterImpl(actions => {
actionsViewModel.value = actions;
});
const rechercheTitre = ref<string>('');
Expand All @@ -47,7 +57,7 @@
onMounted(async () => {
const usecase = new RecupererCatalogueActionsUsecase(new ActionsRepositoryAxios());
await usecase.execute(idUtilisateur, presenter);
await usecase.execute(idUtilisateur, catalogueActionsPresenter, actionsPresenter);
});
const updateThematiques = async thematiques => {
Expand All @@ -68,7 +78,13 @@
async function filtrerLaRecherche() {
isLoading.value = true;
const usecase = new FiltrerCatalogueActionsUsecase(new ActionsRepositoryAxios());
await usecase.execute(idUtilisateur, filtresThematiques.value, rechercheTitre.value, filtreDejaVu.value, presenter);
await usecase.execute(
idUtilisateur,
filtresThematiques.value,
rechercheTitre.value,
filtreDejaVu.value,
catalogueActionsPresenter,
);
isLoading.value = false;
}
</script>
10 changes: 5 additions & 5 deletions src/components/pages/PageThematiqueV2.vue
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@
/>
</template>

<template v-else-if="catalogueActionsViewModel">
<template v-else-if="actionsViewModel">
<CatalogueActionsRecommandees
:actions="catalogueActionsViewModel.actions"
:actions="actionsViewModel"
:thematiqueId="thematiqueId"
:rafraichir-actions="chargerActionsRecommandees"
card-classes="fr-col-12 fr-col-md-6 fr-col-xl-4"
Expand Down Expand Up @@ -61,7 +61,7 @@
import FilDAriane from '@/components/dsfr/FilDAriane.vue';
import { ActionsRepositoryAxios } from '@/domaines/actions/adapters/actions.repository.axios';
import { ActionsDansUneThematiquePresenterImpl } from '@/domaines/actions/adapters/actionsDansUneThematique.presenter.impl';
import { CatalogueActionsViewModel } from '@/domaines/actions/ports/catalogueActions.presenter';
import { ActionViewModel } from '@/domaines/actions/ports/actions.presenter';
import { RecupererActionsPersonnaliseesUsecase } from '@/domaines/actions/recupererActionsPersonnalisees.usecase';
import { ThematiquesRepositoryAxios } from '@/domaines/thematiques/adapters/thematiques.repository.axios';
import { ClefThematiqueAPI, MenuThematiques, Thematique } from '@/domaines/thematiques/MenuThematiques';
Expand All @@ -71,7 +71,7 @@
import { utilisateurStore } from '@/store/utilisateur';
const thematique = ref<Thematique>(MenuThematiques.getFromUrl(useRoute().params.id as string));
const catalogueActionsViewModel = ref<CatalogueActionsViewModel>();
const actionsViewModel = ref<ActionViewModel[]>();
const idEnchainementKycs = ref<string>();
const isLoading = ref<boolean>(true);
Expand Down Expand Up @@ -99,7 +99,7 @@
thematiqueId,
new ActionsDansUneThematiquePresenterImpl(
vm => {
catalogueActionsViewModel.value = vm;
actionsViewModel.value = vm;
idEnchainementKycs.value = undefined;
},
(id: string) => {
Expand Down
45 changes: 45 additions & 0 deletions src/domaines/actions/adapters/actions.presenter.impl.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import { ActionsPresenter, ActionViewModel } from '@/domaines/actions/ports/actions.presenter';
import { Action } from '@/domaines/actions/ports/actions.repository';
import { RouteActionsName } from '@/router/actions/routes';
import marked from '@/shell/actionMarkdownToHtml';
import { buildUrl } from '@/shell/buildUrl';
import { gererPluriel } from '@/shell/pluriel';

export class ActionsPresenterImpl implements ActionsPresenter {
constructor(private readonly viewModel: (viewModel: ActionViewModel[]) => void) {}

async presente(actions: Action[]): Promise<void> {
const vm: ActionViewModel[] = await Promise.all(
actions.map(async action => {
const nombreDePersonnes = gererPluriel(
action.nombreDePersonnes,
`<span class="text--bold">${action.nombreDePersonnes}</span> défi réalisé`,
`<span class="text--bold">${action.nombreDePersonnes}</span> défis réalisés`,
);

const aidesDisponibles =
action.nombreAidesDisponibles === 0
? undefined
: gererPluriel(
action.nombreAidesDisponibles,
`<span class="text--bold">${action.nombreAidesDisponibles}</span> aide disponible`,
`<span class="text--bold">${action.nombreAidesDisponibles}</span> aides disponibles`,
);

return {
code: action.code,
titre: await marked.parseInline(action.titre),
dejaVue: action.dejaVue,
url: {
name: RouteActionsName.ACTION_INDIVIDUELLE,
params: { id: action.code, titre: buildUrl(action.titre), type: action.type },
},
nombreDePersonnes,
aidesDisponibles,
};
}),
);

this.viewModel(vm);
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { CatalogueActionsPresenterImpl } from '@/domaines/actions/adapters/catalogueActions.presenter.impl';
import { ActionsPresenterImpl } from '@/domaines/actions/adapters/actions.presenter.impl';
import { ActionViewModel } from '@/domaines/actions/ports/actions.presenter';
import { Action } from '@/domaines/actions/ports/actions.repository';
import { ActionsDansUneThematiquePresenter } from '@/domaines/actions/ports/actionsDansUneThematiquePresenter';
import { CatalogueActionsViewModel } from '@/domaines/actions/ports/catalogueActions.presenter';

export class ActionsDansUneThematiquePresenterImpl
extends CatalogueActionsPresenterImpl
extends ActionsPresenterImpl
implements ActionsDansUneThematiquePresenter
{
constructor(
private readonly callBackActions: (viewModel: CatalogueActionsViewModel) => void,
private readonly callBackActions: (viewModel: ActionViewModel[]) => void,
private readonly callbackEnchainementKYCs: (idEnchainementKYCs: string) => void,
) {
super(callBackActions);
Expand Down
37 changes: 0 additions & 37 deletions src/domaines/actions/adapters/catalogueActions.presenter.impl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,50 +2,13 @@ import { CatalogueActions } from '@/domaines/actions/ports/actions.repository';
import {
CatalogueActionsPresenter,
CatalogueActionsViewModel,
ActionDuCatalogueViewModel,
} from '@/domaines/actions/ports/catalogueActions.presenter';
import { RouteActionsName } from '@/router/actions/routes';
import marked from '@/shell/actionMarkdownToHtml';
import { buildUrl } from '@/shell/buildUrl';
import { gererPluriel } from '@/shell/pluriel';

export class CatalogueActionsPresenterImpl implements CatalogueActionsPresenter {
constructor(private readonly viewModel: (viewModel: CatalogueActionsViewModel) => void) {}

async presente(catalogueActions: CatalogueActions): Promise<void> {
const catalogueActionViewModel: ActionDuCatalogueViewModel[] = await Promise.all(
catalogueActions.actions.map(async action => {
const nombreDePersonnes = gererPluriel(
action.nombreDePersonnes,
`<span class="text--bold">${action.nombreDePersonnes}</span> défi réalisé`,
`<span class="text--bold">${action.nombreDePersonnes}</span> défis réalisés`,
);

const aidesDisponibles =
action.nombreAidesDisponibles === 0
? undefined
: gererPluriel(
action.nombreAidesDisponibles,
`<span class="text--bold">${action.nombreAidesDisponibles}</span> aide disponible`,
`<span class="text--bold">${action.nombreAidesDisponibles}</span> aides disponibles`,
);

return {
code: action.code,
titre: await marked.parseInline(action.titre),
dejaVue: action.dejaVue,
url: {
name: RouteActionsName.ACTION_INDIVIDUELLE,
params: { id: action.code, titre: buildUrl(action.titre), type: action.type },
},
nombreDePersonnes,
aidesDisponibles,
};
}),
);

this.viewModel({
actions: catalogueActionViewModel,
phraseNombreActions: `${catalogueActions.actions.length} action${catalogueActions.actions.length > 1 ? 's' : ''}`,
filtres: catalogueActions.filtres.map(filtre => ({
id: filtre.code,
Expand Down
14 changes: 14 additions & 0 deletions src/domaines/actions/ports/actions.presenter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { Action } from '@/domaines/actions/ports/actions.repository';

export interface ActionViewModel {
code: string;
titre: string;
nombreDePersonnes?: string;
dejaVue: boolean;
aidesDisponibles?: string;
url: { name: string; params: { id: string; titre: string; type: string } };
}

export interface ActionsPresenter {
presente(actions: Action[]): void;
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import { ActionViewModel } from '@/domaines/actions/ports/actions.presenter';
import { Action } from '@/domaines/actions/ports/actions.repository';

import { ActionDuCatalogueViewModel } from '@/domaines/actions/ports/catalogueActions.presenter';

export interface ActionDansUneThematiqueViewModel {
doitRepondreAuxKYCs: boolean;
idEnchainementKYCs: string;
actions: ActionDuCatalogueViewModel[];
actions: ActionViewModel[];
}

export interface ActionsDansUneThematiquePresenter {
Expand Down
10 changes: 0 additions & 10 deletions src/domaines/actions/ports/catalogueActions.presenter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,6 @@ import { CatalogueActions } from '@/domaines/actions/ports/actions.repository';
export interface CatalogueActionsViewModel {
phraseNombreActions: string;
filtres: { id: string; label: string; checked: boolean }[];
actions: ActionDuCatalogueViewModel[];
}

export interface ActionDuCatalogueViewModel {
code: string;
titre: string;
nombreDePersonnes?: string;
dejaVue: boolean;
aidesDisponibles?: string;
url: { name: string; params: { id: string; titre: string; type: string } };
}

export interface CatalogueActionsPresenter {
Expand Down
10 changes: 8 additions & 2 deletions src/domaines/actions/recupererCatalogueActions.usecase.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
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, presenter: CatalogueActionsPresenter): Promise<void> {
async execute(
idUtilisateur: string,
catalogueActionsPresenter: CatalogueActionsPresenter,
actionsPresenter: ActionsPresenter,
): Promise<void> {
const catalogueActions = await this.actionsRepository.chargerCatalogueActions(idUtilisateur);
presenter.presente(catalogueActions);
catalogueActionsPresenter.presente(catalogueActions);
actionsPresenter.presente(catalogueActions.actions);
}
}

0 comments on commit 34b40e3

Please sign in to comment.