Ontwerp

De OOAPI haalt gegevens op uit de OU-database en zet die om naar het juiste formaat. Ik gebruik aparte onderdelen voor het ontvangen van requests, ophalen van data en mappen van velden.

EisOnderdeel in mijn ontwerpBestand in de code
Courses ophalenLijst- en detailfunction met CourseDtoFunctions/Course.cs
Programmes ophalenLijst- en detailfunction met ProgrammeDtoFunctions/Programmes.cs
Organisations ophalenLijst- en detailfunction met OrganisationDtoFunctions/Organisations.cs
JWT en rollenMiddleware en Reader-attributenMiddleware.cs en de functions
Paging en filteringQueryparameters verwerken in de ophaallogicaServices/ProductService.cs en Functions/Organisations.cs
Velden mappenBronvelden naar DTO-velden omzettenMappingProfiles.cs
Extra organisatiegegevensexpand=organisation verwerkenServices/ProductService.cs
Alleen lezenDe zes routes gebruiken GETDe drie functionbestanden

De functions, middleware en services staan in het Retriever-project. De DTO’s staan in het Core-project.

Een lijst of één object

Bij een lijst geef ik items en paging terug. Bij een detailrequest geef ik één object terug, bijvoorbeeld een course met een courseId. Courses en programmes gebruiken allebei ProductService, omdat ze uit dezelfde soort productgegevens komen.

Voorbeeld van de ontworpen lijstresponse voor courses

In deze screenshot zie je de paging, items en course-velden terug. Het ontwerp van de Azure-keten en de modellen staat in mijn drie schema’s.

Uitbreidingen

Offerings zijn vervolgwerk. Ze zijn niet nodig voor de drie basisonderdelen. Ik werk eerst de benodigde bronvelden en relaties uit voordat ik daar endpoints voor maak.

Waarom ik deze keuzes maak

Mapping naast mijn ontwerp

Organisatievelden in de mappingdocumentatie van de OU

Dit is de bestaande mappingpagina uit de wiki. Bij de pagina staat Roger en 16 augustus 2024. De tabel laat zien welke bronvelden bij de OOAPI-velden horen. Ik kan die naast OrganisationDto en MappingProfiles leggen:

Bron / afspraak in de wikiOOAPI-veld
FACULTIES_IDprimaryCode.code
Vaste waarde facultyorganisationType
LANGUAGE_ID naar taalcode, samen met NAMEname
SHORT_NAMEshortName
Bron nog als vraagtekenorganisationId

Voor organisationId is dus nog een keuze over de bron nodig. De screenshot is een ontwerpuitgangspunt, geen bewijs dat alle mapping al correct is uitgevoerd.

Voorbeeld uit de mappingcode

In MappingProfiles.cs staat hoe faculteitsgegevens een organisation worden:

CreateMap<FACULTIES_DESCRIPTION, OrganisationDto>()
    .ForMember(dest => dest.PrimaryCode, opt => opt.MapFrom(src => new IdentifierEntry { Code = Convert.ToString(src.FACULTIES_ID), CodeType = "organisation_id" }))
    .ForMember(dest => dest.OrganisationType, opt => opt.MapFrom(src => "faculty"))
    .ForMember(dest => dest.Name, opt => opt.MapFrom(src => new List<LanguageTypedString> { new() { Language = Convert.ToString(src.LANGUAGE_ID), Value = src.NAME } }))
    .ForMember(dest => dest.ShortName, opt => opt.MapFrom(src => src.SHORT_NAME));

Hier wordt FACULTIES_ID de code in primaryCode. Het type is faculty, NAME wordt de naam en SHORT_NAME de korte naam. Zo kan ik de tabel hierboven naast de code leggen.