diff --git a/backend/integrationtest/api/__snapshots__/api.test.ts.snap b/backend/integrationtest/api/__snapshots__/api.test.ts.snap index b440b976d..94bfab2b2 100644 --- a/backend/integrationtest/api/__snapshots__/api.test.ts.snap +++ b/backend/integrationtest/api/__snapshots__/api.test.ts.snap @@ -1103,6 +1103,7 @@ Object { "nimi": "Lorem ipsum 1", "paattymisAika": "16:00", "paivamaara": "2022-03-04", + "projektiYhteysHenkilot": undefined, "tyyppi": "VERKOSSA", }, Object { @@ -1117,6 +1118,7 @@ Object { "paivamaara": "2022-04-05", "postinumero": "00100", "postitoimipaikka": "Helsinki", + "projektiYhteysHenkilot": undefined, "tyyppi": "PAIKALLA", }, Object { @@ -1146,7 +1148,7 @@ Object { "paattymisAika": "11:00", "paivamaara": "2022-04-05", "projektiYhteysHenkilot": Array [ - "A000112", + "0", ], "tyyppi": "SOITTOAIKA", }, @@ -1176,6 +1178,7 @@ Object { "nimi": "Toisen soittoaikatilaisuuden nimi tässä", "paattymisAika": "13:00", "paivamaara": "2033-04-05", + "projektiYhteysHenkilot": undefined, "tyyppi": "SOITTOAIKA", }, ], @@ -1235,6 +1238,7 @@ Object { "nimi": "Lorem ipsum 2", "paattymisAika": "16:00", "paivamaara": "2022-03-04", + "projektiYhteysHenkilot": undefined, "tyyppi": "VERKOSSA", }, Object { @@ -1249,6 +1253,7 @@ Object { "paivamaara": "2022-04-05", "postinumero": "00100", "postitoimipaikka": "Helsinki", + "projektiYhteysHenkilot": undefined, "tyyppi": "PAIKALLA", }, Object { @@ -1278,8 +1283,8 @@ Object { "paattymisAika": "11:00", "paivamaara": "2022-04-05", "projektiYhteysHenkilot": Array [ - "A000112", - "A000111", + "0", + "1", ], "tyyppi": "SOITTOAIKA", }, @@ -1309,6 +1314,7 @@ Object { "nimi": "Toisen soittoaikatilaisuuden nimi tässä", "paattymisAika": "13:00", "paivamaara": "2033-04-05", + "projektiYhteysHenkilot": undefined, "tyyppi": "SOITTOAIKA", }, ], diff --git a/backend/src/aineisto/aineistoService.ts b/backend/src/aineisto/aineistoService.ts index 6045b929a..4a689014c 100644 --- a/backend/src/aineisto/aineistoService.ts +++ b/backend/src/aineisto/aineistoService.ts @@ -42,7 +42,7 @@ class AineistoService { } const aineistotToDelete = projektiAdaptationResult.aineistoChanges.aineistotToDelete; - if (aineistotToDelete.length > 0) { + if (aineistotToDelete && aineistotToDelete.length > 0) { // Delete files from public hasChanges = true; for (const fileNameToDelete of aineistotToDelete) { diff --git a/backend/src/handler/projektiAdapter.ts b/backend/src/handler/projektiAdapter.ts index 5ecba266e..9d1e38e7a 100644 --- a/backend/src/handler/projektiAdapter.ts +++ b/backend/src/handler/projektiAdapter.ts @@ -277,7 +277,11 @@ function adaptYhteystiedotToSave(yhteystietoInputs: Array) { return yhteystietoInputs?.length > 0 ? yhteystietoInputs.map((yt) => ({ ...yt })) : undefined; } -function adaptKayttajatunnusList(projekti: DBProjekti, yhteysHenkilot: Array): string[] | undefined { +function adaptKayttajatunnusList( + projekti: DBProjekti, + yhteysHenkilot: Array, + doNotForceProjektipaallikko?: boolean +): string[] | undefined { if (!yhteysHenkilot || yhteysHenkilot.length == 0) { return undefined; } @@ -296,7 +300,7 @@ function adaptKayttajatunnusList(projekti: DBProjekti, yhteysHenkilot: Array rooli === ProjektiRooli.PROJEKTIPAALLIKKO )?.kayttajatunnus; - if (!unfilteredList.includes(projektipaallikkonTunnus)) { + if (!doNotForceProjektipaallikko && !unfilteredList.includes(projektipaallikkonTunnus)) { unfilteredList.push(projektipaallikkonTunnus); } @@ -312,7 +316,7 @@ function adaptVuorovaikutusTilaisuudetToSave( ? vuorovaikutusTilaisuudet.map((vv) => ({ ...vv, esitettavatYhteystiedot: adaptYhteystiedotToSave(vv.esitettavatYhteystiedot), - projektiYhteysHenkilot: adaptKayttajatunnusList(projekti, vv.projektiYhteysHenkilot), + projektiYhteysHenkilot: adaptKayttajatunnusList(projekti, vv.projektiYhteysHenkilot, true), })) : undefined; } @@ -449,7 +453,7 @@ function adaptVuorovaikutukset(vuorovaikutukset: Array): API.Vuor return vuorovaikutukset as undefined; } -export function adaptVuorovaikutusTilaisuudet( +function adaptVuorovaikutusTilaisuudet( vuorovaikutusTilaisuudet: Array ): API.VuorovaikutusTilaisuus[] { if (vuorovaikutusTilaisuudet) { diff --git a/backend/src/handler/projektiAdapterJulkinen.ts b/backend/src/handler/projektiAdapterJulkinen.ts index 891f0cf62..3c1c901c5 100644 --- a/backend/src/handler/projektiAdapterJulkinen.ts +++ b/backend/src/handler/projektiAdapterJulkinen.ts @@ -21,13 +21,12 @@ import { adaptKielitiedot, adaptLinkki, adaptLinkkiList, - adaptVuorovaikutusTilaisuudet, adaptYhteystiedot, } from "./projektiAdapter"; import { fileService } from "../files/fileService"; import { log } from "../logger"; import { parseDate } from "../util/dateUtil"; -import { Vuorovaikutus } from "../database/model/suunnitteluVaihe"; +import { Vuorovaikutus, VuorovaikutusTilaisuus } from "../database/model/suunnitteluVaihe"; class ProjektiAdapterJulkinen { private applyStatus(projekti: API.ProjektiJulkinen) { @@ -185,6 +184,10 @@ class ProjektiAdapterJulkinen { } } +function adaptUsernamesToProjektiHenkiloIds(usernames: Array, projektiHenkilot: ProjektiHenkilot) { + return usernames?.map((username) => projektiHenkilot[username].id); +} + function adaptVuorovaikutukset(dbProjekti: DBProjekti, projektiHenkilot: ProjektiHenkilot): VuorovaikutusJulkinen[] { const vuorovaikutukset = dbProjekti.vuorovaikutukset; if (vuorovaikutukset && vuorovaikutukset.length > 0) { @@ -192,17 +195,19 @@ function adaptVuorovaikutukset(dbProjekti: DBProjekti, projektiHenkilot: Projekt .map((vuorovaikutus) => { const julkaisuPaiva = parseDate(vuorovaikutus.vuorovaikutusJulkaisuPaiva); if (julkaisuPaiva.isBefore(dayjs())) { + const usernames = vuorovaikutus.vuorovaikutusYhteysHenkilot; return { ...vuorovaikutus, __typename: "VuorovaikutusJulkinen", - vuorovaikutusTilaisuudet: adaptVuorovaikutusTilaisuudet(vuorovaikutus.vuorovaikutusTilaisuudet), + vuorovaikutusTilaisuudet: adaptVuorovaikutusTilaisuudet( + vuorovaikutus.vuorovaikutusTilaisuudet, + projektiHenkilot + ), videot: adaptLinkkiList(vuorovaikutus.videot), suunnittelumateriaali: adaptLinkki(vuorovaikutus.suunnittelumateriaali), aineistot: adaptAineistot(vuorovaikutus.aineistot, julkaisuPaiva), vuorovaikutusYhteystiedot: adaptAndMergeYhteystiedot(dbProjekti, vuorovaikutus), - vuorovaikutusYhteysHenkilot: vuorovaikutus.vuorovaikutusYhteysHenkilot?.map( - (username) => projektiHenkilot[username].id - ), + vuorovaikutusYhteysHenkilot: adaptUsernamesToProjektiHenkiloIds(usernames, projektiHenkilot), } as API.VuorovaikutusJulkinen; } return undefined; @@ -212,6 +217,24 @@ function adaptVuorovaikutukset(dbProjekti: DBProjekti, projektiHenkilot: Projekt return vuorovaikutukset as undefined; } +function adaptVuorovaikutusTilaisuudet( + vuorovaikutusTilaisuudet: Array, + projektiHenkilot: ProjektiHenkilot +): VuorovaikutusTilaisuus[] { + if (vuorovaikutusTilaisuudet) { + return vuorovaikutusTilaisuudet.map((vuorovaikutusTilaisuus) => ({ + ...vuorovaikutusTilaisuus, + projektiYhteysHenkilot: adaptUsernamesToProjektiHenkiloIds( + vuorovaikutusTilaisuus.projektiYhteysHenkilot, + projektiHenkilot + ), + esitettavatYhteystiedot: adaptYhteystiedot(vuorovaikutusTilaisuus.esitettavatYhteystiedot), + __typename: "VuorovaikutusTilaisuus", + })); + } + return vuorovaikutusTilaisuudet as undefined; +} + function findJulkaisuByStatus( aloitusKuulutusJulkaisut: T[], tila: API.AloitusKuulutusTila