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