diff --git a/src/main/java/org/wikitolearn/midtier/course/client/ChapterClient.java b/src/main/java/org/wikitolearn/midtier/course/client/ChapterClient.java index 9d2835d..1fe5236 100644 --- a/src/main/java/org/wikitolearn/midtier/course/client/ChapterClient.java +++ b/src/main/java/org/wikitolearn/midtier/course/client/ChapterClient.java @@ -1,122 +1,110 @@ package org.wikitolearn.midtier.course.client; import java.net.URI; +import org.modelmapper.ModelMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.stereotype.Component; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; import org.wikitolearn.midtier.course.entity.Chapter; import org.wikitolearn.midtier.course.entity.EntityList; +import org.wikitolearn.midtier.course.entity.dto.out.UpdateOrSaveChapterClientDto; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; import lombok.extern.slf4j.Slf4j; @Component @Slf4j public class ChapterClient { private final RestTemplate client; @Value("${application.clients.chapters-backend}") private String baseUrl; - + @Autowired private ObjectMapper objectMapper; + @Autowired + private ModelMapper modelMapper; + public ChapterClient(RestTemplateBuilder restTemplateBuilder) { HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); this.client = restTemplateBuilder.requestFactory(() -> requestFactory).build(); } @HystrixCommand(fallbackMethod = "defaultChapters") public EntityList findAll() { URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/chapters").build().encode().toUri(); - return client - .exchange(uri, HttpMethod.GET, null, new ParameterizedTypeReference>() { - }).getBody(); + return client.exchange(uri, HttpMethod.GET, null, new ParameterizedTypeReference>() { + }).getBody(); } public Chapter find(String chapterId, MultiValueMap params) { - URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/chapters/" + chapterId) - .queryParams(params) - .build() - .encode() + URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/chapters/" + chapterId).queryParams(params).build().encode() .toUri(); return client.getForObject(uri, Chapter.class); } - + public EntityList findByPageId(String pageId) throws JsonProcessingException { MultiValueMap query = new LinkedMultiValueMap<>(); ObjectNode whereJsonObject = objectMapper.getNodeFactory().objectNode().put("pages._id", pageId); query.add("where", objectMapper.writeValueAsString(whereJsonObject)); - - URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/chapters") - .queryParams(query) - .build() - .encode() - .toUri(); - - return client - .exchange(uri, HttpMethod.GET, null, new ParameterizedTypeReference>() { - }).getBody(); + + URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/chapters").queryParams(query).build().encode().toUri(); + + return client.exchange(uri, HttpMethod.GET, null, new ParameterizedTypeReference>() { + }).getBody(); } - + public Chapter store(Chapter chapter) throws JsonProcessingException { - URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/chapters") - .build() - .encode() - .toUri(); + URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/chapters").build().encode().toUri(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); - HttpEntity httpEntity = new HttpEntity (chapter.toSchemaCompliant(), headers); + HttpEntity httpEntity = new HttpEntity<>( + modelMapper.map(chapter, UpdateOrSaveChapterClientDto.class), headers); return client.postForObject(uri, httpEntity, Chapter.class); } - + public Chapter update(Chapter chapter) throws JsonProcessingException { - URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/chapters/" + chapter.getId()) - .build() - .encode() - .toUri(); - + URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/chapters/" + chapter.getId()).build().encode().toUri(); + HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.setIfMatch(chapter.getEtag()); - - - HttpEntity httpEntity = new HttpEntity (chapter.toSchemaCompliant(), headers); + + HttpEntity httpEntity = new HttpEntity<>( + modelMapper.map(chapter, UpdateOrSaveChapterClientDto.class), headers); return client.patchForObject(uri, httpEntity, Chapter.class); } - + public Chapter delete(Chapter chapter) throws JsonProcessingException { - URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/chapters/" + chapter.getId()) - .build() - .encode() - .toUri(); - + URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/chapters/" + chapter.getId()).build().encode().toUri(); + HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.setIfMatch(chapter.getEtag()); - + HttpEntity httpEntity = new HttpEntity(headers); return client.exchange(uri, HttpMethod.DELETE, httpEntity, Chapter.class).getBody(); } private String defaultChapters() { return "Hello default!"; } } diff --git a/src/main/java/org/wikitolearn/midtier/course/client/CourseClient.java b/src/main/java/org/wikitolearn/midtier/course/client/CourseClient.java index 5eea18c..d2faec4 100644 --- a/src/main/java/org/wikitolearn/midtier/course/client/CourseClient.java +++ b/src/main/java/org/wikitolearn/midtier/course/client/CourseClient.java @@ -1,145 +1,121 @@ package org.wikitolearn.midtier.course.client; import java.net.URI; import org.modelmapper.ModelMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.stereotype.Component; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; import org.wikitolearn.midtier.course.entity.Course; import org.wikitolearn.midtier.course.entity.EntityList; -import org.wikitolearn.midtier.course.entity.dto.out.UpdateCourseClientDto; +import org.wikitolearn.midtier.course.entity.dto.out.UpdateOrSaveCourseClientDto; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; import lombok.extern.slf4j.Slf4j; @Component @Slf4j public class CourseClient { private final RestTemplate client; - + @Autowired private ModelMapper modelMapper; @Value("${application.clients.courses-backend}") private String baseUrl; - + @Autowired private ObjectMapper objectMapper; public CourseClient(RestTemplateBuilder restTemplateBuilder) { HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); this.client = restTemplateBuilder.requestFactory(() -> requestFactory).build(); } @HystrixCommand(fallbackMethod = "defaultCourses") public EntityList findAll(MultiValueMap params) { - URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/courses") - .queryParams(params) - .build() - .encode() - .toUri(); + URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/courses").queryParams(params).build().encode().toUri(); - return client - .exchange(uri, HttpMethod.GET, null, new ParameterizedTypeReference>() { - }).getBody(); + return client.exchange(uri, HttpMethod.GET, null, new ParameterizedTypeReference>() { + }).getBody(); } public Course find(String courseId, MultiValueMap params) { - URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/courses/" + courseId) - .queryParams(params) - .build() - .encode() + URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/courses/" + courseId).queryParams(params).build().encode() .toUri(); return client.getForObject(uri, Course.class); } public EntityList findByChapterId(String chapterId) throws JsonProcessingException { MultiValueMap query = new LinkedMultiValueMap<>(); ObjectNode whereJsonObject = objectMapper.getNodeFactory().objectNode().put("chapters._id", chapterId); query.add("where", objectMapper.writeValueAsString(whereJsonObject)); - URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/courses") - .queryParams(query) - .build() - .encode() - .toUri(); + URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/courses").queryParams(query).build().encode().toUri(); - return client - .exchange(uri, HttpMethod.GET, null, new ParameterizedTypeReference>() { - }).getBody(); + return client.exchange(uri, HttpMethod.GET, null, new ParameterizedTypeReference>() { + }).getBody(); } - + public EntityList getAllCourseVersions(String courseId, MultiValueMap params) { - URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/courses/" + courseId) - .queryParams(params) - .build() - .encode() + URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/courses/" + courseId).queryParams(params).build().encode() .toUri(); - return client - .exchange(uri, HttpMethod.GET, null, new ParameterizedTypeReference>() { - }).getBody(); + return client.exchange(uri, HttpMethod.GET, null, new ParameterizedTypeReference>() { + }).getBody(); } public Course save(Course course) throws JsonProcessingException { - URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/courses") - .build() - .encode() - .toUri(); + URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/courses").build().encode().toUri(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); - HttpEntity httpEntity = new HttpEntity (course.toSchemaCompliant(), headers); + HttpEntity httpEntity = new HttpEntity( + modelMapper.map(course, UpdateOrSaveCourseClientDto.class), headers); return client.postForObject(uri, httpEntity, Course.class); } public Course update(Course course) throws JsonProcessingException { - URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/courses/" + course.getId()) - .build() - .encode() - .toUri(); + URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/courses/" + course.getId()).build().encode().toUri(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.setIfMatch(course.getEtag()); - HttpEntity httpEntity = new HttpEntity (modelMapper.map(course, UpdateCourseClientDto.class), headers); + HttpEntity httpEntity = new HttpEntity( + modelMapper.map(course, UpdateOrSaveCourseClientDto.class), headers); return client.patchForObject(uri, httpEntity, Course.class); } public Course delete(Course course) throws JsonProcessingException { - URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/courses/" + course.getId()) - .build() - .encode() - .toUri(); + URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/courses/" + course.getId()).build().encode().toUri(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.setIfMatch(course.getEtag()); HttpEntity httpEntity = new HttpEntity(headers); return client.exchange(uri, HttpMethod.DELETE, httpEntity, Course.class).getBody(); } private String defaultCourses() { return "Hello default!"; } } diff --git a/src/main/java/org/wikitolearn/midtier/course/client/PageClient.java b/src/main/java/org/wikitolearn/midtier/course/client/PageClient.java index b92eac6..6423d66 100644 --- a/src/main/java/org/wikitolearn/midtier/course/client/PageClient.java +++ b/src/main/java/org/wikitolearn/midtier/course/client/PageClient.java @@ -1,102 +1,98 @@ package org.wikitolearn.midtier.course.client; import java.net.URI; +import org.modelmapper.ModelMapper; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.stereotype.Service; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; import org.wikitolearn.midtier.course.entity.EntityList; import org.wikitolearn.midtier.course.entity.Page; +import org.wikitolearn.midtier.course.entity.dto.out.UpdateOrSavePageClientDto; import com.fasterxml.jackson.core.JsonProcessingException; import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; import lombok.extern.slf4j.Slf4j; @Service @Slf4j public class PageClient { - private final RestTemplate client; - - @Value("${application.clients.pages-backend}") - private String baseUrl; - - public PageClient(RestTemplateBuilder restTemplateBuilder) { - HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); - this.client = restTemplateBuilder.requestFactory(() -> requestFactory).build(); - } - - @HystrixCommand(fallbackMethod = "defaultPages") - public EntityList findAll() { - URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/pages").build().encode().toUri(); - - return client.exchange(uri, HttpMethod.GET, null, new ParameterizedTypeReference>() { - }).getBody(); - } - - public Page find(String pageId, MultiValueMap params) { - URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/pages/" + pageId) - .queryParams(params) - .build() - .encode() - .toUri(); - - return client.getForObject(uri, Page.class); - } - - public Page store(Page page) throws JsonProcessingException { - URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/pages") - .build() - .encode() - .toUri(); - - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - - HttpEntity httpEntity = new HttpEntity (page.toSchemaCompliant(), headers); - return client.postForObject(uri, httpEntity, Page.class); - } - - public Page update(Page page) throws JsonProcessingException { - URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/pages/" + page.getId()) - .build() - .encode() - .toUri(); - - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - headers.setIfMatch(page.getEtag()); - - HttpEntity httpEntity = new HttpEntity (page.toSchemaCompliant(), headers); - return client.patchForObject(uri, httpEntity, Page.class); - } - - public Page delete(Page page) throws JsonProcessingException { - URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/pages/" + page.getId()) - .build() - .encode() - .toUri(); - - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - headers.setIfMatch(page.getEtag()); - - HttpEntity httpEntity = new HttpEntity(headers); - return client.exchange(uri, HttpMethod.DELETE, httpEntity, Page.class).getBody(); - } - - private String defaultPages() { - return "Hello default!"; - } + private final RestTemplate client; + + @Value("${application.clients.pages-backend}") + private String baseUrl; + + @Autowired + private ModelMapper modelMapper; + + public PageClient(RestTemplateBuilder restTemplateBuilder) { + HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); + this.client = restTemplateBuilder.requestFactory(() -> requestFactory).build(); + } + + @HystrixCommand(fallbackMethod = "defaultPages") + public EntityList findAll() { + URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/pages").build().encode().toUri(); + + return client.exchange(uri, HttpMethod.GET, null, new ParameterizedTypeReference>() { + }).getBody(); + } + + public Page find(String pageId, MultiValueMap params) { + URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/pages/" + pageId).queryParams(params).build().encode() + .toUri(); + + return client.getForObject(uri, Page.class); + } + + public Page store(Page page) throws JsonProcessingException { + URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/pages").build().encode().toUri(); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + + HttpEntity httpEntity = new HttpEntity<>( + modelMapper.map(page, UpdateOrSavePageClientDto.class), headers); + return client.postForObject(uri, httpEntity, Page.class); + } + + public Page update(Page page) throws JsonProcessingException { + URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/pages/" + page.getId()).build().encode().toUri(); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setIfMatch(page.getEtag()); + + HttpEntity httpEntity = new HttpEntity<>( + modelMapper.map(page, UpdateOrSavePageClientDto.class), headers); + return client.patchForObject(uri, httpEntity, Page.class); + } + + public Page delete(Page page) throws JsonProcessingException { + URI uri = UriComponentsBuilder.fromHttpUrl(baseUrl + "/pages/" + page.getId()).build().encode().toUri(); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + headers.setIfMatch(page.getEtag()); + + HttpEntity httpEntity = new HttpEntity(headers); + return client.exchange(uri, HttpMethod.DELETE, httpEntity, Page.class).getBody(); + } + + private String defaultPages() { + return "Hello default!"; + } } diff --git a/src/main/java/org/wikitolearn/midtier/course/entity/Chapter.java b/src/main/java/org/wikitolearn/midtier/course/entity/Chapter.java index df3388e..618ad58 100644 --- a/src/main/java/org/wikitolearn/midtier/course/entity/Chapter.java +++ b/src/main/java/org/wikitolearn/midtier/course/entity/Chapter.java @@ -1,38 +1,19 @@ package org.wikitolearn.midtier.course.entity; -import java.util.Collections; import java.util.List; -import java.util.Optional; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; import lombok.ToString; @ToString(callSuper=true) @EqualsAndHashCode(callSuper=true) @RequiredArgsConstructor @Getter @Setter public class Chapter extends Entity { private List pages; - - public String toSchemaCompliant() throws JsonProcessingException { - Optional - .ofNullable(this.pages) - .orElseGet(Collections::emptyList) - .stream().forEachOrdered(p -> {p.setTitle(null); p.setLanguage(null); p.setContent(null);}); - this.setEtag(null); - this.setCreated(null); - this.setUpdated(null); - this.setVersion(0); - this.setLatestVersion(0); - ObjectMapper mapper = new ObjectMapper(); - return mapper.writeValueAsString(this); - } } diff --git a/src/main/java/org/wikitolearn/midtier/course/entity/Course.java b/src/main/java/org/wikitolearn/midtier/course/entity/Course.java index 0e76cad..347b963 100644 --- a/src/main/java/org/wikitolearn/midtier/course/entity/Course.java +++ b/src/main/java/org/wikitolearn/midtier/course/entity/Course.java @@ -1,37 +1,18 @@ package org.wikitolearn.midtier.course.entity; -import java.util.Collections; import java.util.List; -import java.util.Optional; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; import lombok.ToString; @ToString(callSuper=true) @EqualsAndHashCode(callSuper=true) @RequiredArgsConstructor @Getter @Setter public class Course extends Entity { private List chapters; - - public String toSchemaCompliant() throws JsonProcessingException { - Optional - .ofNullable(this.chapters) - .orElseGet(Collections::emptyList) - .stream().forEachOrdered(c -> {c.setTitle(null); c.setLanguage(null); c.setPages(null);}); - this.setEtag(null); - this.setCreated(null); - this.setUpdated(null); - this.setVersion(0); - this.setLatestVersion(0); - ObjectMapper mapper = new ObjectMapper(); - return mapper.writeValueAsString(this); - } } diff --git a/src/main/java/org/wikitolearn/midtier/course/entity/Entity.java b/src/main/java/org/wikitolearn/midtier/course/entity/Entity.java index 7b361ae..b986130 100644 --- a/src/main/java/org/wikitolearn/midtier/course/entity/Entity.java +++ b/src/main/java/org/wikitolearn/midtier/course/entity/Entity.java @@ -1,65 +1,58 @@ package org.wikitolearn.midtier.course.entity; import java.util.Date; import java.util.List; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(Include.NON_DEFAULT) public abstract class Entity { @JsonProperty("_id") private String id; @ApiModelProperty( readOnly = true ) @JsonProperty("_etag") private String etag; @JsonProperty("_version") private int version; @ApiModelProperty( readOnly = true ) @JsonProperty("_latest_version") private int latestVersion; @ApiModelProperty( readOnly = true ) @JsonFormat (shape = JsonFormat.Shape.STRING, pattern = "EEE, dd MMM yyyy HH:mm:ss z") @JsonProperty("_updated") private Date updated; @ApiModelProperty( readOnly = true ) @JsonFormat (shape = JsonFormat.Shape.STRING, pattern = "EEE, dd MMM yyyy HH:mm:ss z") @JsonProperty("_created") private Date created; @ApiModelProperty( readOnly = true ) @JsonProperty("_deleted") private boolean deleted; private String title; @ApiModelProperty( readOnly = true ) private List authors; private String language; - - public String toJson() throws JsonProcessingException { - ObjectMapper mapper = new ObjectMapper(); - return mapper.writeValueAsString(this); - } } diff --git a/src/main/java/org/wikitolearn/midtier/course/entity/Page.java b/src/main/java/org/wikitolearn/midtier/course/entity/Page.java index 090402f..6296793 100644 --- a/src/main/java/org/wikitolearn/midtier/course/entity/Page.java +++ b/src/main/java/org/wikitolearn/midtier/course/entity/Page.java @@ -1,30 +1,17 @@ package org.wikitolearn.midtier.course.entity; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; - import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; import lombok.ToString; @ToString(callSuper=true) @EqualsAndHashCode(callSuper=true) @RequiredArgsConstructor @Getter @Setter public class Page extends Entity { private String content; - - public String toSchemaCompliant() throws JsonProcessingException { - this.setEtag(null); - this.setCreated(null); - this.setUpdated(null); - this.setVersion(0); - this.setLatestVersion(0); - ObjectMapper mapper = new ObjectMapper(); - return mapper.writeValueAsString(this); - } } diff --git a/src/main/java/org/wikitolearn/midtier/course/entity/dto/out/UpdateCourseClientDto.java b/src/main/java/org/wikitolearn/midtier/course/entity/dto/out/UpdateOrSaveChapterClientDto.java similarity index 83% copy from src/main/java/org/wikitolearn/midtier/course/entity/dto/out/UpdateCourseClientDto.java copy to src/main/java/org/wikitolearn/midtier/course/entity/dto/out/UpdateOrSaveChapterClientDto.java index da83e8b..65b6fe2 100644 --- a/src/main/java/org/wikitolearn/midtier/course/entity/dto/out/UpdateCourseClientDto.java +++ b/src/main/java/org/wikitolearn/midtier/course/entity/dto/out/UpdateOrSaveChapterClientDto.java @@ -1,34 +1,34 @@ package org.wikitolearn.midtier.course.entity.dto.out; import java.util.List; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(Include.NON_DEFAULT) -public class UpdateCourseClientDto { +public class UpdateOrSaveChapterClientDto { private String title; private String language; - private List chapters; + private List pages; @Data @NoArgsConstructor @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(Include.NON_DEFAULT) - public static final class ChapterInUpdateCourseChapter { + public static final class PageInUpdateOrSaveChapter { @JsonProperty("_id") private String id; @JsonProperty("_version") private int version; } } diff --git a/src/main/java/org/wikitolearn/midtier/course/entity/dto/out/UpdateCourseClientDto.java b/src/main/java/org/wikitolearn/midtier/course/entity/dto/out/UpdateOrSaveCourseClientDto.java similarity index 82% rename from src/main/java/org/wikitolearn/midtier/course/entity/dto/out/UpdateCourseClientDto.java rename to src/main/java/org/wikitolearn/midtier/course/entity/dto/out/UpdateOrSaveCourseClientDto.java index da83e8b..d20f588 100644 --- a/src/main/java/org/wikitolearn/midtier/course/entity/dto/out/UpdateCourseClientDto.java +++ b/src/main/java/org/wikitolearn/midtier/course/entity/dto/out/UpdateOrSaveCourseClientDto.java @@ -1,34 +1,34 @@ package org.wikitolearn.midtier.course.entity.dto.out; import java.util.List; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(Include.NON_DEFAULT) -public class UpdateCourseClientDto { +public class UpdateOrSaveCourseClientDto { private String title; private String language; - private List chapters; + private List chapters; @Data @NoArgsConstructor @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(Include.NON_DEFAULT) - public static final class ChapterInUpdateCourseChapter { + public static final class ChapterInUpdateOrSaveCourse { @JsonProperty("_id") private String id; @JsonProperty("_version") private int version; } } diff --git a/src/main/java/org/wikitolearn/midtier/course/entity/dto/out/UpdateOrSavePageClientDto.java b/src/main/java/org/wikitolearn/midtier/course/entity/dto/out/UpdateOrSavePageClientDto.java new file mode 100644 index 0000000..6a59ee1 --- /dev/null +++ b/src/main/java/org/wikitolearn/midtier/course/entity/dto/out/UpdateOrSavePageClientDto.java @@ -0,0 +1,18 @@ +package org.wikitolearn.midtier.course.entity.dto.out; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; + +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(Include.NON_DEFAULT) +public class UpdateOrSavePageClientDto { + private String title; + private String language; + private String content; +}