Page History
...
Denne guide har som formål at give et overblik over <xxx>GM-CMS, herunder dets funktionalitet, arkitektur, og hvordan det integreres med relaterede services.
<Denne guide er tilegnet klienter til NSP og specifikt den leverede komponent/service. Denne del skal være tilstrækkelig for en klientleverandør, som skal udvikle aftagersystemer. Heri tilgodeses specielt referencer til andre dokumenter, da en anvender også skal have en bredere forståelse af den anvendte komponent og eventuelle omgivelser.
Det er selvfølgelig også ret væsentligt at template udfyldes udtømmende, herunder i forhold til den logik og de regler, der skal følges for den måde servicen anvendes på, og som servicen selv efterlever>
Beskrivelse
<Formål og beskrivelse af komponenten/servicen>
Links til mere information
<Relevante links til andre dokumenter, herunder i forhold til de data services skal arbejde på, og den model de følger>
<Eventuel link til mere uddybende beskrivelse, intern på NSP og eksternt>
Grafisk fremstilling og sammenhængen
<Tegning(er) der letter forståelsen og beskrivelser af relevante sammenhængen>
Relevante use-cases
<Angiv use cases såfremt det er relevant>
Læsevejledning og forudsætninger
Dette dokument er henvendt til udviklere og arkitekter, der skal anvende <> .
Det forventes at læseren har kendskab til <f.eks.: SOAP WebService, Den Gode WebService (DGWS) og Sercurity Token Service (STS), o.a.>
<Eventuel andre forudsætninger>
Sikkerhed
<Forudsætninger for anvendelse og krævede adgange, whitelistinger etc., Sikkerhedsniveau. Angiv krav til authentication for at kunne bruge servicen/komponenten.>
...
anvendere af GM-CMS komponenten, dvs. udviklere af BFF laget på graviditets-appen. Der vil blive givet referencer til relevante dokumenter for at skabe en bredere forståelse af komponentens omgivelser.
Beskrivelse
GM-CMS er en backend-service, der understøtter indholdshåndtering for applikationen "Min Graviditet".
Systemet tilbyder fleksible værktøjer til oprettelse, redigering og publicering af indhold såsom artikler, billeder og videoer.
Al adgang til CMS komponenten sker gennem CMS Admin Panel (Strapi admin) eller via REST kald fra BFF.
Links til mere information
- GM-CMS repository: git.nspop.dk/projects/bff/repos/min-graviditet-content-management-system
- Strapi documentation: https://docs.strapi.io/cms/intro
- Meilisearch plugin: https://market.strapi.io/plugins/strapi-plugin-meilisearch
- CKEditor 5: https://market.strapi.io/plugins/@_sh-strapi-plugin-ckeditor
- Config Sync plugin: https://market.strapi.io/plugins/strapi-plugin-config-sync
Grafisk fremstilling og sammenhængen
Følgende ses diagram over GM-CMS struktur og relationer til relaterede services (Min Graviditet-app, BFF, m.fl.).
Relevante use-cases
Der findes tre typer brugere i forhold til use cases:
- Borgere: Brugere af app’en "Min Graviditet".
- Redaktører: Brugere med indholdsredigeringsrettigheder i GM-CMS.
- Systemadministratorer: Brugere med administratortilladelser i GM-CMS.
GM-CMS skal understøtte use cases for "Min Graviditet" appen ved at udstille data. I den efterfølgende parentes angives use case nummer jf. Appendix 1b fra tilbudsmateriale.
Use cases for "Min Graviditet" appen:
- Borger skal kunne se vejledninger som er knyttet til specifikke graviditetsuger (artikler og videoma teriale) (UC11)
- Borger skal kunne søge i vejledninger (UC12)
- Borger skal kunne tilføje nye emner til tjeklisten (UC13)
- Borger skal kunne se menupunktet “Mere”, som indeholder information omkring support, sikker hed, FAQ, privatslivspolitik, samtykke mm. (UC22)
- Borger skal kunne tilgå information omkring privatlivspolitik (databeskyttelse, logning, etc) (UC25)
For at undersøtte disse use cases skal GM-CMS overholde følgende use cases.
- Redaktør skal kunne oprette, redigere, publicere og slette indholdstyper, herunder kategorier, artikler, sektioner, tjeklister, tjeklistepunkter, forklaringer på fagtermer og ofte stillede spørgsmål (FAQs).
- Det skal være muligt søge i artikler
- Administrator skal kunne tilføje og administrere CMS-brugere
- Redaktør skal kunne ændre eget kodeord
- Alle brugere skal logge ind i CMS administrationspanel via 2-faktor.
- Redektører skal kunne filtrere indhold på udgivet og kladdeversioner samt sortere på dato og kategorier
- Redaktøren skal kunne angive følgende per artikel: Titel, kategori, tags, angivelse af ugenumre, hvor artikel dermed vil blive vist på forsiden ved den pågældende graviditetsuge, angivelse af ugenumre, hvor artikel dermed vil blive vist på forsiden den pågældende efter fødsel er angivet, sektioner, hvorvidt artikel skal skjule på forside, samt tekst og medier.
- På artikel skal forfatter og dato for udgivet/published eller sidst redigeret/modified sættes
- Redaktører skal kunne eksportere alle tekster fra CMS’en til en samlet tekstfil
Læsevejledning og forudsætninger
Dette dokument er henvendt til udviklere og arkitekter, der skal anvende GM-CMS. Det forventes, at læseren har kendskab til RESTful API'er samt grundlæggende webteknologier.
Sikkerhed
Forudsætninger for anvendelse af REST snitfalde inkluderer:
Service udstil type | REST |
Krævede adgange | Intern netværksadgang og API key (JWT) |
Whitelisting | Al adgang til REST servicen foregår indenfor samme TCS kubernetes miljø. REST servicen er ikke udstillet udad til. |
Krævet sikkerhedsniveau | API key som bearer token |
Forudsætninger for anvendelse af CMS Admin Panel inkluderer:
Service udstil type | Web UI |
Krævede adgange | 2FA via keycloak, brugernavn+password til Strapi Admin |
Whitelisting | CMS Admin Panel endpoints er beskyttet af IP whitelisting. Kun brugere fra specificerede netværk kan tilgå CMS Admin Panel. |
Definitioner og referencer
| Reference | Beskrivelse |
|---|---|
CMS | Content Management System |
GM | Graviditetsmappen |
BFF | Backend for frontend |
Adgang, brug og snitflader
Adgang
<Beskrivelse af hvordan service/komponent bruges, snitflade(r), endpoints, og andet relevant>
| Tilgængelig | Trifork Cloud Stack miljø for GMv2 |
| Endpoint(s) | Se afsnit 3.3.1 |
Brugertyper (roller)
I Strapi administrationpanelet arbejdes der med følgende brugertyper:
- Systemadministrator: En bruger med overordnede rettigheder, der administrerer systemindstillinger og brugeradgange.
- Redaktør: En administrator, der har ansvar for indholdsoprettelse og -vedligeholdelse i administrationsportalen.
- Redaktør med brugeroprettelsesrettigheder: En administrator, der har ansvar for indholdsoprettelse og -vedligeholdelse i administrationsportalen, samt oprettelse og administration af brugere.
Snitfladebeskrivelse og brug
Følgende bekriver Strapi og Meilisearch snitfladerne.
Strapi snitflade
Strapi CMS'en udstiller en række endpoints til at hente de definerede indholdstyper. Alle API-endpoints er offentligt tilgængelige, hvilket betyder, at det ikke er nødvendigt at sætte en authentication header på anmodningerne.
Indholdstyper
Jf. use cases skal følgende indholdstyper konfigureres i GM-CMS.
Indholdstype | Beskrivelse | Relation | id |
Kategori | Indeholder titel og tilhørende artikler | Kategori “tilhører flere” artikler | category |
Artikel | Indeholder titel, beskrivelse, tags, boolean til angivelse af om artikel skal skjules på forside, samt tilhørende kategorier og sektioner | Kategori ”har flere” artikler Artikel “tilhører flere” sektioner | article |
Sektion | Indeholder titel, tekst, liste af ugenumre i graviditet/efter fødsel hvor sektionen er relevant, samt tilhørende artikler | Artikel “har flere” sektioner | section |
Tjekliste | Indeholder titel, beskrivelse, samt tilhørende tjektlistepunkter | Tjekliste ”tilhører flere” tjeklistepunkter | checklist |
Tjeklistepunkt | Indeholder titel, beskrivelse, samt tilhørende tjektliste | Tjekliste “har flere” tjeklistepunkter | checklist-point |
Ordforklaring | Indeholder ord og ordforklaring | glossary-term | |
Tekst | Indeholder titel, tekst, beskrivelse og unikt API-navn. Bruges til at oprette tekster om samtykkeerklæring, databeskyttelse osv. | text | |
FAQ | Indeholder spørgsmål og svar | faq |
Strapi endpoints
Indholdstype | Endpoirt |
Kategori | /api/categories |
Artikel | /api/articles |
Sektion | /api/sections |
Tjekliste | /api/checklists |
Tjeklistepunkt | /api/checklist-points |
Ordforklaring | /api/glossary-terms |
Tekst | /api/texts |
FAQ | /api/faqs |
For at relationer mellem indholdstyperne inkluderes i responsen tilføjes:
| ?populate=* |
|---|
Eksempelvis for at få alle artikler, samt relaterede kategorier og sektioner kaldes:
| /api/articles?populate=* |
|---|
Eksempler på Strapi request/responses
Herunder ses eksempler på Strapi request/responses der foretages af GM-BFF:
| Type | Request | Beskrivelse | Respons | ||
|---|---|---|---|---|---|
| GET | /api/checklists&populate=* | Returnerer indholdstype samt alle relationer. |
| ||
| GET | api/articles?filters[Sektioner][UgenummreEfterFoedsel][$contains]={UGENUMMER_EFTER_FOEDSEL}&populate=* | Returnerer alle sektioner (inkl. tilhørende artikler og kategorier) hvor parameter UGENUMMER_EFTER_FOEDSEL er i listen UgenummreEfterFoedsel. Anvendes til at finde relevante artikler til borger med angivet fødselsdato. |
| ||
| GET | api/articles?filters[Sektioner][UgenumreUnderGraviditet][$contains]={UGENUMMER_UNDER_GRAVIDITET}&populate=* | Returnerer alle sektioner (inkl. tilhørende artikler og kategorier) hvor parameter UGENUMMER_UNDER_GRAVIDITET er i listenUgenumreUnderGraviditet. Anvendes til at finde relevante artikler til borger med terminsdato. |
| ||
| GET | /api/texts?filters[ApiNavn][$eq]={API_NAVN} | Returnerer indholdstype tekst, hvor ApiNavn er lig parameter API_NAVN. Eksempelvis samtykke-tekst. |
|
Meilisearch snitflade
Meilisearch services anvendes til at søge i de artikler (inklusive sektioner og kategorieR) som CMS'en udstiller.
Søgbare indholdstyper
I Strapi administrationspanelt under Meilisearch (forstørrelsesglas i venstre side) skal følgende bokse tjekkes af for at gøre indholdstyperne søgbare:
- category
- article
- section
Herefter kan der søges i indholdstyperne.
Meilisearch endpoints
Indholdstype | Endpoirt |
Category | /indexes/category/search |
Article | /indexes/article/search |
Section | /indexes/section/search |
Eksempler på Meilisearch request/responses
Herunder ses eksempler på Meilisearch request/responses der foretages af GM-BFF:
| Type | Request | Beskrivelse | Respons | ||
|---|---|---|---|---|---|
| GET | /indexes/article/search?q={SEARCH_STRING} | Returnerer fremsøgte artikler (inklusiv relaterede kategorier og sektioner releateret til søgestrengen. |
|
Generelle koder, værdier, etc.
Ikke relevant
Fejlbeskeder
Herunder er nogle af de mest almindelige fejlbeskeder og deres årsager.
Strapi - 401 Unauthorized
- Mulige årsager:
- Der er sendt en authentication header med anmodningen. Selvom endpointet er offentligt vil enhver bearer token i headeren resultere i et ugyldigt kald.
- Endpointet er konfigureret til, at anmoderen skal være authenticated. Dette er default konfigurationen i Strapi.
- Løsninger:
- Gå til Strapi adminpanelet → Settings → Users & Permissions plugin → Roles → Public.
- Tjek, at “Find” og “FindOne” er markeret for alle indholdstyper, som du ønsker at tilgå. Dette tillader offentlige brugere at få adgang til de angivne indholdstyper uden at være autentificeret.
- Tjek, at authentication header ikke er sat.
Strapi - "error: meilisearch: Request to http://meilisearch:7700/stats has failed"
- Mulige årsager:
- Meilisearch servicen kører ikke eller den forkerte Meilisearch host/port er konfigureret i Strapi
- API key konfigureret i Strapi projekt stemmer ikke overens med API key konfigureret i Meilisearch
- Løsninger:
- Konfigurer .env variable CMS_MEILISEARCH_API_KEY i Strapi til at have samme værdi som værdi for Meilisearch master-key
Test
Ikke relevant.
...
<Eventuel nærmere introduktion>
<Eventuel yderligere beskrivelse af området / domænet som servicen/komponenten servicerer>.
<Samt yderligere information som er vigtigt for anvendelsen eller forståelsen>
Definitioner og referencer
...
Adgang, brug og snitflader
Adgang
<Beskrivelse af hvordan service/komponent bruges, snitflade(r), endpoints, og andet relevant>
...
<Angiv udstillede endpoint(s), og hvad de hedder.>
...
<Angiv henvisning til WSDL(er). For ekstern anvendbare services typisk på https://wsdl.nspop.dk/>
...
<Beskrivelser af service(s) / actions på endpoint(s). I lægmands termer beskrive hvad man kan forvente af de enkelte services.>
...
Snitfladebeskrivelse og brug
<Beskrivelse af Snitfladerne, samt den logik og de regler, der skal følges for den måde servicen anvendes på, og som servicen selv efterlever.>
<snitflade 1>
<Beskrivelse af hver snitflade input/output>
<snitflade 1>Request
<beskrivelse af request>
<Marker hvilke der er obligatoriske. Gerne en beskrivende tekst på samtlige parametre, og gerne også et eksempel på hvilke data der kan sættes ind her. Selv hvis man forstår beskrivelsen, så er det stadig godt at have et eksempel. Angiv hvis der er undtagelser eller specielle hensyn>
...
<snitflade 1>Response
<beskrivelse af svar>
...
<snitflade 2, osv., med request/response>
Generelle koder, værdier, etc.
<Angiv eventuelle generelle koder, værdier, etc>
Fejlbeskeder
<Beskrivelse af fejlbeskeder, og i hvilke situationer man kan forvente at se disse i.
Noter omkring ting som går på tværs af services. Det kan være fejl som optræder generelt og som man skal være opmærksom på.>
Eksempler på request/response
Eksempler på request og response til de operationer der udstilles. De enkelte elementer er beskrevet under snitfladebeskrivelse. Klient proxier kan genereres udfra WSDL'en.
<eksempel 1 på ..>
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
<eksempel her> |
<mere eksempel>
Test
<beskriv Test muligheder, test-systemer og eventuelle testdata>
Eksempel kode og klient
Eksempel kode
<Eksempel kode. Det er meget lettere at lave sin egen implementering, hvis man kan kigge efter en anden ....>
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
<eksempel her, eller reference andet steds> |
Eksempel klient
<og hvor det giver mening angiv eventuel eksempel klient, samt hvordan og hvor det eventuelt kan eksekveres>
Dokument Historik
| 3/4 2025 | Martin Henriksen/SDS | Etablering af dokumentation |
| 10/4 2025 | Dikte Straadt/Trifork | Initiel udfyldning af dokumentation |

