diff --git a/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/resource/julkinen/JulkinenController.java b/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/resource/julkinen/JulkinenController.java index c615b3283..a62950f67 100644 --- a/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/resource/julkinen/JulkinenController.java +++ b/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/resource/julkinen/JulkinenController.java @@ -253,6 +253,22 @@ public ResponseEntity getDokumentti(@ApiIgnore @ModelAttribute("ktId") f return new ResponseEntity<>(pdfdata, headers, HttpStatus.OK); } + @RequestMapping(value = "/dokumentti/{dokumenttiId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_PDF_VALUE) + public ResponseEntity getDokumentti(@PathVariable Long dokumenttiId) { + byte[] pdfdata = dokumenttiService.get(dokumenttiId); + + if (pdfdata == null || pdfdata.length == 0) { + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + } + + HttpHeaders headers = new HttpHeaders(); + headers.set("Content-disposition", "inline; filename=\"" + dokumenttiId + ".pdf\""); + headers.setContentLength(pdfdata.length); + headers.set("X-Robots-Tag", "noindex"); + + return new ResponseEntity<>(pdfdata, headers, HttpStatus.OK); + } + @ApiImplicitParams({ @ApiImplicitParam(name = "ktId", dataType = "string", paramType = "path", required = true) }) @@ -288,6 +304,14 @@ public ResponseEntity getJulkaistuDokumentti(@ApiIgnore @ModelAtt return ResponseEntity.ok(dokumenttiService.getJulkaistuDokumentti(ktId, opsId, Kieli.of(kieli), revision)); } + @RequestMapping(value = "/opetussuunnitelmat/{opsId}/dokumentti/julkaistu", method = RequestMethod.GET) + public ResponseEntity getJulkaistuDokumenttiWithoutKt(@PathVariable Long opsId, + @RequestParam(defaultValue = "fi") String kieli, + @RequestParam(required = false) Integer revision) { + + return ResponseEntity.ok(dokumenttiService.getJulkaistuDokumentti(opsId, Kieli.of(kieli), revision)); + } + @ApiImplicitParams({ @ApiImplicitParam(name = "ktId", dataType = "string", paramType = "path", required = true) }) diff --git a/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/resource/koulutustoimija/JulkaisuController.java b/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/resource/koulutustoimija/JulkaisuController.java index 79ad291fe..85a57f3ae 100644 --- a/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/resource/koulutustoimija/JulkaisuController.java +++ b/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/resource/koulutustoimija/JulkaisuController.java @@ -34,6 +34,16 @@ public class JulkaisuController extends KoulutustoimijaIdGetterAbstractControlle public List getJulkaisut( @ModelAttribute("solvedKtId") final Long ktId, @PathVariable("opsId") final long opsId) { + return julkaisutService.getJulkaisutJaViimeisinStatus(ktId, opsId); + } + + @ApiImplicitParams({ + @ApiImplicitParam(name = "ktId", dataType = "string", paramType = "path") + }) + @RequestMapping(method = GET, value = "/julkaisut/kaikki") + public List getJulkaisutKaikki( + @ModelAttribute("solvedKtId") final Long ktId, + @PathVariable("opsId") final long opsId) { return julkaisutService.getJulkaisut(ktId, opsId); } diff --git a/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/service/dokumentti/DokumenttiService.java b/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/service/dokumentti/DokumenttiService.java index e5e339217..28ac8bb38 100644 --- a/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/service/dokumentti/DokumenttiService.java +++ b/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/service/dokumentti/DokumenttiService.java @@ -39,4 +39,10 @@ public interface DokumenttiService { void updateDokumenttiPdfData(byte[] pdfData, Long dokumenttiId); void updateDokumenttiTila(DokumenttiTila tila, Long dokumenttiId); + + @PreAuthorize("permitAll()") + DokumenttiDto getJulkaistuDokumentti(Long opsId, Kieli kieli, Integer revision); + + @PreAuthorize("permitAll()") + byte[] get(Long id); } diff --git a/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/service/dokumentti/impl/DokumenttiServiceImpl.java b/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/service/dokumentti/impl/DokumenttiServiceImpl.java index 23206f99c..d23e9b836 100644 --- a/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/service/dokumentti/impl/DokumenttiServiceImpl.java +++ b/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/service/dokumentti/impl/DokumenttiServiceImpl.java @@ -234,4 +234,14 @@ public void updateDokumenttiTila(DokumenttiTila tila, Long dokumenttiId) { dokumentti.setTila(tila); dokumenttiRepository.save(dokumentti); } + + @Override + public DokumenttiDto getJulkaistuDokumentti(Long opsId, Kieli kieli, Integer revision) { + return getJulkaistuDokumentti(null, opsId, kieli, revision); + } + + @Override + public byte[] get(Long id) { + return getDataByDokumenttiId(null, null, id); + } } diff --git a/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/service/koulutustoimija/JulkaisuService.java b/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/service/koulutustoimija/JulkaisuService.java index beae80e02..4b827ddff 100644 --- a/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/service/koulutustoimija/JulkaisuService.java +++ b/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/service/koulutustoimija/JulkaisuService.java @@ -8,6 +8,9 @@ import org.springframework.security.access.prepost.PreAuthorize; public interface JulkaisuService { + @PreAuthorize("permitAll()") + List getJulkaisutJaViimeisinStatus(long ktId, long opsId); + @PreAuthorize("permitAll()") List getJulkaisut(long ktId, long opsId); diff --git a/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/service/koulutustoimija/impl/JulkaisuServiceImpl.java b/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/service/koulutustoimija/impl/JulkaisuServiceImpl.java index 2f32f6ee7..20c044ddc 100644 --- a/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/service/koulutustoimija/impl/JulkaisuServiceImpl.java +++ b/eperusteet-amosaa-service/src/main/java/fi/vm/sade/eperusteet/amosaa/service/koulutustoimija/impl/JulkaisuServiceImpl.java @@ -39,6 +39,7 @@ import fi.vm.sade.eperusteet.amosaa.service.ops.SisaltoViiteService; import fi.vm.sade.eperusteet.amosaa.service.ops.SisaltoviiteServiceProvider; import fi.vm.sade.eperusteet.amosaa.service.util.JsonMapper; +import fi.vm.sade.eperusteet.amosaa.service.util.Nulls; import fi.vm.sade.eperusteet.amosaa.service.util.Validointi; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; @@ -121,7 +122,7 @@ public class JulkaisuServiceImpl implements JulkaisuService { @Override @Transactional(readOnly = true) - public List getJulkaisut(long ktIds, long opsId) { + public List getJulkaisutJaViimeisinStatus(long ktIds, long opsId) { Opetussuunnitelma opetussuunnitelma = opetussuunnitelmaRepository.findOne(opsId); if (opetussuunnitelma == null) { throw new BusinessRuleViolationException("opetussuunnitelmaa-ei-loytynyt"); @@ -142,6 +143,14 @@ public List getJulkaisut(long ktIds, long opsId) { return taytaKayttajaTiedot(julkaisut); } + @Override + public List getJulkaisut(long ktId, long opsId) { + Opetussuunnitelma ops = opetussuunnitelmaRepository.findOne(opsId); + Nulls.assertExists(ops, "Pyydettyä opetussuunnitelmaa ei ole olemassa"); + List julkaisut = julkaisuRepository.findAllByOpetussuunnitelma(ops); + return mapper.mapAsList(julkaisut, JulkaisuBaseDto.class); + } + @Override public void teeJulkaisu(long ktId, long opsId, JulkaisuBaseDto julkaisuBaseDto) { Opetussuunnitelma opetussuunnitelma = opetussuunnitelmaRepository.findOne(opsId); diff --git a/eperusteet-amosaa-service/src/test/java/fi/vm/sade/eperusteet/amosaa/service/JulkaisuServiceIt.java b/eperusteet-amosaa-service/src/test/java/fi/vm/sade/eperusteet/amosaa/service/JulkaisuServiceIt.java index 4a4412859..cc8cb79b3 100644 --- a/eperusteet-amosaa-service/src/test/java/fi/vm/sade/eperusteet/amosaa/service/JulkaisuServiceIt.java +++ b/eperusteet-amosaa-service/src/test/java/fi/vm/sade/eperusteet/amosaa/service/JulkaisuServiceIt.java @@ -35,7 +35,7 @@ public static void setup() { public void testJulkaisu1() { useProfileKP1(); OpetussuunnitelmaBaseDto ops = createOpetussuunnitelma(); - assertThat(julkaisuService.getJulkaisut(getKoulutustoimijaId(), ops.getId())).isEmpty(); + assertThat(julkaisuService.getJulkaisutJaViimeisinStatus(getKoulutustoimijaId(), ops.getId())).isEmpty(); JulkaisuBaseDto julkaisuDto = JulkaisuBaseDto.builder().tiedote(LokalisoituTekstiDto.of("tiedote")).build(); // JulkaisuBaseDto uusiJulkaisu = julkaisuService.teeJulkaisu(getKoulutustoimijaId(), ops.getId(), julkaisuDto); diff --git a/eperusteet-amosaa-service/src/test/java/fi/vm/sade/eperusteet/amosaa/service/util/DokumenttiServiceMock.java b/eperusteet-amosaa-service/src/test/java/fi/vm/sade/eperusteet/amosaa/service/util/DokumenttiServiceMock.java index f41295cc9..3868c77ca 100644 --- a/eperusteet-amosaa-service/src/test/java/fi/vm/sade/eperusteet/amosaa/service/util/DokumenttiServiceMock.java +++ b/eperusteet-amosaa-service/src/test/java/fi/vm/sade/eperusteet/amosaa/service/util/DokumenttiServiceMock.java @@ -66,4 +66,14 @@ public void updateDokumenttiPdfData(byte[] pdfData, Long dokumenttiId) { public void updateDokumenttiTila(DokumenttiTila tila, Long dokumenttiId) { } + + @Override + public DokumenttiDto getJulkaistuDokumentti(Long opsId, Kieli kieli, Integer revision) { + return null; + } + + @Override + public byte[] get(Long id) { + return new byte[0]; + } } diff --git a/eperusteet-amosaa-service/src/test/java/fi/vm/sade/eperusteet/amosaa/service/util/JulkaisuServiceMock.java b/eperusteet-amosaa-service/src/test/java/fi/vm/sade/eperusteet/amosaa/service/util/JulkaisuServiceMock.java index bcf756ddf..9a2307804 100644 --- a/eperusteet-amosaa-service/src/test/java/fi/vm/sade/eperusteet/amosaa/service/util/JulkaisuServiceMock.java +++ b/eperusteet-amosaa-service/src/test/java/fi/vm/sade/eperusteet/amosaa/service/util/JulkaisuServiceMock.java @@ -12,10 +12,15 @@ @Profile("test") public class JulkaisuServiceMock implements JulkaisuService { @Override - public List getJulkaisut(long ktId, long opsId) { + public List getJulkaisutJaViimeisinStatus(long ktId, long opsId) { return null; } + @Override + public List getJulkaisut(long ktId, long opsId) { + return List.of(); + } + @Override public void teeJulkaisu(long ktId, long opsId, JulkaisuBaseDto julkaisuBaseDto) { } diff --git a/generated/amosaa.spec.json b/generated/amosaa.spec.json index eff146d5e..a402a0e79 100644 --- a/generated/amosaa.spec.json +++ b/generated/amosaa.spec.json @@ -306,6 +306,28 @@ } } }, + "/api/julkinen/dokumentti/{dokumenttiId}" : { + "get" : { + "tags" : [ "julkinen" ], + "operationId" : "getDokumentti", + "produces" : [ "application/pdf" ], + "parameters" : [ { + "name" : "dokumenttiId", + "in" : "path", + "required" : true, + "type" : "integer", + "format" : "int64" + } ], + "responses" : { + "200" : { + "description" : "successful operation", + "schema" : { + "type" : "object" + } + } + } + } + }, "/api/julkinen/kaikkijulkaistut" : { "get" : { "tags" : [ "julkinen" ], @@ -1072,6 +1094,38 @@ } } }, + "/api/julkinen/opetussuunnitelmat/{opsId}/dokumentti/julkaistu" : { + "get" : { + "tags" : [ "julkinen" ], + "operationId" : "getJulkaistuDokumenttiWithoutKt", + "parameters" : [ { + "name" : "opsId", + "in" : "path", + "required" : true, + "type" : "integer", + "format" : "int64" + }, { + "name" : "kieli", + "in" : "query", + "required" : true, + "type" : "string" + }, { + "name" : "revision", + "in" : "query", + "required" : false, + "type" : "integer", + "format" : "int32" + } ], + "responses" : { + "200" : { + "description" : "successful operation", + "schema" : { + "$ref" : "#/definitions/DokumenttiDto" + } + } + } + } + }, "/api/julkinen/opetussuunnitelmat/{opsId}/koulutustoimija" : { "get" : { "tags" : [ "julkinen" ], @@ -2970,6 +3024,43 @@ } } }, + "/api/koulutustoimijat/{ktId}/opetussuunnitelmat/{opsId}/julkaisut/kaikki" : { + "get" : { + "tags" : [ "Julkaisut" ], + "operationId" : "getJulkaisutKaikki", + "parameters" : [ { + "in" : "body", + "name" : "body", + "required" : false, + "schema" : { + "type" : "integer", + "format" : "int64" + } + }, { + "name" : "opsId", + "in" : "path", + "required" : true, + "type" : "integer", + "format" : "int64" + }, { + "name" : "ktId", + "in" : "path", + "required" : true, + "type" : "string" + } ], + "responses" : { + "200" : { + "description" : "successful operation", + "schema" : { + "type" : "array", + "items" : { + "$ref" : "#/definitions/JulkaisuBaseDto" + } + } + } + } + } + }, "/api/koulutustoimijat/{ktId}/opetussuunnitelmat/{opsId}/kevyt" : { "get" : { "tags" : [ "opetussuunnitelmat" ], @@ -9058,23 +9149,23 @@ "type" : "integer", "format" : "int64" }, + "julkaisuVuosi" : { + "type" : "integer", + "format" : "int32" + }, "ensijulkaisu" : { "type" : "string", "format" : "date-time" }, + "julkaistu" : { + "type" : "string", + "format" : "date-time" + }, "perusteNimi" : { "type" : "object", "additionalProperties" : { "type" : "string" } - }, - "julkaisuVuosi" : { - "type" : "integer", - "format" : "int32" - }, - "julkaistu" : { - "type" : "string", - "format" : "date-time" } } }, @@ -9514,19 +9605,6 @@ "type" : "integer", "format" : "int64" }, - "first" : { - "type" : "boolean" - }, - "pageable" : { - "$ref" : "#/definitions/Pageable" - }, - "last" : { - "type" : "boolean" - }, - "numberOfElements" : { - "type" : "integer", - "format" : "int32" - }, "size" : { "type" : "integer", "format" : "int32" @@ -9544,6 +9622,19 @@ "sort" : { "$ref" : "#/definitions/Sort" }, + "first" : { + "type" : "boolean" + }, + "numberOfElements" : { + "type" : "integer", + "format" : "int32" + }, + "pageable" : { + "$ref" : "#/definitions/Pageable" + }, + "last" : { + "type" : "boolean" + }, "empty" : { "type" : "boolean" } @@ -9560,19 +9651,6 @@ "type" : "integer", "format" : "int64" }, - "first" : { - "type" : "boolean" - }, - "pageable" : { - "$ref" : "#/definitions/Pageable" - }, - "last" : { - "type" : "boolean" - }, - "numberOfElements" : { - "type" : "integer", - "format" : "int32" - }, "size" : { "type" : "integer", "format" : "int32" @@ -9590,6 +9668,19 @@ "sort" : { "$ref" : "#/definitions/Sort" }, + "first" : { + "type" : "boolean" + }, + "numberOfElements" : { + "type" : "integer", + "format" : "int32" + }, + "pageable" : { + "$ref" : "#/definitions/Pageable" + }, + "last" : { + "type" : "boolean" + }, "empty" : { "type" : "boolean" } @@ -9606,19 +9697,6 @@ "type" : "integer", "format" : "int64" }, - "first" : { - "type" : "boolean" - }, - "pageable" : { - "$ref" : "#/definitions/Pageable" - }, - "last" : { - "type" : "boolean" - }, - "numberOfElements" : { - "type" : "integer", - "format" : "int32" - }, "size" : { "type" : "integer", "format" : "int32" @@ -9636,6 +9714,19 @@ "sort" : { "$ref" : "#/definitions/Sort" }, + "first" : { + "type" : "boolean" + }, + "numberOfElements" : { + "type" : "integer", + "format" : "int32" + }, + "pageable" : { + "$ref" : "#/definitions/Pageable" + }, + "last" : { + "type" : "boolean" + }, "empty" : { "type" : "boolean" } @@ -9652,19 +9743,6 @@ "type" : "integer", "format" : "int64" }, - "first" : { - "type" : "boolean" - }, - "pageable" : { - "$ref" : "#/definitions/Pageable" - }, - "last" : { - "type" : "boolean" - }, - "numberOfElements" : { - "type" : "integer", - "format" : "int32" - }, "size" : { "type" : "integer", "format" : "int32" @@ -9682,6 +9760,19 @@ "sort" : { "$ref" : "#/definitions/Sort" }, + "first" : { + "type" : "boolean" + }, + "numberOfElements" : { + "type" : "integer", + "format" : "int32" + }, + "pageable" : { + "$ref" : "#/definitions/Pageable" + }, + "last" : { + "type" : "boolean" + }, "empty" : { "type" : "boolean" } @@ -9698,19 +9789,6 @@ "type" : "integer", "format" : "int64" }, - "first" : { - "type" : "boolean" - }, - "pageable" : { - "$ref" : "#/definitions/Pageable" - }, - "last" : { - "type" : "boolean" - }, - "numberOfElements" : { - "type" : "integer", - "format" : "int32" - }, "size" : { "type" : "integer", "format" : "int32" @@ -9728,6 +9806,19 @@ "sort" : { "$ref" : "#/definitions/Sort" }, + "first" : { + "type" : "boolean" + }, + "numberOfElements" : { + "type" : "integer", + "format" : "int32" + }, + "pageable" : { + "$ref" : "#/definitions/Pageable" + }, + "last" : { + "type" : "boolean" + }, "empty" : { "type" : "boolean" } @@ -9736,10 +9827,14 @@ "Pageable" : { "type" : "object", "properties" : { - "unpaged" : { - "type" : "boolean" + "offset" : { + "type" : "integer", + "format" : "int64" }, - "paged" : { + "sort" : { + "$ref" : "#/definitions/Sort" + }, + "unpaged" : { "type" : "boolean" }, "pageNumber" : { @@ -9750,12 +9845,8 @@ "type" : "integer", "format" : "int32" }, - "offset" : { - "type" : "integer", - "format" : "int64" - }, - "sort" : { - "$ref" : "#/definitions/Sort" + "paged" : { + "type" : "boolean" } } }, @@ -10700,13 +10791,13 @@ "Sort" : { "type" : "object", "properties" : { - "unsorted" : { + "empty" : { "type" : "boolean" }, "sorted" : { "type" : "boolean" }, - "empty" : { + "unsorted" : { "type" : "boolean" } }