From b4041d17e208b26cddf8abeacee23c7eaee7d701 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AA=85=ED=9B=88?= Date: Thu, 25 Apr 2024 09:11:26 +0900 Subject: [PATCH 01/15] :fire: :: fire unused import --- .../main/java/com/msg/gcms/data/remote/network/api/AttendAPI.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/msg/gcms/data/remote/network/api/AttendAPI.kt b/app/src/main/java/com/msg/gcms/data/remote/network/api/AttendAPI.kt index be81c797..190e7783 100644 --- a/app/src/main/java/com/msg/gcms/data/remote/network/api/AttendAPI.kt +++ b/app/src/main/java/com/msg/gcms/data/remote/network/api/AttendAPI.kt @@ -11,7 +11,6 @@ import retrofit2.http.POST import retrofit2.http.Path import retrofit2.http.Query import java.time.LocalDate -import java.time.LocalTime interface AttendAPI { From 9eb441436a18c48f03d6a7170319dc1b485e47e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AA=85=ED=9B=88?= Date: Thu, 25 Apr 2024 09:41:09 +0900 Subject: [PATCH 02/15] :sparkles: :: Add NotificationAPI --- .../remote/network/api/NotificationAPI.kt | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 app/src/main/java/com/msg/gcms/data/remote/network/api/NotificationAPI.kt diff --git a/app/src/main/java/com/msg/gcms/data/remote/network/api/NotificationAPI.kt b/app/src/main/java/com/msg/gcms/data/remote/network/api/NotificationAPI.kt new file mode 100644 index 00000000..c7e5e55c --- /dev/null +++ b/app/src/main/java/com/msg/gcms/data/remote/network/api/NotificationAPI.kt @@ -0,0 +1,41 @@ +package com.msg.gcms.data.remote.network.api + +import com.msg.gcms.data.remote.dto.notification.request.PatchModifyNotificationRequest +import com.msg.gcms.data.remote.dto.notification.request.PostWriteNotificationRequest +import com.msg.gcms.data.remote.dto.notification.response.GetDetailNotificationResponse +import com.msg.gcms.data.remote.dto.notification.response.GetNotificationListResponse +import retrofit2.http.Body +import retrofit2.http.DELETE +import retrofit2.http.GET +import retrofit2.http.PATCH +import retrofit2.http.POST +import retrofit2.http.Path + +interface NotificationAPI { + + @POST("notification/{club_id}") + fun writeNotification( + @Path("club_id") clubId: Long, + @Body body: PostWriteNotificationRequest + ) + + @GET("notification/{club_id}/all") + fun getNoticeList( + @Path("club_id") clubId: Long + ): GetNotificationListResponse + + @GET("notification/{id}") + fun getDetailNotification( + @Path("id") id: Long + ): GetDetailNotificationResponse + + @PATCH("notification/{id}") + fun patchNotification( + @Path("id") id: Long + ): PatchModifyNotificationRequest + + @DELETE("notification/{id}") + fun deleteNotification( + @Path("id") id: Long + ) +} \ No newline at end of file From 420be5cd7287a577ba8fe86e81369727d378f531 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AA=85=ED=9B=88?= Date: Thu, 25 Apr 2024 09:41:33 +0900 Subject: [PATCH 03/15] :sparkles: :: Add Notification Request DTO --- .../request/PatchModifyNotificationRequest.kt | 10 ++++++++++ .../request/PostWriteNotificationRequest.kt | 10 ++++++++++ 2 files changed, 20 insertions(+) create mode 100644 app/src/main/java/com/msg/gcms/data/remote/dto/notification/request/PatchModifyNotificationRequest.kt create mode 100644 app/src/main/java/com/msg/gcms/data/remote/dto/notification/request/PostWriteNotificationRequest.kt diff --git a/app/src/main/java/com/msg/gcms/data/remote/dto/notification/request/PatchModifyNotificationRequest.kt b/app/src/main/java/com/msg/gcms/data/remote/dto/notification/request/PatchModifyNotificationRequest.kt new file mode 100644 index 00000000..4a6510e7 --- /dev/null +++ b/app/src/main/java/com/msg/gcms/data/remote/dto/notification/request/PatchModifyNotificationRequest.kt @@ -0,0 +1,10 @@ +package com.msg.gcms.data.remote.dto.notification.request + +import com.google.gson.annotations.SerializedName + +data class PatchModifyNotificationRequest( + @SerializedName("title") + val title: String, + @SerializedName("content") + val content: String +) diff --git a/app/src/main/java/com/msg/gcms/data/remote/dto/notification/request/PostWriteNotificationRequest.kt b/app/src/main/java/com/msg/gcms/data/remote/dto/notification/request/PostWriteNotificationRequest.kt new file mode 100644 index 00000000..fa000d2e --- /dev/null +++ b/app/src/main/java/com/msg/gcms/data/remote/dto/notification/request/PostWriteNotificationRequest.kt @@ -0,0 +1,10 @@ +package com.msg.gcms.data.remote.dto.notification.request + +import com.google.gson.annotations.SerializedName + +data class PostWriteNotificationRequest( + @SerializedName("title") + val title: String, + @SerializedName("content") + val content: String +) From 2363b72218bd94485bf248cc9d68ea5381530e58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AA=85=ED=9B=88?= Date: Thu, 25 Apr 2024 09:41:59 +0900 Subject: [PATCH 04/15] :sparkles: :: Add Notification Response DTO --- .../response/GetDetailNotificationResponse.kt | 17 ++++++++++++++++ .../response/GetNotificationListResponse.kt | 20 +++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 app/src/main/java/com/msg/gcms/data/remote/dto/notification/response/GetDetailNotificationResponse.kt create mode 100644 app/src/main/java/com/msg/gcms/data/remote/dto/notification/response/GetNotificationListResponse.kt diff --git a/app/src/main/java/com/msg/gcms/data/remote/dto/notification/response/GetDetailNotificationResponse.kt b/app/src/main/java/com/msg/gcms/data/remote/dto/notification/response/GetDetailNotificationResponse.kt new file mode 100644 index 00000000..634ce1b4 --- /dev/null +++ b/app/src/main/java/com/msg/gcms/data/remote/dto/notification/response/GetDetailNotificationResponse.kt @@ -0,0 +1,17 @@ +package com.msg.gcms.data.remote.dto.notification.response + +import com.google.gson.annotations.SerializedName +import java.time.LocalDateTime + +data class GetDetailNotificationResponse( + @SerializedName("title") + val title: String, + @SerializedName("content") + val content: String, + @SerializedName("username") + val username: String, + @SerializedName("userProfileImg") + val userProfileImg: String, + @SerializedName("createdAt") + val createdAt: LocalDateTime +) diff --git a/app/src/main/java/com/msg/gcms/data/remote/dto/notification/response/GetNotificationListResponse.kt b/app/src/main/java/com/msg/gcms/data/remote/dto/notification/response/GetNotificationListResponse.kt new file mode 100644 index 00000000..104c736b --- /dev/null +++ b/app/src/main/java/com/msg/gcms/data/remote/dto/notification/response/GetNotificationListResponse.kt @@ -0,0 +1,20 @@ +package com.msg.gcms.data.remote.dto.notification.response + +import com.google.gson.annotations.SerializedName +import java.time.LocalDateTime + +data class GetNotificationListResponse( + @SerializedName("notices") + val notices: List +) { + data class Notice( + @SerializedName("id") + val id: Long, + @SerializedName("title") + val title: String, + @SerializedName("username") + val username: String, + @SerializedName("createdAt") + val createdAt: LocalDateTime + ) +} \ No newline at end of file From 98a9ea67bf3b0e7e449b6a24849c335cf0e57a72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AA=85=ED=9B=88?= Date: Thu, 25 Apr 2024 09:43:52 +0900 Subject: [PATCH 05/15] :sparkles: :: provide NotificationAPI To NetworkModule --- app/src/main/java/com/msg/gcms/di/module/NetworkModule.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/src/main/java/com/msg/gcms/di/module/NetworkModule.kt b/app/src/main/java/com/msg/gcms/di/module/NetworkModule.kt index cf9908f9..eb2cb23a 100644 --- a/app/src/main/java/com/msg/gcms/di/module/NetworkModule.kt +++ b/app/src/main/java/com/msg/gcms/di/module/NetworkModule.kt @@ -9,6 +9,7 @@ import com.msg.gcms.data.remote.network.LoginInterceptor import com.msg.gcms.data.remote.network.api.ApplicantAPI import com.msg.gcms.data.remote.network.api.AttendAPI import com.msg.gcms.data.remote.network.api.ClubMemberAPI +import com.msg.gcms.data.remote.network.api.NotificationAPI import com.msg.gcms.data.remote.network.api.UserAPI import dagger.Module import dagger.Provides @@ -110,4 +111,10 @@ object NetworkModule { fun provideAttendService(retrofit: Retrofit): AttendAPI { return retrofit.create(AttendAPI::class.java) } + + @Provides + @Singleton + fun provideNotificationService(retrofit: Retrofit): NotificationAPI { + return retrofit.create(NotificationAPI::class.java) + } } From 81d01d65834fa40ede5eb395f0c284a03828e29b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AA=85=ED=9B=88?= Date: Thu, 25 Apr 2024 11:29:52 +0900 Subject: [PATCH 06/15] =?UTF-8?q?=F0=9F=93=9D=20::=20edit=20mistake?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/remote/network/api/NotificationAPI.kt | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/msg/gcms/data/remote/network/api/NotificationAPI.kt b/app/src/main/java/com/msg/gcms/data/remote/network/api/NotificationAPI.kt index c7e5e55c..096aa972 100644 --- a/app/src/main/java/com/msg/gcms/data/remote/network/api/NotificationAPI.kt +++ b/app/src/main/java/com/msg/gcms/data/remote/network/api/NotificationAPI.kt @@ -9,33 +9,25 @@ import retrofit2.http.DELETE import retrofit2.http.GET import retrofit2.http.PATCH import retrofit2.http.POST -import retrofit2.http.Path interface NotificationAPI { @POST("notification/{club_id}") fun writeNotification( - @Path("club_id") clubId: Long, @Body body: PostWriteNotificationRequest ) @GET("notification/{club_id}/all") - fun getNoticeList( - @Path("club_id") clubId: Long - ): GetNotificationListResponse + fun getNoticeList(): GetNotificationListResponse @GET("notification/{id}") - fun getDetailNotification( - @Path("id") id: Long - ): GetDetailNotificationResponse + fun getDetailNotification(): GetDetailNotificationResponse @PATCH("notification/{id}") fun patchNotification( - @Path("id") id: Long - ): PatchModifyNotificationRequest + @Body body: PatchModifyNotificationRequest + ) @DELETE("notification/{id}") - fun deleteNotification( - @Path("id") id: Long - ) + fun deleteNotification() } \ No newline at end of file From d3068141e65959585208a4cc52b9d42824b6a95c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AA=85=ED=9B=88?= Date: Thu, 25 Apr 2024 12:10:40 +0900 Subject: [PATCH 07/15] :sparkles: :: Add NotificationDataSource(Impl)) --- .../notification/NotificationDataSource.kt | 15 +++++ .../NotificationDataSourceImpl.kt | 65 +++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 app/src/main/java/com/msg/gcms/data/remote/datasource/notification/NotificationDataSource.kt create mode 100644 app/src/main/java/com/msg/gcms/data/remote/datasource/notification/NotificationDataSourceImpl.kt diff --git a/app/src/main/java/com/msg/gcms/data/remote/datasource/notification/NotificationDataSource.kt b/app/src/main/java/com/msg/gcms/data/remote/datasource/notification/NotificationDataSource.kt new file mode 100644 index 00000000..d8a22602 --- /dev/null +++ b/app/src/main/java/com/msg/gcms/data/remote/datasource/notification/NotificationDataSource.kt @@ -0,0 +1,15 @@ +package com.msg.gcms.data.remote.datasource.notification + +import com.msg.gcms.data.remote.dto.notification.request.PatchModifyNotificationRequest +import com.msg.gcms.data.remote.dto.notification.request.PostWriteNotificationRequest +import com.msg.gcms.data.remote.dto.notification.response.GetDetailNotificationResponse +import com.msg.gcms.data.remote.dto.notification.response.GetNotificationListResponse +import kotlinx.coroutines.flow.Flow + +interface NotificationDataSource { + suspend fun postWriteNotice(body: PostWriteNotificationRequest): Flow + suspend fun getNoticeList(): Flow + suspend fun getDetailNotice(): Flow + suspend fun patchNotice(body: PatchModifyNotificationRequest): Flow + suspend fun deleteNotice(): Flow +} \ No newline at end of file diff --git a/app/src/main/java/com/msg/gcms/data/remote/datasource/notification/NotificationDataSourceImpl.kt b/app/src/main/java/com/msg/gcms/data/remote/datasource/notification/NotificationDataSourceImpl.kt new file mode 100644 index 00000000..3a5d2e9c --- /dev/null +++ b/app/src/main/java/com/msg/gcms/data/remote/datasource/notification/NotificationDataSourceImpl.kt @@ -0,0 +1,65 @@ +package com.msg.gcms.data.remote.datasource.notification + +import com.msg.gcms.data.remote.dto.notification.request.PatchModifyNotificationRequest +import com.msg.gcms.data.remote.dto.notification.request.PostWriteNotificationRequest +import com.msg.gcms.data.remote.dto.notification.response.GetDetailNotificationResponse +import com.msg.gcms.data.remote.dto.notification.response.GetNotificationListResponse +import com.msg.gcms.data.remote.network.api.NotificationAPI +import com.msg.gcms.data.remote.util.GCMSApiHandler +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flow +import javax.inject.Inject + +class NotificationDataSourceImpl @Inject constructor( + private val noticeService: NotificationAPI +) : NotificationDataSource { + override suspend fun postWriteNotice(body: PostWriteNotificationRequest): Flow = flow { + emit( + GCMSApiHandler() + .httpRequest { + noticeService.writeNotification(body = body) + } + .sendRequest() + ) + } + + override suspend fun getNoticeList(): Flow = flow { + emit( + GCMSApiHandler() + .httpRequest { + noticeService.getNoticeList() + } + .sendRequest() + ) + } + + override suspend fun getDetailNotice(): Flow = flow { + emit( + GCMSApiHandler() + .httpRequest { + noticeService.getDetailNotification() + } + .sendRequest() + ) + } + + override suspend fun patchNotice(body: PatchModifyNotificationRequest): Flow = flow { + emit( + GCMSApiHandler() + .httpRequest { + noticeService.patchNotification(body = body) + } + .sendRequest() + ) + } + + override suspend fun deleteNotice(): Flow = flow { + emit( + GCMSApiHandler() + .httpRequest { + noticeService.deleteNotification() + } + .sendRequest() + ) + } +} \ No newline at end of file From 63fb221465da0128a2cc69b942c60157c355a562 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AA=85=ED=9B=88?= Date: Thu, 25 Apr 2024 12:11:39 +0900 Subject: [PATCH 08/15] :sparkles: :: Bind NotificationDataSource To RemoteDataSourceModule --- .../java/com/msg/gcms/di/module/RemoteDataSourceModule.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/src/main/java/com/msg/gcms/di/module/RemoteDataSourceModule.kt b/app/src/main/java/com/msg/gcms/di/module/RemoteDataSourceModule.kt index ffe35d04..4e369c83 100644 --- a/app/src/main/java/com/msg/gcms/di/module/RemoteDataSourceModule.kt +++ b/app/src/main/java/com/msg/gcms/di/module/RemoteDataSourceModule.kt @@ -12,6 +12,8 @@ import com.msg.gcms.data.remote.datasource.club_member.ClubMemberDataSource import com.msg.gcms.data.remote.datasource.club_member.ClubMemberDataSourceImpl import com.msg.gcms.data.remote.datasource.image.ImageDataSource import com.msg.gcms.data.remote.datasource.image.ImageDataSourceImpl +import com.msg.gcms.data.remote.datasource.notification.NotificationDataSource +import com.msg.gcms.data.remote.datasource.notification.NotificationDataSourceImpl import com.msg.gcms.data.remote.datasource.user.UserDataSource import com.msg.gcms.data.remote.datasource.user.UserDataSourceImpl import dagger.Binds @@ -57,4 +59,9 @@ abstract class RemoteDataSourceModule { abstract fun bindAttendDataSource( attendDataSourceImpl: AttendDataSourceImpl ): AttendDataSource + + @Binds + abstract fun bindNotificationDataSource( + notificationDataSourceImpl: NotificationDataSourceImpl + ): NotificationDataSource } From fc724e12ea438c26e8bb33c09c6072dbd72a0889 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AA=85=ED=9B=88?= Date: Thu, 25 Apr 2024 13:51:55 +0900 Subject: [PATCH 09/15] :memo: :: Add DataClass to Domain-module --- .../response/GetDetailNotificationResponse.kt | 11 +++++++++++ .../response/GetNotificationListResponse.kt | 18 ++++++++++++++++++ .../GetDetailNotificationResponseData.kt | 11 +++++++++++ .../GetNotificationListResponseData.kt | 14 ++++++++++++++ .../PatchModifyNotificationRequestData.kt | 6 ++++++ .../PostWriteNotificationRequestData.kt | 6 ++++++ 6 files changed, 66 insertions(+) create mode 100644 app/src/main/java/com/msg/gcms/domain/data/notification/GetDetailNotificationResponseData.kt create mode 100644 app/src/main/java/com/msg/gcms/domain/data/notification/GetNotificationListResponseData.kt create mode 100644 app/src/main/java/com/msg/gcms/domain/data/notification/PatchModifyNotificationRequestData.kt create mode 100644 app/src/main/java/com/msg/gcms/domain/data/notification/PostWriteNotificationRequestData.kt diff --git a/app/src/main/java/com/msg/gcms/data/remote/dto/notification/response/GetDetailNotificationResponse.kt b/app/src/main/java/com/msg/gcms/data/remote/dto/notification/response/GetDetailNotificationResponse.kt index 634ce1b4..793b142d 100644 --- a/app/src/main/java/com/msg/gcms/data/remote/dto/notification/response/GetDetailNotificationResponse.kt +++ b/app/src/main/java/com/msg/gcms/data/remote/dto/notification/response/GetDetailNotificationResponse.kt @@ -1,6 +1,7 @@ package com.msg.gcms.data.remote.dto.notification.response import com.google.gson.annotations.SerializedName +import com.msg.gcms.domain.data.notification.GetDetailNotificationResponseData import java.time.LocalDateTime data class GetDetailNotificationResponse( @@ -15,3 +16,13 @@ data class GetDetailNotificationResponse( @SerializedName("createdAt") val createdAt: LocalDateTime ) + +fun GetDetailNotificationResponse.toDetailNotificationData(): GetDetailNotificationResponseData { + return GetDetailNotificationResponseData( + title = title, + content = content, + username = username, + userProfileImg = userProfileImg, + createdAt = createdAt + ) +} diff --git a/app/src/main/java/com/msg/gcms/data/remote/dto/notification/response/GetNotificationListResponse.kt b/app/src/main/java/com/msg/gcms/data/remote/dto/notification/response/GetNotificationListResponse.kt index 104c736b..b656ff88 100644 --- a/app/src/main/java/com/msg/gcms/data/remote/dto/notification/response/GetNotificationListResponse.kt +++ b/app/src/main/java/com/msg/gcms/data/remote/dto/notification/response/GetNotificationListResponse.kt @@ -1,6 +1,9 @@ package com.msg.gcms.data.remote.dto.notification.response import com.google.gson.annotations.SerializedName +import com.msg.gcms.domain.data.notification.GetDetailNotificationResponseData +import com.msg.gcms.domain.data.notification.GetNotificationListResponseData +import com.msg.gcms.domain.data.notification.GetNotificationListResponseData.Notice as DomainNotice import java.time.LocalDateTime data class GetNotificationListResponse( @@ -17,4 +20,19 @@ data class GetNotificationListResponse( @SerializedName("createdAt") val createdAt: LocalDateTime ) + + fun Notice.toDomainNotice(): DomainNotice { + return DomainNotice( + id = id, + title = title, + username = username, + createdAt = createdAt + ) + } +} + +fun GetNotificationListResponse.toGetNotificationListResponseData(): GetNotificationListResponseData { + return GetNotificationListResponseData( + notices = notices.map { it.toDomainNotice() } + ) } \ No newline at end of file diff --git a/app/src/main/java/com/msg/gcms/domain/data/notification/GetDetailNotificationResponseData.kt b/app/src/main/java/com/msg/gcms/domain/data/notification/GetDetailNotificationResponseData.kt new file mode 100644 index 00000000..bb3c3462 --- /dev/null +++ b/app/src/main/java/com/msg/gcms/domain/data/notification/GetDetailNotificationResponseData.kt @@ -0,0 +1,11 @@ +package com.msg.gcms.domain.data.notification + +import java.time.LocalDateTime + +data class GetDetailNotificationResponseData( + val title: String, + val content: String, + val username: String, + val userProfileImg: String, + val createdAt: LocalDateTime +) diff --git a/app/src/main/java/com/msg/gcms/domain/data/notification/GetNotificationListResponseData.kt b/app/src/main/java/com/msg/gcms/domain/data/notification/GetNotificationListResponseData.kt new file mode 100644 index 00000000..9877668b --- /dev/null +++ b/app/src/main/java/com/msg/gcms/domain/data/notification/GetNotificationListResponseData.kt @@ -0,0 +1,14 @@ +package com.msg.gcms.domain.data.notification + +import java.time.LocalDateTime + +data class GetNotificationListResponseData( + val notices: List +) { + data class Notice( + val id: Long, + val title: String, + val username: String, + val createdAt: LocalDateTime + ) +} diff --git a/app/src/main/java/com/msg/gcms/domain/data/notification/PatchModifyNotificationRequestData.kt b/app/src/main/java/com/msg/gcms/domain/data/notification/PatchModifyNotificationRequestData.kt new file mode 100644 index 00000000..d8e262ac --- /dev/null +++ b/app/src/main/java/com/msg/gcms/domain/data/notification/PatchModifyNotificationRequestData.kt @@ -0,0 +1,6 @@ +package com.msg.gcms.domain.data.notification + +data class PatchModifyNotificationRequestData( + val title: String, + val content: String +) diff --git a/app/src/main/java/com/msg/gcms/domain/data/notification/PostWriteNotificationRequestData.kt b/app/src/main/java/com/msg/gcms/domain/data/notification/PostWriteNotificationRequestData.kt new file mode 100644 index 00000000..50e19fa3 --- /dev/null +++ b/app/src/main/java/com/msg/gcms/domain/data/notification/PostWriteNotificationRequestData.kt @@ -0,0 +1,6 @@ +package com.msg.gcms.domain.data.notification + +data class PostWriteNotificationRequestData( + val title: String, + val content: String +) From 2b36a41af294f069af7ec37c9f181eb3178eaeb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AA=85=ED=9B=88?= Date: Thu, 25 Apr 2024 13:52:32 +0900 Subject: [PATCH 10/15] :fire: :: Fire Unused import --- .../dto/notification/response/GetNotificationListResponse.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/com/msg/gcms/data/remote/dto/notification/response/GetNotificationListResponse.kt b/app/src/main/java/com/msg/gcms/data/remote/dto/notification/response/GetNotificationListResponse.kt index b656ff88..39864b05 100644 --- a/app/src/main/java/com/msg/gcms/data/remote/dto/notification/response/GetNotificationListResponse.kt +++ b/app/src/main/java/com/msg/gcms/data/remote/dto/notification/response/GetNotificationListResponse.kt @@ -1,7 +1,6 @@ package com.msg.gcms.data.remote.dto.notification.response import com.google.gson.annotations.SerializedName -import com.msg.gcms.domain.data.notification.GetDetailNotificationResponseData import com.msg.gcms.domain.data.notification.GetNotificationListResponseData import com.msg.gcms.domain.data.notification.GetNotificationListResponseData.Notice as DomainNotice import java.time.LocalDateTime From 0437a1eb3d67c741d341e11fc34dc9fe93b4d561 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AA=85=ED=9B=88?= Date: Thu, 25 Apr 2024 14:26:38 +0900 Subject: [PATCH 11/15] :memo: Add Path --- .../notification/NotificationDataSource.kt | 10 +++---- .../NotificationDataSourceImpl.kt | 26 ++++++++++++------- .../remote/network/api/NotificationAPI.kt | 15 ++++++++--- 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/msg/gcms/data/remote/datasource/notification/NotificationDataSource.kt b/app/src/main/java/com/msg/gcms/data/remote/datasource/notification/NotificationDataSource.kt index d8a22602..f92725b1 100644 --- a/app/src/main/java/com/msg/gcms/data/remote/datasource/notification/NotificationDataSource.kt +++ b/app/src/main/java/com/msg/gcms/data/remote/datasource/notification/NotificationDataSource.kt @@ -7,9 +7,9 @@ import com.msg.gcms.data.remote.dto.notification.response.GetNotificationListRes import kotlinx.coroutines.flow.Flow interface NotificationDataSource { - suspend fun postWriteNotice(body: PostWriteNotificationRequest): Flow - suspend fun getNoticeList(): Flow - suspend fun getDetailNotice(): Flow - suspend fun patchNotice(body: PatchModifyNotificationRequest): Flow - suspend fun deleteNotice(): Flow + suspend fun postWriteNotice(clubId: Long, body: PostWriteNotificationRequest): Flow + suspend fun getNoticeList(clubId: Long): Flow + suspend fun getDetailNotice(id: Long): Flow + suspend fun patchNotice(id: Long ,body: PatchModifyNotificationRequest): Flow + suspend fun deleteNotice(id: Long): Flow } \ No newline at end of file diff --git a/app/src/main/java/com/msg/gcms/data/remote/datasource/notification/NotificationDataSourceImpl.kt b/app/src/main/java/com/msg/gcms/data/remote/datasource/notification/NotificationDataSourceImpl.kt index 3a5d2e9c..263b0971 100644 --- a/app/src/main/java/com/msg/gcms/data/remote/datasource/notification/NotificationDataSourceImpl.kt +++ b/app/src/main/java/com/msg/gcms/data/remote/datasource/notification/NotificationDataSourceImpl.kt @@ -13,51 +13,57 @@ import javax.inject.Inject class NotificationDataSourceImpl @Inject constructor( private val noticeService: NotificationAPI ) : NotificationDataSource { - override suspend fun postWriteNotice(body: PostWriteNotificationRequest): Flow = flow { + override suspend fun postWriteNotice(clubId: Long, body: PostWriteNotificationRequest): Flow = flow { emit( GCMSApiHandler() .httpRequest { - noticeService.writeNotification(body = body) + noticeService.writeNotification( + clubId = clubId, + body = body + ) } .sendRequest() ) } - override suspend fun getNoticeList(): Flow = flow { + override suspend fun getNoticeList(clubId: Long): Flow = flow { emit( GCMSApiHandler() .httpRequest { - noticeService.getNoticeList() + noticeService.getNoticeList(clubId = clubId) } .sendRequest() ) } - override suspend fun getDetailNotice(): Flow = flow { + override suspend fun getDetailNotice(id: Long): Flow = flow { emit( GCMSApiHandler() .httpRequest { - noticeService.getDetailNotification() + noticeService.getDetailNotification(id = id) } .sendRequest() ) } - override suspend fun patchNotice(body: PatchModifyNotificationRequest): Flow = flow { + override suspend fun patchNotice(id: Long, body: PatchModifyNotificationRequest): Flow = flow { emit( GCMSApiHandler() .httpRequest { - noticeService.patchNotification(body = body) + noticeService.patchNotification( + id = id, + body = body + ) } .sendRequest() ) } - override suspend fun deleteNotice(): Flow = flow { + override suspend fun deleteNotice(id: Long): Flow = flow { emit( GCMSApiHandler() .httpRequest { - noticeService.deleteNotification() + noticeService.deleteNotification(id = id) } .sendRequest() ) diff --git a/app/src/main/java/com/msg/gcms/data/remote/network/api/NotificationAPI.kt b/app/src/main/java/com/msg/gcms/data/remote/network/api/NotificationAPI.kt index 096aa972..43848087 100644 --- a/app/src/main/java/com/msg/gcms/data/remote/network/api/NotificationAPI.kt +++ b/app/src/main/java/com/msg/gcms/data/remote/network/api/NotificationAPI.kt @@ -9,25 +9,34 @@ import retrofit2.http.DELETE import retrofit2.http.GET import retrofit2.http.PATCH import retrofit2.http.POST +import retrofit2.http.Path interface NotificationAPI { @POST("notification/{club_id}") fun writeNotification( + @Path("club_id") clubId: Long, @Body body: PostWriteNotificationRequest ) @GET("notification/{club_id}/all") - fun getNoticeList(): GetNotificationListResponse + fun getNoticeList( + @Path("club_id") clubId: Long + ): GetNotificationListResponse @GET("notification/{id}") - fun getDetailNotification(): GetDetailNotificationResponse + fun getDetailNotification( + @Path("id") id: Long + ): GetDetailNotificationResponse @PATCH("notification/{id}") fun patchNotification( + @Path("id") id: Long, @Body body: PatchModifyNotificationRequest ) @DELETE("notification/{id}") - fun deleteNotification() + fun deleteNotification( + @Path("id") id: Long + ) } \ No newline at end of file From 2be3305cbfef8f296cec1592934c3bd5cb7726e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AA=85=ED=9B=88?= Date: Thu, 25 Apr 2024 14:32:59 +0900 Subject: [PATCH 12/15] :sparkles: :: Add NotificationRepository(Impl) --- .../repository/NotificationRepositoryImpl.kt | 66 +++++++++++++++++++ .../repository/NotificationRepository.kt | 15 +++++ 2 files changed, 81 insertions(+) create mode 100644 app/src/main/java/com/msg/gcms/data/repository/NotificationRepositoryImpl.kt create mode 100644 app/src/main/java/com/msg/gcms/domain/repository/NotificationRepository.kt diff --git a/app/src/main/java/com/msg/gcms/data/repository/NotificationRepositoryImpl.kt b/app/src/main/java/com/msg/gcms/data/repository/NotificationRepositoryImpl.kt new file mode 100644 index 00000000..669f0373 --- /dev/null +++ b/app/src/main/java/com/msg/gcms/data/repository/NotificationRepositoryImpl.kt @@ -0,0 +1,66 @@ +package com.msg.gcms.data.repository + +import com.msg.gcms.data.remote.datasource.notification.NotificationDataSource +import com.msg.gcms.data.remote.dto.notification.request.PatchModifyNotificationRequest +import com.msg.gcms.data.remote.dto.notification.request.PostWriteNotificationRequest +import com.msg.gcms.data.remote.dto.notification.response.GetDetailNotificationResponse +import com.msg.gcms.data.remote.dto.notification.response.toDetailNotificationData +import com.msg.gcms.data.remote.dto.notification.response.toGetNotificationListResponseData +import com.msg.gcms.domain.data.notification.GetDetailNotificationResponseData +import com.msg.gcms.domain.data.notification.GetNotificationListResponseData +import com.msg.gcms.domain.data.notification.PatchModifyNotificationRequestData +import com.msg.gcms.domain.data.notification.PostWriteNotificationRequestData +import com.msg.gcms.domain.repository.NotificationRepository +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map +import javax.inject.Inject + +class NotificationRepositoryImpl @Inject constructor( + private val notificationDataSource: NotificationDataSource +) : NotificationRepository { + override suspend fun postWriteNotice( + clubId: Long, + body: PostWriteNotificationRequestData + ): Flow { + return notificationDataSource.postWriteNotice( + clubId = clubId, + body = PostWriteNotificationRequest( + title = body.title, + content = body.content + ) + ) + } + + override suspend fun getNoticeList(clubId: Long): Flow { + return notificationDataSource.getNoticeList( + clubId = clubId + ).map { + it.toGetNotificationListResponseData() + } + } + + override suspend fun getDetailNotice(id: Long): Flow { + return notificationDataSource.getDetailNotice(id = id).map { + it.toDetailNotificationData() + } + } + + override suspend fun patchNotice( + id: Long, + body: PatchModifyNotificationRequestData + ): Flow { + return notificationDataSource.patchNotice( + id = id, + body = PatchModifyNotificationRequest( + title = body.title, + content = body.content + ) + ) + } + + override suspend fun deleteNotice(id: Long): Flow { + return notificationDataSource.deleteNotice( + id = id + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/msg/gcms/domain/repository/NotificationRepository.kt b/app/src/main/java/com/msg/gcms/domain/repository/NotificationRepository.kt new file mode 100644 index 00000000..4a55da4a --- /dev/null +++ b/app/src/main/java/com/msg/gcms/domain/repository/NotificationRepository.kt @@ -0,0 +1,15 @@ +package com.msg.gcms.domain.repository + +import com.msg.gcms.domain.data.notification.GetDetailNotificationResponseData +import com.msg.gcms.domain.data.notification.GetNotificationListResponseData +import com.msg.gcms.domain.data.notification.PatchModifyNotificationRequestData +import com.msg.gcms.domain.data.notification.PostWriteNotificationRequestData +import kotlinx.coroutines.flow.Flow + +interface NotificationRepository { + suspend fun postWriteNotice(clubId: Long, body: PostWriteNotificationRequestData): Flow + suspend fun getNoticeList(clubId: Long): Flow + suspend fun getDetailNotice(id: Long): Flow + suspend fun patchNotice(id: Long ,body: PatchModifyNotificationRequestData): Flow + suspend fun deleteNotice(id: Long): Flow +} \ No newline at end of file From d17040c8f8a60491984f7c800b357ad80dd89bf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AA=85=ED=9B=88?= Date: Thu, 25 Apr 2024 14:33:37 +0900 Subject: [PATCH 13/15] :sparkles: :: Bind NotificationRepository to RepositoryModule --- .../main/java/com/msg/gcms/di/module/RepositoryModule.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/src/main/java/com/msg/gcms/di/module/RepositoryModule.kt b/app/src/main/java/com/msg/gcms/di/module/RepositoryModule.kt index 917d5838..14a7dd6e 100644 --- a/app/src/main/java/com/msg/gcms/di/module/RepositoryModule.kt +++ b/app/src/main/java/com/msg/gcms/di/module/RepositoryModule.kt @@ -6,6 +6,7 @@ import com.msg.gcms.data.repository.AuthRepositoryImpl import com.msg.gcms.data.repository.ClubMemberRepositoryImpl import com.msg.gcms.data.repository.ClubRepositoryImpl import com.msg.gcms.data.repository.ImageRepositoryImpl +import com.msg.gcms.data.repository.NotificationRepositoryImpl import com.msg.gcms.data.repository.UserRepositoryImpl import com.msg.gcms.domain.repository.ApplicantRepository import com.msg.gcms.domain.repository.AttendRepository @@ -13,6 +14,7 @@ import com.msg.gcms.domain.repository.AuthRepository import com.msg.gcms.domain.repository.ClubMemberRepository import com.msg.gcms.domain.repository.ClubRepository import com.msg.gcms.domain.repository.ImageRepository +import com.msg.gcms.domain.repository.NotificationRepository import com.msg.gcms.domain.repository.UserRepository import dagger.Binds import dagger.Module @@ -57,4 +59,9 @@ abstract class RepositoryModule { abstract fun bindAttendRepository( attendRepositoryImpl: AttendRepositoryImpl ): AttendRepository + + @Binds + abstract fun bindNotification( + notificationImpl: NotificationRepositoryImpl + ): NotificationRepository } From b98ea86ec670461086475c161d9463ebb69c61ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AA=85=ED=9B=88?= Date: Thu, 25 Apr 2024 15:34:33 +0900 Subject: [PATCH 14/15] :sparkles: :: Add GetNoticeListUseCase --- .../usecase/notification/GetNoticeListUseCase.kt | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 app/src/main/java/com/msg/gcms/domain/usecase/notification/GetNoticeListUseCase.kt diff --git a/app/src/main/java/com/msg/gcms/domain/usecase/notification/GetNoticeListUseCase.kt b/app/src/main/java/com/msg/gcms/domain/usecase/notification/GetNoticeListUseCase.kt new file mode 100644 index 00000000..3c9b870d --- /dev/null +++ b/app/src/main/java/com/msg/gcms/domain/usecase/notification/GetNoticeListUseCase.kt @@ -0,0 +1,12 @@ +package com.msg.gcms.domain.usecase.notification + +import com.msg.gcms.domain.repository.NotificationRepository +import javax.inject.Inject + +class GetNoticeListUseCase @Inject constructor( + private val notificationRepository: NotificationRepository +) { + suspend operator fun invoke(clubId: Long) = runCatching { + notificationRepository.getNoticeList(clubId = clubId) + } +} \ No newline at end of file From a4054746391c877db6c576e91afd2d292754697a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=AA=85=ED=9B=88?= Date: Thu, 25 Apr 2024 15:34:58 +0900 Subject: [PATCH 15/15] :sparkles: :: Add Notification UseCase --- .../usecase/notification/DeleteNoticeUseCase.kt | 12 ++++++++++++ .../notification/GetDetailNoticeUseCase.kt | 12 ++++++++++++ .../usecase/notification/PatchNoticeUseCase.kt | 16 ++++++++++++++++ .../notification/PostWriteNoticeUseCase.kt | 16 ++++++++++++++++ 4 files changed, 56 insertions(+) create mode 100644 app/src/main/java/com/msg/gcms/domain/usecase/notification/DeleteNoticeUseCase.kt create mode 100644 app/src/main/java/com/msg/gcms/domain/usecase/notification/GetDetailNoticeUseCase.kt create mode 100644 app/src/main/java/com/msg/gcms/domain/usecase/notification/PatchNoticeUseCase.kt create mode 100644 app/src/main/java/com/msg/gcms/domain/usecase/notification/PostWriteNoticeUseCase.kt diff --git a/app/src/main/java/com/msg/gcms/domain/usecase/notification/DeleteNoticeUseCase.kt b/app/src/main/java/com/msg/gcms/domain/usecase/notification/DeleteNoticeUseCase.kt new file mode 100644 index 00000000..ef8d9b64 --- /dev/null +++ b/app/src/main/java/com/msg/gcms/domain/usecase/notification/DeleteNoticeUseCase.kt @@ -0,0 +1,12 @@ +package com.msg.gcms.domain.usecase.notification + +import com.msg.gcms.domain.repository.NotificationRepository +import javax.inject.Inject + +class DeleteNoticeUseCase @Inject constructor( + private val notificationRepository: NotificationRepository +) { + suspend operator fun invoke(id: Long) = runCatching { + notificationRepository.deleteNotice(id = id) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/msg/gcms/domain/usecase/notification/GetDetailNoticeUseCase.kt b/app/src/main/java/com/msg/gcms/domain/usecase/notification/GetDetailNoticeUseCase.kt new file mode 100644 index 00000000..e4cb2313 --- /dev/null +++ b/app/src/main/java/com/msg/gcms/domain/usecase/notification/GetDetailNoticeUseCase.kt @@ -0,0 +1,12 @@ +package com.msg.gcms.domain.usecase.notification + +import com.msg.gcms.domain.repository.NotificationRepository +import javax.inject.Inject + +class GetDetailNoticeUseCase @Inject constructor( + private val notificationRepository: NotificationRepository +) { + suspend operator fun invoke(id: Long) = runCatching { + notificationRepository.getDetailNotice(id = id) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/msg/gcms/domain/usecase/notification/PatchNoticeUseCase.kt b/app/src/main/java/com/msg/gcms/domain/usecase/notification/PatchNoticeUseCase.kt new file mode 100644 index 00000000..122d32a0 --- /dev/null +++ b/app/src/main/java/com/msg/gcms/domain/usecase/notification/PatchNoticeUseCase.kt @@ -0,0 +1,16 @@ +package com.msg.gcms.domain.usecase.notification + +import com.msg.gcms.domain.data.notification.PatchModifyNotificationRequestData +import com.msg.gcms.domain.repository.NotificationRepository +import javax.inject.Inject + +class PatchNoticeUseCase @Inject constructor( + private val notificationRepository: NotificationRepository +) { + suspend operator fun invoke(id: Long, body: PatchModifyNotificationRequestData) = runCatching { + notificationRepository.patchNotice( + id = id, + body = body + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/msg/gcms/domain/usecase/notification/PostWriteNoticeUseCase.kt b/app/src/main/java/com/msg/gcms/domain/usecase/notification/PostWriteNoticeUseCase.kt new file mode 100644 index 00000000..e52e3236 --- /dev/null +++ b/app/src/main/java/com/msg/gcms/domain/usecase/notification/PostWriteNoticeUseCase.kt @@ -0,0 +1,16 @@ +package com.msg.gcms.domain.usecase.notification + +import com.msg.gcms.domain.data.notification.PostWriteNotificationRequestData +import com.msg.gcms.domain.repository.NotificationRepository +import javax.inject.Inject + +class PostWriteNoticeUseCase @Inject constructor( + private val notificationRepository: NotificationRepository +) { + suspend operator fun invoke(clubId: Long, body: PostWriteNotificationRequestData) = runCatching { + notificationRepository.postWriteNotice( + clubId = clubId, + body = body + ) + } +} \ No newline at end of file