diff --git a/App/Sources/Application/DI/Lecture/AppComponent+Lecture.swift b/App/Sources/Application/DI/Lecture/AppComponent+Lecture.swift index 14c2c94d8..45a700e8a 100644 --- a/App/Sources/Application/DI/Lecture/AppComponent+Lecture.swift +++ b/App/Sources/Application/DI/Lecture/AppComponent+Lecture.swift @@ -38,33 +38,33 @@ public extension AppComponent { } } - var cancelLectureUseCase: any CancelLectureUseCase { + var cancelLectureApplicationUseCase: any CancelLectureApplicationUseCase { shared { - CancelLectureUseCaseImpl(lectureRepository: lectureRepository) + CancelLectureApplicationUseCaseImpl(lectureRepository: lectureRepository) } } - var fetchInstructorListUseCase: any FetchInstructorListUseCase { + var searchInstructorUseCase: any SearchInstructorUseCase { shared { - FetchInstructorListUseCaseImpl(lectureRepository: lectureRepository) + SearchInstructorUseCaseImpl(lectureRepository: lectureRepository) } } - var fetchLineListUseCase: any FetchLineListUseCase { + var searchLineUseCase: any SearchLineUseCase { shared { - FetchLineListUseCaseImpl(lectureRepository: lectureRepository) + SearchLineUseCaseImpl(lectureRepository: lectureRepository) } } - var fetchDepartmentListUseCase: any FetchDepartmentListUseCase { + var searchDepartmentUseCase: any SearchDepartmentUseCase { shared { - FetchDepartmentListUseCaseImpl(lectureRepository: lectureRepository) + SearchDepartmentUseCaseImpl(lectureRepository: lectureRepository) } } - var fetchDivisionListUseCase: any FetchDivisionListUseCase { + var searchDivisionUseCase: any SearchDivisionUseCase { shared { - FetchDivisionListUseCaseImpl(lectureRepository: lectureRepository) + SearchDivisionUseCaseImpl(lectureRepository: lectureRepository) } } @@ -80,9 +80,9 @@ public extension AppComponent { } } - var modifyApplicantWhetherUseCase: any ModifyApplicantWhetherUseCase { + var setLectureCompletionUseCase: any SetLectureCompletionUseCase { shared { - ModifyApplicantWhetherUseCaseImpl(lectureRepository: lectureRepository) + SetLectureCompletionUseCaseImpl(lectureRepository: lectureRepository) } } @@ -97,4 +97,10 @@ public extension AppComponent { ModifyLectureUseCaseImpl(lectureRepository: lectureRepository) } } + + var fetchAppliedLectureStudentDetailUseCase: any FetchAppliedLectureStudentDetailUseCase { + shared { + FetchAppliedLectureStudentDetailUseCaseImpl(lectureRepository: lectureRepository) + } + } } diff --git a/App/Sources/Application/NeedleGenerated.swift b/App/Sources/Application/NeedleGenerated.swift index 9983a464e..0b9bbee96 100644 --- a/App/Sources/Application/NeedleGenerated.swift +++ b/App/Sources/Application/NeedleGenerated.swift @@ -103,8 +103,8 @@ private class LectureListDetailDependency2a815f1240973966e6a6Provider: LectureLi var applyLectureUseCase: any ApplyLectureUseCase { return appComponent.applyLectureUseCase } - var cancelLectureUseCase: any CancelLectureUseCase { - return appComponent.cancelLectureUseCase + var cancelLectureApplicationUseCase: any CancelLectureApplicationUseCase { + return appComponent.cancelLectureApplicationUseCase } var loadUserAuthorityUseCase: any LoadUserAuthorityUseCase { return appComponent.loadUserAuthorityUseCase @@ -365,17 +365,17 @@ private class LectureDetailSettingDependencyd72c0b79ce6406870a95Provider: Lectur var inputLectureFactory: any InputLectureFactory { return appComponent.inputLectureFactory } - var fetchInstructorListUseCase: any FetchInstructorListUseCase { - return appComponent.fetchInstructorListUseCase + var searchInstructorUseCase: any SearchInstructorUseCase { + return appComponent.searchInstructorUseCase } - var fetchLineListUseCase: any FetchLineListUseCase { - return appComponent.fetchLineListUseCase + var searchLineUseCase: any SearchLineUseCase { + return appComponent.searchLineUseCase } - var fetchDepartmentListUseCase: any FetchDepartmentListUseCase { - return appComponent.fetchDepartmentListUseCase + var searchDepartmentUseCase: any SearchDepartmentUseCase { + return appComponent.searchDepartmentUseCase } - var fetchDivisionListUseCase: any FetchDivisionListUseCase { - return appComponent.fetchDivisionListUseCase + var searchDivisionUseCase: any SearchDivisionUseCase { + return appComponent.searchDivisionUseCase } private let appComponent: AppComponent init(appComponent: AppComponent) { @@ -602,8 +602,8 @@ private class LectureApplicantListDependency5bfdb7310dde792c0738Provider: Lectur var fetchApplicantListUseCase: any FetchApplicantListUseCase { return appComponent.fetchApplicantListUseCase } - var modifyApplicantWhetherUseCase: any ModifyApplicantWhetherUseCase { - return appComponent.modifyApplicantWhetherUseCase + var setLectureCompletionUseCase: any SetLectureCompletionUseCase { + return appComponent.setLectureCompletionUseCase } private let appComponent: AppComponent init(appComponent: AppComponent) { @@ -1042,7 +1042,7 @@ extension LectureListDetailComponent: Registration { public func registerItems() { keyPathToName[\LectureListDetailDependency.fetchLectureDetailUseCase] = "fetchLectureDetailUseCase-any FetchLectureDetailUseCase" keyPathToName[\LectureListDetailDependency.applyLectureUseCase] = "applyLectureUseCase-any ApplyLectureUseCase" - keyPathToName[\LectureListDetailDependency.cancelLectureUseCase] = "cancelLectureUseCase-any CancelLectureUseCase" + keyPathToName[\LectureListDetailDependency.cancelLectureApplicationUseCase] = "cancelLectureApplicationUseCase-any CancelLectureApplicationUseCase" keyPathToName[\LectureListDetailDependency.loadUserAuthorityUseCase] = "loadUserAuthorityUseCase-any LoadUserAuthorityUseCase" keyPathToName[\LectureListDetailDependency.lectureApplicantListFactory] = "lectureApplicantListFactory-any LectureApplicantListFactory" keyPathToName[\LectureListDetailDependency.deleteLectureUseCase] = "deleteLectureUseCase-any DeleteLectureUseCase" @@ -1138,10 +1138,10 @@ extension InputNoticeComponent: Registration { extension LectureDetailSettingComponent: Registration { public func registerItems() { keyPathToName[\LectureDetailSettingDependency.inputLectureFactory] = "inputLectureFactory-any InputLectureFactory" - keyPathToName[\LectureDetailSettingDependency.fetchInstructorListUseCase] = "fetchInstructorListUseCase-any FetchInstructorListUseCase" - keyPathToName[\LectureDetailSettingDependency.fetchLineListUseCase] = "fetchLineListUseCase-any FetchLineListUseCase" - keyPathToName[\LectureDetailSettingDependency.fetchDepartmentListUseCase] = "fetchDepartmentListUseCase-any FetchDepartmentListUseCase" - keyPathToName[\LectureDetailSettingDependency.fetchDivisionListUseCase] = "fetchDivisionListUseCase-any FetchDivisionListUseCase" + keyPathToName[\LectureDetailSettingDependency.searchInstructorUseCase] = "searchInstructorUseCase-any SearchInstructorUseCase" + keyPathToName[\LectureDetailSettingDependency.searchLineUseCase] = "searchLineUseCase-any SearchLineUseCase" + keyPathToName[\LectureDetailSettingDependency.searchDepartmentUseCase] = "searchDepartmentUseCase-any SearchDepartmentUseCase" + keyPathToName[\LectureDetailSettingDependency.searchDivisionUseCase] = "searchDivisionUseCase-any SearchDivisionUseCase" } } extension MainComponent: Registration { @@ -1225,7 +1225,7 @@ extension FindPasswordComponent: Registration { extension LectureApplicantListComponent: Registration { public func registerItems() { keyPathToName[\LectureApplicantListDependency.fetchApplicantListUseCase] = "fetchApplicantListUseCase-any FetchApplicantListUseCase" - keyPathToName[\LectureApplicantListDependency.modifyApplicantWhetherUseCase] = "modifyApplicantWhetherUseCase-any ModifyApplicantWhetherUseCase" + keyPathToName[\LectureApplicantListDependency.setLectureCompletionUseCase] = "setLectureCompletionUseCase-any SetLectureCompletionUseCase" } } extension UserListComponent: Registration { @@ -1383,16 +1383,17 @@ extension AppComponent: Registration { localTable["fetchLectureListUseCase-any FetchLectureListUseCase"] = { [unowned self] in self.fetchLectureListUseCase as Any } localTable["fetchLectureDetailUseCase-any FetchLectureDetailUseCase"] = { [unowned self] in self.fetchLectureDetailUseCase as Any } localTable["applyLectureUseCase-any ApplyLectureUseCase"] = { [unowned self] in self.applyLectureUseCase as Any } - localTable["cancelLectureUseCase-any CancelLectureUseCase"] = { [unowned self] in self.cancelLectureUseCase as Any } - localTable["fetchInstructorListUseCase-any FetchInstructorListUseCase"] = { [unowned self] in self.fetchInstructorListUseCase as Any } - localTable["fetchLineListUseCase-any FetchLineListUseCase"] = { [unowned self] in self.fetchLineListUseCase as Any } - localTable["fetchDepartmentListUseCase-any FetchDepartmentListUseCase"] = { [unowned self] in self.fetchDepartmentListUseCase as Any } - localTable["fetchDivisionListUseCase-any FetchDivisionListUseCase"] = { [unowned self] in self.fetchDivisionListUseCase as Any } + localTable["cancelLectureApplicationUseCase-any CancelLectureApplicationUseCase"] = { [unowned self] in self.cancelLectureApplicationUseCase as Any } + localTable["searchInstructorUseCase-any SearchInstructorUseCase"] = { [unowned self] in self.searchInstructorUseCase as Any } + localTable["searchLineUseCase-any SearchLineUseCase"] = { [unowned self] in self.searchLineUseCase as Any } + localTable["searchDepartmentUseCase-any SearchDepartmentUseCase"] = { [unowned self] in self.searchDepartmentUseCase as Any } + localTable["searchDivisionUseCase-any SearchDivisionUseCase"] = { [unowned self] in self.searchDivisionUseCase as Any } localTable["fetchAppliedLectureListUseCase-any FetchAppliedLectureListUseCase"] = { [unowned self] in self.fetchAppliedLectureListUseCase as Any } localTable["fetchApplicantListUseCase-any FetchApplicantListUseCase"] = { [unowned self] in self.fetchApplicantListUseCase as Any } - localTable["modifyApplicantWhetherUseCase-any ModifyApplicantWhetherUseCase"] = { [unowned self] in self.modifyApplicantWhetherUseCase as Any } + localTable["setLectureCompletionUseCase-any SetLectureCompletionUseCase"] = { [unowned self] in self.setLectureCompletionUseCase as Any } localTable["deleteLectureUseCase-any DeleteLectureUseCase"] = { [unowned self] in self.deleteLectureUseCase as Any } localTable["modifyLectureUseCase-any ModifyLectureUseCase"] = { [unowned self] in self.modifyLectureUseCase as Any } + localTable["fetchAppliedLectureStudentDetailUseCase-any FetchAppliedLectureStudentDetailUseCase"] = { [unowned self] in self.fetchAppliedLectureStudentDetailUseCase as Any } localTable["remoteClubDataSource-any RemoteClubDataSource"] = { [unowned self] in self.remoteClubDataSource as Any } localTable["clubRepository-any ClubRepository"] = { [unowned self] in self.clubRepository as Any } localTable["fetchClubListUseCase-any FetchClubListUseCase"] = { [unowned self] in self.fetchClubListUseCase as Any } diff --git a/App/Sources/Feature/LectureApplicantListFeature/Source/Component/LectureApplicantListRow.swift b/App/Sources/Feature/LectureApplicantListFeature/Source/Component/LectureApplicantListRow.swift index f7cb9d3c6..65d564dd8 100644 --- a/App/Sources/Feature/LectureApplicantListFeature/Source/Component/LectureApplicantListRow.swift +++ b/App/Sources/Feature/LectureApplicantListFeature/Source/Component/LectureApplicantListRow.swift @@ -1,51 +1,60 @@ import SwiftUI +import Service struct LectureApplicantListRow: View { - let studentID: String - @State var isComplete: Bool - let email: String - let name: String - let grade: Int - let classNumber: Int - let number: Int - let cohort: Int - let phoneNumber: String - let schoolName: String - let clubName: String - let onSelectedStudent: (Bool, String) -> Void + let studentInfo: ApplicantInfoEntity + @Binding var state: LectureApplicantListPageState + @Binding var isSelected: Bool var body: some View { - HStack(alignment: .top, spacing: 24) { - CheckButton( - isSelected: Binding( - get: { isComplete }, - set: { isSelected in - if isSelected { - isComplete = isSelected - onSelectedStudent(isSelected, studentID) - } else { - isComplete = isSelected - onSelectedStudent(isSelected, studentID) - } - } - ) - ) - - VStack(alignment: .leading, spacing: 8) { - BitgouelText( - text: "\(grade)학년 \(classNumber)반 \(number)번 \(cohort)기 \(name)", - font: .text1 - ) - - Group { - Text("\(phoneNumber.withHypen) | \(email)") - - Text(schoolName) - - Text(clubName) + HStack(alignment: .center, spacing: 16) { + completionStatusCheckButton() + + VStack(alignment: .leading, spacing: 4) { + HStack(spacing: 4) { + BitgouelText( + text: studentInfo.name, + font: .text1 + ) + + completionStatusText() + } + + HStack(spacing: 4) { + Text(studentInfo.school) + + Text("\(studentInfo.grade)학년 \(studentInfo.classNumber)반 \(studentInfo.number)번") } - .bitgouelFont(.caption, color: .greyscale(.g7)) + .bitgouelFont(.caption, color: .greyscale(.g4)) + + Text(studentInfo.clubName) + .bitgouelFont(.caption, color: .greyscale(.g7)) } } } + + @ViewBuilder + func completionStatusCheckButton() -> some View { + switch state { + case .general: + EmptyView() + + case .check: + CheckButton(isSelected: $isSelected) + } + } + + @ViewBuilder + func completionStatusText() -> some View { + switch state { + case .general: + if studentInfo.isComplete { + Text("이수완료") + .bitgouelFont(.caption, color: .primary(.p5)) + } + + case .check: + EmptyView() + } + } } diff --git a/App/Sources/Feature/LectureApplicantListFeature/Source/LectureApplicantListComponent.swift b/App/Sources/Feature/LectureApplicantListFeature/Source/LectureApplicantListComponent.swift index 538f8062e..7b11a5709 100644 --- a/App/Sources/Feature/LectureApplicantListFeature/Source/LectureApplicantListComponent.swift +++ b/App/Sources/Feature/LectureApplicantListFeature/Source/LectureApplicantListComponent.swift @@ -4,7 +4,7 @@ import SwiftUI public protocol LectureApplicantListDependency: Dependency { var fetchApplicantListUseCase: any FetchApplicantListUseCase { get } - var modifyApplicantWhetherUseCase: any ModifyApplicantWhetherUseCase { get } + var setLectureCompletionUseCase: any SetLectureCompletionUseCase { get } } public final class LectureApplicantListComponent: Component, @@ -14,7 +14,7 @@ public final class LectureApplicantListComponent: Component, @@ -20,10 +20,10 @@ public final class LectureDetailSettingComponent: Component Void - private let fetchInstructorListUseCase: any FetchInstructorListUseCase - private let fetchLineListUseCase: any FetchLineListUseCase - private let fetchDepartmentListUseCase: any FetchDepartmentListUseCase - private let fetchDivisionListUseCase: any FetchDivisionListUseCase + private let searchInstructorUseCase: any SearchInstructorUseCase + private let searchLineUseCase: any SearchLineUseCase + private let searchDepartmentUseCase: any SearchDepartmentUseCase + private let searchDivisionUseCase: any SearchDivisionUseCase init( detailInfo: LectureDataModel, completion: @escaping (LectureDataModel) -> Void, - fetchInstructorListUseCase: any FetchInstructorListUseCase, - fetchLineListUseCase: any FetchLineListUseCase, - fetchDepartmentListUseCase: any FetchDepartmentListUseCase, - fetchDivisionListUseCase: any FetchDivisionListUseCase + searchInstructorUseCase: any SearchInstructorUseCase, + searchLineUseCase: any SearchLineUseCase, + searchDepartmentUseCase: any SearchDepartmentUseCase, + searchDivisionUseCase: any SearchDivisionUseCase ) { self.detailInfo = detailInfo self.completion = completion - self.fetchInstructorListUseCase = fetchInstructorListUseCase - self.fetchLineListUseCase = fetchLineListUseCase - self.fetchDepartmentListUseCase = fetchDepartmentListUseCase - self.fetchDivisionListUseCase = fetchDivisionListUseCase + self.searchInstructorUseCase = searchInstructorUseCase + self.searchLineUseCase = searchLineUseCase + self.searchDepartmentUseCase = searchDepartmentUseCase + self.searchDivisionUseCase = searchDivisionUseCase } func updateIsEssential(isEssential: Bool) { @@ -261,10 +261,10 @@ final class LectureDetailSettingViewModel: BaseViewModel { } @MainActor - func fetchLineList() { + func searchLine() { Task { do { - lineList = try await fetchLineListUseCase(keyword: keyword, division: selectedDivision) + lineList = try await searchLineUseCase(keyword: keyword, division: selectedDivision) } catch { print(error.localizedDescription) } @@ -272,10 +272,10 @@ final class LectureDetailSettingViewModel: BaseViewModel { } @MainActor - func fetchDepartmentList() { + func searchDepartment() { Task { do { - departmentList = try await fetchDepartmentListUseCase(keyword: keyword) + departmentList = try await searchDepartmentUseCase(keyword: keyword) } catch { print(error.localizedDescription) } @@ -283,10 +283,10 @@ final class LectureDetailSettingViewModel: BaseViewModel { } @MainActor - func fetchInstructorList() { + func searchInstructor() { Task { do { - instructorList = try await fetchInstructorListUseCase(keyword: keyword) + instructorList = try await searchInstructorUseCase(keyword: keyword) } catch { print(error.localizedDescription) } @@ -294,10 +294,10 @@ final class LectureDetailSettingViewModel: BaseViewModel { } @MainActor - func fetchDivisionList() { + func searchDivision() { Task { do { - divisionList = try await fetchDivisionListUseCase(keyword: keyword) + divisionList = try await searchDivisionUseCase(keyword: keyword) } catch { print(error.localizedDescription) } diff --git a/App/Sources/Feature/LectureListDetailFeature/LectureListDetailViewModel.swift b/App/Sources/Feature/LectureListDetailFeature/LectureListDetailViewModel.swift index 91a821363..aaf4b29f1 100644 --- a/App/Sources/Feature/LectureListDetailFeature/LectureListDetailViewModel.swift +++ b/App/Sources/Feature/LectureListDetailFeature/LectureListDetailViewModel.swift @@ -14,7 +14,7 @@ final class LectureListDetailViewModel: BaseViewModel { let lectureID: String private let fetchLectureDetailUseCase: any FetchLectureDetailUseCase private let applyLectureUseCase: any ApplyLectureUseCase - private let cancelLectureUseCase: any CancelLectureUseCase + private let cancelLectureApplicationUseCase: any CancelLectureApplicationUseCase private let loadUserAuthorityUseCase: any LoadUserAuthorityUseCase private let deleteLectureUseCase: any DeleteLectureUseCase @@ -22,14 +22,14 @@ final class LectureListDetailViewModel: BaseViewModel { lectureID: String, fetchLectureDetailUseCase: any FetchLectureDetailUseCase, applyLectureUseCase: any ApplyLectureUseCase, - cancelLectureUseCase: any CancelLectureUseCase, + cancelLectureApplicationUseCase: any CancelLectureApplicationUseCase, loadUserAuthorityUseCase: any LoadUserAuthorityUseCase, deleteLectureUseCase: any DeleteLectureUseCase ) { self.lectureID = lectureID self.fetchLectureDetailUseCase = fetchLectureDetailUseCase self.applyLectureUseCase = applyLectureUseCase - self.cancelLectureUseCase = cancelLectureUseCase + self.cancelLectureApplicationUseCase = cancelLectureApplicationUseCase self.loadUserAuthorityUseCase = loadUserAuthorityUseCase self.deleteLectureUseCase = deleteLectureUseCase } @@ -82,7 +82,7 @@ final class LectureListDetailViewModel: BaseViewModel { func cancelLecture() { Task { do { - try await cancelLectureUseCase(lectureID: lectureID) + try await cancelLectureApplicationUseCase(lectureID: lectureID) } catch { errorMessage = error.lectureDomainErrorMessage() diff --git a/App/Sources/Feature/LectureListDetailFeature/Source/LectureListDetailComponent.swift b/App/Sources/Feature/LectureListDetailFeature/Source/LectureListDetailComponent.swift index f00f71b2a..27d875ff7 100644 --- a/App/Sources/Feature/LectureListDetailFeature/Source/LectureListDetailComponent.swift +++ b/App/Sources/Feature/LectureListDetailFeature/Source/LectureListDetailComponent.swift @@ -5,7 +5,7 @@ import SwiftUI public protocol LectureListDetailDependency: Dependency { var fetchLectureDetailUseCase: any FetchLectureDetailUseCase { get } var applyLectureUseCase: any ApplyLectureUseCase { get } - var cancelLectureUseCase: any CancelLectureUseCase { get } + var cancelLectureApplicationUseCase: any CancelLectureApplicationUseCase { get } var loadUserAuthorityUseCase: any LoadUserAuthorityUseCase { get } var lectureApplicantListFactory: any LectureApplicantListFactory { get } var deleteLectureUseCase: any DeleteLectureUseCase { get } @@ -20,7 +20,7 @@ public final class LectureListDetailComponent: Component String { + switch self { + case .notCompletedYet: return "아직 이수하지 않음" + case .completedIn3RD: return "이수 완료(3학년)" + case .completedIn2RD: return "이수 완료(2학년)" + case .completedIn1RD: return "이수 완료(1학년)" + } + } +} diff --git a/Service/Sources/Data/DataSource/Lecture/RemoteLectureDataSourceImpl.swift b/Service/Sources/Data/DataSource/Lecture/RemoteLectureDataSourceImpl.swift index a83e4827c..78b332475 100644 --- a/Service/Sources/Data/DataSource/Lecture/RemoteLectureDataSourceImpl.swift +++ b/Service/Sources/Data/DataSource/Lecture/RemoteLectureDataSourceImpl.swift @@ -17,25 +17,25 @@ public final class RemoteLectureDataSourceImpl: BaseRemoteDataSource try await request(.applyLecture(lectureID: lectureID)) } - public func cancelLecture(lectureID: String) async throws { - try await request(.cancelLecture(lectureID: lectureID)) + public func cancelLectureApplication(lectureID: String) async throws { + try await request(.cancelLectureApplication(lectureID: lectureID)) } - public func fetchInstructorList(keyword: String) async throws -> [InstructorInfoEntity] { - try await request(.fetchInstructorList(keyword: keyword), dto: FetchInstructorListResponseDTO.self).toDomain() + public func searchInstructor(keyword: String) async throws -> [InstructorInfoEntity] { + try await request(.searchInstructor(keyword: keyword), dto: FetchInstructorListResponseDTO.self).toDomain() } - public func fetchLineList(keyword: String, division: String) async throws -> [String] { - try await request(.fetchLineList(keyword: keyword, division: division), dto: FetchLineListResponseDTO.self) + public func searchLine(keyword: String, division: String) async throws -> [String] { + try await request(.searchLine(keyword: keyword, division: division), dto: FetchLineListResponseDTO.self) .lines } - public func fetchDepartmentList(keyword: String) async throws -> [String] { - try await request(.fetchDepartmentList(keyword: keyword), dto: FetchDepartmentResponseDTO.self).departments + public func searchDepartment(keyword: String) async throws -> [String] { + try await request(.searchDepartment(keyword: keyword), dto: FetchDepartmentResponseDTO.self).departments } - public func fetchDivisionList(keyword: String) async throws -> [String] { - try await request(.fetchDivisionList(keyword: keyword), dto: FetchDivisionListResponseDTO.self).divisions + public func searchDivision(keyword: String) async throws -> [String] { + try await request(.searchDivision(keyword: keyword), dto: FetchDivisionListResponseDTO.self).divisions } public func fetchAppliedLectureList(studentID: String) async throws -> [AppliedLectureEntity] { @@ -47,8 +47,8 @@ public final class RemoteLectureDataSourceImpl: BaseRemoteDataSource try await request(.fetchApplicantList(lectureID: lectureID), dto: FetchApplicantListResponseDTO.self).toDomain() } - public func modifyApplicantWhether(lectureID: String, studentID: String, isComplete: Bool) async throws { - try await request(.modifyApplicantWhether(lectureID: lectureID, studentID: studentID, isComplete: isComplete)) + public func setLectureCompletion(lectureID: String, students: [String]) async throws { + try await request(.setLectureCompletion(lectureID: lectureID, students: students)) } public func deleteLecture(lectureID: String) async throws { @@ -58,4 +58,8 @@ public final class RemoteLectureDataSourceImpl: BaseRemoteDataSource public func modifyLecture(lectureID: String, req: InputLectureRequestDTO) async throws { try await request(.modifyLecture(lectureID: lectureID, req: req)) } + + public func fetchAppliedLectureStudentDetail(lectureID: String, studentID: String) async throws -> AppliedLectureStudentDetailEntity { + try await request(.fetchAppliedLectureStudentDetail(lectureID: lectureID, studentID: studentID), dto: AppliedLectureStudentDetailResponseDTO.self).toDomain() + } } diff --git a/Service/Sources/Data/Repository/Lecture/LectureRepositoryImpl.swift b/Service/Sources/Data/Repository/Lecture/LectureRepositoryImpl.swift index e98ec9b4d..bf9204170 100644 --- a/Service/Sources/Data/Repository/Lecture/LectureRepositoryImpl.swift +++ b/Service/Sources/Data/Repository/Lecture/LectureRepositoryImpl.swift @@ -23,24 +23,24 @@ public struct LectureRepositoryImpl: LectureRepository { try await remoteLectureDataSource.applyLecture(lectureID: lectureID) } - public func cancelLecture(lectureID: String) async throws { - try await remoteLectureDataSource.cancelLecture(lectureID: lectureID) + public func cancelLectureApplication(lectureID: String) async throws { + try await remoteLectureDataSource.cancelLectureApplication(lectureID: lectureID) } - public func fetchInstructorList(keyword: String) async throws -> [InstructorInfoEntity] { - try await remoteLectureDataSource.fetchInstructorList(keyword: keyword) + public func searchInstructor(keyword: String) async throws -> [InstructorInfoEntity] { + try await remoteLectureDataSource.searchInstructor(keyword: keyword) } - public func fetchLineList(keyword: String, division: String) async throws -> [String] { - try await remoteLectureDataSource.fetchLineList(keyword: keyword, division: division) + public func searchLine(keyword: String, division: String) async throws -> [String] { + try await remoteLectureDataSource.searchLine(keyword: keyword, division: division) } - public func fetchDepartmentList(keyword: String) async throws -> [String] { - try await remoteLectureDataSource.fetchDepartmentList(keyword: keyword) + public func searchDepartment(keyword: String) async throws -> [String] { + try await remoteLectureDataSource.searchDepartment(keyword: keyword) } - public func fetchDivisionList(keyword: String) async throws -> [String] { - try await remoteLectureDataSource.fetchDivisionList(keyword: keyword) + public func searchDivision(keyword: String) async throws -> [String] { + try await remoteLectureDataSource.searchDivision(keyword: keyword) } public func fetchAppliedLectureList(studentID: String) async throws -> [AppliedLectureEntity] { @@ -51,12 +51,8 @@ public struct LectureRepositoryImpl: LectureRepository { try await remoteLectureDataSource.fetchApplicantList(lectureID: lectureID) } - public func modifyApplicantWhether(lectureID: String, studentID: String, isComplete: Bool) async throws { - try await remoteLectureDataSource.modifyApplicantWhether( - lectureID: lectureID, - studentID: studentID, - isComplete: isComplete - ) + public func setLectureCompletion(lectureID: String, students: [String]) async throws { + try await remoteLectureDataSource.setLectureCompletion(lectureID: lectureID, students: students) } public func deleteLecture(lectureID: String) async throws { @@ -66,4 +62,8 @@ public struct LectureRepositoryImpl: LectureRepository { public func modifyLecture(lectureID: String, req: InputLectureRequestDTO) async throws { try await remoteLectureDataSource.modifyLecture(lectureID: lectureID, req: req) } + + public func fetchAppliedLectureStudentDetail(lectureID: String, studentID: String) async throws -> AppliedLectureStudentDetailEntity { + try await remoteLectureDataSource.fetchAppliedLectureStudentDetail(lectureID: lectureID, studentID: studentID) + } } diff --git a/Service/Sources/Data/UseCase/Lecture/CancelLectureUseCaseImpl.swift b/Service/Sources/Data/UseCase/Lecture/CancelLectureApplicationUseCaseImpl.swift similarity index 61% rename from Service/Sources/Data/UseCase/Lecture/CancelLectureUseCaseImpl.swift rename to Service/Sources/Data/UseCase/Lecture/CancelLectureApplicationUseCaseImpl.swift index 356da530a..1d1fd9a97 100644 --- a/Service/Sources/Data/UseCase/Lecture/CancelLectureUseCaseImpl.swift +++ b/Service/Sources/Data/UseCase/Lecture/CancelLectureApplicationUseCaseImpl.swift @@ -1,6 +1,6 @@ import Foundation -public struct CancelLectureUseCaseImpl: CancelLectureUseCase { +public struct CancelLectureApplicationUseCaseImpl: CancelLectureApplicationUseCase { private let lectureRepository: any LectureRepository public init(lectureRepository: any LectureRepository) { @@ -8,6 +8,6 @@ public struct CancelLectureUseCaseImpl: CancelLectureUseCase { } public func callAsFunction(lectureID: String) async throws { - try await lectureRepository.cancelLecture(lectureID: lectureID) + try await lectureRepository.cancelLectureApplication(lectureID: lectureID) } } diff --git a/Service/Sources/Data/UseCase/Lecture/FetchAppliedLectureStudentDetailUseCaseImpl.swift b/Service/Sources/Data/UseCase/Lecture/FetchAppliedLectureStudentDetailUseCaseImpl.swift new file mode 100644 index 000000000..a9d4341f3 --- /dev/null +++ b/Service/Sources/Data/UseCase/Lecture/FetchAppliedLectureStudentDetailUseCaseImpl.swift @@ -0,0 +1,13 @@ +import Foundation + +public struct FetchAppliedLectureStudentDetailUseCaseImpl: FetchAppliedLectureStudentDetailUseCase { + private let lectureRepository: any LectureRepository + + public init(lectureRepository: any LectureRepository) { + self.lectureRepository = lectureRepository + } + + public func callAsFunction(lectureID: String, studentID: String) async throws -> AppliedLectureStudentDetailEntity { + try await lectureRepository.fetchAppliedLectureStudentDetail(lectureID: lectureID, studentID: studentID) + } +} diff --git a/Service/Sources/Data/UseCase/Lecture/ModifyApplicantWhetherUseCaseImpl.swift b/Service/Sources/Data/UseCase/Lecture/ModifyApplicantWhetherUseCaseImpl.swift deleted file mode 100644 index 1500eb4d1..000000000 --- a/Service/Sources/Data/UseCase/Lecture/ModifyApplicantWhetherUseCaseImpl.swift +++ /dev/null @@ -1,17 +0,0 @@ -import Foundation - -public struct ModifyApplicantWhetherUseCaseImpl: ModifyApplicantWhetherUseCase { - private let lectureRepository: any LectureRepository - - public init(lectureRepository: any LectureRepository) { - self.lectureRepository = lectureRepository - } - - public func callAsFunction(lectureID: String, studentID: String, isComplete: Bool) async throws { - try await lectureRepository.modifyApplicantWhether( - lectureID: lectureID, - studentID: studentID, - isComplete: isComplete - ) - } -} diff --git a/Service/Sources/Data/UseCase/Lecture/FetchDivisionListUseCaseImpl.swift b/Service/Sources/Data/UseCase/Lecture/SearchDepartmentUseCaseImpl.swift similarity index 66% rename from Service/Sources/Data/UseCase/Lecture/FetchDivisionListUseCaseImpl.swift rename to Service/Sources/Data/UseCase/Lecture/SearchDepartmentUseCaseImpl.swift index 858288cdd..98f5fb2eb 100644 --- a/Service/Sources/Data/UseCase/Lecture/FetchDivisionListUseCaseImpl.swift +++ b/Service/Sources/Data/UseCase/Lecture/SearchDepartmentUseCaseImpl.swift @@ -1,6 +1,6 @@ import Foundation -public struct FetchDivisionListUseCaseImpl: FetchDivisionListUseCase { +public struct SearchDepartmentUseCaseImpl: SearchDepartmentUseCase { private let lectureRepository: any LectureRepository public init(lectureRepository: any LectureRepository) { @@ -8,6 +8,6 @@ public struct FetchDivisionListUseCaseImpl: FetchDivisionListUseCase { } public func callAsFunction(keyword: String) async throws -> [String] { - try await lectureRepository.fetchDivisionList(keyword: keyword) + try await lectureRepository.searchDepartment(keyword: keyword) } } diff --git a/Service/Sources/Data/UseCase/Lecture/FetchDepartmentListUseCaseImpl.swift b/Service/Sources/Data/UseCase/Lecture/SearchDivisionUseCaseImpl.swift similarity index 65% rename from Service/Sources/Data/UseCase/Lecture/FetchDepartmentListUseCaseImpl.swift rename to Service/Sources/Data/UseCase/Lecture/SearchDivisionUseCaseImpl.swift index 44743da9a..ada8f3c2a 100644 --- a/Service/Sources/Data/UseCase/Lecture/FetchDepartmentListUseCaseImpl.swift +++ b/Service/Sources/Data/UseCase/Lecture/SearchDivisionUseCaseImpl.swift @@ -1,6 +1,6 @@ import Foundation -public struct FetchDepartmentListUseCaseImpl: FetchDepartmentListUseCase { +public struct SearchDivisionUseCaseImpl: SearchDivisionUseCase { private let lectureRepository: any LectureRepository public init(lectureRepository: any LectureRepository) { @@ -8,6 +8,6 @@ public struct FetchDepartmentListUseCaseImpl: FetchDepartmentListUseCase { } public func callAsFunction(keyword: String) async throws -> [String] { - try await lectureRepository.fetchDepartmentList(keyword: keyword) + try await lectureRepository.searchDivision(keyword: keyword) } } diff --git a/Service/Sources/Data/UseCase/Lecture/FetchInstructorListUseCaseImpl.swift b/Service/Sources/Data/UseCase/Lecture/SearchInstructorUseCaseImpl.swift similarity index 66% rename from Service/Sources/Data/UseCase/Lecture/FetchInstructorListUseCaseImpl.swift rename to Service/Sources/Data/UseCase/Lecture/SearchInstructorUseCaseImpl.swift index b0bd386d9..76198e31f 100644 --- a/Service/Sources/Data/UseCase/Lecture/FetchInstructorListUseCaseImpl.swift +++ b/Service/Sources/Data/UseCase/Lecture/SearchInstructorUseCaseImpl.swift @@ -1,6 +1,6 @@ import Foundation -public struct FetchInstructorListUseCaseImpl: FetchInstructorListUseCase { +public struct SearchInstructorUseCaseImpl: SearchInstructorUseCase { private let lectureRepository: any LectureRepository public init(lectureRepository: any LectureRepository) { @@ -8,6 +8,6 @@ public struct FetchInstructorListUseCaseImpl: FetchInstructorListUseCase { } public func callAsFunction(keyword: String) async throws -> [InstructorInfoEntity] { - try await lectureRepository.fetchInstructorList(keyword: keyword) + try await lectureRepository.searchInstructor(keyword: keyword) } } diff --git a/Service/Sources/Data/UseCase/Lecture/FetchLineListUseCaseImpl.swift b/Service/Sources/Data/UseCase/Lecture/SearchLineUseCaseImpl.swift similarity index 66% rename from Service/Sources/Data/UseCase/Lecture/FetchLineListUseCaseImpl.swift rename to Service/Sources/Data/UseCase/Lecture/SearchLineUseCaseImpl.swift index 5b4800f82..255b4148d 100644 --- a/Service/Sources/Data/UseCase/Lecture/FetchLineListUseCaseImpl.swift +++ b/Service/Sources/Data/UseCase/Lecture/SearchLineUseCaseImpl.swift @@ -1,6 +1,6 @@ import Foundation -public struct FetchLineListUseCaseImpl: FetchLineListUseCase { +public struct SearchLineUseCaseImpl: SearchLineUseCase { private let lectureRepository: any LectureRepository public init(lectureRepository: any LectureRepository) { @@ -8,6 +8,6 @@ public struct FetchLineListUseCaseImpl: FetchLineListUseCase { } public func callAsFunction(keyword: String, division: String) async throws -> [String] { - try await lectureRepository.fetchLineList(keyword: keyword, division: division) + try await lectureRepository.searchLine(keyword: keyword, division: division) } } diff --git a/Service/Sources/Data/UseCase/Lecture/SetLectureCompletionUseCaseImpl.swift b/Service/Sources/Data/UseCase/Lecture/SetLectureCompletionUseCaseImpl.swift new file mode 100644 index 000000000..39dcf336c --- /dev/null +++ b/Service/Sources/Data/UseCase/Lecture/SetLectureCompletionUseCaseImpl.swift @@ -0,0 +1,13 @@ +import Foundation + +public struct SetLectureCompletionUseCaseImpl: SetLectureCompletionUseCase { + private let lectureRepository: any LectureRepository + + public init(lectureRepository: any LectureRepository) { + self.lectureRepository = lectureRepository + } + + public func callAsFunction(lectureID: String, students: [String]) async throws { + try await lectureRepository.setLectureCompletion(lectureID: lectureID, students: students) + } +} diff --git a/Service/Sources/Domain/LectureDomain/API/LectureAPI.swift b/Service/Sources/Domain/LectureDomain/API/LectureAPI.swift index f672d37c8..60116b994 100644 --- a/Service/Sources/Domain/LectureDomain/API/LectureAPI.swift +++ b/Service/Sources/Domain/LectureDomain/API/LectureAPI.swift @@ -6,16 +6,17 @@ public enum LectureAPI { case fetchLectureList(type: String) case fetchLectureDetail(lectureID: String) case applyLecture(lectureID: String) - case cancelLecture(lectureID: String) - case fetchInstructorList(keyword: String) - case fetchLineList(keyword: String, division: String) - case fetchDepartmentList(keyword: String) - case fetchDivisionList(keyword: String) + case cancelLectureApplication(lectureID: String) + case searchInstructor(keyword: String) + case searchLine(keyword: String, division: String) + case searchDepartment(keyword: String) + case searchDivision(keyword: String) case fetchAppliedLectureList(studentID: String) case fetchApplicantList(lectureID: String) - case modifyApplicantWhether(lectureID: String, studentID: String, isComplete: Bool) + case setLectureCompletion(lectureID: String, students: [String]) case deleteLecture(lectureID: String) case modifyLecture(lectureID: String, req: InputLectureRequestDTO) + case fetchAppliedLectureStudentDetail(lectureID: String, studentID: String) } extension LectureAPI: BitgouelAPI { @@ -33,20 +34,20 @@ extension LectureAPI: BitgouelAPI { case let .fetchLectureDetail(lectureID), let .applyLecture(lectureID), - let .cancelLecture(lectureID), + let .cancelLectureApplication(lectureID), let .modifyLecture(lectureID, _): return "/\(lectureID)" - case .fetchInstructorList: + case .searchInstructor: return "/instructor" - case .fetchLineList: + case .searchLine: return "/line" - case .fetchDepartmentList: + case .searchDepartment: return "/department" - case .fetchDivisionList: + case .searchDivision: return "/division" case let .fetchAppliedLectureList(studentID): @@ -55,11 +56,14 @@ extension LectureAPI: BitgouelAPI { case let .fetchApplicantList(lectureID): return "/student/\(lectureID)" - case let .modifyApplicantWhether(lectureID, studentID, _): - return "/\(lectureID)/\(studentID)" + case let .setLectureCompletion(lectureID, _): + return "/\(lectureID)/complete" case let .deleteLecture(lectureID): return "/\(lectureID)/soft" + + case let .fetchAppliedLectureStudentDetail(lectureID, studentID): + return "/student/\(lectureID)/\(studentID)" } } @@ -71,19 +75,20 @@ extension LectureAPI: BitgouelAPI { case .fetchLectureList, .fetchLectureDetail, - .fetchInstructorList, - .fetchLineList, - .fetchDepartmentList, - .fetchDivisionList, + .searchInstructor, + .searchLine, + .searchDepartment, + .searchDivision, .fetchAppliedLectureList, - .fetchApplicantList: + .fetchApplicantList, + .fetchAppliedLectureStudentDetail: return .get - case .cancelLecture, + case .cancelLectureApplication, .deleteLecture: return .delete - case .modifyApplicantWhether, + case .setLectureCompletion, .modifyLecture: return .patch } @@ -100,22 +105,22 @@ extension LectureAPI: BitgouelAPI { "type": type ], encoding: URLEncoding.queryString) - case let .fetchInstructorList(keyword), - let .fetchDepartmentList(keyword), - let .fetchDivisionList(keyword): + case let .searchInstructor(keyword), + let .searchDepartment(keyword), + let .searchDivision(keyword): return .requestParameters(parameters: [ "keyword": keyword ], encoding: URLEncoding.queryString) - case let .fetchLineList(keyword, division): + case let .searchLine(keyword, division): return .requestParameters(parameters: [ "keyword": keyword, "division": division ], encoding: URLEncoding.queryString) - case let .modifyApplicantWhether(_, _, isComplete): + case let .setLectureCompletion(_, students): return .requestParameters(parameters: [ - "isComplete": isComplete + "studentIds": students ], encoding: URLEncoding.queryString) default: diff --git a/Service/Sources/Domain/LectureDomain/DTO/Response/AppliedLectureStudentDetailResponseDTO.swift b/Service/Sources/Domain/LectureDomain/DTO/Response/AppliedLectureStudentDetailResponseDTO.swift new file mode 100644 index 000000000..12f80c4d6 --- /dev/null +++ b/Service/Sources/Domain/LectureDomain/DTO/Response/AppliedLectureStudentDetailResponseDTO.swift @@ -0,0 +1,33 @@ +import Foundation + +struct AppliedLectureStudentDetailResponseDTO: Decodable { + public let email: String + public let name: String + public let grade: Int + public let classNumber: Int + public let number: Int + public let phoneNumber: String + public let school: String + public let clubName: String + public let cohort: Int + public let currentCompletedDate: Date + public let completeStatus: CompleteStatusType +} + +extension AppliedLectureStudentDetailResponseDTO { + func toDomain() -> AppliedLectureStudentDetailEntity { + AppliedLectureStudentDetailEntity( + email: email, + name: name, + grade: grade, + classNumber: classNumber, + number: number, + phoneNumber: phoneNumber, + school: school, + clubName: clubName, + cohort: cohort, + currentCompletedDate: currentCompletedDate, + completeStatus: completeStatus + ) + } +} diff --git a/Service/Sources/Domain/LectureDomain/DTO/Response/FetchApplicantListResponseDTO.swift b/Service/Sources/Domain/LectureDomain/DTO/Response/FetchApplicantListResponseDTO.swift index d018767ae..0ae8d5e12 100644 --- a/Service/Sources/Domain/LectureDomain/DTO/Response/FetchApplicantListResponseDTO.swift +++ b/Service/Sources/Domain/LectureDomain/DTO/Response/FetchApplicantListResponseDTO.swift @@ -10,54 +10,22 @@ public struct FetchApplicantListResponseDTO: Decodable { public struct ApplicantInfoResponseDTO: Decodable { public let studentID: String - public let email: String public let name: String public let grade: Int public let classNumber: Int public let number: Int - public let phoneNumber: String - public let school: HighSchoolType + public let school: String public let clubName: String - public let cohort: Int public let isComplete: Bool - public init( - studentID: String, - email: String, - name: String, - grade: Int, - classNumber: Int, - number: Int, - phoneNumber: String, - school: HighSchoolType, - clubName: String, - cohort: Int, - isComplete: Bool - ) { - self.studentID = studentID - self.email = email - self.name = name - self.grade = grade - self.classNumber = classNumber - self.number = number - self.phoneNumber = phoneNumber - self.school = school - self.clubName = clubName - self.cohort = cohort - self.isComplete = isComplete - } - enum CodingKeys: String, CodingKey { case studentID = "id" - case email case name case grade case classNumber case number - case phoneNumber case school case clubName - case cohort case isComplete } } @@ -72,15 +40,12 @@ extension ApplicantInfoResponseDTO { func toDomain() -> ApplicantInfoEntity { ApplicantInfoEntity( studentID: studentID, - email: email, name: name, grade: grade, classNumber: classNumber, number: number, - phoneNumber: phoneNumber, school: school, clubName: clubName, - cohort: cohort, isComplete: isComplete ) } diff --git a/Service/Sources/Domain/LectureDomain/DTO/Response/FetchLectureDetailResponseDTO.swift b/Service/Sources/Domain/LectureDomain/DTO/Response/FetchLectureDetailResponseDTO.swift index 583986b5e..e1f29f02c 100644 --- a/Service/Sources/Domain/LectureDomain/DTO/Response/FetchLectureDetailResponseDTO.swift +++ b/Service/Sources/Domain/LectureDomain/DTO/Response/FetchLectureDetailResponseDTO.swift @@ -21,6 +21,7 @@ public struct FetchLectureDetailResponseDTO: Decodable { public let locationX: String public let locationY: String public let address: String + public let locationDetails: String public let essentialComplete: Bool public init( @@ -44,6 +45,7 @@ public struct FetchLectureDetailResponseDTO: Decodable { locationX: String, locationY: String, address: String, + locationDetails: String, essentialComplete: Bool ) { self.name = name @@ -66,6 +68,7 @@ public struct FetchLectureDetailResponseDTO: Decodable { self.locationX = locationX self.locationY = locationY self.address = address + self.locationDetails = locationDetails self.essentialComplete = essentialComplete } @@ -106,6 +109,7 @@ public struct FetchLectureDetailResponseDTO: Decodable { case locationX case locationY case address + case locationDetails case essentialComplete } } @@ -133,6 +137,7 @@ extension FetchLectureDetailResponseDTO { locationX: locationX, locationY: locationY, address: address, + locationDetails: locationDetails, essentialComplete: essentialComplete ) } diff --git a/Service/Sources/Domain/LectureDomain/DataSource/RemoteLectureDataSource.swift b/Service/Sources/Domain/LectureDomain/DataSource/RemoteLectureDataSource.swift index 136efdb07..d1a8c794b 100644 --- a/Service/Sources/Domain/LectureDomain/DataSource/RemoteLectureDataSource.swift +++ b/Service/Sources/Domain/LectureDomain/DataSource/RemoteLectureDataSource.swift @@ -5,14 +5,15 @@ public protocol RemoteLectureDataSource: BaseRemoteDataSource { func fetchLectureList(type: String) async throws -> LectureContentEntity func fetchLectureDetail(lectureID: String) async throws -> LectureDetailEntity func applyLecture(lectureID: String) async throws - func cancelLecture(lectureID: String) async throws - func fetchInstructorList(keyword: String) async throws -> [InstructorInfoEntity] - func fetchLineList(keyword: String, division: String) async throws -> [String] - func fetchDepartmentList(keyword: String) async throws -> [String] - func fetchDivisionList(keyword: String) async throws -> [String] + func cancelLectureApplication(lectureID: String) async throws + func searchInstructor(keyword: String) async throws -> [InstructorInfoEntity] + func searchLine(keyword: String, division: String) async throws -> [String] + func searchDepartment(keyword: String) async throws -> [String] + func searchDivision(keyword: String) async throws -> [String] func fetchAppliedLectureList(studentID: String) async throws -> [AppliedLectureEntity] func fetchApplicantList(lectureID: String) async throws -> [ApplicantInfoEntity] - func modifyApplicantWhether(lectureID: String, studentID: String, isComplete: Bool) async throws + func setLectureCompletion(lectureID: String, students: [String]) async throws func deleteLecture(lectureID: String) async throws func modifyLecture(lectureID: String, req: InputLectureRequestDTO) async throws + func fetchAppliedLectureStudentDetail(lectureID: String, studentID: String) async throws -> AppliedLectureStudentDetailEntity } diff --git a/Service/Sources/Domain/LectureDomain/Entity/ApplicantInfoEntity.swift b/Service/Sources/Domain/LectureDomain/Entity/ApplicantInfoEntity.swift index 69a36a0f0..0496ff551 100644 --- a/Service/Sources/Domain/LectureDomain/Entity/ApplicantInfoEntity.swift +++ b/Service/Sources/Domain/LectureDomain/Entity/ApplicantInfoEntity.swift @@ -2,40 +2,31 @@ import Foundation public struct ApplicantInfoEntity: Equatable { public let studentID: String - public let email: String public let name: String public let grade: Int public let classNumber: Int public let number: Int - public let phoneNumber: String - public let school: HighSchoolType + public let school: String public let clubName: String - public let cohort: Int public let isComplete: Bool public init( studentID: String, - email: String, name: String, grade: Int, classNumber: Int, number: Int, - phoneNumber: String, - school: HighSchoolType, + school: String, clubName: String, - cohort: Int, isComplete: Bool ) { self.studentID = studentID - self.email = email self.name = name self.grade = grade self.classNumber = classNumber self.number = number - self.phoneNumber = phoneNumber self.school = school self.clubName = clubName - self.cohort = cohort self.isComplete = isComplete } } diff --git a/Service/Sources/Domain/LectureDomain/Entity/AppliedLectureStudentDetailEntity.swift b/Service/Sources/Domain/LectureDomain/Entity/AppliedLectureStudentDetailEntity.swift new file mode 100644 index 000000000..59068dc38 --- /dev/null +++ b/Service/Sources/Domain/LectureDomain/Entity/AppliedLectureStudentDetailEntity.swift @@ -0,0 +1,41 @@ +import Foundation + +public struct AppliedLectureStudentDetailEntity: Equatable { + public let email: String + public let name: String + public let grade: Int + public let classNumber: Int + public let number: Int + public let phoneNumber: String + public let school: String + public let clubName: String + public let cohort: Int + public let currentCompletedDate: Date + public let completeStatus: CompleteStatusType + + public init( + email: String, + name: String, + grade: Int, + classNumber: Int, + number: Int, + phoneNumber: String, + school: String, + clubName: String, + cohort: Int, + currentCompletedDate: Date, + completeStatus: CompleteStatusType + ) { + self.email = email + self.name = name + self.grade = grade + self.classNumber = classNumber + self.number = number + self.phoneNumber = phoneNumber + self.school = school + self.clubName = clubName + self.cohort = cohort + self.currentCompletedDate = currentCompletedDate + self.completeStatus = completeStatus + } +} diff --git a/Service/Sources/Domain/LectureDomain/Entity/LectureDetailEntity.swift b/Service/Sources/Domain/LectureDomain/Entity/LectureDetailEntity.swift index d3592321c..7b0714666 100644 --- a/Service/Sources/Domain/LectureDomain/Entity/LectureDetailEntity.swift +++ b/Service/Sources/Domain/LectureDomain/Entity/LectureDetailEntity.swift @@ -21,6 +21,7 @@ public struct LectureDetailEntity: Equatable { public let locationX: String public let locationY: String public let address: String + public let locationDetails: String public let essentialComplete: Bool public init( @@ -44,6 +45,7 @@ public struct LectureDetailEntity: Equatable { locationX: String, locationY: String, address: String, + locationDetails: String, essentialComplete: Bool ) { self.name = name @@ -66,6 +68,7 @@ public struct LectureDetailEntity: Equatable { self.locationX = locationX self.locationY = locationY self.address = address + self.locationDetails = locationDetails self.essentialComplete = essentialComplete } } diff --git a/Service/Sources/Domain/LectureDomain/Repository/LectureRepository.swift b/Service/Sources/Domain/LectureDomain/Repository/LectureRepository.swift index 5df315f70..ba8f98061 100644 --- a/Service/Sources/Domain/LectureDomain/Repository/LectureRepository.swift +++ b/Service/Sources/Domain/LectureDomain/Repository/LectureRepository.swift @@ -5,14 +5,15 @@ public protocol LectureRepository { func fetchLectureList(type: String) async throws -> LectureContentEntity func fetchLectureDetail(lectureID: String) async throws -> LectureDetailEntity func applyLecture(lectureID: String) async throws - func cancelLecture(lectureID: String) async throws - func fetchInstructorList(keyword: String) async throws -> [InstructorInfoEntity] - func fetchLineList(keyword: String, division: String) async throws -> [String] - func fetchDepartmentList(keyword: String) async throws -> [String] - func fetchDivisionList(keyword: String) async throws -> [String] + func cancelLectureApplication(lectureID: String) async throws + func searchInstructor(keyword: String) async throws -> [InstructorInfoEntity] + func searchLine(keyword: String, division: String) async throws -> [String] + func searchDepartment(keyword: String) async throws -> [String] + func searchDivision(keyword: String) async throws -> [String] func fetchAppliedLectureList(studentID: String) async throws -> [AppliedLectureEntity] func fetchApplicantList(lectureID: String) async throws -> [ApplicantInfoEntity] - func modifyApplicantWhether(lectureID: String, studentID: String, isComplete: Bool) async throws + func setLectureCompletion(lectureID: String, students: [String]) async throws func deleteLecture(lectureID: String) async throws func modifyLecture(lectureID: String, req: InputLectureRequestDTO) async throws + func fetchAppliedLectureStudentDetail(lectureID: String, studentID: String) async throws -> AppliedLectureStudentDetailEntity } diff --git a/Service/Sources/Domain/LectureDomain/UseCase/CancelLectureUseCase.swift b/Service/Sources/Domain/LectureDomain/UseCase/CancelLectureApplicationUseCase.swift similarity index 60% rename from Service/Sources/Domain/LectureDomain/UseCase/CancelLectureUseCase.swift rename to Service/Sources/Domain/LectureDomain/UseCase/CancelLectureApplicationUseCase.swift index b0245c152..62be22f6e 100644 --- a/Service/Sources/Domain/LectureDomain/UseCase/CancelLectureUseCase.swift +++ b/Service/Sources/Domain/LectureDomain/UseCase/CancelLectureApplicationUseCase.swift @@ -1,5 +1,5 @@ import Foundation -public protocol CancelLectureUseCase { +public protocol CancelLectureApplicationUseCase { func callAsFunction(lectureID: String) async throws } diff --git a/Service/Sources/Domain/LectureDomain/UseCase/FetchAppliedLectureStudentDetailUseCase.swift b/Service/Sources/Domain/LectureDomain/UseCase/FetchAppliedLectureStudentDetailUseCase.swift new file mode 100644 index 000000000..aa2c78263 --- /dev/null +++ b/Service/Sources/Domain/LectureDomain/UseCase/FetchAppliedLectureStudentDetailUseCase.swift @@ -0,0 +1,5 @@ +import Foundation + +public protocol FetchAppliedLectureStudentDetailUseCase { + func callAsFunction(lectureID: String, studentID: String) async throws -> AppliedLectureStudentDetailEntity +} diff --git a/Service/Sources/Domain/LectureDomain/UseCase/ModifyApplicantWhetherUseCase.swift b/Service/Sources/Domain/LectureDomain/UseCase/ModifyApplicantWhetherUseCase.swift deleted file mode 100644 index b58822697..000000000 --- a/Service/Sources/Domain/LectureDomain/UseCase/ModifyApplicantWhetherUseCase.swift +++ /dev/null @@ -1,5 +0,0 @@ -import Foundation - -public protocol ModifyApplicantWhetherUseCase { - func callAsFunction(lectureID: String, studentID: String, isComplete: Bool) async throws -} diff --git a/Service/Sources/Domain/LectureDomain/UseCase/FetchDivisionListUseCase.swift b/Service/Sources/Domain/LectureDomain/UseCase/SearchDepartmentUseCase.swift similarity index 66% rename from Service/Sources/Domain/LectureDomain/UseCase/FetchDivisionListUseCase.swift rename to Service/Sources/Domain/LectureDomain/UseCase/SearchDepartmentUseCase.swift index e8a60cf07..f7e37b12d 100644 --- a/Service/Sources/Domain/LectureDomain/UseCase/FetchDivisionListUseCase.swift +++ b/Service/Sources/Domain/LectureDomain/UseCase/SearchDepartmentUseCase.swift @@ -1,5 +1,5 @@ import Foundation -public protocol FetchDivisionListUseCase { +public protocol SearchDepartmentUseCase { func callAsFunction(keyword: String) async throws -> [String] } diff --git a/Service/Sources/Domain/LectureDomain/UseCase/FetchDepartmentListUseCase.swift b/Service/Sources/Domain/LectureDomain/UseCase/SearchDivisionUseCase.swift similarity index 65% rename from Service/Sources/Domain/LectureDomain/UseCase/FetchDepartmentListUseCase.swift rename to Service/Sources/Domain/LectureDomain/UseCase/SearchDivisionUseCase.swift index 8cd5b80f0..a4c55631a 100644 --- a/Service/Sources/Domain/LectureDomain/UseCase/FetchDepartmentListUseCase.swift +++ b/Service/Sources/Domain/LectureDomain/UseCase/SearchDivisionUseCase.swift @@ -1,5 +1,5 @@ import Foundation -public protocol FetchDepartmentListUseCase { +public protocol SearchDivisionUseCase { func callAsFunction(keyword: String) async throws -> [String] } diff --git a/Service/Sources/Domain/LectureDomain/UseCase/FetchInstructorListUseCase.swift b/Service/Sources/Domain/LectureDomain/UseCase/SearchInstructorUseCase.swift similarity index 69% rename from Service/Sources/Domain/LectureDomain/UseCase/FetchInstructorListUseCase.swift rename to Service/Sources/Domain/LectureDomain/UseCase/SearchInstructorUseCase.swift index 3f8f9da2d..370b60284 100644 --- a/Service/Sources/Domain/LectureDomain/UseCase/FetchInstructorListUseCase.swift +++ b/Service/Sources/Domain/LectureDomain/UseCase/SearchInstructorUseCase.swift @@ -1,5 +1,5 @@ import Foundation -public protocol FetchInstructorListUseCase { +public protocol SearchInstructorUseCase { func callAsFunction(keyword: String) async throws -> [InstructorInfoEntity] } diff --git a/Service/Sources/Domain/LectureDomain/UseCase/FetchLineListUseCase.swift b/Service/Sources/Domain/LectureDomain/UseCase/SearchLineUseCase.swift similarity index 72% rename from Service/Sources/Domain/LectureDomain/UseCase/FetchLineListUseCase.swift rename to Service/Sources/Domain/LectureDomain/UseCase/SearchLineUseCase.swift index 38e687136..f11098927 100644 --- a/Service/Sources/Domain/LectureDomain/UseCase/FetchLineListUseCase.swift +++ b/Service/Sources/Domain/LectureDomain/UseCase/SearchLineUseCase.swift @@ -1,5 +1,5 @@ import Foundation -public protocol FetchLineListUseCase { +public protocol SearchLineUseCase { func callAsFunction(keyword: String, division: String) async throws -> [String] } diff --git a/Service/Sources/Domain/LectureDomain/UseCase/SetLectureCompletionUseCase.swift b/Service/Sources/Domain/LectureDomain/UseCase/SetLectureCompletionUseCase.swift new file mode 100644 index 000000000..07867c85e --- /dev/null +++ b/Service/Sources/Domain/LectureDomain/UseCase/SetLectureCompletionUseCase.swift @@ -0,0 +1,5 @@ +import Foundation + +public protocol SetLectureCompletionUseCase { + func callAsFunction(lectureID: String, students: [String]) async throws +}