From f4a2fea869f5f766f3a10e269eb6b6bd14bc8198 Mon Sep 17 00:00:00 2001 From: Takiguchi Date: Thu, 24 Jan 2019 22:07:43 +0100 Subject: [PATCH] Add json view to DTOs. --- .gitignore | 4 +- pom.xml | 5 +++ .../org/codiki/account/AccountController.java | 10 +++-- .../org/codiki/core/entities/dto/View.java | 6 +++ .../core/entities/persistence/Post.java | 21 +++++++--- .../core/entities/persistence/Role.java | 10 ++++- .../core/entities/persistence/User.java | 21 +++++++--- .../java/org/codiki/posts/PostController.java | 41 ++++++++++++------- 8 files changed, 85 insertions(+), 33 deletions(-) create mode 100755 src/main/java/org/codiki/core/entities/dto/View.java diff --git a/.gitignore b/.gitignore index 8ac47a1..60d15bb 100755 --- a/.gitignore +++ b/.gitignore @@ -25,5 +25,5 @@ nbdist/ ### Angular ### src/main/resources/static/ -src/main/ts/node_modules/ -node/ \ No newline at end of file +**/node_modules/ +node/ diff --git a/pom.xml b/pom.xml index 9d5be99..489d91b 100755 --- a/pom.xml +++ b/pom.xml @@ -48,6 +48,11 @@ spring-boot-starter-test test + + + com.fasterxml.jackson.core + jackson-annotations + org.mindrot diff --git a/src/main/java/org/codiki/account/AccountController.java b/src/main/java/org/codiki/account/AccountController.java index babcdff..835e0de 100755 --- a/src/main/java/org/codiki/account/AccountController.java +++ b/src/main/java/org/codiki/account/AccountController.java @@ -8,6 +8,7 @@ import javax.servlet.http.HttpServletResponse; import org.codiki.core.entities.dto.PasswordWrapperDTO; import org.codiki.core.entities.dto.UserDTO; +import org.codiki.core.entities.dto.View; import org.codiki.core.entities.persistence.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.BadCredentialsException; @@ -21,15 +22,18 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.fasterxml.jackson.annotation.JsonView; + @RestController @RequestMapping("/api/account") public class AccountController { @Autowired private AccountService accountService; - + + @JsonView(View.UserDTO.class) @PostMapping("/login") - public UserDTO login(@RequestBody final User pUser) throws BadCredentialsException { - return new UserDTO(accountService.authenticate(pUser)); + public User login(@RequestBody final User pUser) throws BadCredentialsException { + return accountService.authenticate(pUser); } @GetMapping("/logout") diff --git a/src/main/java/org/codiki/core/entities/dto/View.java b/src/main/java/org/codiki/core/entities/dto/View.java new file mode 100755 index 0000000..44dcb9b --- /dev/null +++ b/src/main/java/org/codiki/core/entities/dto/View.java @@ -0,0 +1,6 @@ +package org.codiki.core.entities.dto; + +public class View { + public interface UserDTO {} + public interface PostDTO {} +} diff --git a/src/main/java/org/codiki/core/entities/persistence/Post.java b/src/main/java/org/codiki/core/entities/persistence/Post.java index 7deee37..173cc1b 100755 --- a/src/main/java/org/codiki/core/entities/persistence/Post.java +++ b/src/main/java/org/codiki/core/entities/persistence/Post.java @@ -19,10 +19,13 @@ import javax.persistence.Temporal; import javax.persistence.TemporalType; import org.codiki.core.entities.dto.PostDTO; +import org.codiki.core.entities.dto.View; import org.codiki.core.utils.DateUtils; import org.hibernate.annotations.Generated; import org.hibernate.annotations.GenerationTime; +import com.fasterxml.jackson.annotation.JsonView; + @Entity @Table(name="post") public class Post implements Serializable { @@ -38,19 +41,25 @@ public class Post implements Serializable { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + @JsonView(View.PostDTO.class) // This annotation serves to fetch the attribute after an insert into db @Generated(GenerationTime.ALWAYS) private String key; - + + @JsonView(View.PostDTO.class) private String title; - + + @JsonView(View.PostDTO.class) private String text; - + + @JsonView(View.PostDTO.class) @Column(length = 250) private String description; - + + @JsonView(View.PostDTO.class) private String image; + @JsonView(View.PostDTO.class) @Column(name = "creation_date") @Temporal(TemporalType.TIMESTAMP) private Date creationDate; @@ -58,10 +67,12 @@ public class Post implements Serializable { /* ******************* */ /* Relations */ /* ******************* */ + @JsonView(View.PostDTO.class) @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "creator_id") private User author; - + + @JsonView(View.PostDTO.class) @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "category_id") private Category category; diff --git a/src/main/java/org/codiki/core/entities/persistence/Role.java b/src/main/java/org/codiki/core/entities/persistence/Role.java index 7d761cb..0140581 100755 --- a/src/main/java/org/codiki/core/entities/persistence/Role.java +++ b/src/main/java/org/codiki/core/entities/persistence/Role.java @@ -8,15 +8,21 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; +import org.codiki.core.entities.dto.View; + +import com.fasterxml.jackson.annotation.JsonView; + @Entity @Table(name="role") public class Role implements Serializable { private static final long serialVersionUID = 1L; - + + @JsonView({View.UserDTO.class}) @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - + + @JsonView({View.UserDTO.class}) private String name; public Long getId() { diff --git a/src/main/java/org/codiki/core/entities/persistence/User.java b/src/main/java/org/codiki/core/entities/persistence/User.java index 17c1984..3a26310 100755 --- a/src/main/java/org/codiki/core/entities/persistence/User.java +++ b/src/main/java/org/codiki/core/entities/persistence/User.java @@ -20,9 +20,12 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import org.codiki.core.entities.dto.View; import org.hibernate.annotations.Generated; import org.hibernate.annotations.GenerationTime; +import com.fasterxml.jackson.annotation.JsonView; + @Entity @Table(name="`user`") public class User implements Serializable { @@ -35,19 +38,24 @@ public class User implements Serializable { @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="user_id_seq") @SequenceGenerator(name="user_id_seq", sequenceName="user_id_seq", allocationSize=1) private Long id; - + + @JsonView({View.UserDTO.class, View.PostDTO.class}) // This annotation serves to fetch the attribute after an insert into db @Generated(GenerationTime.ALWAYS) private String key; - + + @JsonView({View.UserDTO.class, View.PostDTO.class}) private String name; - + + @JsonView({View.UserDTO.class, View.PostDTO.class}) private String email; - + private String password; - + + @JsonView({View.UserDTO.class, View.PostDTO.class}) private String image; - + + @JsonView({View.UserDTO.class, View.PostDTO.class}) @Column(name = "inscription_date") @Temporal(TemporalType.TIMESTAMP) private Date inscriptionDate; @@ -55,6 +63,7 @@ public class User implements Serializable { /* ******************* */ /* Relations */ /* ******************* */ + @JsonView({View.UserDTO.class}) @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "role_id") private Role role; diff --git a/src/main/java/org/codiki/posts/PostController.java b/src/main/java/org/codiki/posts/PostController.java index 0d8873b..a762ce3 100755 --- a/src/main/java/org/codiki/posts/PostController.java +++ b/src/main/java/org/codiki/posts/PostController.java @@ -12,6 +12,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.codiki.core.entities.dto.PostDTO; +import org.codiki.core.entities.dto.View; import org.codiki.core.entities.persistence.Post; import org.codiki.core.entities.persistence.User; import org.codiki.core.repositories.PostRepository; @@ -28,6 +29,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.fasterxml.jackson.annotation.JsonView; + @RestController @RequestMapping("/api/posts") public class PostController { @@ -51,7 +54,8 @@ public class PostController { return StreamSupport.stream(postRepository.findAll().spliterator(), false) .map(PostDTO::new).collect(Collectors.toList()); } - + + @JsonView(View.PostDTO.class) @GetMapping("/{postKey}") public PostDTO getByKey(@PathVariable("postKey") final String pPostKey, final HttpServletResponse response) { @@ -61,7 +65,8 @@ public class PostController { } return result; } - + + @JsonView(View.PostDTO.class) @GetMapping("/{postKey}/source") public PostDTO getByKeyAndSource(@PathVariable("postKey")final String pPostKey, final HttpServletResponse response) { @@ -76,40 +81,45 @@ public class PostController { return result; } - + + @JsonView(View.PostDTO.class) @GetMapping("/last") - public List getLast() { - return postRepository.getLast(PageRequest.of(0, LIMIT_POSTS_HOME)).stream() - .map(PostDTO::new).collect(Collectors.toList()); + public List getLast() { + return postRepository.getLast(PageRequest.of(0, LIMIT_POSTS_HOME)); } - + + @JsonView(View.PostDTO.class) @GetMapping("/search/{searchCriteria}") public List search(@PathVariable("searchCriteria") final String pSearchCriteria) { return postService.search(pSearchCriteria); } - + + @JsonView(View.PostDTO.class) @GetMapping("/byCategory/{categoryId}") public List getByCategory(@PathVariable("categoryId") final Long pCategoryId) { return postRepository.getByCategoryId(pCategoryId).stream() .map(PostDTO::new).collect(Collectors.toList()); } - + + @JsonView(View.PostDTO.class) @GetMapping("/myPosts") - public List getMyPosts(final HttpServletRequest pRequest, final HttpServletResponse pResponse, + public List getMyPosts(final HttpServletRequest pRequest, final HttpServletResponse pResponse, final Principal pPrincipal) throws IOException { - List result = new LinkedList<>(); + List result = new LinkedList<>(); final Optional connectedUser = userService.getUserByPrincipal(pPrincipal); if(connectedUser.isPresent()) { - result = postRepository.getByCreator(connectedUser.get().getId()) - .stream().map(PostDTO::new).collect(Collectors.toList()); +// result = postRepository.getByCreator(connectedUser.get().getId()) +// .stream().map(PostDTO::new).collect(Collectors.toList()); + result = postRepository.getByCreator(connectedUser.get().getId()); } else { pResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED); } return result; } - + + @JsonView(View.PostDTO.class) @PostMapping("/preview") public PostDTO preview(@RequestBody final PostDTO pPost) { final PostDTO result = new PostDTO(); @@ -123,7 +133,8 @@ public class PostController { return result; } - + + @JsonView(View.PostDTO.class) @PostMapping("/") public PostDTO insert(@RequestBody final PostDTO pPost, final HttpServletRequest pRequest, final HttpServletResponse pResponse, final Principal pPrincipal) {