Skip to content

Commit

Permalink
✨ :: [#391] InputSchoolFeature / 학교 생성 기능 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
uuuunseo committed Jul 31, 2024
1 parent 45b0fe1 commit d24d44e
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 18 deletions.
26 changes: 18 additions & 8 deletions App/Sources/Application/NeedleGenerated.swift
Original file line number Diff line number Diff line change
Expand Up @@ -536,15 +536,23 @@ private func factory4d07a7e30330c03d5d63f47b58f8f304c97af4d5(_ component: Needle
return WithdrawUserListDependencyc576fefb2eff9e703c66Provider(appComponent: parent1(component) as! AppComponent)
}
private class InputSchoolDependencye8d4bffe76e2533005e2Provider: InputSchoolDependency {


init() {

var createdSchoolUseCase: any CreatedSchoolUseCase {
return appComponent.createdSchoolUseCase
}
var modifySchoolUseCase: any ModifySchoolUseCase {
return appComponent.modifySchoolUseCase
}
var deleteSchoolUseCase: any DeleteSchoolUseCase {
return appComponent.deleteSchoolUseCase
}
private let appComponent: AppComponent
init(appComponent: AppComponent) {
self.appComponent = appComponent
}
}
/// ^->AppComponent->InputSchoolComponent
private func factorya02470c933733e398aeee3b0c44298fc1c149afb(_ component: NeedleFoundation.Scope) -> AnyObject {
return InputSchoolDependencye8d4bffe76e2533005e2Provider()
private func factorya02470c933733e398aeef47b58f8f304c97af4d5(_ component: NeedleFoundation.Scope) -> AnyObject {
return InputSchoolDependencye8d4bffe76e2533005e2Provider(appComponent: parent1(component) as! AppComponent)
}
private class FindPasswordDependency542eacce769b9dc25904Provider: FindPasswordDependency {
var sendEmailCertificationLinkUseCase: any SendEmailCertificationLinkUseCase {
Expand Down Expand Up @@ -1165,7 +1173,9 @@ extension WithdrawUserListComponent: Registration {
}
extension InputSchoolComponent: Registration {
public func registerItems() {

keyPathToName[\InputSchoolDependency.createdSchoolUseCase] = "createdSchoolUseCase-any CreatedSchoolUseCase"
keyPathToName[\InputSchoolDependency.modifySchoolUseCase] = "modifySchoolUseCase-any ModifySchoolUseCase"
keyPathToName[\InputSchoolDependency.deleteSchoolUseCase] = "deleteSchoolUseCase-any DeleteSchoolUseCase"
}
}
extension FindPasswordComponent: Registration {
Expand Down Expand Up @@ -1531,7 +1541,7 @@ private func registerProviderFactory(_ componentPath: String, _ factory: @escapi
registerProviderFactory("^->AppComponent->ClubDetailComponent", factory1559652f8e80cfa88d06f47b58f8f304c97af4d5)
registerProviderFactory("^->AppComponent->SuccessSignUpComponent", factorybf219b153b668170161de3b0c44298fc1c149afb)
registerProviderFactory("^->AppComponent->WithdrawUserListComponent", factory4d07a7e30330c03d5d63f47b58f8f304c97af4d5)
registerProviderFactory("^->AppComponent->InputSchoolComponent", factorya02470c933733e398aeee3b0c44298fc1c149afb)
registerProviderFactory("^->AppComponent->InputSchoolComponent", factorya02470c933733e398aeef47b58f8f304c97af4d5)
registerProviderFactory("^->AppComponent->FindPasswordComponent", factory15775d8436b06b9741d1f47b58f8f304c97af4d5)
registerProviderFactory("^->AppComponent->LectureApplicantListComponent", factory78a87c10d14f7bbaaa9df47b58f8f304c97af4d5)
registerProviderFactory("^->AppComponent->UserListComponent", factorycf08383b935d2e18f4c7f47b58f8f304c97af4d5)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import SwiftUI

struct CreatedClubSuccessView: View {
struct CreatedSchoolSuccessView: View {
let dismiss: () -> Void

var body: some View {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,22 @@
import NeedleFoundation
import SwiftUI
import Service

public protocol InputSchoolDependency: Dependency {}
public protocol InputSchoolDependency: Dependency {
var createdSchoolUseCase: any CreatedSchoolUseCase { get }
var modifySchoolUseCase: any ModifySchoolUseCase { get }
var deleteSchoolUseCase: any DeleteSchoolUseCase { get }
}

public final class InputSchoolComponent: Component<InputSchoolDependency>, InputSchoolFactory {
public func makeView(state: String, schoolInfo: SchoolDetailInfoModel) -> some View {
InputSchoolView(
viewModel: .init(
state: state,
schoolInfo: schoolInfo
schoolInfo: schoolInfo,
createdSchoolUseCase: dependency.createdSchoolUseCase,
modifySchoolUseCase: dependency.modifySchoolUseCase,
deleteSchoolUseCase: dependency.deleteSchoolUseCase
)
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,20 @@ struct InputSchoolView: View {
Button {
viewModel.updateIsShowingImagePicker(isShowing: true)
} label: {
LazyImage(source: viewModel.schoolInfo.logoImageURL) { state in
LazyImage(source: viewModel.logoImageURL) { state in
if let image = state.image {
image
.resizingMode(.aspectFit)
ZStack {
image
.resizingMode(.aspectFit)
.cornerRadius(8, corners: .allCorners)
.blur(radius: 1)

BitgouelAsset.Icons.add.swiftUIImage
.resizable()
.renderingMode(.template)
.foregroundColor(.white)
.frame(width: 24, height: 24)
}
} else {
schoolLogoImage()
}
Expand Down Expand Up @@ -128,6 +138,7 @@ struct InputSchoolView: View {
action: {
viewModel.deleteSchool {
viewModel.updateIsShowingDeleteAlert(isShowing: false)
viewModel.updateIsShowingLineBottomSheet(isShowing: false)
dismiss()
}
}
Expand All @@ -138,6 +149,13 @@ struct InputSchoolView: View {
text: viewModel.errorMessage,
isShowing: $viewModel.isErrorOccurred
)
.navigate(
to: CreatedSchoolSuccessView { dismiss() },
when: $viewModel.isPresentedSuccessView
)
.onChange(of: viewModel.image) { _ in
viewModel.logoImageURL = nil
}
}

@ViewBuilder
Expand All @@ -157,13 +175,15 @@ struct InputSchoolView: View {
) {
viewModel.modifySchool {
dismiss()
viewModel.updateIsShowingLineBottomSheet(isShowing: false)
}
}
}
} else {
BitgouelButton(text: "다음으로", style: .primary) {
viewModel.createdSchool {
viewModel.updateIsPresentedSuccessView(isPresented: true)
viewModel.updateIsShowingLineBottomSheet(isShowing: false)
}
}
}
Expand All @@ -175,7 +195,6 @@ struct InputSchoolView: View {
ZStack {
image
.resizable()
.frame(width: 80, height: 80)
.cornerRadius(8, corners: .allCorners)
.blur(radius: 1)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,27 @@ final class InputSchoolViewModel: BaseViewModel {
@Published var image: Image?
@Published var schoolName: String = ""
@Published var selectedLine: LineType?
@Published var logoImageURL: String?
@Published var departmentList: [String] = []
let state: String
let schoolInfo: SchoolDetailInfoModel

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

init(
state: String,
schoolInfo: SchoolDetailInfoModel
schoolInfo: SchoolDetailInfoModel,
createdSchoolUseCase: any CreatedSchoolUseCase,
modifySchoolUseCase: any ModifySchoolUseCase,
deleteSchoolUseCase: any DeleteSchoolUseCase
) {
self.state = state
self.schoolInfo = schoolInfo
self.createdSchoolUseCase = createdSchoolUseCase
self.modifySchoolUseCase = modifySchoolUseCase
self.deleteSchoolUseCase = deleteSchoolUseCase
}

func loadImage() {
Expand Down Expand Up @@ -66,12 +77,30 @@ final class InputSchoolViewModel: BaseViewModel {
schoolName = schoolInfo.name
selectedLine = schoolInfo.line
departmentList = schoolInfo.departmentList
logoImageURL = schoolInfo.logoImageURL
}

@MainActor
func createdSchool(_ success: @escaping () -> Void) {
#warning("학교 생성 기능 추가")
success()
guard let line = selectedLine else { return }

Task {
do {
try await createdSchoolUseCase(
logoImage: selectedUIImage?.jpegData(compressionQuality: 0.2) ?? .init(),
req: InputSchoolInfoRequestDTO(
schoolName: schoolName,
line: line.rawValue,
departments: departmentList
)
)

success()
} catch {
errorMessage = error.schoolDomainErrorMessage()
isErrorOccurred = true
}
}
}

@MainActor
Expand Down

0 comments on commit d24d44e

Please sign in to comment.