diff --git a/src/main/java/com/alterdekim/game/controller/StaticController.java b/src/main/java/com/alterdekim/game/controller/StaticController.java index 4964461..0895bdf 100644 --- a/src/main/java/com/alterdekim/game/controller/StaticController.java +++ b/src/main/java/com/alterdekim/game/controller/StaticController.java @@ -1,8 +1,7 @@ package com.alterdekim.game.controller; -import com.alterdekim.game.dto.AuthApiObject; -import com.alterdekim.game.dto.FriendPageResult; -import com.alterdekim.game.dto.SelectOption; +import com.alterdekim.game.dto.*; +import com.alterdekim.game.entities.FriendStatus; import com.alterdekim.game.entities.Image; import com.alterdekim.game.entities.User; import com.alterdekim.game.repository.ImageRepository; @@ -73,9 +72,21 @@ public class StaticController { @GetMapping("/profile/{id}") public String profilePage(@PathVariable("id") Long id, Model model) { - AuthenticationUtil.authProfile(model, userService); + User self = AuthenticationUtil.authProfile(model, userService); User u = userService.findById(id); - model.addAttribute("page_user", new FriendPageResult("", "background-image: url(\"/image/store/"+u.getAvatarId()+"\");", u.getUsername(), u.getId(), u.getDisplayName())); + FriendFollowState state = FriendFollowState.NOT_FOLLOWED; + FriendStatus fs = friendService.getFollow(self.getId(), u.getId()); + if( fs != null ) { + if( fs.getFirstUserId().longValue() == self.getId().longValue() ) { + state = FriendFollowState.FOLLOWED; + } else { + state = FriendFollowState.ACCEPT; + } + } + if( friendService.getFriend(self.getId(), u.getId()) != null ) { + state = FriendFollowState.FOLLOWED; + } + model.addAttribute("page_user", new ProfilePageResult("", "background-image: url(\"/image/store/"+u.getAvatarId()+"\");", u.getUsername(), u.getId(), u.getDisplayName(), 0, 0, friendService.getFriendsOfUserId(u.getId()).size(), state)); return "profile"; } diff --git a/src/main/java/com/alterdekim/game/dto/FriendFollowState.java b/src/main/java/com/alterdekim/game/dto/FriendFollowState.java new file mode 100644 index 0000000..f3082a9 --- /dev/null +++ b/src/main/java/com/alterdekim/game/dto/FriendFollowState.java @@ -0,0 +1,7 @@ +package com.alterdekim.game.dto; + +public enum FriendFollowState { + NOT_FOLLOWED, + FOLLOWED, + ACCEPT +} diff --git a/src/main/java/com/alterdekim/game/dto/ProfilePageResult.java b/src/main/java/com/alterdekim/game/dto/ProfilePageResult.java new file mode 100644 index 0000000..19ebbf8 --- /dev/null +++ b/src/main/java/com/alterdekim/game/dto/ProfilePageResult.java @@ -0,0 +1,20 @@ +package com.alterdekim.game.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +public class ProfilePageResult { + private String href; + private String avatar; + private String username; + private Long id; + private String displayName; + private Integer games; + private Integer wins; + private Integer friends_cnt; + private FriendFollowState follow_state; +} diff --git a/src/main/java/com/alterdekim/game/repository/FriendRepository.java b/src/main/java/com/alterdekim/game/repository/FriendRepository.java index cd3a4a1..79ba076 100644 --- a/src/main/java/com/alterdekim/game/repository/FriendRepository.java +++ b/src/main/java/com/alterdekim/game/repository/FriendRepository.java @@ -24,6 +24,9 @@ public interface FriendRepository extends JpaRepository { @Query(value = "SELECT f FROM FriendStatus f WHERE ((f.firstUserId = :userId AND f.secondUserId = :friendId) OR (f.firstUserId = :friendId AND f.secondUserId = :userId)) AND f.status = 1") FriendStatus getFollow(@Param("userId") Long userId, @Param("friendId") Long friendId); + @Query(value = "SELECT f FROM FriendStatus f WHERE ((f.firstUserId = :userId AND f.secondUserId = :friendId) OR (f.firstUserId = :friendId AND f.secondUserId = :userId)) AND f.status = 2") + FriendStatus getFriend(@Param("userId") Long userId, @Param("friendId") Long friendId); + @Transactional @Modifying @Query(value = "UPDATE FriendStatus f SET f.status = 2 WHERE ((f.firstUserId = :userId AND f.secondUserId = :friendId) OR (f.firstUserId = :friendId AND f.secondUserId = :userId)) AND f.status = 1") diff --git a/src/main/java/com/alterdekim/game/service/FriendServiceImpl.java b/src/main/java/com/alterdekim/game/service/FriendServiceImpl.java index 8d39026..c3184d8 100644 --- a/src/main/java/com/alterdekim/game/service/FriendServiceImpl.java +++ b/src/main/java/com/alterdekim/game/service/FriendServiceImpl.java @@ -27,4 +27,12 @@ public class FriendServiceImpl { } repository.setFriend(userId, friendId); } + + public FriendStatus getFollow(Long userId, Long friendId) { + return repository.getFollow(userId, friendId); + } + + public FriendStatus getFriend(Long userId, Long friendId) { + return repository.getFriend(userId, friendId); + } } diff --git a/src/main/resources/templates/profile.html b/src/main/resources/templates/profile.html index 092f733..10e048b 100644 --- a/src/main/resources/templates/profile.html +++ b/src/main/resources/templates/profile.html @@ -14,19 +14,34 @@
- + + + + + + + + + + + + + + + +
-
5
-
Friends
+
+
Games
-
5
-
Friends
+
+
Wins
-
5
+
Friends