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 e4d2ce4e7170642574ac600f7cfdaca6e1935c79..0000000000000000000000000000000000000000 --- 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 c4461719739470036e40be5f9bb878e195841f57..2f5b78de8de335f600898a4833af33bb5b39fb64 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 0000000000000000000000000000000000000000..7f2c4a16013359c8930067136aa8a6b7ca252e2e --- /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 06e63b23645d2ab1f5c7c671491dc882ffed9bfa..90fca7fb0133b7a24f9f802b73d98f1dba895d3e 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 0000000000000000000000000000000000000000..977a08906ea329089bd78ae0b2876da85901945f --- /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); + } +}