From f65192ebe85c9a380b1d4830e2f07bcb96158b07 Mon Sep 17 00:00:00 2001 From: Luke <lomah001@gold.ac.uk> Date: Mon, 13 May 2019 12:40:02 +0100 Subject: [PATCH] upd: moved user repository classes to user package, added new user service layer --- .../repository/UserRepositoryCustom.java | 7 -- .../repository/{ => user}/UserRepository.java | 2 +- .../repository/user/UserRepositoryCustom.java | 7 ++ .../{ => user}/UserRepositoryImpl.java | 4 +- .../glowhouse/service/UserService.java | 68 +++++++++++++++++++ 5 files changed, 78 insertions(+), 10 deletions(-) delete mode 100644 src/main/java/com/backend/glowhouse/repository/UserRepositoryCustom.java rename src/main/java/com/backend/glowhouse/repository/{ => user}/UserRepository.java (91%) create mode 100644 src/main/java/com/backend/glowhouse/repository/user/UserRepositoryCustom.java rename src/main/java/com/backend/glowhouse/repository/{ => user}/UserRepositoryImpl.java (88%) create mode 100644 src/main/java/com/backend/glowhouse/service/UserService.java diff --git a/src/main/java/com/backend/glowhouse/repository/UserRepositoryCustom.java b/src/main/java/com/backend/glowhouse/repository/UserRepositoryCustom.java deleted file mode 100644 index e4d2ce4..0000000 --- a/src/main/java/com/backend/glowhouse/repository/UserRepositoryCustom.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.backend.glowhouse.repository; - -import com.backend.glowhouse.model.Device; - -public interface UserRepositoryCustom { - public boolean updateUserAssignDevice(String username, Device device); -} diff --git a/src/main/java/com/backend/glowhouse/repository/UserRepository.java b/src/main/java/com/backend/glowhouse/repository/user/UserRepository.java similarity index 91% rename from src/main/java/com/backend/glowhouse/repository/UserRepository.java rename to src/main/java/com/backend/glowhouse/repository/user/UserRepository.java index c446171..2f5b78d 100644 --- a/src/main/java/com/backend/glowhouse/repository/UserRepository.java +++ b/src/main/java/com/backend/glowhouse/repository/user/UserRepository.java @@ -1,4 +1,4 @@ -package com.backend.glowhouse.repository; +package com.backend.glowhouse.repository.user; import com.backend.glowhouse.model.User; import org.springframework.data.mongodb.repository.MongoRepository; diff --git a/src/main/java/com/backend/glowhouse/repository/user/UserRepositoryCustom.java b/src/main/java/com/backend/glowhouse/repository/user/UserRepositoryCustom.java new file mode 100644 index 0000000..7f2c4a1 --- /dev/null +++ b/src/main/java/com/backend/glowhouse/repository/user/UserRepositoryCustom.java @@ -0,0 +1,7 @@ +package com.backend.glowhouse.repository.user; + +import com.backend.glowhouse.model.Device; + +public interface UserRepositoryCustom { + public boolean registerDeviceToUser(String username, Device device); +} diff --git a/src/main/java/com/backend/glowhouse/repository/UserRepositoryImpl.java b/src/main/java/com/backend/glowhouse/repository/user/UserRepositoryImpl.java similarity index 88% rename from src/main/java/com/backend/glowhouse/repository/UserRepositoryImpl.java rename to src/main/java/com/backend/glowhouse/repository/user/UserRepositoryImpl.java index 06e63b2..90fca7f 100644 --- a/src/main/java/com/backend/glowhouse/repository/UserRepositoryImpl.java +++ b/src/main/java/com/backend/glowhouse/repository/user/UserRepositoryImpl.java @@ -1,4 +1,4 @@ -package com.backend.glowhouse.repository; +package com.backend.glowhouse.repository.user; import com.backend.glowhouse.model.Device; import com.backend.glowhouse.model.User; @@ -18,7 +18,7 @@ public class UserRepositoryImpl implements UserRepositoryCustom{ } @Override - public boolean updateUserAssignDevice(String username, Device device) { + public boolean registerDeviceToUser(String username, Device device) { Query query = new Query(); query.addCriteria(Criteria.where("username").is(username)); diff --git a/src/main/java/com/backend/glowhouse/service/UserService.java b/src/main/java/com/backend/glowhouse/service/UserService.java new file mode 100644 index 0000000..977a089 --- /dev/null +++ b/src/main/java/com/backend/glowhouse/service/UserService.java @@ -0,0 +1,68 @@ +package com.backend.glowhouse.service; + +import com.backend.glowhouse.model.User; +import com.backend.glowhouse.model.exception.ResourceNotFoundException; +import com.backend.glowhouse.model.response.UserAvailability; +import com.backend.glowhouse.model.response.UserProfile; +import com.backend.glowhouse.model.response.UserSummary; +import com.backend.glowhouse.repository.user.UserRepository; +import com.backend.glowhouse.security.UserPrincipal; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class UserService { + private UserRepository userRepository; + private ObjectMapper mapper = new ObjectMapper(); + private static final Logger logger = LoggerFactory.getLogger(UserService.class); + + @Autowired + public UserService(UserRepository userRepository) { + this.userRepository = userRepository; + } + + public String getCurrentUser(UserPrincipal currentUser) throws JsonProcessingException { + UserSummary userSummary = new UserSummary( + currentUser.getId(), + currentUser.getUsername(), + currentUser.getName() + ); + + return mapper.writeValueAsString(userSummary); + } + + public String retrieveUserProfile(String username) throws JsonProcessingException { + User user = userRepository.findByUsername(username) + .orElseThrow(() -> new ResourceNotFoundException("User", "username", username)); + + UserProfile profile = new UserProfile( + user.getId(), + user.getUsername(), + user.getName(), + user.getEmail(), + user.getPassword(), + user.getDevice().getDeviceId(), + user.getJoinedAt().getTime() + ); + + return mapper.writeValueAsString(profile); + } + + public UserAvailability checkEmailAvailability(String email) { + if (userRepository.existsByEmail(email)) { + return new UserAvailability(false); + } + return new UserAvailability(true); + } + + public UserAvailability checkUsernameAvailability(String username) { + if (userRepository.existsByUsername(username)) { + return new UserAvailability(false); + } + return new UserAvailability(true); + } +} -- GitLab