From 1e86222db066740a4c4d27f84db50d41ddda6e7a Mon Sep 17 00:00:00 2001 From: maxnes3 <112558334+maxnes3@users.noreply.github.com> Date: Sat, 23 Dec 2023 11:34:54 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=B4=D0=B0=D0=BB=20=D0=BB=D0=B0=D0=B1?= =?UTF-8?q?=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Mail/MailNotFoundException.java | 7 +++++ .../mobileappserver/Mail/MailService.java | 7 ++++- .../Story/StoryController.java | 9 ++++++ .../mobileappserver/Story/StoryDTO.java | 6 ++-- .../Story/StoryNotFoundException.java | 7 +++++ .../Story/StoryRepository.java | 3 ++ .../mobileappserver/Story/StoryService.java | 21 +++++++++++--- .../mobileappserver/User/UserController.java | 11 +++++++ .../android/mobileappserver/User/UserDTO.java | 6 ++-- .../User/UserNotFoundException.java | 7 +++++ .../mobileappserver/User/UserService.java | 29 ++++++++++++++++--- 11 files changed, 100 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/android/mobileappserver/Mail/MailNotFoundException.java create mode 100644 src/main/java/com/android/mobileappserver/Story/StoryNotFoundException.java create mode 100644 src/main/java/com/android/mobileappserver/User/UserNotFoundException.java diff --git a/src/main/java/com/android/mobileappserver/Mail/MailNotFoundException.java b/src/main/java/com/android/mobileappserver/Mail/MailNotFoundException.java new file mode 100644 index 0000000..55a53e0 --- /dev/null +++ b/src/main/java/com/android/mobileappserver/Mail/MailNotFoundException.java @@ -0,0 +1,7 @@ +package com.android.mobileappserver.Mail; + +public class MailNotFoundException extends RuntimeException{ + public MailNotFoundException(Long id) { + super(String.format("Mail with id [%s] is not found", id)); + } +} \ No newline at end of file diff --git a/src/main/java/com/android/mobileappserver/Mail/MailService.java b/src/main/java/com/android/mobileappserver/Mail/MailService.java index 2b42ad5..da1c689 100644 --- a/src/main/java/com/android/mobileappserver/Mail/MailService.java +++ b/src/main/java/com/android/mobileappserver/Mail/MailService.java @@ -1,11 +1,15 @@ package com.android.mobileappserver.Mail; +import com.android.mobileappserver.Story.StoryModel; +import com.android.mobileappserver.Story.StoryNotFoundException; import com.android.mobileappserver.User.UserService; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.Optional; + @Service public class MailService { private final UserService userService; @@ -43,7 +47,8 @@ public class MailService { @Transactional public MailModel getById(Long id){ - return mailRepository.getReferenceById(id); + final Optional mail = mailRepository.findById(id); + return mail.orElseThrow(() -> new MailNotFoundException(id)); } @Transactional diff --git a/src/main/java/com/android/mobileappserver/Story/StoryController.java b/src/main/java/com/android/mobileappserver/Story/StoryController.java index a948cba..2dc6bc7 100644 --- a/src/main/java/com/android/mobileappserver/Story/StoryController.java +++ b/src/main/java/com/android/mobileappserver/Story/StoryController.java @@ -40,4 +40,13 @@ public class StoryController { StoryDTO::new ).toList(); } + + @GetMapping("/getByUser") + public List getByUser(@RequestParam("page") int page, + @RequestParam("size") int size, + @RequestParam("userId") Long userId) { + return storyService.getUserStoryPaged(userId, page, size).stream().map( + StoryDTO::new + ).toList(); + } } diff --git a/src/main/java/com/android/mobileappserver/Story/StoryDTO.java b/src/main/java/com/android/mobileappserver/Story/StoryDTO.java index d331f7e..25e4c26 100644 --- a/src/main/java/com/android/mobileappserver/Story/StoryDTO.java +++ b/src/main/java/com/android/mobileappserver/Story/StoryDTO.java @@ -3,13 +3,15 @@ package com.android.mobileappserver.Story; import lombok.Data; import lombok.NoArgsConstructor; +import java.nio.charset.StandardCharsets; + @Data @NoArgsConstructor public class StoryDTO { private Long id; private String title; private String description; - private byte[] cover; + private String cover; private Long postdate; private Long userId; @@ -17,8 +19,8 @@ public class StoryDTO { this.id = story.getId(); this.title = story.getTitle(); this.description = story.getDescription(); - this.cover = story.getCover(); this.postdate = story.getPostdate(); this.userId = story.getUser().getId(); + this.cover = new String(story.getCover(), StandardCharsets.UTF_8); } } diff --git a/src/main/java/com/android/mobileappserver/Story/StoryNotFoundException.java b/src/main/java/com/android/mobileappserver/Story/StoryNotFoundException.java new file mode 100644 index 0000000..80e3a12 --- /dev/null +++ b/src/main/java/com/android/mobileappserver/Story/StoryNotFoundException.java @@ -0,0 +1,7 @@ +package com.android.mobileappserver.Story; + +public class StoryNotFoundException extends RuntimeException{ + public StoryNotFoundException(Long id) { + super(String.format("Story with id [%s] is not found", id)); + } +} \ No newline at end of file diff --git a/src/main/java/com/android/mobileappserver/Story/StoryRepository.java b/src/main/java/com/android/mobileappserver/Story/StoryRepository.java index 10218ea..2ec41cf 100644 --- a/src/main/java/com/android/mobileappserver/Story/StoryRepository.java +++ b/src/main/java/com/android/mobileappserver/Story/StoryRepository.java @@ -1,6 +1,9 @@ package com.android.mobileappserver.Story; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; public interface StoryRepository extends JpaRepository { + Page findAllByUserId(Long userIdб, Pageable pageable); } diff --git a/src/main/java/com/android/mobileappserver/Story/StoryService.java b/src/main/java/com/android/mobileappserver/Story/StoryService.java index 6e4d864..90bb436 100644 --- a/src/main/java/com/android/mobileappserver/Story/StoryService.java +++ b/src/main/java/com/android/mobileappserver/Story/StoryService.java @@ -6,6 +6,9 @@ import org.springframework.data.domain.PageRequest; import org.springframework.transaction.annotation.Transactional; import org.springframework.stereotype.Service; +import java.nio.charset.StandardCharsets; +import java.util.Optional; + @Service public class StoryService { private final UserService userService; @@ -16,15 +19,20 @@ public class StoryService { this.storyRepository = storyRepository; } - @Transactional(readOnly = true) + @Transactional public StoryModel getById(Long id){ - return storyRepository.getReferenceById(id); + final Optional story = storyRepository.findById(id); + return story.orElseThrow(() -> new StoryNotFoundException(id)); } @Transactional public StoryModel insert(StoryDTO storyDTO){ var user = userService.getUserById(storyDTO.getUserId()); - StoryModel story = new StoryModel(storyDTO.getTitle(), storyDTO.getDescription(), storyDTO.getCover(), user); + StoryModel story = new StoryModel( + storyDTO.getTitle(), + storyDTO.getDescription(), + storyDTO.getCover().getBytes(StandardCharsets.UTF_8), + user); return storyRepository.save(story); } @@ -33,7 +41,7 @@ public class StoryService { final StoryModel story = getById(storyDTO.getId()); story.setTitle(storyDTO.getTitle()); story.setDescription(storyDTO.getDescription()); - story.setCover(storyDTO.getCover()); + story.setCover(storyDTO.getCover().getBytes(StandardCharsets.UTF_8)); return storyRepository.save(story); } @@ -51,4 +59,9 @@ public class StoryService { public Page getAllStoryPaged(int page, int size){ return storyRepository.findAll(PageRequest.of(page - 1, size)); } + + @Transactional + public Page getUserStoryPaged(Long userId, int page, int size){ + return storyRepository.findAllByUserId(userId, PageRequest.of(page - 1, size)); + } } diff --git a/src/main/java/com/android/mobileappserver/User/UserController.java b/src/main/java/com/android/mobileappserver/User/UserController.java index 2216e34..9e7093f 100644 --- a/src/main/java/com/android/mobileappserver/User/UserController.java +++ b/src/main/java/com/android/mobileappserver/User/UserController.java @@ -14,6 +14,11 @@ public class UserController { this.userService = userService; } + @GetMapping("/get/{id}") + public UserDTO get(@PathVariable("id") Long id){ + return new UserDTO(userService.getUserById(id)); + } + @PostMapping("/signin") public UserDTO signIn(@RequestBody UserSignInDTO signInDTO){ return new UserDTO(userService.signIn(signInDTO)); @@ -38,4 +43,10 @@ public class UserController { .toList(); } + @GetMapping("/getAll") + public List getAll() { + return userService.getAll().stream().map( + UserDTO::new + ).toList(); + } } diff --git a/src/main/java/com/android/mobileappserver/User/UserDTO.java b/src/main/java/com/android/mobileappserver/User/UserDTO.java index 2b437a2..50a76b7 100644 --- a/src/main/java/com/android/mobileappserver/User/UserDTO.java +++ b/src/main/java/com/android/mobileappserver/User/UserDTO.java @@ -3,6 +3,8 @@ package com.android.mobileappserver.User; import lombok.Data; import lombok.NoArgsConstructor; +import java.nio.charset.StandardCharsets; + @Data @NoArgsConstructor public class UserDTO { @@ -10,13 +12,13 @@ public class UserDTO { private String login; private String password; private String email; - private byte[] photo; + private String photo; public UserDTO(UserModel user){ this.id = user.getId(); this.login = user.getLogin(); this.password = user.getPassword(); this.email = user.getEmail(); - this.photo = user.getPhoto(); + this.photo = user.getPhoto() != null ? new String(user.getPhoto(), StandardCharsets.UTF_8) : null; } } diff --git a/src/main/java/com/android/mobileappserver/User/UserNotFoundException.java b/src/main/java/com/android/mobileappserver/User/UserNotFoundException.java new file mode 100644 index 0000000..825b809 --- /dev/null +++ b/src/main/java/com/android/mobileappserver/User/UserNotFoundException.java @@ -0,0 +1,7 @@ +package com.android.mobileappserver.User; + +public class UserNotFoundException extends RuntimeException{ + public UserNotFoundException(Long id) { + super(String.format("User with id [%s] is not found", id)); + } +} diff --git a/src/main/java/com/android/mobileappserver/User/UserService.java b/src/main/java/com/android/mobileappserver/User/UserService.java index aacc8eb..d4145f5 100644 --- a/src/main/java/com/android/mobileappserver/User/UserService.java +++ b/src/main/java/com/android/mobileappserver/User/UserService.java @@ -1,11 +1,16 @@ package com.android.mobileappserver.User; import com.android.mobileappserver.Story.StoryModel; +import com.android.mobileappserver.Story.StoryNotFoundException; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.transaction.annotation.Transactional; import org.springframework.stereotype.Service; +import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Objects; +import java.util.Optional; @Service public class UserService { @@ -17,8 +22,13 @@ public class UserService { @Transactional public UserModel update(UserDTO user){ - UserModel userCreate = new UserModel(user.getLogin(), user.getEmail(), user.getPassword(), user.getPhoto()); - return userRepository.save(userCreate); + final UserModel currentUser = getUserById(user.getId()); + byte[] photoBytes = user.getPhoto() != null ? user.getPhoto().getBytes(StandardCharsets.UTF_8) : null; + currentUser.setLogin(user.getLogin()); + currentUser.setEmail(user.getEmail()); + currentUser.setPassword(user.getPassword()); + currentUser.setPhoto(photoBytes); + return userRepository.save(currentUser); } @Transactional @@ -32,7 +42,12 @@ public class UserService { @Transactional public UserModel signUp(UserDTO user){ - UserModel userCreate = new UserModel(user.getLogin(), user.getEmail(), user.getPassword(), user.getPhoto()); + byte[] photoBytes = user.getPhoto() != null ? user.getPhoto().getBytes(StandardCharsets.UTF_8) : null; + UserModel userCreate = new UserModel( + user.getLogin(), + user.getEmail(), + user.getPassword(), + photoBytes); return userRepository.save(userCreate); } @@ -44,6 +59,12 @@ public class UserService { @Transactional public UserModel getUserById(Long id){ - return userRepository.getReferenceById(id); + final Optional user = userRepository.findById(id); + return user.orElseThrow(() -> new UserNotFoundException(id)); + } + + @Transactional + public List getAll(){ + return userRepository.findAll(); } }