Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

πŸ”€ :: [#391] 학ꡐ 상세 쑰회 κΈ°λŠ₯ μΆ”κ°€ #403

Merged
merged 6 commits into from
Aug 8, 2024
4 changes: 4 additions & 0 deletions App/Sources/Application/DI/School/AppComponent+School.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,8 @@ public extension AppComponent {
var deleteSchoolUseCase: any DeleteSchoolUseCase {
DeleteSchoolUseCaseImpl(schoolRepository: schoolRepository)
}

var fetchSchoolDetailUseCase: any FetchSchoolDetailUseCase {
FetchSchoolDetailUseCaseImpl(schoolRepository: schoolRepository)
}
}
9 changes: 9 additions & 0 deletions App/Sources/Application/NeedleGenerated.swift
Original file line number Diff line number Diff line change
Expand Up @@ -564,6 +564,9 @@ private class InputSchoolDependencye8d4bffe76e2533005e2Provider: InputSchoolDepe
var deleteSchoolUseCase: any DeleteSchoolUseCase {
return appComponent.deleteSchoolUseCase
}
var fetchSchoolDetailUseCase: any FetchSchoolDetailUseCase {
return appComponent.fetchSchoolDetailUseCase
}
var inputClubFactory: any InputClubFactory {
return appComponent.inputClubFactory
}
Expand Down Expand Up @@ -764,6 +767,9 @@ private class SchoolListDependency96b276c3342c1aca3550Provider: SchoolListDepend
var fetchSchoolListUseCase: any FetchSchoolListUseCase {
return appComponent.fetchSchoolListUseCase
}
var fetchSchoolDetailUseCase: any FetchSchoolDetailUseCase {
return appComponent.fetchSchoolDetailUseCase
}
var inputSchoolFactory: any InputSchoolFactory {
return appComponent.inputSchoolFactory
}
Expand Down Expand Up @@ -1205,6 +1211,7 @@ extension InputSchoolComponent: Registration {
keyPathToName[\InputSchoolDependency.createdSchoolUseCase] = "createdSchoolUseCase-any CreatedSchoolUseCase"
keyPathToName[\InputSchoolDependency.modifySchoolUseCase] = "modifySchoolUseCase-any ModifySchoolUseCase"
keyPathToName[\InputSchoolDependency.deleteSchoolUseCase] = "deleteSchoolUseCase-any DeleteSchoolUseCase"
keyPathToName[\InputSchoolDependency.fetchSchoolDetailUseCase] = "fetchSchoolDetailUseCase-any FetchSchoolDetailUseCase"
keyPathToName[\InputSchoolDependency.inputClubFactory] = "inputClubFactory-any InputClubFactory"
}
}
Expand Down Expand Up @@ -1279,6 +1286,7 @@ extension InquiryListComponent: Registration {
extension SchoolListComponent: Registration {
public func registerItems() {
keyPathToName[\SchoolListDependency.fetchSchoolListUseCase] = "fetchSchoolListUseCase-any FetchSchoolListUseCase"
keyPathToName[\SchoolListDependency.fetchSchoolDetailUseCase] = "fetchSchoolDetailUseCase-any FetchSchoolDetailUseCase"
keyPathToName[\SchoolListDependency.inputSchoolFactory] = "inputSchoolFactory-any InputSchoolFactory"
}
}
Expand Down Expand Up @@ -1516,6 +1524,7 @@ extension AppComponent: Registration {
localTable["createdSchoolUseCase-any CreatedSchoolUseCase"] = { [unowned self] in self.createdSchoolUseCase as Any }
localTable["modifySchoolUseCase-any ModifySchoolUseCase"] = { [unowned self] in self.modifySchoolUseCase as Any }
localTable["deleteSchoolUseCase-any DeleteSchoolUseCase"] = { [unowned self] in self.deleteSchoolUseCase as Any }
localTable["fetchSchoolDetailUseCase-any FetchSchoolDetailUseCase"] = { [unowned self] in self.fetchSchoolDetailUseCase as Any }
localTable["remoteEmailDataSource-any RemoteEmailDataSource"] = { [unowned self] in self.remoteEmailDataSource as Any }
localTable["emailRepository-any EmailRepository"] = { [unowned self] in self.emailRepository as Any }
localTable["sendEmailCertificationLinkUseCase-any SendEmailCertificationLinkUseCase"] = { [unowned self] in self.sendEmailCertificationLinkUseCase as Any }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import SwiftUI
import Service

public protocol InputClubFactory {
associatedtype SomeView: View
func makeView(
schoolID: Int,
state: String,
clubInfo: ClubDetailModel
clubInfo: SchoolWithClubsEntity
) -> SomeView
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public final class InputClubComponent: Component<InputClubDependency>, InputClub
public func makeView(
schoolID: Int,
state: String,
clubInfo: ClubDetailModel
clubInfo: SchoolWithClubsEntity
) -> some View {
InputClubView(
viewModel: .init(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ final class InputClubViewModel: BaseViewModel {
@Published var isShowingDeleteAlert: Bool = false
let schoolID: Int
let state: String
let clubInfo: ClubDetailModel
let clubInfo: SchoolWithClubsEntity

private let createdClubUseCase: any CreatedClubUseCase
private let deleteClubUseCase: any DeleteClubUseCase
Expand All @@ -16,7 +16,7 @@ final class InputClubViewModel: BaseViewModel {
init(
schoolID: Int,
state: String,
clubInfo: ClubDetailModel,
clubInfo: SchoolWithClubsEntity,
createdClubUseCase: any CreatedClubUseCase,
deleteClubUseCase: any DeleteClubUseCase,
modifyClubUseCase: any ModifyClubUseCase
Expand All @@ -34,7 +34,7 @@ final class InputClubViewModel: BaseViewModel {
}

func onAppear() {
clubName = clubInfo.name
clubName = clubInfo.clubName
selectedField = clubInfo.field
}

Expand All @@ -53,7 +53,6 @@ final class InputClubViewModel: BaseViewModel {
)

success()

} catch {
errorMessage = error.clubDomainErrorMessage()
isErrorOccurred = true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ public protocol InputSchoolFactory {
associatedtype SomeView: View
func makeView(
state: String,
schoolInfo: SchoolDetailInfoModel
schoolID: Int
) -> SomeView
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import SwiftUI
import Service

struct ClubFormView: View {
let clubList: [ClubDetailModel]
let editAction: (ClubDetailModel) -> Void
let clubList: [SchoolWithClubsEntity]
let editAction: (SchoolWithClubsEntity) -> Void
let addClubAction: () -> Void

var body: some View {
Expand Down Expand Up @@ -42,12 +43,12 @@ struct ClubFormView: View {

@ViewBuilder
func clubListRow(
clubInfo: ClubDetailModel
clubInfo: SchoolWithClubsEntity
) -> some View {
HStack {
HStack {
BitgouelText(
text: clubInfo.name,
text: clubInfo.clubName,
font: .text3
)
.padding(.horizontal, 20)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,20 @@ public protocol InputSchoolDependency: Dependency {
var createdSchoolUseCase: any CreatedSchoolUseCase { get }
var modifySchoolUseCase: any ModifySchoolUseCase { get }
var deleteSchoolUseCase: any DeleteSchoolUseCase { get }
var fetchSchoolDetailUseCase: any FetchSchoolDetailUseCase { get }
var inputClubFactory: any InputClubFactory { get }
}

public final class InputSchoolComponent: Component<InputSchoolDependency>, InputSchoolFactory {
public func makeView(
state: String,
schoolInfo: SchoolDetailInfoModel
schoolID: Int
) -> some View {
InputSchoolView(
viewModel: .init(
state: state,
schoolInfo: schoolInfo,
schoolID: schoolID,
fetchSchoolDetailUseCase: dependency.fetchSchoolDetailUseCase,
createdSchoolUseCase: dependency.createdSchoolUseCase,
modifySchoolUseCase: dependency.modifySchoolUseCase,
deleteSchoolUseCase: dependency.deleteSchoolUseCase
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,11 +93,11 @@ struct InputSchoolView: View {
}

if viewModel.state == "μˆ˜μ •" {
ClubFormView(clubList: viewModel.schoolInfo.clubList
ClubFormView(clubList: viewModel.clubList
) { clubInfo in
viewModel.updateIsPresentedInputClubView(isPresented: true, state: "μˆ˜μ •", clubInfo: clubInfo)
} addClubAction: {
viewModel.updateIsPresentedInputClubView(isPresented: true, state: "등둝", clubInfo: .init(clubID: 0, name: "", field: nil))
viewModel.updateIsPresentedInputClubView(isPresented: true, state: "등둝", clubInfo: .init(clubID: 0, clubName: "", field: nil))
}
}
}
Expand All @@ -117,6 +117,9 @@ struct InputSchoolView: View {
viewModel.onApper()
}
}
.refreshable {
viewModel.onApper()
}
.bitgouelBottomSheet(isShowing: $viewModel.isShowingLineBottomSheet) {
SchoolLineBottomSheet(
selectedLine: viewModel.selectedLine
Expand Down Expand Up @@ -164,9 +167,9 @@ struct InputSchoolView: View {
}
.navigate(
to: inputClubFactory.makeView(
schoolID: viewModel.schoolInfo.schoolID,
schoolID: viewModel.schoolID,
state: viewModel.clubViewState,
clubInfo: viewModel.selectedClubInfo ?? .init(clubID: 0, name: "", field: nil)
clubInfo: viewModel.selectedClubInfo ?? .init(clubID: 0, clubName: "", field: nil)
).eraseToAnyView(),
when: $viewModel.isPresentedInputClubView
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,24 +15,28 @@ final class InputSchoolViewModel: BaseViewModel {
@Published var selectedLine: LineType?
@Published var logoImageURL: String?
@Published var departmentList: [String] = []
@Published var clubList: [SchoolWithClubsEntity] = []
var clubViewState: String = ""
var selectedClubInfo: ClubDetailModel?
var selectedClubInfo: SchoolWithClubsEntity?
let state: String
let schoolInfo: SchoolDetailInfoModel
let schoolID: Int

private let fetchSchoolDetailUseCase: any FetchSchoolDetailUseCase
private let createdSchoolUseCase: any CreatedSchoolUseCase
private let modifySchoolUseCase: any ModifySchoolUseCase
private let deleteSchoolUseCase: any DeleteSchoolUseCase

init(
state: String,
schoolInfo: SchoolDetailInfoModel,
schoolID: Int,
fetchSchoolDetailUseCase: any FetchSchoolDetailUseCase,
createdSchoolUseCase: any CreatedSchoolUseCase,
modifySchoolUseCase: any ModifySchoolUseCase,
deleteSchoolUseCase: any DeleteSchoolUseCase
) {
self.state = state
self.schoolInfo = schoolInfo
self.schoolID = schoolID
self.fetchSchoolDetailUseCase = fetchSchoolDetailUseCase
self.createdSchoolUseCase = createdSchoolUseCase
self.modifySchoolUseCase = modifySchoolUseCase
self.deleteSchoolUseCase = deleteSchoolUseCase
Expand All @@ -59,7 +63,7 @@ final class InputSchoolViewModel: BaseViewModel {
isPresentedSuccessView = isPresented
}

func updateIsPresentedInputClubView(isPresented: Bool, state: String, clubInfo: ClubDetailModel) {
func updateIsPresentedInputClubView(isPresented: Bool, state: String, clubInfo: SchoolWithClubsEntity) {
isPresentedInputClubView = isPresented
clubViewState = state
selectedClubInfo = clubInfo
Expand All @@ -77,11 +81,25 @@ final class InputSchoolViewModel: BaseViewModel {
departmentList.append("")
}

func onApper() {
schoolName = schoolInfo.name
selectedLine = schoolInfo.line
departmentList = schoolInfo.departmentList
func updateSchoolInfo(schoolInfo: SchoolListEntity) {
logoImageURL = schoolInfo.logoImageURL
schoolName = schoolInfo.schoolName
selectedLine = schoolInfo.line
departmentList = schoolInfo.departments
clubList = schoolInfo.clubs
}

@MainActor
func onApper() {
Task {
do {
let response = try await fetchSchoolDetailUseCase(schoolID: schoolID)

updateSchoolInfo(schoolInfo: response)
} catch {
print(error)
}
}
}

@MainActor
Expand Down Expand Up @@ -111,7 +129,7 @@ final class InputSchoolViewModel: BaseViewModel {
func deleteSchool(_ success: @escaping () -> Void) {
Task {
do {
try await deleteSchoolUseCase(schoolID: schoolInfo.schoolID)
try await deleteSchoolUseCase(schoolID: schoolID)

success()
} catch {
Expand All @@ -128,7 +146,7 @@ final class InputSchoolViewModel: BaseViewModel {
Task {
do {
try await modifySchoolUseCase(
schoolID: schoolInfo.schoolID,
schoolID: schoolID,
logoImage: selectedUIImage?.jpegData(compressionQuality: 0.2) ?? .init(),
req: InputSchoolInfoRequestDTO(
schoolName: schoolName,
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,16 @@ import SwiftUI

public protocol SchoolListDependency: Dependency {
var fetchSchoolListUseCase: any FetchSchoolListUseCase { get }
var fetchSchoolDetailUseCase: any FetchSchoolDetailUseCase { get }
var inputSchoolFactory: any InputSchoolFactory { get }
}

public final class SchoolListComponent: Component<SchoolListDependency>, SchoolListFactory {
public func makeView() -> some View {
SchoolListView(
viewModel: .init(
fetchSchoolListUseCase: dependency.fetchSchoolListUseCase
fetchSchoolListUseCase: dependency.fetchSchoolListUseCase,
fetchSchoolDetailUseCase: dependency.fetchSchoolDetailUseCase
),
inputSchoolFactory: dependency.inputSchoolFactory
)
Expand Down
Loading
Loading