Skip to content

Commit

Permalink
Merge pull request #403 from School-of-Company/391-school-detail-feature
Browse files Browse the repository at this point in the history
🔀 :: [#391] 학교 상세 조회 기능 추가
  • Loading branch information
uuuunseo authored Aug 8, 2024
2 parents 6f958c4 + d656628 commit 33b4277
Show file tree
Hide file tree
Showing 23 changed files with 147 additions and 114 deletions.
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

0 comments on commit 33b4277

Please sign in to comment.