Skip to content

Commit

Permalink
feat: ajoute configuration session pour app
Browse files Browse the repository at this point in the history
  • Loading branch information
arthurlbrjc committed Feb 5, 2025
1 parent 4161eae commit b31dc9f
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 95 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,35 +46,39 @@ export class GetSessionsJeuneMiloQueryGetter {
return success([])
}

let resultSessionMiloClient: Result<SessionParDossierJeuneDto[]>
const sessionGetter = options?.pourConseiller
? this.getSessionsJeunePourConseiller.bind(this)
: this.getSessionsJeune.bind(this)
const resultSessionMiloClient = await sessionGetter(
accessToken,
idPartenaire,
options?.periode
)

if (options?.pourConseiller) {
resultSessionMiloClient = await this.getSessionsJeunePourConseiller(
accessToken,
idPartenaire,
options?.periode
)
} else {
resultSessionMiloClient = await this.getSessionsJeune(
accessToken,
idPartenaire,
options?.periode
)
}
if (isFailure(resultSessionMiloClient)) {
this.logger.log(
`Sessions venant de l'API en erreur : ${resultSessionMiloClient.error}`
)
return resultSessionMiloClient
}

const sessionsDuJeuneVenantDeLAPI = resultSessionMiloClient.data
this.logger.log(
`${resultSessionMiloClient.data.length} Sessions venant de l'API`
`${sessionsDuJeuneVenantDeLAPI.length} Sessions venant de l'API`
)

const configurationsSessions = await SessionMiloSqlModel.findAll({
where: {
id: sessionsDuJeuneVenantDeLAPI.map(({ session }) =>
session.id.toString()
)
}
})

const sessionsDuJeune: SessionParDossierJeuneDto[] =
await recupererSessionsDuJeuneSelonFiltre(
resultSessionMiloClient.data,
sessionsDuJeuneVenantDeLAPI,
configurationsSessions,
options?.filtrerEstInscrit
)

Expand All @@ -84,7 +88,10 @@ export class GetSessionsJeuneMiloQueryGetter {
mapSessionJeuneDtoToQueryModel(
sessionDuJeune,
idPartenaire,
timezoneDeLaStructureDuJeune
timezoneDeLaStructureDuJeune,
configurationsSessions.find(
({ id }) => id === sessionDuJeune.session.id.toString()
)
)
)
.sort(compareSessionsByDebut)
Expand Down Expand Up @@ -127,12 +134,16 @@ export class GetSessionsJeuneMiloQueryGetter {

async function recupererSessionsDuJeuneSelonFiltre(
sessionsDuJeuneVenantDeLAPI: SessionParDossierJeuneDto[],
configurationsSessions: SessionMiloSqlModel[],
filtreInscription?: boolean
): Promise<SessionParDossierJeuneDto[]> {
switch (filtreInscription) {
case false: {
return (
await recupererSessionsVisiblesPourLeJeune(sessionsDuJeuneVenantDeLAPI)
await recupererSessionsVisiblesPourLeJeune(
sessionsDuJeuneVenantDeLAPI,
configurationsSessions
)
).filter(sessionVisible => sessionVisible.sessionInstance === undefined)
}
case true: {
Expand All @@ -146,7 +157,10 @@ async function recupererSessionsDuJeuneSelonFiltre(
sessionsDuJeuneVenantDeLAPI
)
const sessionsVisiblesPourLeJeune =
await recupererSessionsVisiblesPourLeJeune(sessionsDuJeuneVenantDeLAPI)
await recupererSessionsVisiblesPourLeJeune(
sessionsDuJeuneVenantDeLAPI,
configurationsSessions
)
const sessionsVisiblesAuJeuneSansDoublons =
recupererSessionsVisiblesPourLeJeuneSansDoublons(
sessionsVisiblesPourLeJeune,
Expand All @@ -170,16 +184,12 @@ function recupererSessionsAuxquellesLeJeuneEstInscrit(
}

async function recupererSessionsVisiblesPourLeJeune(
sessions: SessionParDossierJeuneDto[]
sessions: SessionParDossierJeuneDto[],
configurationsSessions: SessionMiloSqlModel[]
): Promise<SessionParDossierJeuneDto[]> {
const idsSessionsVisibles = (
await SessionMiloSqlModel.findAll({
where: {
id: sessions.map(session => session.session.id.toString()),
estVisible: true
}
})
).map(sessionVisibleSql => sessionVisibleSql.id)
const idsSessionsVisibles = configurationsSessions
.filter(({ estVisible }) => estVisible)
.map(({ id }) => id)

return sessions.filter(session =>
idsSessionsVisibles.includes(session.session.id.toString())
Expand Down
94 changes: 44 additions & 50 deletions src/application/queries/query-mappers/milo.mappers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,28 +39,34 @@ function buildSessionTypeQueryModel(
export function mapSessionJeuneDtoToQueryModel(
sessionDto: SessionParDossierJeuneDto,
idDossier: string,
timezone: string
timezone: string,
sqlModel?: SessionMiloSqlModel
): SessionJeuneMiloQueryModel {
const queryModel: SessionJeuneMiloQueryModel = {
id: sessionDto.session.id.toString(),
nomSession: sessionDto.session.nom,
nomOffre: sessionDto.offre.nom,
dateHeureDebut: DateTime.fromFormat(
dateHeureDebut: dateFromMilo(
sessionDto.session.dateHeureDebut,
MILO_DATE_FORMAT,
{ zone: timezone }
)
.toUTC()
.toISO(),
dateHeureFin: DateTime.fromFormat(
timezone
).toISO(),
dateHeureFin: dateFromMilo(
sessionDto.session.dateHeureFin,
MILO_DATE_FORMAT,
{ zone: timezone }
)
.toUTC()
.toISO(),
type: buildSessionTypeQueryModel(sessionDto.offre.type)
timezone
).toISO(),
type: buildSessionTypeQueryModel(sessionDto.offre.type),
dateMaxInscription: sessionDto.session.dateMaxInscription
? DateTime.fromISO(sessionDto.session.dateMaxInscription, {
zone: timezone
})
.endOf('day')
.toUTC()
.toISO()
: undefined,
nbPlacesRestantes: sessionDto.session.nbPlacesDisponibles ?? undefined,
autoinscription: false
}

if (sessionDto.sessionInstance) {
queryModel.inscription = dtoToStatutInscription(
sessionDto.sessionInstance.statut,
Expand All @@ -69,6 +75,10 @@ export function mapSessionJeuneDtoToQueryModel(
)
}

if (sqlModel) {
queryModel.autoinscription = sqlModel.autoinscription
}

return queryModel
}

Expand All @@ -78,11 +88,7 @@ export function mapSessionConseillerDtoToQueryModel(
maintenant: DateTime,
parametrageSqlModel?: SessionMiloSqlModel
): SessionConseillerMiloQueryModel {
const dateHeureFin = DateTime.fromFormat(
session.dateHeureFin,
MILO_DATE_FORMAT,
{ zone: timezone }
).toUTC()
const dateHeureFin = dateFromMilo(session.dateHeureFin, timezone)
const dateCloture = parametrageSqlModel?.dateCloture
? DateTime.fromJSDate(parametrageSqlModel.dateCloture)
: undefined
Expand All @@ -105,13 +111,7 @@ export function mapSessionConseillerDtoToQueryModel(
nomOffre: offre.nom,
estVisible: (autoinscription || parametrageSqlModel?.estVisible) ?? false,
autoinscription,
dateHeureDebut: DateTime.fromFormat(
session.dateHeureDebut,
MILO_DATE_FORMAT,
{ zone: timezone }
)
.toUTC()
.toISO(),
dateHeureDebut: dateFromMilo(session.dateHeureDebut, timezone).toISO(),
dateHeureFin: dateHeureFin.toISO(),
type: buildSessionTypeQueryModel(offre.type),
statut: SessionMilo.calculerStatut(maintenant, dateHeureFin, dateCloture),
Expand All @@ -134,20 +134,14 @@ export function mapSessionConseillerDtoToAgendaQueryModel(
id: sessionDto.session.id.toString(),
nomSession: sessionDto.session.nom,
nomOffre: sessionDto.offre.nom,
dateHeureDebut: DateTime.fromFormat(
dateHeureDebut: dateFromMilo(
sessionDto.session.dateHeureDebut,
MILO_DATE_FORMAT,
{ zone: timezone }
)
.toUTC()
.toISO(),
dateHeureFin: DateTime.fromFormat(
timezone
).toISO(),
dateHeureFin: dateFromMilo(
sessionDto.session.dateHeureFin,
MILO_DATE_FORMAT,
{ zone: timezone }
)
.toUTC()
.toISO(),
timezone
).toISO(),
type: buildSessionTypeQueryModel(sessionDto.offre.type),
beneficiaires: inscrits,
nbPlacesRestantes: sessionDto.session.nbPlacesDisponibles ?? undefined,
Expand All @@ -167,20 +161,14 @@ export function mapDetailSessionJeuneDtoToQueryModel(
nomOffre: sessionDto.offre.nom,
theme: sessionDto.offre.theme,
type: buildSessionTypeQueryModel(sessionDto.offre.type),
dateHeureDebut: DateTime.fromFormat(
dateHeureDebut: dateFromMilo(
sessionDto.session.dateHeureDebut,
MILO_DATE_FORMAT,
{ zone: timezone }
)
.toUTC()
.toISO(),
dateHeureFin: DateTime.fromFormat(
timezone
).toISO(),
dateHeureFin: dateFromMilo(
sessionDto.session.dateHeureFin,
MILO_DATE_FORMAT,
{ zone: timezone }
)
.toUTC()
.toISO(),
timezone
).toISO(),
lieu: sessionDto.session.lieu,
animateur: sessionDto.session.animateur,
nomPartenaire: sessionDto.offre.nomPartenaire ?? undefined,
Expand Down Expand Up @@ -271,3 +259,9 @@ export function dtoToStatutInscription(
return SessionMilo.Inscription.Statut.INSCRIT
}
}

function dateFromMilo(dateMilo: string, timezone: string): DateTime {
return DateTime.fromFormat(dateMilo, MILO_DATE_FORMAT, {
zone: timezone
}).toUTC()
}
24 changes: 9 additions & 15 deletions src/application/queries/query-models/sessions.milo.query.model.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'
import { SessionMilo } from '../../../domain/milo/session.milo'
import { PaginationQueryModel } from './common/pagination.query-model'
import { IsArray } from 'class-validator'

export class InscritSessionMiloQueryModel {
@ApiProperty()
Expand Down Expand Up @@ -62,18 +60,6 @@ export class SessionConseillerMiloQueryModel {
nombreMaxParticipants?: number
}

export class SessionsConseillerV2QueryModel {
@ApiProperty({ type: PaginationQueryModel })
pagination: PaginationQueryModel

@ApiProperty({
type: SessionConseillerMiloQueryModel,
isArray: true
})
@IsArray()
resultats: SessionConseillerMiloQueryModel[]
}

export class AgendaConseillerMiloSessionListItemQueryModel {
@ApiProperty()
id: string
Expand Down Expand Up @@ -124,6 +110,15 @@ export class SessionJeuneMiloQueryModel {

@ApiPropertyOptional({ enum: SessionMilo.Inscription.Statut })
inscription?: SessionMilo.Inscription.Statut

@ApiProperty()
autoinscription: boolean

@ApiPropertyOptional()
dateMaxInscription?: string

@ApiPropertyOptional()
nbPlacesRestantes?: number
}

export class DetailSessionConseillerQueryModel {
Expand Down Expand Up @@ -163,7 +158,6 @@ export class DetailSessionConseillerQueryModel {
@ApiProperty({ enum: SessionMilo.Statut })
statut: SessionMilo.Statut
}

class OffreSessionQueryModel {
@ApiProperty()
id: string
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,8 @@ describe('GetSessionsJeuneMiloQueryGetter', () => {
uneSessionJeuneMiloQueryModel({
id: idSession2.toString(),
dateHeureDebut: '2020-04-07T13:20:00.000Z',
dateHeureFin: '2020-04-08T13:20:00.000Z'
dateHeureFin: '2020-04-08T13:20:00.000Z',
dateMaxInscription: '2020-04-08T02:59:59.999Z'
})
])
)
Expand Down
5 changes: 4 additions & 1 deletion test/fixtures/sessions.fixture.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,10 @@ export const uneSessionJeuneMiloQueryModel = (
type: {
code: OffreTypeCode.WORKSHOP,
label: 'Atelier'
}
},
autoinscription: false,
dateMaxInscription: '2020-04-07T21:59:59.999Z',
nbPlacesRestantes: 10
}
return { ...defaults, ...args }
}
Expand Down

0 comments on commit b31dc9f

Please sign in to comment.