Skip to content

Commit

Permalink
🐛 Fix release (status, event emiiter, ...)
Browse files Browse the repository at this point in the history
  • Loading branch information
spontoreau committed Oct 9, 2023
1 parent e9953e5 commit d9d7240
Show file tree
Hide file tree
Showing 17 changed files with 105 additions and 79 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,12 @@ export const registerAbandonProjector = ({
statut: 'rejeté',
});
break;
case 'ConfirmationAbandonDemandé-V1':
case 'ConfirmationAbandonDemandée-V1':
await upsert<AbandonReadModel>(`abandon|${payload.identifiantProjet}`, {
...abandonToUpsert,
confirmationDemandéLe: payload.confirmationDemandéLe,
confirmationDemandéRéponseSignéeFormat: payload.réponseSignée.format,
statut: 'confirmation-demandé',
confirmationDemandéeLe: payload.confirmationDemandéeLe,
confirmationDemandéeRéponseSignéeFormat: payload.réponseSignée.format,
statut: 'confirmation-demandée',
});
break;
case 'AbandonConfirmé-V1':
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ export type AbandonReadModel = ReadModel<
rejetRéponseSignéeFormat?: string;
rejetRejetéLe?: string;

confirmationDemandéLe?: string;
confirmationDemandéRéponseSignéeFormat?: string;
confirmationDemandéeLe?: string;
confirmationDemandéeRéponseSignéeFormat?: string;
confirmationConfirméLe?: string;
}
>;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,14 @@ export const registerConsulterRéponseAbandonSignéeQuery = ({
? abandon.accordAccordéLe
: type === 'abandon-rejeté'
? abandon.rejetRejetéLe
: abandon.confirmationDemandéLe;
: abandon.confirmationDemandéeLe;

const format =
type === 'abandon-accordé'
? abandon.accordRéponseSignéeFormat
: type === 'abandon-rejeté'
? abandon.rejetRéponseSignéeFormat
: abandon.confirmationDemandéRéponseSignéeFormat;
: abandon.confirmationDemandéeRéponseSignéeFormat;

if (!date || !format) {
return none;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ export const setupLauréatViews = async (dependencies: LauréatDependencies) =>
'AbandonAnnulé-V1',
'AbandonConfirmé-V1',
'AbandonRejeté-V1',
'ConfirmationAbandonDemandé-V1',
'ConfirmationAbandonDemandée-V1',
'RebuildTriggered',
],
eventHandler: async (event: AbandonEvent | RebuildTriggered) => {
Expand Down
39 changes: 30 additions & 9 deletions packages/domain/src/projet/lauréat/abandon/abandon.aggregate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {
AbandonEvent,
AbandonAccordéEvent,
AbandonRejetéEvent,
ConfirmationAbandonDemandéEvent,
ConfirmationAbandonDemandéeEvent,
AbandonConfirméEvent,
} from './abandon.event';
import { StatutAbandon } from './abandon.valueType';
Expand All @@ -23,6 +23,11 @@ type LoadAggregateFactoryDependencies = { loadAggregate: LoadAggregate };

export type Abandon = {
getStatut: () => StatutAbandon;
estAccordé: () => boolean;
estRejeté: () => boolean;
estEnAttenteConfirmation: () => boolean;
estConfirmé: () => boolean;
estEnCours: () => boolean;
demande: {
raison: string;
piéceJustificative?: {
Expand Down Expand Up @@ -54,7 +59,23 @@ export type Abandon = {
};

const getDefaultAggregate = (): Abandon => ({
getStatut: function () {
estAccordé() {
return this.getStatut() === 'accordé';
},
estEnCours() {
const statusEnCours: Array<StatutAbandon> = ['confirmation-demandée', 'confirmé', 'demandé'];
return statusEnCours.includes(this.getStatut());
},
estRejeté() {
return this.getStatut() === 'rejeté';
},
estEnAttenteConfirmation() {
return this.getStatut() === 'confirmation-demandée';
},
estConfirmé() {
return this.getStatut() === 'confirmé';
},
getStatut() {
if (this.annuléLe) {
return 'annulé';
}
Expand All @@ -67,7 +88,7 @@ const getDefaultAggregate = (): Abandon => ({
}

if (this.demande.confirmation && !this.demande.confirmation.confirméLe) {
return 'confirmation-demandé';
return 'confirmation-demandée';
}

if (this.demande.confirmation && this.demande.confirmation.confirméLe) {
Expand Down Expand Up @@ -97,8 +118,8 @@ const abandonAggregateFactory: AggregateFactory<Abandon, AbandonEvent> = (events
return updateAvecRejet(aggregate, payload);
case 'AbandonAccordé-V1':
return updateAvecAcceptation(aggregate, payload);
case 'ConfirmationAbandonDemandé-V1':
return updateAvecConfirmationAbandonDemandé(aggregate, payload);
case 'ConfirmationAbandonDemandée-V1':
return updateAvecConfirmationAbandonDemandée(aggregate, payload);
case 'AbandonConfirmé-V1':
return updateAvecAbandonConfirmé(aggregate, payload);
case 'AbandonAnnulé-V1':
Expand Down Expand Up @@ -169,17 +190,17 @@ const updateAvecAcceptation = (aggregate: Abandon, payload: AbandonAccordéEvent
return newAggregate;
};

const updateAvecConfirmationAbandonDemandé = (
const updateAvecConfirmationAbandonDemandée = (
aggregate: Abandon,
payload: ConfirmationAbandonDemandéEvent['payload'],
payload: ConfirmationAbandonDemandéeEvent['payload'],
) => {
const { confirmationDemandéLe, réponseSignée } = payload;
const { confirmationDemandéeLe, réponseSignée } = payload;
let newAggregate: Abandon = {
...aggregate,
};

newAggregate.demande.confirmation = {
demandéLe: convertirEnDateTime(confirmationDemandéLe),
demandéLe: convertirEnDateTime(confirmationDemandéeLe),
réponseSignée,
};

Expand Down
6 changes: 6 additions & 0 deletions packages/domain/src/projet/lauréat/abandon/abandon.error.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,9 @@ export class AucuneDemandeConfirmationAbandonError extends InvalidOperationError
super(`Aucune demande de confirmation d'abandon en attente`);
}
}

export class DemandeEnAttenteConfirmationError extends InvalidOperationError {
constructor() {
super(`L'abandon est en attente de confirmation`);
}
}
10 changes: 5 additions & 5 deletions packages/domain/src/projet/lauréat/abandon/abandon.event.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,11 @@ export type AbandonAccordéEvent = DomainEvent<
}
>;

export type ConfirmationAbandonDemandéEvent = DomainEvent<
'ConfirmationAbandonDemandé-V1',
export type ConfirmationAbandonDemandéeEvent = DomainEvent<
'ConfirmationAbandonDemandée-V1',
{
confirmationDemandéLe: string;
confirmationDemandéPar: RawIdentifiantUtilisateur;
confirmationDemandéeLe: string;
confirmationDemandéePar: RawIdentifiantUtilisateur;
identifiantProjet: RawIdentifiantProjet;
réponseSignée: {
format: string;
Expand All @@ -75,5 +75,5 @@ export type AbandonEvent =
| AbandonAnnuléEvent
| AbandonRejetéEvent
| AbandonAccordéEvent
| ConfirmationAbandonDemandéEvent
| ConfirmationAbandonDemandéeEvent
| AbandonConfirméEvent;
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ export type RéponseSignée =
export type StatutAbandon =
| 'demandé'
| 'rejeté'
| 'confirmation-demandé'
| 'confirmation-demandée'
| 'confirmé'
| 'accordé'
| 'annulé';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
AbandonDéjàAccordéError,
AbandonDéjàRejetéError,
DemandeAbandonInconnuErreur,
DemandeEnAttenteConfirmationError,
} from '../abandon.error';
import { IdentifiantUtilisateurValueType } from '../../../../domain.valueType';

Expand Down Expand Up @@ -48,14 +49,18 @@ export const registerAccorderAbandonCommand = ({
throw new DemandeAbandonInconnuErreur();
}

if (abandon.getStatut() === 'accordé') {
if (abandon.estAccordé()) {
throw new AbandonDéjàAccordéError();
}

if (abandon.getStatut() === 'rejeté') {
if (abandon.estRejeté()) {
throw new AbandonDéjàRejetéError();
}

if (abandon.estEnAttenteConfirmation()) {
throw new DemandeEnAttenteConfirmationError();
}

await enregistrerRéponseSignée({
identifiantProjet,
réponseSignée,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ export const registerAnnulerAbandonCommand = ({
throw new DemandeAbandonInconnuErreur();
}

if (abandon.getStatut() === 'accordé') {
if (abandon.estAccordé()) {
throw new AbandonDéjàAccordéError();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ export const registerConfirmerAbandonCommand = ({
throw new DemandeAbandonInconnuErreur();
}

if (abandon.getStatut() !== 'confirmation-demandé') {
if (!abandon.estEnAttenteConfirmation()) {
throw new AucuneDemandeConfirmationAbandonError();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { isSome } from '@potentiel/monads';
import { AbandonDemandéEvent } from '../abandon.event';
import { EnregistrerPiéceJustificativeAbandonPort } from '../abandon.port';
import { DateTimeValueType } from '../../../../common.valueType';
import { DemandeAbandonEnCoursErreur } from '../abandon.error';
import { AbandonDéjàAccordéError, DemandeAbandonEnCoursErreur } from '../abandon.error';
import { IdentifiantUtilisateurValueType } from '../../../../utilisateur/utilisateur.valueType';

export type DemanderAbandonCommand = Message<
Expand Down Expand Up @@ -44,8 +44,14 @@ export const registerDemanderAbandonCommand = ({
}) => {
const abandon = await loadAbandonAggregate(identifiantProjet);

if (isSome(abandon) && abandon.getStatut() !== 'annulé') {
throw new DemandeAbandonEnCoursErreur();
if (isSome(abandon)) {
if (abandon.estAccordé()) {
throw new AbandonDéjàAccordéError();
}

if (abandon.estEnCours()) {
throw new DemandeAbandonEnCoursErreur();
}
}

if (piéceJustificative) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { IdentifiantProjetValueType } from '../../../projet.valueType';
import { createAbandonAggregateId, loadAbandonAggregateFactory } from '../abandon.aggregate';
import { LoadAggregate, Publish } from '@potentiel/core-domain';
import { isNone } from '@potentiel/monads';
import { ConfirmationAbandonDemandéEvent } from '../abandon.event';
import { ConfirmationAbandonDemandéeEvent } from '../abandon.event';
import { DateTimeValueType } from '../../../../common.valueType';
import {
AbandonDéjàAccordéError,
Expand Down Expand Up @@ -50,19 +50,20 @@ export const registerDemanderConfirmationAbandonCommand = ({
throw new DemandeAbandonInconnuErreur();
}

const status = abandon.getStatut();
if (abandon.estAccordé()) {
throw new AbandonDéjàAccordéError();
}

if (abandon.estRejeté()) {
throw new AbandonDéjàRejetéError();
}

if (abandon.estEnAttenteConfirmation()) {
throw new ConfirmationAbandonDéjàDemandéError();
}

if (status !== 'demandé') {
switch (status) {
case 'accordé':
throw new AbandonDéjàAccordéError();
case 'rejeté':
throw new AbandonDéjàRejetéError();
case 'confirmé':
throw new AbandonDéjàConfirméError();
case 'confirmation-demandé':
throw new ConfirmationAbandonDéjàDemandéError();
}
if (abandon.estConfirmé()) {
throw new AbandonDéjàConfirméError();
}

await enregistrerRéponseSignée({
Expand All @@ -71,15 +72,15 @@ export const registerDemanderConfirmationAbandonCommand = ({
dateDocumentRéponseSignée: dateDemandeConfirmationAbandon,
});

const event: ConfirmationAbandonDemandéEvent = {
type: 'ConfirmationAbandonDemandé-V1',
const event: ConfirmationAbandonDemandéeEvent = {
type: 'ConfirmationAbandonDemandée-V1',
payload: {
identifiantProjet: identifiantProjet.formatter(),
réponseSignée: {
format: réponseSignée.format,
},
confirmationDemandéLe: dateDemandeConfirmationAbandon.formatter(),
confirmationDemandéPar: confirmationDemandéePar.formatter(),
confirmationDemandéeLe: dateDemandeConfirmationAbandon.formatter(),
confirmationDemandéePar: confirmationDemandéePar.formatter(),
},
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
AbandonDéjàAccordéError,
AbandonDéjàRejetéError,
DemandeAbandonInconnuErreur,
DemandeEnAttenteConfirmationError,
} from '../abandon.error';
import { IdentifiantUtilisateurValueType } from '../../../../utilisateur/utilisateur.valueType';

Expand Down Expand Up @@ -48,14 +49,18 @@ export const registerRejeterAbandonCommand = ({
throw new DemandeAbandonInconnuErreur();
}

if (abandon.getStatut() === 'accordé') {
if (abandon.estAccordé()) {
throw new AbandonDéjàAccordéError();
}

if (abandon.getStatut() === 'rejeté') {
if (abandon.estRejeté()) {
throw new AbandonDéjàRejetéError();
}

if (abandon.estEnAttenteConfirmation()) {
throw new DemandeEnAttenteConfirmationError();
}

await enregistrerRéponseSignée({
identifiantProjet,
réponseSignée,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,11 @@ export class EventStreamEmitter extends EventEmitter {
return;
}

this.emit(this.#getChannelName(event.type), event);
if (
notification.channel === `${this.#subscriber.streamCategory}|${this.#subscriber.name}`
) {
this.emit(this.#getChannelName(event.type), event);
}
} catch (error) {
getLogger().error(new NotificationPayloadParseError(), {
error,
Expand Down
3 changes: 2 additions & 1 deletion packages/libraries/pg-projections/src/listProjection.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,9 @@ export const listProjection = async <TReadModel extends ReadModel>({

const totalResult = pagination
? await executeSelect<{ totalItems: string }>(
'select count(key) as "totalItems" from domain_views.projection where key like $1',
`select count(key) as "totalItems" from domain_views.projection where key like $1 ${whereClause}`,
`${type}|%`,
...(where ? Object.values(where) : []),
)
: [{ totalItems: result.length.toString() }];

Expand Down
Loading

0 comments on commit d9d7240

Please sign in to comment.