From ab116bb45b8e87ee7eaf1b9794ceb6d1a96f9340 Mon Sep 17 00:00:00 2001
From: Klaus <klaus@vividnext.co.kr>
Date: Fri, 28 Jul 2023 14:38:53 +0900
Subject: [PATCH] =?UTF-8?q?=EB=A7=88=EC=9D=B4=ED=8E=98=EC=9D=B4=EC=A7=80?=
 =?UTF-8?q?=20=EB=A9=94=EC=9D=B8=20-=20=EB=A7=88=EC=9D=B4=ED=8E=98?=
 =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EC=A1=B0=ED=9A=8C=20API=20=EC=B6=94?=
 =?UTF-8?q?=EA=B0=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../sodalive/member/MemberController.kt       | 10 ++++++++
 .../sodalive/member/MemberService.kt          | 25 ++++++++++++++++++-
 .../sodalive/member/myPage/MyPageResponse.kt  | 14 +++++++++++
 3 files changed, 48 insertions(+), 1 deletion(-)
 create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/member/myPage/MyPageResponse.kt

diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberController.kt
index 425add6..30cfcb9 100644
--- a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberController.kt
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberController.kt
@@ -62,4 +62,14 @@ class MemberController(private val service: MemberService) {
             )
         )
     }
+
+    @GetMapping("/mypage")
+    fun getMyPage(
+        @RequestParam container: String,
+        @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
+    ) = run {
+        if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
+
+        ApiResponse.ok(service.getMyPage(member, container))
+    }
 }
diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt
index 59e3eb0..d6e32a9 100644
--- a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt
@@ -9,6 +9,7 @@ import kr.co.vividnext.sodalive.jwt.TokenProvider
 import kr.co.vividnext.sodalive.member.info.GetMemberInfoResponse
 import kr.co.vividnext.sodalive.member.login.LoginRequest
 import kr.co.vividnext.sodalive.member.login.LoginResponse
+import kr.co.vividnext.sodalive.member.myPage.MyPageResponse
 import kr.co.vividnext.sodalive.member.notification.MemberNotificationService
 import kr.co.vividnext.sodalive.member.notification.UpdateNotificationSettingRequest
 import kr.co.vividnext.sodalive.member.signUp.SignUpRequest
@@ -50,7 +51,10 @@ class MemberService(
     private val objectMapper: ObjectMapper,
 
     @Value("\${cloud.aws.s3.bucket}")
-    private val s3Bucket: String
+    private val s3Bucket: String,
+
+    @Value("\${cloud.aws.cloud-front.host}")
+    private val cloudFrontHost: String
 ) : UserDetailsService {
     @Transactional
     fun signUp(
@@ -121,6 +125,25 @@ class MemberService(
         member.container = container
     }
 
+    fun getMyPage(member: Member, container: String): MyPageResponse {
+        return MyPageResponse(
+            nickname = member.nickname,
+            profileUrl = if (member.profileImage != null) {
+                "$cloudFrontHost/${member.profileImage}"
+            } else {
+                "$cloudFrontHost/profile/default-profile.png"
+            },
+            chargeCan = member.getChargeCan(container = container),
+            rewardCan = member.getRewardCan(container = container),
+            youtubeUrl = member.youtubeUrl,
+            instagramUrl = member.instagramUrl,
+            websiteUrl = member.websiteUrl,
+            blogUrl = member.blogUrl,
+            liveReservationCount = 0,
+            isAuth = false
+        )
+    }
+
     private fun login(
         email: String,
         password: String,
diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/myPage/MyPageResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/myPage/MyPageResponse.kt
new file mode 100644
index 0000000..d357f34
--- /dev/null
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/myPage/MyPageResponse.kt
@@ -0,0 +1,14 @@
+package kr.co.vividnext.sodalive.member.myPage
+
+data class MyPageResponse(
+    val nickname: String,
+    val profileUrl: String,
+    val chargeCan: Int,
+    val rewardCan: Int,
+    val youtubeUrl: String?,
+    val instagramUrl: String?,
+    val websiteUrl: String? = null,
+    val blogUrl: String? = null,
+    val liveReservationCount: Int,
+    val isAuth: Boolean
+)