From f622fee4442f148a540c10b44b9f50ee1fb8354d Mon Sep 17 00:00:00 2001 From: kimkyumbi Date: Fri, 21 Jun 2024 11:26:30 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=80=20::=20[#94]=20NoticeDomain=20Sett?= =?UTF-8?q?ing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Service/Sources/Base/MindWayAPI.swift | 1 + .../FetchBookDetailInfoResponseDTO.swift | 4 +- .../Repository/BookRepositoryImpl.swift | 12 ++--- .../UseCase/DeleteBookUseCaseImpl.swift | 4 +- .../UseCase/FetchBookDetailUseCaseImpl.swift | 4 +- .../UseCase/ModifyBookUseCaseImpl.swift | 4 +- .../Domain/NoticeDomain/API/NoticeAPI.swift | 51 +++++++++++++++++++ .../DTO/Response/FetchNoticeResponseDTO.swift | 23 +++++++++ .../RemoteNoticeDataSourceImpl.swift | 8 +++ .../Entity/FetchNoticeEntity.swift | 14 +++++ .../Error/NoticeDomainError.swift | 14 +++++ .../Repository/NoticeRepositoryImpl.swift | 15 ++++++ .../UseCase/FetchNoticeUseCaseImpl.swift | 15 ++++++ .../Notice/RemoteNoticeDataSource.swift | 5 ++ .../Repository/Notice/NoticeRepository.swift | 5 ++ .../UseCase/Notice/FetchNoticeUseCase.swift | 5 ++ 16 files changed, 170 insertions(+), 14 deletions(-) create mode 100644 Service/Sources/Domain/NoticeDomain/API/NoticeAPI.swift create mode 100644 Service/Sources/Domain/NoticeDomain/DTO/Response/FetchNoticeResponseDTO.swift create mode 100644 Service/Sources/Domain/NoticeDomain/DataSource/RemoteNoticeDataSourceImpl.swift create mode 100644 Service/Sources/Domain/NoticeDomain/Entity/FetchNoticeEntity.swift create mode 100644 Service/Sources/Domain/NoticeDomain/Error/NoticeDomainError.swift create mode 100644 Service/Sources/Domain/NoticeDomain/Repository/NoticeRepositoryImpl.swift create mode 100644 Service/Sources/Domain/NoticeDomain/UseCase/FetchNoticeUseCaseImpl.swift create mode 100644 Service/Sources/Interface/DataSource/Notice/RemoteNoticeDataSource.swift create mode 100644 Service/Sources/Interface/Repository/Notice/NoticeRepository.swift create mode 100644 Service/Sources/Interface/UseCase/Notice/FetchNoticeUseCase.swift diff --git a/Service/Sources/Base/MindWayAPI.swift b/Service/Sources/Base/MindWayAPI.swift index 35c0868..47ea538 100644 --- a/Service/Sources/Base/MindWayAPI.swift +++ b/Service/Sources/Base/MindWayAPI.swift @@ -37,6 +37,7 @@ public enum MindWayDomain: String { case order case admin case rank + case notice } extension MindWayDomain { diff --git a/Service/Sources/Domain/BookDomain/DTO/Response/FetchBookDetailInfoResponseDTO.swift b/Service/Sources/Domain/BookDomain/DTO/Response/FetchBookDetailInfoResponseDTO.swift index 77084c9..8cee4b2 100644 --- a/Service/Sources/Domain/BookDomain/DTO/Response/FetchBookDetailInfoResponseDTO.swift +++ b/Service/Sources/Domain/BookDomain/DTO/Response/FetchBookDetailInfoResponseDTO.swift @@ -14,8 +14,8 @@ public struct FetchBookDetailInfoResponseDTO: Decodable { } extension FetchBookDetailInfoResponseDTO { - func toDomain() -> BookDetialInfoEntity { - BookDetialInfoEntity( + func toDomain() -> BookDetailInfoEntity { + BookDetailInfoEntity( title: title, plot: plot ) diff --git a/Service/Sources/Domain/BookDomain/Repository/BookRepositoryImpl.swift b/Service/Sources/Domain/BookDomain/Repository/BookRepositoryImpl.swift index 26b6b7e..c4e5e1f 100644 --- a/Service/Sources/Domain/BookDomain/Repository/BookRepositoryImpl.swift +++ b/Service/Sources/Domain/BookDomain/Repository/BookRepositoryImpl.swift @@ -17,15 +17,15 @@ public struct BookRepositoryImpl: BookRepository { try await remoteBookDataSource.fetchBookList() } - public func modifyBook(req: BookInfoRequestDTO) async throws { - try await remoteBookDataSource.modifyBook(req: req) + public func modifyBook(book_id: Int, req: BookInfoRequestDTO) async throws { + try await remoteBookDataSource.modifyBook(book_id: book_id, req: req) } - public func deleteBook() async throws { - try await remoteBookDataSource.deleteBook() + public func deleteBook(book_id: Int) async throws { + try await remoteBookDataSource.deleteBook(book_id: book_id) } - public func fetchBookDetail() async throws -> BookDetailInfoEntity { - try await remoteBookDataSource.fetchBookDetail() + public func fetchBookDetail(book_id: Int) async throws -> BookDetailInfoEntity { + try await remoteBookDataSource.fetchBookDetail(book_id: book_id) } } diff --git a/Service/Sources/Domain/BookDomain/UseCase/DeleteBookUseCaseImpl.swift b/Service/Sources/Domain/BookDomain/UseCase/DeleteBookUseCaseImpl.swift index 16613cd..341d223 100644 --- a/Service/Sources/Domain/BookDomain/UseCase/DeleteBookUseCaseImpl.swift +++ b/Service/Sources/Domain/BookDomain/UseCase/DeleteBookUseCaseImpl.swift @@ -7,7 +7,7 @@ public struct DeleteBookUseCaseImpl: DeleteBookUseCase { self.bookRepository = bookRepository } - public func execute() async throws { - try await bookRepository.deleteBook() + public func execute(book_id: Int) async throws { + try await bookRepository.deleteBook(book_id: book_id) } } diff --git a/Service/Sources/Domain/BookDomain/UseCase/FetchBookDetailUseCaseImpl.swift b/Service/Sources/Domain/BookDomain/UseCase/FetchBookDetailUseCaseImpl.swift index a590b6e..5f604e9 100644 --- a/Service/Sources/Domain/BookDomain/UseCase/FetchBookDetailUseCaseImpl.swift +++ b/Service/Sources/Domain/BookDomain/UseCase/FetchBookDetailUseCaseImpl.swift @@ -7,7 +7,7 @@ public struct FetchBookDetailUseCaseImpl: FetchBookDetailUseCase { self.bookRepository = bookRepository } - public func execute() async throws -> BookDetailInfoEntity { - try await bookRepository.fetchBookDetail() + public func execute(book_id: Int) async throws -> BookDetailInfoEntity { + try await bookRepository.fetchBookDetail(book_id: book_id) } } diff --git a/Service/Sources/Domain/BookDomain/UseCase/ModifyBookUseCaseImpl.swift b/Service/Sources/Domain/BookDomain/UseCase/ModifyBookUseCaseImpl.swift index 7eefe12..fcda00c 100644 --- a/Service/Sources/Domain/BookDomain/UseCase/ModifyBookUseCaseImpl.swift +++ b/Service/Sources/Domain/BookDomain/UseCase/ModifyBookUseCaseImpl.swift @@ -7,7 +7,7 @@ public struct ModifyBookUseCaseImpl: ModifyBookUseCase { self.bookRepository = bookRepository } - public func execute(req: BookInfoRequestDTO) async throws { - try await bookRepository.modifyBook(req: req) + public func execute(book_id: Int, req: BookInfoRequestDTO) async throws { + try await bookRepository.modifyBook(book_id: book_id, req: req) } } diff --git a/Service/Sources/Domain/NoticeDomain/API/NoticeAPI.swift b/Service/Sources/Domain/NoticeDomain/API/NoticeAPI.swift new file mode 100644 index 0000000..1220782 --- /dev/null +++ b/Service/Sources/Domain/NoticeDomain/API/NoticeAPI.swift @@ -0,0 +1,51 @@ +import Foundation +import Moya + +public enum NoticeAPI { + case fetchNotice +} + +extension NoticeAPI: MindWayAPI { + public typealias ErrorType = NoticeDomainError + + public var domain: MindWayDomain { + .notice + } + + public var urlPath: String { + switch self { + case .fetchNotice: + return "" + } + } + + public var method: Moya.Method { + switch self { + case .fetchNotice: + return .get + } + } + + public var task: Moya.Task { + switch self { + case .fetchNotice: + return .requestPlain + } + } + + public var jwtTokenType: JwtTokenType { + switch self { + case .fetchNotice: + return .accessToken + } + } + + public var errorMap: [Int: ErrorType] { + switch self { + case .fetchNotice: + return [ + 401: .unauthorized + ] + } + } +} diff --git a/Service/Sources/Domain/NoticeDomain/DTO/Response/FetchNoticeResponseDTO.swift b/Service/Sources/Domain/NoticeDomain/DTO/Response/FetchNoticeResponseDTO.swift new file mode 100644 index 0000000..2a46d59 --- /dev/null +++ b/Service/Sources/Domain/NoticeDomain/DTO/Response/FetchNoticeResponseDTO.swift @@ -0,0 +1,23 @@ +import Foundation + +public struct FetchNoticeResponseDTO: Decodable { + public let title: String + public let content: String + + init( + title: String, + content: String + ) { + self.title = title + self.content = content + } +} + +extension FetchNoticeResponseDTO { + func toDomain() -> FetchNoticeEntity { + FetchNoticeEntity( + title: title, + content: content + ) + } +} diff --git a/Service/Sources/Domain/NoticeDomain/DataSource/RemoteNoticeDataSourceImpl.swift b/Service/Sources/Domain/NoticeDomain/DataSource/RemoteNoticeDataSourceImpl.swift new file mode 100644 index 0000000..d9151f4 --- /dev/null +++ b/Service/Sources/Domain/NoticeDomain/DataSource/RemoteNoticeDataSourceImpl.swift @@ -0,0 +1,8 @@ +import Foundation + +public final class RemoteNoticeDataSourceImpl: BaseRemoteDataSource, RemoteNoticeDataSource { + public func fetchNotice() async throws -> FetchNoticeEntity { + try await request(.fetchNotice, dto: FetchNoticeResponseDTO.self) + .toDomain() + } +} diff --git a/Service/Sources/Domain/NoticeDomain/Entity/FetchNoticeEntity.swift b/Service/Sources/Domain/NoticeDomain/Entity/FetchNoticeEntity.swift new file mode 100644 index 0000000..bce755b --- /dev/null +++ b/Service/Sources/Domain/NoticeDomain/Entity/FetchNoticeEntity.swift @@ -0,0 +1,14 @@ +import Foundation + +public struct FetchNoticeEntity { + private let title: String + private let content: String + + init( + title: String, + content: String + ) { + self.title = title + self.content = content + } +} diff --git a/Service/Sources/Domain/NoticeDomain/Error/NoticeDomainError.swift b/Service/Sources/Domain/NoticeDomain/Error/NoticeDomainError.swift new file mode 100644 index 0000000..5137731 --- /dev/null +++ b/Service/Sources/Domain/NoticeDomain/Error/NoticeDomainError.swift @@ -0,0 +1,14 @@ +import Foundation + +public enum NoticeDomainError: Error { + case unauthorized +} + +extension NoticeDomainError: LocalizedError { + public var errorDescription: String? { + switch self { + case .unauthorized: + return "AccessToken이 블랙리스트에 있습니다." + } + } +} diff --git a/Service/Sources/Domain/NoticeDomain/Repository/NoticeRepositoryImpl.swift b/Service/Sources/Domain/NoticeDomain/Repository/NoticeRepositoryImpl.swift new file mode 100644 index 0000000..4188b70 --- /dev/null +++ b/Service/Sources/Domain/NoticeDomain/Repository/NoticeRepositoryImpl.swift @@ -0,0 +1,15 @@ +import Foundation + +public struct NoticeRepositoryImpl: NoticeRepository { + private let remoteNoticeDataSource: any RemoteNoticeDataSource + + public init( + remoteNoticeDataSource: any RemoteNoticeDataSource + ) { + self.remoteNoticeDataSource = remoteNoticeDataSource + } + + public func fetchNotice() async throws -> FetchNoticeEntity { + try await remoteNoticeDataSource.fetchNotice() + } +} diff --git a/Service/Sources/Domain/NoticeDomain/UseCase/FetchNoticeUseCaseImpl.swift b/Service/Sources/Domain/NoticeDomain/UseCase/FetchNoticeUseCaseImpl.swift new file mode 100644 index 0000000..045565f --- /dev/null +++ b/Service/Sources/Domain/NoticeDomain/UseCase/FetchNoticeUseCaseImpl.swift @@ -0,0 +1,15 @@ +import Foundation + +public struct FetchNoticeUseCaseImpl: FetchNoticeUseCase { + private let noticeRepository: any NoticeRepository + + public init( + noticeRepository: any NoticeRepository + ) { + self.noticeRepository = noticeRepository + } + + public func execute() async throws -> FetchNoticeEntity { + try await noticeRepository.fetchNotice() + } +} diff --git a/Service/Sources/Interface/DataSource/Notice/RemoteNoticeDataSource.swift b/Service/Sources/Interface/DataSource/Notice/RemoteNoticeDataSource.swift new file mode 100644 index 0000000..f086d24 --- /dev/null +++ b/Service/Sources/Interface/DataSource/Notice/RemoteNoticeDataSource.swift @@ -0,0 +1,5 @@ +import Foundation + +public protocol RemoteNoticeDataSource { + func fetchNotice() async throws -> FetchNoticeEntity +} diff --git a/Service/Sources/Interface/Repository/Notice/NoticeRepository.swift b/Service/Sources/Interface/Repository/Notice/NoticeRepository.swift new file mode 100644 index 0000000..7e052b8 --- /dev/null +++ b/Service/Sources/Interface/Repository/Notice/NoticeRepository.swift @@ -0,0 +1,5 @@ +import Foundation + +public protocol NoticeRepository { + func fetchNotice() async throws -> FetchNoticeEntity +} diff --git a/Service/Sources/Interface/UseCase/Notice/FetchNoticeUseCase.swift b/Service/Sources/Interface/UseCase/Notice/FetchNoticeUseCase.swift new file mode 100644 index 0000000..38f4b3f --- /dev/null +++ b/Service/Sources/Interface/UseCase/Notice/FetchNoticeUseCase.swift @@ -0,0 +1,5 @@ +import Foundation + +public protocol FetchNoticeUseCase { + func execute() async throws -> FetchNoticeEntity +}