From 112909f8caee2c6e1a412b75cf0cf2bf8ccd4f48 Mon Sep 17 00:00:00 2001 From: uuuunseo Date: Thu, 18 Jul 2024 13:34:58 +0900 Subject: [PATCH 01/12] :sparkles: :: [#370] UniversityDomain / Entity --- Service/Sources/Base/BitgouelAPI.swift | 1 + .../UniversityDomain/Entity/UniversityInfoEntity.swift | 7 +++++++ 2 files changed, 8 insertions(+) create mode 100644 Service/Sources/Domain/UniversityDomain/Entity/UniversityInfoEntity.swift diff --git a/Service/Sources/Base/BitgouelAPI.swift b/Service/Sources/Base/BitgouelAPI.swift index d20bb120..f45f537a 100644 --- a/Service/Sources/Base/BitgouelAPI.swift +++ b/Service/Sources/Base/BitgouelAPI.swift @@ -43,6 +43,7 @@ public enum BitgouelDomain: String { case email case school case company + case university } extension BitgouelDomain { diff --git a/Service/Sources/Domain/UniversityDomain/Entity/UniversityInfoEntity.swift b/Service/Sources/Domain/UniversityDomain/Entity/UniversityInfoEntity.swift new file mode 100644 index 00000000..b2ea86d9 --- /dev/null +++ b/Service/Sources/Domain/UniversityDomain/Entity/UniversityInfoEntity.swift @@ -0,0 +1,7 @@ +import Foundation + +public struct UniversityInfoEntity: Equatable { + public let universityID: String + public let universityName: String + public let departments: [String] +} From ee10b433de0a7f544fe8ec711152c6bc8d64f20e Mon Sep 17 00:00:00 2001 From: uuuunseo Date: Thu, 18 Jul 2024 13:35:34 +0900 Subject: [PATCH 02/12] :sparkles: :: [#370] UniversityDomain / DTO --- .../DTO/Request/DepartmentRequestDTO.swift | 5 +++ .../Request/UniversityNameRequestDTO.swift | 5 +++ .../Response/UniversityListResponseDTO.swift | 33 +++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 Service/Sources/Domain/UniversityDomain/DTO/Request/DepartmentRequestDTO.swift create mode 100644 Service/Sources/Domain/UniversityDomain/DTO/Request/UniversityNameRequestDTO.swift create mode 100644 Service/Sources/Domain/UniversityDomain/DTO/Response/UniversityListResponseDTO.swift diff --git a/Service/Sources/Domain/UniversityDomain/DTO/Request/DepartmentRequestDTO.swift b/Service/Sources/Domain/UniversityDomain/DTO/Request/DepartmentRequestDTO.swift new file mode 100644 index 00000000..3e9a1468 --- /dev/null +++ b/Service/Sources/Domain/UniversityDomain/DTO/Request/DepartmentRequestDTO.swift @@ -0,0 +1,5 @@ +import Foundation + +public struct DepartmentRequestDTO: Encodable { + public let department: String +} diff --git a/Service/Sources/Domain/UniversityDomain/DTO/Request/UniversityNameRequestDTO.swift b/Service/Sources/Domain/UniversityDomain/DTO/Request/UniversityNameRequestDTO.swift new file mode 100644 index 00000000..0f65f3a2 --- /dev/null +++ b/Service/Sources/Domain/UniversityDomain/DTO/Request/UniversityNameRequestDTO.swift @@ -0,0 +1,5 @@ +import Foundation + +public struct UniversityNameRequestDTO: Encodable { + public let universityName: String +} diff --git a/Service/Sources/Domain/UniversityDomain/DTO/Response/UniversityListResponseDTO.swift b/Service/Sources/Domain/UniversityDomain/DTO/Response/UniversityListResponseDTO.swift new file mode 100644 index 00000000..b46e7a0b --- /dev/null +++ b/Service/Sources/Domain/UniversityDomain/DTO/Response/UniversityListResponseDTO.swift @@ -0,0 +1,33 @@ +import Foundation + +public struct UniversityListResponseDTO: Decodable { + public let universities: [UniversityInfoResponseDTO] +} + +public struct UniversityInfoResponseDTO: Decodable { + public let universityID: String + public let universityName: String + public let departments: [String] + + enum CodingKeys: String, CodingKey { + case universityID = "id" + case universityName + case departments + } +} + +extension UniversityListResponseDTO { + func toDomain() -> [UniversityInfoEntity] { + universities.map { $0.toDomain() } + } +} + +extension UniversityInfoResponseDTO { + func toDomain() -> UniversityInfoEntity { + UniversityInfoEntity( + universityID: universityID, + universityName: universityName, + departments: departments + ) + } +} From 37f6ebdf4a3d1cc3ae4804e4d31c0867b4abc1e8 Mon Sep 17 00:00:00 2001 From: uuuunseo Date: Thu, 18 Jul 2024 13:36:06 +0900 Subject: [PATCH 03/12] :sparkles: :: [#370] UniversityDomain / Error --- .../Error/UniversityDomainError.swift | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Service/Sources/Domain/UniversityDomain/Error/UniversityDomainError.swift diff --git a/Service/Sources/Domain/UniversityDomain/Error/UniversityDomainError.swift b/Service/Sources/Domain/UniversityDomain/Error/UniversityDomainError.swift new file mode 100644 index 00000000..52646d56 --- /dev/null +++ b/Service/Sources/Domain/UniversityDomain/Error/UniversityDomainError.swift @@ -0,0 +1,15 @@ +import Foundation + +public enum UniversityDomainError: Error { + case notFound + case conflict +} + +extension UniversityDomainError: LocalizedError { + public var errorDescription: String? { + switch self { + case .notFound: return "존재하지 않는 대학입니다." + case .conflict: return "아직 존재하는 대학입니다." + } + } +} From e41774096192efc788304e43948e203c19e2f994 Mon Sep 17 00:00:00 2001 From: uuuunseo Date: Thu, 18 Jul 2024 13:37:00 +0900 Subject: [PATCH 04/12] :sparkles: :: [#370] UniversityDomain / UniversityAPI --- .../UniversityDomain/API/UniversityAPI.swift | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 Service/Sources/Domain/UniversityDomain/API/UniversityAPI.swift diff --git a/Service/Sources/Domain/UniversityDomain/API/UniversityAPI.swift b/Service/Sources/Domain/UniversityDomain/API/UniversityAPI.swift new file mode 100644 index 00000000..dcf79ff8 --- /dev/null +++ b/Service/Sources/Domain/UniversityDomain/API/UniversityAPI.swift @@ -0,0 +1,100 @@ +import Foundation +import Moya + +public enum UniversityAPI { + case fetchUniversityList + case createdUniversity(req: UniversityNameRequestDTO) + case modifyUniversity(universityID: String, req: UniversityNameRequestDTO) + case deleteUniversity(universityID: String) + case createdDepartment(universityID: String, req: DepartmentRequestDTO) + case deleteDepartment(universityID: String, department: String) +} + +extension UniversityAPI: BitgouelAPI { + public typealias ErrorType = UniversityDomainError + + public var domain: BitgouelDomain { + .university + } + + public var urlPath: String { + switch self { + case .fetchUniversityList, + .createdUniversity: + return "" + + case let .modifyUniversity(universityID, _), + let .deleteUniversity(universityID): + return "/\(universityID)" + + case let .createdDepartment(universityID, _), + let .deleteDepartment(universityID, _): + return "/department/\(universityID)" + } + } + + public var method: Moya.Method { + switch self { + case .fetchUniversityList: + return .get + + case .createdUniversity, + .createdDepartment: + return .post + + case .deleteUniversity, + .deleteDepartment: + return .delete + + case .modifyUniversity: + return .patch + } + } + + public var task: Moya.Task { + switch self { + case .fetchUniversityList, + .deleteUniversity: + return .requestPlain + + case let .createdUniversity(req), + let .modifyUniversity(_, req): + return .requestJSONEncodable(req) + + case let .createdDepartment(_, req): + return .requestJSONEncodable(req) + + case let .deleteDepartment(_, department): + return .requestParameters( + parameters: [ + "department": department + ], + encoding: URLEncoding.queryString + ) + } + } + + public var jwtTokenType: JwtTokenType { + switch self { + case .fetchUniversityList: + return .none + + case .createdUniversity, + .modifyUniversity, + .deleteUniversity, + .createdDepartment, + .deleteDepartment: + return .accessToken + } + } + + public var errorMap: [Int: UniversityDomainError] { + switch self { + default: + return [ + 404: .notFound, + 409: .conflict + ] + } + } +} From f9cbdbdbc815ffc7ea388093f87e140256de268a Mon Sep 17 00:00:00 2001 From: uuuunseo Date: Thu, 18 Jul 2024 13:39:04 +0900 Subject: [PATCH 05/12] :sparkles: :: [#370] UniversityDomain / DataSource --- .../DataSource/RemoteUniversityDataSource.swift | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Service/Sources/Domain/UniversityDomain/DataSource/RemoteUniversityDataSource.swift diff --git a/Service/Sources/Domain/UniversityDomain/DataSource/RemoteUniversityDataSource.swift b/Service/Sources/Domain/UniversityDomain/DataSource/RemoteUniversityDataSource.swift new file mode 100644 index 00000000..cd435ad1 --- /dev/null +++ b/Service/Sources/Domain/UniversityDomain/DataSource/RemoteUniversityDataSource.swift @@ -0,0 +1,10 @@ +import Foundation + +public protocol RemoteUniversityDataSource: BaseRemoteDataSource { + func fetchUniversityList() async throws -> [UniversityInfoEntity] + func createdUniversity(req: UniversityNameRequestDTO) async throws + func modifyUniversity(universityID: String, req: UniversityNameRequestDTO) async throws + func deleteUniversity(universityID: String) async throws + func createdDepartment(universityID: String, req: DepartmentRequestDTO) async throws + func deleteDepartment(universityID: String, department: String) async throws +} From 7ad8150730b18695a72e24b60c4721b8e2724630 Mon Sep 17 00:00:00 2001 From: uuuunseo Date: Thu, 18 Jul 2024 13:39:26 +0900 Subject: [PATCH 06/12] :sparkles: :: [#370] UniversityDomain / Repository --- .../Repository/UniversityRepository.swift | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Service/Sources/Domain/UniversityDomain/Repository/UniversityRepository.swift diff --git a/Service/Sources/Domain/UniversityDomain/Repository/UniversityRepository.swift b/Service/Sources/Domain/UniversityDomain/Repository/UniversityRepository.swift new file mode 100644 index 00000000..774050aa --- /dev/null +++ b/Service/Sources/Domain/UniversityDomain/Repository/UniversityRepository.swift @@ -0,0 +1,10 @@ +import Foundation + +public protocol UniversityRepository { + func fetchUniversityList() async throws -> [UniversityInfoEntity] + func createdUniversity(req: UniversityNameRequestDTO) async throws + func modifyUniversity(universityID: String, req: UniversityNameRequestDTO) async throws + func deleteUniversity(universityID: String) async throws + func createdDepartment(universityID: String, req: DepartmentRequestDTO) async throws + func deleteDepartment(universityID: String, department: String) async throws +} From ccf319f2611d7f1cd0a1be6fbc2a6b4bc525d2e4 Mon Sep 17 00:00:00 2001 From: uuuunseo Date: Thu, 18 Jul 2024 13:39:54 +0900 Subject: [PATCH 07/12] :sparkles: :: [#370] UniversityDomain / UseCase --- .../UniversityDomain/UseCase/CreatedDepartmentUseCase.swift | 5 +++++ .../UniversityDomain/UseCase/CreatedUniversityUseCase.swift | 5 +++++ .../UniversityDomain/UseCase/DeleteDepartmentUseCase.swift | 5 +++++ .../UniversityDomain/UseCase/DeleteUniversityUseCase.swift | 5 +++++ .../UseCase/FetchUniversityListUseCase.swift | 5 +++++ .../UniversityDomain/UseCase/ModifyUniversityUseCase.swift | 5 +++++ 6 files changed, 30 insertions(+) create mode 100644 Service/Sources/Domain/UniversityDomain/UseCase/CreatedDepartmentUseCase.swift create mode 100644 Service/Sources/Domain/UniversityDomain/UseCase/CreatedUniversityUseCase.swift create mode 100644 Service/Sources/Domain/UniversityDomain/UseCase/DeleteDepartmentUseCase.swift create mode 100644 Service/Sources/Domain/UniversityDomain/UseCase/DeleteUniversityUseCase.swift create mode 100644 Service/Sources/Domain/UniversityDomain/UseCase/FetchUniversityListUseCase.swift create mode 100644 Service/Sources/Domain/UniversityDomain/UseCase/ModifyUniversityUseCase.swift diff --git a/Service/Sources/Domain/UniversityDomain/UseCase/CreatedDepartmentUseCase.swift b/Service/Sources/Domain/UniversityDomain/UseCase/CreatedDepartmentUseCase.swift new file mode 100644 index 00000000..ef522df6 --- /dev/null +++ b/Service/Sources/Domain/UniversityDomain/UseCase/CreatedDepartmentUseCase.swift @@ -0,0 +1,5 @@ +import Foundation + +public protocol CreatedDepartmentUseCase { + func callAsFunction(universityID: String, req: DepartmentRequestDTO) async throws +} diff --git a/Service/Sources/Domain/UniversityDomain/UseCase/CreatedUniversityUseCase.swift b/Service/Sources/Domain/UniversityDomain/UseCase/CreatedUniversityUseCase.swift new file mode 100644 index 00000000..0bb09d3a --- /dev/null +++ b/Service/Sources/Domain/UniversityDomain/UseCase/CreatedUniversityUseCase.swift @@ -0,0 +1,5 @@ +import Foundation + +public protocol CreatedUniversityUseCase { + func callAsFunction(req: UniversityNameRequestDTO) async throws +} diff --git a/Service/Sources/Domain/UniversityDomain/UseCase/DeleteDepartmentUseCase.swift b/Service/Sources/Domain/UniversityDomain/UseCase/DeleteDepartmentUseCase.swift new file mode 100644 index 00000000..f32a0477 --- /dev/null +++ b/Service/Sources/Domain/UniversityDomain/UseCase/DeleteDepartmentUseCase.swift @@ -0,0 +1,5 @@ +import Foundation + +public protocol DeleteDepartmentUseCase { + func callAsFunction(universityID: String, department: String) async throws +} diff --git a/Service/Sources/Domain/UniversityDomain/UseCase/DeleteUniversityUseCase.swift b/Service/Sources/Domain/UniversityDomain/UseCase/DeleteUniversityUseCase.swift new file mode 100644 index 00000000..44cb993a --- /dev/null +++ b/Service/Sources/Domain/UniversityDomain/UseCase/DeleteUniversityUseCase.swift @@ -0,0 +1,5 @@ +import Foundation + +public protocol DeleteUniversityUseCase { + func callAsFunction(universityID: String) async throws +} diff --git a/Service/Sources/Domain/UniversityDomain/UseCase/FetchUniversityListUseCase.swift b/Service/Sources/Domain/UniversityDomain/UseCase/FetchUniversityListUseCase.swift new file mode 100644 index 00000000..22191e7d --- /dev/null +++ b/Service/Sources/Domain/UniversityDomain/UseCase/FetchUniversityListUseCase.swift @@ -0,0 +1,5 @@ +import Foundation + +public protocol FetchUniversityListUseCase { + func callAsFunction() async throws -> [UniversityInfoEntity] +} diff --git a/Service/Sources/Domain/UniversityDomain/UseCase/ModifyUniversityUseCase.swift b/Service/Sources/Domain/UniversityDomain/UseCase/ModifyUniversityUseCase.swift new file mode 100644 index 00000000..466cdd75 --- /dev/null +++ b/Service/Sources/Domain/UniversityDomain/UseCase/ModifyUniversityUseCase.swift @@ -0,0 +1,5 @@ +import Foundation + +public protocol ModifyUniversityUseCase { + func callAsFunction(universityID: String, req: UniversityNameRequestDTO) async throws +} From 3c4ef034fcd27f244e8a99468b0fd2c4c6554358 Mon Sep 17 00:00:00 2001 From: uuuunseo Date: Thu, 18 Jul 2024 13:40:23 +0900 Subject: [PATCH 08/12] :sparkles: :: [#370] UniversityDomain / DataSourceImpl --- .../RemoteUniversityDataSourceImpl.swift | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Service/Sources/Data/DataSource/University/RemoteUniversityDataSourceImpl.swift diff --git a/Service/Sources/Data/DataSource/University/RemoteUniversityDataSourceImpl.swift b/Service/Sources/Data/DataSource/University/RemoteUniversityDataSourceImpl.swift new file mode 100644 index 00000000..3b2a26af --- /dev/null +++ b/Service/Sources/Data/DataSource/University/RemoteUniversityDataSourceImpl.swift @@ -0,0 +1,27 @@ +import Foundation + +public final class RemoteUniversityDataSourceImpl: BaseRemoteDataSource, RemoteUniversityDataSource { + public func fetchUniversityList() async throws -> [UniversityInfoEntity] { + try await request(.fetchUniversityList, dto: UniversityListResponseDTO.self).toDomain() + } + + public func createdUniversity(req: UniversityNameRequestDTO) async throws { + try await request(.createdUniversity(req: req)) + } + + public func modifyUniversity(universityID: String, req: UniversityNameRequestDTO) async throws { + try await request(.modifyUniversity(universityID: universityID, req: req)) + } + + public func deleteUniversity(universityID: String) async throws { + try await request(.deleteUniversity(universityID: universityID)) + } + + public func createdDepartment(universityID: String, req: DepartmentRequestDTO) async throws { + try await request(.createdDepartment(universityID: universityID, req: req)) + } + + public func deleteDepartment(universityID: String, department: String) async throws { + try await request(.deleteDepartment(universityID: universityID, department: department)) + } +} From 174e49542e9856ad9d4d44bbf2db7020ca9f0edd Mon Sep 17 00:00:00 2001 From: uuuunseo Date: Thu, 18 Jul 2024 13:40:50 +0900 Subject: [PATCH 09/12] :sparkles: :: [#370] UniversityDomain / RepositoryImpl --- .../University/UniversityRepositoryImpl.swift | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 Service/Sources/Data/Repository/University/UniversityRepositoryImpl.swift diff --git a/Service/Sources/Data/Repository/University/UniversityRepositoryImpl.swift b/Service/Sources/Data/Repository/University/UniversityRepositoryImpl.swift new file mode 100644 index 00000000..200278bb --- /dev/null +++ b/Service/Sources/Data/Repository/University/UniversityRepositoryImpl.swift @@ -0,0 +1,33 @@ +import Foundation + +public struct UniversityRepositoryImpl: UniversityRepository { + private let remoteUniversityDataSource: any RemoteUniversityDataSource + + public init(remoteUniversityDataSource: any RemoteUniversityDataSource) { + self.remoteUniversityDataSource = remoteUniversityDataSource + } + + public func fetchUniversityList() async throws -> [UniversityInfoEntity] { + try await remoteUniversityDataSource.fetchUniversityList() + } + + public func createdUniversity(req: UniversityNameRequestDTO) async throws { + try await remoteUniversityDataSource.createdUniversity(req: req) + } + + public func modifyUniversity(universityID: String, req: UniversityNameRequestDTO) async throws { + try await remoteUniversityDataSource.modifyUniversity(universityID: universityID, req: req) + } + + public func deleteUniversity(universityID: String) async throws { + try await remoteUniversityDataSource.deleteUniversity(universityID: universityID) + } + + public func createdDepartment(universityID: String, req: DepartmentRequestDTO) async throws { + try await remoteUniversityDataSource.createdDepartment(universityID: universityID, req: req) + } + + public func deleteDepartment(universityID: String, department: String) async throws { + try await remoteUniversityDataSource.deleteDepartment(universityID: universityID, department: department) + } +} From 560f02dd9c64111f7fd28f776a1bad96973919f0 Mon Sep 17 00:00:00 2001 From: uuuunseo Date: Thu, 18 Jul 2024 13:41:12 +0900 Subject: [PATCH 10/12] :sparkles: :: [#370] UniversityDomain / UseCaseImpl --- .../University/CreatedDepartmentUseCaseImpl.swift | 13 +++++++++++++ .../University/CreatedUniversityUseCaseImpl.swift | 13 +++++++++++++ .../University/DeleteDepartmentUseCaseImpl.swift | 13 +++++++++++++ .../University/DeleteUniversityUseCaseImpl.swift | 13 +++++++++++++ .../University/FetchUniversityListUseCaseImpl.swift | 13 +++++++++++++ .../University/ModifyUniversityUseCaseImpl.swift | 13 +++++++++++++ 6 files changed, 78 insertions(+) create mode 100644 Service/Sources/Data/UseCase/University/CreatedDepartmentUseCaseImpl.swift create mode 100644 Service/Sources/Data/UseCase/University/CreatedUniversityUseCaseImpl.swift create mode 100644 Service/Sources/Data/UseCase/University/DeleteDepartmentUseCaseImpl.swift create mode 100644 Service/Sources/Data/UseCase/University/DeleteUniversityUseCaseImpl.swift create mode 100644 Service/Sources/Data/UseCase/University/FetchUniversityListUseCaseImpl.swift create mode 100644 Service/Sources/Data/UseCase/University/ModifyUniversityUseCaseImpl.swift diff --git a/Service/Sources/Data/UseCase/University/CreatedDepartmentUseCaseImpl.swift b/Service/Sources/Data/UseCase/University/CreatedDepartmentUseCaseImpl.swift new file mode 100644 index 00000000..91cbaae9 --- /dev/null +++ b/Service/Sources/Data/UseCase/University/CreatedDepartmentUseCaseImpl.swift @@ -0,0 +1,13 @@ +import Foundation + +public struct CreatedDepartmentUseCaseImpl: CreatedDepartmentUseCase { + private let universityRepository: any UniversityRepository + + public init(universityRepository: any UniversityRepository) { + self.universityRepository = universityRepository + } + + public func callAsFunction(universityID: String, req: DepartmentRequestDTO) async throws { + try await universityRepository.createdDepartment(universityID: universityID, req: req) + } +} diff --git a/Service/Sources/Data/UseCase/University/CreatedUniversityUseCaseImpl.swift b/Service/Sources/Data/UseCase/University/CreatedUniversityUseCaseImpl.swift new file mode 100644 index 00000000..562278fc --- /dev/null +++ b/Service/Sources/Data/UseCase/University/CreatedUniversityUseCaseImpl.swift @@ -0,0 +1,13 @@ +import Foundation + +public struct CreatedUniversityUseCaseImpl: CreatedUniversityUseCase { + private let universityRepository: any UniversityRepository + + public init(universityRepository: any UniversityRepository) { + self.universityRepository = universityRepository + } + + public func callAsFunction(req: UniversityNameRequestDTO) async throws { + try await universityRepository.createdUniversity(req: req) + } +} diff --git a/Service/Sources/Data/UseCase/University/DeleteDepartmentUseCaseImpl.swift b/Service/Sources/Data/UseCase/University/DeleteDepartmentUseCaseImpl.swift new file mode 100644 index 00000000..74b96855 --- /dev/null +++ b/Service/Sources/Data/UseCase/University/DeleteDepartmentUseCaseImpl.swift @@ -0,0 +1,13 @@ +import Foundation + +public struct DeleteDepartmentUseCaseImpl: DeleteDepartmentUseCase { + private let universityRepository: any UniversityRepository + + public init(universityRepository: any UniversityRepository) { + self.universityRepository = universityRepository + } + + public func callAsFunction(universityID: String, department: String) async throws { + try await universityRepository.deleteDepartment(universityID: universityID, department: department) + } +} diff --git a/Service/Sources/Data/UseCase/University/DeleteUniversityUseCaseImpl.swift b/Service/Sources/Data/UseCase/University/DeleteUniversityUseCaseImpl.swift new file mode 100644 index 00000000..39345c39 --- /dev/null +++ b/Service/Sources/Data/UseCase/University/DeleteUniversityUseCaseImpl.swift @@ -0,0 +1,13 @@ +import Foundation + +public struct DeleteUniversityUseCaseImpl: DeleteUniversityUseCase { + private let universityRepository: any UniversityRepository + + public init(universityRepository: any UniversityRepository) { + self.universityRepository = universityRepository + } + + public func callAsFunction(universityID: String) async throws { + try await universityRepository.deleteUniversity(universityID: universityID) + } +} diff --git a/Service/Sources/Data/UseCase/University/FetchUniversityListUseCaseImpl.swift b/Service/Sources/Data/UseCase/University/FetchUniversityListUseCaseImpl.swift new file mode 100644 index 00000000..3eb20301 --- /dev/null +++ b/Service/Sources/Data/UseCase/University/FetchUniversityListUseCaseImpl.swift @@ -0,0 +1,13 @@ +import Foundation + +public struct FetchUniversityListUseCaseImpl: FetchUniversityListUseCase { + private let universityRepository: any UniversityRepository + + public init(universityRepository: any UniversityRepository) { + self.universityRepository = universityRepository + } + + public func callAsFunction() async throws -> [UniversityInfoEntity] { + try await universityRepository.fetchUniversityList() + } +} diff --git a/Service/Sources/Data/UseCase/University/ModifyUniversityUseCaseImpl.swift b/Service/Sources/Data/UseCase/University/ModifyUniversityUseCaseImpl.swift new file mode 100644 index 00000000..ac743a0e --- /dev/null +++ b/Service/Sources/Data/UseCase/University/ModifyUniversityUseCaseImpl.swift @@ -0,0 +1,13 @@ +import Foundation + +public struct ModifyUniversityUseCaseImpl: ModifyUniversityUseCase { + private let universityRepository: any UniversityRepository + + public init(universityRepository: any UniversityRepository) { + self.universityRepository = universityRepository + } + + public func callAsFunction(universityID: String, req: UniversityNameRequestDTO) async throws { + try await universityRepository.modifyUniversity(universityID: universityID, req: req) + } +} From 822a0fa45504eff97aa20a0fda341778a4d4e2c9 Mon Sep 17 00:00:00 2001 From: uuuunseo Date: Thu, 18 Jul 2024 13:41:32 +0900 Subject: [PATCH 11/12] :sparkles: :: [#370] UniversityDomain / AppComponent --- .../University/AppComponent+University.swift | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 App/Sources/Application/DI/University/AppComponent+University.swift diff --git a/App/Sources/Application/DI/University/AppComponent+University.swift b/App/Sources/Application/DI/University/AppComponent+University.swift new file mode 100644 index 00000000..b3479270 --- /dev/null +++ b/App/Sources/Application/DI/University/AppComponent+University.swift @@ -0,0 +1,52 @@ +import NeedleFoundation +import Service + +public extension AppComponent { + var remoteUniversityDataSource: any RemoteUniversityDataSource { + shared { + RemoteUniversityDataSourceImpl(keychain: keychain) + } + } + + var universityRepository: any UniversityRepository { + shared { + UniversityRepositoryImpl(remoteUniversityDataSource: remoteUniversityDataSource) + } + } + + var fetchUniversityListUseCase: any FetchUniversityListUseCase { + shared { + FetchUniversityListUseCaseImpl(universityRepository: universityRepository) + } + } + + var createdUniversityUseCase: any CreatedUniversityUseCase { + shared { + CreatedUniversityUseCaseImpl(universityRepository: universityRepository) + } + } + + var modifyUniversityUseCase: any ModifyUniversityUseCase { + shared { + ModifyUniversityUseCaseImpl(universityRepository: universityRepository) + } + } + + var deleteUniversityUseCase: any DeleteUniversityUseCase { + shared { + DeleteUniversityUseCaseImpl(universityRepository: universityRepository) + } + } + + var createdDepartmentUseCase: any CreatedDepartmentUseCase { + shared { + CreatedDepartmentUseCaseImpl(universityRepository: universityRepository) + } + } + + var deleteDepartmentUseCase: any DeleteDepartmentUseCase { + shared { + DeleteDepartmentUseCaseImpl(universityRepository: universityRepository ) + } + } +} From 63075e5ab89ff9912f9130c796b9b94dbf192c71 Mon Sep 17 00:00:00 2001 From: uuuunseo Date: Thu, 18 Jul 2024 23:12:56 +0900 Subject: [PATCH 12/12] =?UTF-8?q?:green=5Fheart:=20::=20[#370]=20CI=20?= =?UTF-8?q?=EB=B9=8C=EB=93=9C=20=EC=98=A4=EB=A5=98=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ClubListFeature/Source/ClubListView.swift | 3 +- .../Source/ClubListViewModel.swift | 36 +++++++++++++++---- .../Source/Component/SchoolListPopup.swift | 2 +- .../Component/{ => View}/ClubListRow.swift | 0 .../{ => View}/SchoolClubsView.swift | 8 ++--- .../Source/CompanyListView.swift | 14 ++++---- .../Source/GovernmentListView.swift | 14 ++++---- .../Source/GovernmentListViewModel.swift | 1 - .../Source/RequestUserSignupView.swift | 14 ++++---- .../Source/SchoolListView.swift | 14 ++++---- .../Source/UniversityListViewModel.swift | 2 +- .../RemoteUniversityDataSourceImpl.swift | 10 +++--- .../University/UniversityRepositoryImpl.swift | 12 +++---- .../CreatedDepartmentUseCaseImpl.swift | 2 +- .../CreatedUniversityUseCaseImpl.swift | 2 +- .../DeleteDepartmentUseCaseImpl.swift | 2 +- .../DeleteUniversityUseCaseImpl.swift | 2 +- .../FetchUniversityListUseCaseImpl.swift | 2 +- .../ModifyUniversityUseCaseImpl.swift | 2 +- .../UseCase/University/SchoolInfoModel.swift | 27 ++++++++++++++ .../DTO/Response/ClubResponseDTO.swift | 14 ++++++-- .../Domain/ClubDomain/Entity/ClubEntity.swift | 8 +++-- .../SchoolsWithClubsResponseDTO.swift | 2 +- 23 files changed, 126 insertions(+), 67 deletions(-) rename App/Sources/Feature/ClubListFeature/Source/Component/{ => View}/ClubListRow.swift (100%) rename App/Sources/Feature/ClubListFeature/Source/Component/{ => View}/SchoolClubsView.swift (77%) create mode 100644 Service/Sources/Data/UseCase/University/SchoolInfoModel.swift diff --git a/App/Sources/Feature/ClubListFeature/Source/ClubListView.swift b/App/Sources/Feature/ClubListFeature/Source/ClubListView.swift index cfc04957..605d0963 100644 --- a/App/Sources/Feature/ClubListFeature/Source/ClubListView.swift +++ b/App/Sources/Feature/ClubListFeature/Source/ClubListView.swift @@ -21,7 +21,7 @@ struct ClubListView: View { ZStack { ScrollView { LazyVStack(spacing: 40) { - ForEach(viewModel.schoolClubList, id: \.id) { school in + ForEach(viewModel.schoolList, id: \.schoolName) { school in SchoolClubsView( schoolName: school.schoolName, clubList: school.clubs @@ -43,7 +43,6 @@ struct ClubListView: View { } SchoolListPopup( - schoolList: viewModel.schoolList, selectedSchool: viewModel.selectedSchool ) { school in viewModel.selectedSchool = school diff --git a/App/Sources/Feature/ClubListFeature/Source/ClubListViewModel.swift b/App/Sources/Feature/ClubListFeature/Source/ClubListViewModel.swift index 8631d826..67bd7028 100644 --- a/App/Sources/Feature/ClubListFeature/Source/ClubListViewModel.swift +++ b/App/Sources/Feature/ClubListFeature/Source/ClubListViewModel.swift @@ -4,12 +4,10 @@ import Service final class ClubListViewModel: BaseViewModel { @Published var selectedSchool: HighSchoolType? @Published var isShowingLoginAlert: Bool = false - @Published var schoolClubList: [SchoolListEntity] = [] - @Published var clubList: [ClubEntity] = [] + @Published var schoolList: [SchoolInfoModel] = [] @Published var clubID: Int = 0 @Published var isPresentedSelectedSchoolPopup: Bool = false @Published var isPresentedClubDetailView: Bool = false - var schoolList: [HighSchoolType] = HighSchoolType.allCases var authority: UserAuthorityType = .user private let fetchClubListUseCase: any FetchClubListUseCase @@ -38,6 +36,10 @@ final class ClubListViewModel: BaseViewModel { isPresentedClubDetailView = isPresented } + func updateSchoolList(model: [SchoolInfoModel]) { + schoolList = model + } + @MainActor func onAppear() { authority = loadUserAuthorityUseCase() @@ -58,9 +60,21 @@ final class ClubListViewModel: BaseViewModel { func fetchSchoolList() { Task { do { - schoolClubList = try await fetchSchoolListUseCase() + let response = try await fetchSchoolListUseCase() + + updateSchoolList(model: response.map { + SchoolInfoModel( + schoolName: $0.schoolName, + clubs: $0.clubs.map { + ClubInfoModel( + clubID: $0.clubID, + clubName: $0.clubName + ) + } + ) + }) } catch { - print(error.localizedDescription) + print(String(describing: error)) } } } @@ -71,7 +85,17 @@ final class ClubListViewModel: BaseViewModel { do { guard let selectedSchool else { return } - clubList = try await fetchClubListUseCase(highSchool: selectedSchool.rawValue) + let response = try await fetchClubListUseCase(highSchool: selectedSchool.rawValue) + + updateSchoolList(model: response.map { + SchoolInfoModel( + schoolName: $0.schoolName, + clubs: [ClubInfoModel( + clubID: $0.clubID, + clubName: $0.name + )] + ) + }) } catch { errorMessage = error.clubDomainErrorMessage() isErrorOccurred = true diff --git a/App/Sources/Feature/ClubListFeature/Source/Component/SchoolListPopup.swift b/App/Sources/Feature/ClubListFeature/Source/Component/SchoolListPopup.swift index bee5bdd8..5af351b3 100644 --- a/App/Sources/Feature/ClubListFeature/Source/Component/SchoolListPopup.swift +++ b/App/Sources/Feature/ClubListFeature/Source/Component/SchoolListPopup.swift @@ -2,7 +2,7 @@ import Service import SwiftUI struct SchoolListPopup: View { - let schoolList: [HighSchoolType] + let schoolList: [HighSchoolType] = HighSchoolType.allCases let selectedSchool: HighSchoolType? let onSchoolSelect: (HighSchoolType) -> Void let cancel: (Bool) -> Void diff --git a/App/Sources/Feature/ClubListFeature/Source/Component/ClubListRow.swift b/App/Sources/Feature/ClubListFeature/Source/Component/View/ClubListRow.swift similarity index 100% rename from App/Sources/Feature/ClubListFeature/Source/Component/ClubListRow.swift rename to App/Sources/Feature/ClubListFeature/Source/Component/View/ClubListRow.swift diff --git a/App/Sources/Feature/ClubListFeature/Source/Component/SchoolClubsView.swift b/App/Sources/Feature/ClubListFeature/Source/Component/View/SchoolClubsView.swift similarity index 77% rename from App/Sources/Feature/ClubListFeature/Source/Component/SchoolClubsView.swift rename to App/Sources/Feature/ClubListFeature/Source/Component/View/SchoolClubsView.swift index cdf853e0..db6e1d4b 100644 --- a/App/Sources/Feature/ClubListFeature/Source/Component/SchoolClubsView.swift +++ b/App/Sources/Feature/ClubListFeature/Source/Component/View/SchoolClubsView.swift @@ -3,7 +3,7 @@ import SwiftUI public struct SchoolClubsView: View { let schoolName: String - let clubList: [ClubEntity] + let clubList: [ClubInfoModel] let selectedClub: (_ clubID: Int) -> Void public var body: some View { @@ -22,10 +22,10 @@ public struct SchoolClubsView: View { .padding(.top, 12) LazyVStack(spacing: 0) { - ForEach(clubList, id: \.id) { club in - ClubListRow(clubName: club.name) + ForEach(clubList, id: \.clubID) { club in + ClubListRow(clubName: club.clubName) .onTapGesture { - selectedClub(club.id) + selectedClub(club.clubID) } } } diff --git a/App/Sources/Feature/CompanyListFeature/Source/CompanyListView.swift b/App/Sources/Feature/CompanyListFeature/Source/CompanyListView.swift index b8be95f7..f1a3f00b 100644 --- a/App/Sources/Feature/CompanyListFeature/Source/CompanyListView.swift +++ b/App/Sources/Feature/CompanyListFeature/Source/CompanyListView.swift @@ -26,13 +26,13 @@ struct CompanyListView: View { } .bitgouelBottomSheet(isShowing: $viewModel.isShowingAdminPageBottomSheet) { AdminPageListBottomSheet( - selectedPage: viewModel.selectedPage) { page in - viewModel.updateSelectedPage(page: page) - adminPageState.adminPageFlow = page - } cancel: { cancel in - viewModel.updateIsShowingAdminPageBottomSheet(isShowing: cancel) - } - + selectedPage: viewModel.selectedPage + ) { page in + viewModel.updateSelectedPage(page: page) + adminPageState.adminPageFlow = page + } cancel: { cancel in + viewModel.updateIsShowingAdminPageBottomSheet(isShowing: cancel) + } } } } diff --git a/App/Sources/Feature/GovernmentListFeature/Source/GovernmentListView.swift b/App/Sources/Feature/GovernmentListFeature/Source/GovernmentListView.swift index 0ef5d1db..9e422681 100644 --- a/App/Sources/Feature/GovernmentListFeature/Source/GovernmentListView.swift +++ b/App/Sources/Feature/GovernmentListFeature/Source/GovernmentListView.swift @@ -26,13 +26,13 @@ struct GovernmentListView: View { } .bitgouelBottomSheet(isShowing: $viewModel.isShowingAdminPageBottomSheet) { AdminPageListBottomSheet( - selectedPage: viewModel.selectedPage) { page in - viewModel.updateSelectedPage(page: page) - adminPageState.adminPageFlow = page - } cancel: { cancel in - viewModel.updateIsShowingAdminPageBottomSheet(isShowing: cancel) - } - + selectedPage: viewModel.selectedPage + ) { page in + viewModel.updateSelectedPage(page: page) + adminPageState.adminPageFlow = page + } cancel: { cancel in + viewModel.updateIsShowingAdminPageBottomSheet(isShowing: cancel) + } } } } diff --git a/App/Sources/Feature/GovernmentListFeature/Source/GovernmentListViewModel.swift b/App/Sources/Feature/GovernmentListFeature/Source/GovernmentListViewModel.swift index bf075aff..a4037403 100644 --- a/App/Sources/Feature/GovernmentListFeature/Source/GovernmentListViewModel.swift +++ b/App/Sources/Feature/GovernmentListFeature/Source/GovernmentListViewModel.swift @@ -13,4 +13,3 @@ final class GovernmentListViewModel: BaseViewModel { selectedPage = page } } - diff --git a/App/Sources/Feature/RequestUserSignupFeature/Source/RequestUserSignupView.swift b/App/Sources/Feature/RequestUserSignupFeature/Source/RequestUserSignupView.swift index 5b1a11eb..0d1b839d 100644 --- a/App/Sources/Feature/RequestUserSignupFeature/Source/RequestUserSignupView.swift +++ b/App/Sources/Feature/RequestUserSignupFeature/Source/RequestUserSignupView.swift @@ -144,13 +144,13 @@ struct RequestUserSignupView: View { ) .bitgouelBottomSheet(isShowing: $viewModel.isShowingAdminPageBottomSheet) { AdminPageListBottomSheet( - selectedPage: viewModel.selectedPage) { page in - viewModel.updateSelectedPage(page: page) - adminPageState.adminPageFlow = page - } cancel: { cancel in - viewModel.updateIsShowingAdminPageBottomSheet(isShowing: cancel) - } - + selectedPage: viewModel.selectedPage + ) { page in + viewModel.updateSelectedPage(page: page) + adminPageState.adminPageFlow = page + } cancel: { cancel in + viewModel.updateIsShowingAdminPageBottomSheet(isShowing: cancel) + } } } diff --git a/App/Sources/Feature/SchoolListFeature/Source/SchoolListView.swift b/App/Sources/Feature/SchoolListFeature/Source/SchoolListView.swift index 72334590..4dbd4bdb 100644 --- a/App/Sources/Feature/SchoolListFeature/Source/SchoolListView.swift +++ b/App/Sources/Feature/SchoolListFeature/Source/SchoolListView.swift @@ -26,13 +26,13 @@ struct SchoolListView: View { } .bitgouelBottomSheet(isShowing: $viewModel.isShowingAdminPageBottomSheet) { AdminPageListBottomSheet( - selectedPage: viewModel.selectedPage) { page in - viewModel.updateSelectedPage(page: page) - adminPageState.adminPageFlow = page - } cancel: { cancel in - viewModel.updateIsShowingAdminPageBottomSheet(isShowing: cancel) - } - + selectedPage: viewModel.selectedPage + ) { page in + viewModel.updateSelectedPage(page: page) + adminPageState.adminPageFlow = page + } cancel: { cancel in + viewModel.updateIsShowingAdminPageBottomSheet(isShowing: cancel) + } } } } diff --git a/App/Sources/Feature/UniversityListFeature/Source/UniversityListViewModel.swift b/App/Sources/Feature/UniversityListFeature/Source/UniversityListViewModel.swift index 3cae55c7..cfd77126 100644 --- a/App/Sources/Feature/UniversityListFeature/Source/UniversityListViewModel.swift +++ b/App/Sources/Feature/UniversityListFeature/Source/UniversityListViewModel.swift @@ -1,4 +1,5 @@ import Foundation + final class UniversityListViewModel: BaseViewModel { @Published var isShowingAdminPageBottomSheet: Bool = false @Published var selectedPage: AdminPageFlow = .company @@ -12,4 +13,3 @@ final class UniversityListViewModel: BaseViewModel { selectedPage = page } } - diff --git a/Service/Sources/Data/DataSource/University/RemoteUniversityDataSourceImpl.swift b/Service/Sources/Data/DataSource/University/RemoteUniversityDataSourceImpl.swift index 3b2a26af..d2d6716c 100644 --- a/Service/Sources/Data/DataSource/University/RemoteUniversityDataSourceImpl.swift +++ b/Service/Sources/Data/DataSource/University/RemoteUniversityDataSourceImpl.swift @@ -4,23 +4,23 @@ public final class RemoteUniversityDataSourceImpl: BaseRemoteDataSource [UniversityInfoEntity] { try await request(.fetchUniversityList, dto: UniversityListResponseDTO.self).toDomain() } - + public func createdUniversity(req: UniversityNameRequestDTO) async throws { try await request(.createdUniversity(req: req)) } - + public func modifyUniversity(universityID: String, req: UniversityNameRequestDTO) async throws { try await request(.modifyUniversity(universityID: universityID, req: req)) } - + public func deleteUniversity(universityID: String) async throws { try await request(.deleteUniversity(universityID: universityID)) } - + public func createdDepartment(universityID: String, req: DepartmentRequestDTO) async throws { try await request(.createdDepartment(universityID: universityID, req: req)) } - + public func deleteDepartment(universityID: String, department: String) async throws { try await request(.deleteDepartment(universityID: universityID, department: department)) } diff --git a/Service/Sources/Data/Repository/University/UniversityRepositoryImpl.swift b/Service/Sources/Data/Repository/University/UniversityRepositoryImpl.swift index 200278bb..e598b1f0 100644 --- a/Service/Sources/Data/Repository/University/UniversityRepositoryImpl.swift +++ b/Service/Sources/Data/Repository/University/UniversityRepositoryImpl.swift @@ -6,27 +6,27 @@ public struct UniversityRepositoryImpl: UniversityRepository { public init(remoteUniversityDataSource: any RemoteUniversityDataSource) { self.remoteUniversityDataSource = remoteUniversityDataSource } - + public func fetchUniversityList() async throws -> [UniversityInfoEntity] { try await remoteUniversityDataSource.fetchUniversityList() } - + public func createdUniversity(req: UniversityNameRequestDTO) async throws { try await remoteUniversityDataSource.createdUniversity(req: req) } - + public func modifyUniversity(universityID: String, req: UniversityNameRequestDTO) async throws { try await remoteUniversityDataSource.modifyUniversity(universityID: universityID, req: req) } - + public func deleteUniversity(universityID: String) async throws { try await remoteUniversityDataSource.deleteUniversity(universityID: universityID) } - + public func createdDepartment(universityID: String, req: DepartmentRequestDTO) async throws { try await remoteUniversityDataSource.createdDepartment(universityID: universityID, req: req) } - + public func deleteDepartment(universityID: String, department: String) async throws { try await remoteUniversityDataSource.deleteDepartment(universityID: universityID, department: department) } diff --git a/Service/Sources/Data/UseCase/University/CreatedDepartmentUseCaseImpl.swift b/Service/Sources/Data/UseCase/University/CreatedDepartmentUseCaseImpl.swift index 91cbaae9..0380fe2a 100644 --- a/Service/Sources/Data/UseCase/University/CreatedDepartmentUseCaseImpl.swift +++ b/Service/Sources/Data/UseCase/University/CreatedDepartmentUseCaseImpl.swift @@ -6,7 +6,7 @@ public struct CreatedDepartmentUseCaseImpl: CreatedDepartmentUseCase { public init(universityRepository: any UniversityRepository) { self.universityRepository = universityRepository } - + public func callAsFunction(universityID: String, req: DepartmentRequestDTO) async throws { try await universityRepository.createdDepartment(universityID: universityID, req: req) } diff --git a/Service/Sources/Data/UseCase/University/CreatedUniversityUseCaseImpl.swift b/Service/Sources/Data/UseCase/University/CreatedUniversityUseCaseImpl.swift index 562278fc..80feb2ed 100644 --- a/Service/Sources/Data/UseCase/University/CreatedUniversityUseCaseImpl.swift +++ b/Service/Sources/Data/UseCase/University/CreatedUniversityUseCaseImpl.swift @@ -6,7 +6,7 @@ public struct CreatedUniversityUseCaseImpl: CreatedUniversityUseCase { public init(universityRepository: any UniversityRepository) { self.universityRepository = universityRepository } - + public func callAsFunction(req: UniversityNameRequestDTO) async throws { try await universityRepository.createdUniversity(req: req) } diff --git a/Service/Sources/Data/UseCase/University/DeleteDepartmentUseCaseImpl.swift b/Service/Sources/Data/UseCase/University/DeleteDepartmentUseCaseImpl.swift index 74b96855..a2ef5eaa 100644 --- a/Service/Sources/Data/UseCase/University/DeleteDepartmentUseCaseImpl.swift +++ b/Service/Sources/Data/UseCase/University/DeleteDepartmentUseCaseImpl.swift @@ -6,7 +6,7 @@ public struct DeleteDepartmentUseCaseImpl: DeleteDepartmentUseCase { public init(universityRepository: any UniversityRepository) { self.universityRepository = universityRepository } - + public func callAsFunction(universityID: String, department: String) async throws { try await universityRepository.deleteDepartment(universityID: universityID, department: department) } diff --git a/Service/Sources/Data/UseCase/University/DeleteUniversityUseCaseImpl.swift b/Service/Sources/Data/UseCase/University/DeleteUniversityUseCaseImpl.swift index 39345c39..9b9bbd1b 100644 --- a/Service/Sources/Data/UseCase/University/DeleteUniversityUseCaseImpl.swift +++ b/Service/Sources/Data/UseCase/University/DeleteUniversityUseCaseImpl.swift @@ -6,7 +6,7 @@ public struct DeleteUniversityUseCaseImpl: DeleteUniversityUseCase { public init(universityRepository: any UniversityRepository) { self.universityRepository = universityRepository } - + public func callAsFunction(universityID: String) async throws { try await universityRepository.deleteUniversity(universityID: universityID) } diff --git a/Service/Sources/Data/UseCase/University/FetchUniversityListUseCaseImpl.swift b/Service/Sources/Data/UseCase/University/FetchUniversityListUseCaseImpl.swift index 3eb20301..68646aa9 100644 --- a/Service/Sources/Data/UseCase/University/FetchUniversityListUseCaseImpl.swift +++ b/Service/Sources/Data/UseCase/University/FetchUniversityListUseCaseImpl.swift @@ -6,7 +6,7 @@ public struct FetchUniversityListUseCaseImpl: FetchUniversityListUseCase { public init(universityRepository: any UniversityRepository) { self.universityRepository = universityRepository } - + public func callAsFunction() async throws -> [UniversityInfoEntity] { try await universityRepository.fetchUniversityList() } diff --git a/Service/Sources/Data/UseCase/University/ModifyUniversityUseCaseImpl.swift b/Service/Sources/Data/UseCase/University/ModifyUniversityUseCaseImpl.swift index ac743a0e..60bcdc06 100644 --- a/Service/Sources/Data/UseCase/University/ModifyUniversityUseCaseImpl.swift +++ b/Service/Sources/Data/UseCase/University/ModifyUniversityUseCaseImpl.swift @@ -6,7 +6,7 @@ public struct ModifyUniversityUseCaseImpl: ModifyUniversityUseCase { public init(universityRepository: any UniversityRepository) { self.universityRepository = universityRepository } - + public func callAsFunction(universityID: String, req: UniversityNameRequestDTO) async throws { try await universityRepository.modifyUniversity(universityID: universityID, req: req) } diff --git a/Service/Sources/Data/UseCase/University/SchoolInfoModel.swift b/Service/Sources/Data/UseCase/University/SchoolInfoModel.swift new file mode 100644 index 00000000..ef456132 --- /dev/null +++ b/Service/Sources/Data/UseCase/University/SchoolInfoModel.swift @@ -0,0 +1,27 @@ +import Foundation + +public struct SchoolInfoModel: Equatable { + public let schoolName: String + public let clubs: [ClubInfoModel] + + public init( + schoolName: String, + clubs: [ClubInfoModel] + ) { + self.schoolName = schoolName + self.clubs = clubs + } +} + +public struct ClubInfoModel: Equatable { + public let clubID: Int + public let clubName: String + + public init( + clubID: Int, + clubName: String + ) { + self.clubID = clubID + self.clubName = clubName + } +} diff --git a/Service/Sources/Domain/ClubDomain/DTO/Response/ClubResponseDTO.swift b/Service/Sources/Domain/ClubDomain/DTO/Response/ClubResponseDTO.swift index ca40ecd9..1505f760 100644 --- a/Service/Sources/Domain/ClubDomain/DTO/Response/ClubResponseDTO.swift +++ b/Service/Sources/Domain/ClubDomain/DTO/Response/ClubResponseDTO.swift @@ -1,15 +1,23 @@ import Foundation public struct ClubResponseDTO: Decodable { - public let id: Int + public let clubID: Int public let name: String + public let schoolName: String + + enum CodingKeys: String, CodingKey { + case clubID = "id" + case name + case schoolName + } } public extension ClubResponseDTO { func toDomain() -> ClubEntity { ClubEntity( - id: id, - name: name + clubID: clubID, + name: name, + schoolName: schoolName ) } } diff --git a/Service/Sources/Domain/ClubDomain/Entity/ClubEntity.swift b/Service/Sources/Domain/ClubDomain/Entity/ClubEntity.swift index 4a52b801..5d311325 100644 --- a/Service/Sources/Domain/ClubDomain/Entity/ClubEntity.swift +++ b/Service/Sources/Domain/ClubDomain/Entity/ClubEntity.swift @@ -1,11 +1,13 @@ import Foundation public struct ClubEntity: Equatable { - public let id: Int + public let clubID: Int public let name: String + public let schoolName: String - public init(id: Int, name: String) { - self.id = id + public init(clubID: Int, name: String, schoolName: String) { + self.clubID = clubID self.name = name + self.schoolName = schoolName } } diff --git a/Service/Sources/Domain/SchoolDoamin/DTO/Response/SchoolsWithClubsResponseDTO.swift b/Service/Sources/Domain/SchoolDoamin/DTO/Response/SchoolsWithClubsResponseDTO.swift index 01de6f48..74e0f587 100644 --- a/Service/Sources/Domain/SchoolDoamin/DTO/Response/SchoolsWithClubsResponseDTO.swift +++ b/Service/Sources/Domain/SchoolDoamin/DTO/Response/SchoolsWithClubsResponseDTO.swift @@ -7,7 +7,7 @@ public struct SchoolWithClubsResponseDTO: Decodable { enum CodingKeys: String, CodingKey { case clubID = "id" - case clubName + case clubName = "name" case field } }