Skip to content

[IDLE-171] 센터정보 등록 UI및 기능 구현 #27

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

Merged
merged 8 commits into from
Jul 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
//
// BaseFeatureDependency.swift
// DependencyPlugin
//
// Created by 최준영 on 6/21/24.
//

import ProjectDescription

public extension ModuleDependency.Presentation {

static let BaseFeature: TargetDependency = .project(target: "BaseFeature", path: .relativeToRoot("Projects/Presentation/Feature/Base"))
}
5 changes: 5 additions & 0 deletions project/Projects/App/Sources/DI/Assembly/DataAssembly.swift
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,10 @@ public struct DataAssembly: Assembly {
container.register(AuthRepository.self) { _ in
return DefaultAuthRepository()
}

// MARK: 유저프로필 레포지토리
container.register(UserProfileRepository.self) { _ in
return DefaultUserProfileRepository()
}
}
}
6 changes: 6 additions & 0 deletions project/Projects/App/Sources/DI/Assembly/DomainAssembly.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,11 @@ public struct DomainAssembly: Assembly {

return DefaultAuthUseCase(repository: repository)
}

container.register(CenterProfileUseCase.self) { resolver in
let repository = resolver.resolve(UserProfileRepository.self)!

return DefaultCenterProfileUseCase(repository: repository)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import DSKit
import PresentationCore
import RootFeature

class CenterMainCoordinator: ParentCoordinator {
class CenterMainCoordinator: CenterMainCoordinatable {
var childCoordinators: [Coordinator] = []

var parent: ParentCoordinator?
Expand Down Expand Up @@ -63,8 +63,10 @@ class CenterMainCoordinator: ParentCoordinator {
switch tab {
case .recruitmentManage:
coordinator = RecruitmentManagementCoordinator(
parent: self,
navigationController: navigationController
)

case .setting:
coordinator = SettingCoordinator(
navigationController: navigationController
Expand All @@ -75,6 +77,7 @@ class CenterMainCoordinator: ParentCoordinator {
// 코디네이터들을 실행
coordinator.start()
}

}

// MARK: Center 탭의 구성요소들
Expand All @@ -91,3 +94,17 @@ enum CenterMainScreen: Int, CaseIterable {
}
}
}

extension CenterMainCoordinator {

/// 센터 정보등록 창을 표시합니다.
func centerProfileRegister() {

let coordinator = CenterProfileRegisterCoordinator(dependency: .init(
navigationController: navigationController,
injector: injector)
)
addChildCoordinator(coordinator)
coordinator.start()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
//
// CenterProfileRegisterCoordinator.swift
// Idle-iOS
//
// Created by choijunios on 7/27/24.
//

import UIKit
import CenterFeature
import Entity
import PresentationCore
import UseCaseInterface

class CenterProfileRegisterCoordinator: CenterProfileRegisterCoordinatable {

var childCoordinators: [Coordinator] = []

var parent: ParentCoordinator?

var navigationController: UINavigationController
let injector: Injector

init(dependency: Dependency) {
self.navigationController = dependency.navigationController
self.injector = dependency.injector
}

func start() {

let coordinator = RegisterCenterInfoCoordinator(
profileUseCase: injector.resolve(CenterProfileUseCase.self),
navigationController: navigationController
)

addChildCoordinator(coordinator)
coordinator.parent = self
coordinator.start()
}

public func registerFinished() {

clearChildren()

parent?.removeChildCoordinator(self)
}
}

extension CenterProfileRegisterCoordinator {

func showCompleteScreen(cardVO: Entity.CenterProfileCardVO) {
let coordinator = ProfileRegisterCompleteCoordinator(
cardVO: cardVO,
navigationController: navigationController
)
addChildCoordinator(coordinator)
coordinator.parent = self
coordinator.start()
}

func showMyCenterProfile() {
let coordinator = CenterProfileCoordinator(
mode: .myProfile,
profileUseCase: injector.resolve(CenterProfileUseCase.self),
navigationController: navigationController
)
addChildCoordinator(coordinator)
coordinator.parent = self
coordinator.start()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import AuthFeature

extension RootCoordinator {

/// 로그인및 회원가입을 실행합니다.
func auth() {

let authCoordinator = AuthCoordinator(
Expand Down Expand Up @@ -53,4 +54,5 @@ extension RootCoordinator {

coordinator.start()
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,7 @@ public extension DefaultAuthRepository {
genderType: registerState.gender,
phoneNumber: registerState.phoneNumber,
roadNameAddress: registerState.addressInformation.roadAddress,
lotNumberAddress: registerState.addressInformation.jibunAddress,
longitude: registerState.latitude,
latitude: registerState.logitude
lotNumberAddress: registerState.addressInformation.jibunAddress
)

let data = (try? JSONEncoder().encode(dto)) ?? Data()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,43 @@ public class DefaultUserProfileRepository: UserProfileRepository {
}
}

public func getCenterProfile() -> Single<CenterProfileVO> {
/// 센터프로필(최초 센터정보)를 등록합니다.
public func registerCenterProfileForText(state: CenterProfileRegisterState) -> Single<Void> {

let dto = RegisterCenterProfileDTO(
centerName: state.centerName,
officeNumber: state.officeNumber,
roadNameAddress: state.roadNameAddress,
lotNumberAddress: state.lotNumberAddress,
detailedAddress: state.detailedAddress,
introduce: state.introduce
)
let data = try! JSONEncoder().encode(dto)

return userInformationService
.request(api: .registerCenterProfile(data: data), with: .withToken)
.map { _ in () }
}

public func getCenterProfile(mode: ProfileMode) -> Single<CenterProfileVO> {

var api: UserInformationAPI!

switch mode {
case .myProfile:
api = .getCenterProfile
case .otherProfile(let id):
api = .getOtherCenterProfile(id: id)
}

return userInformationService
.requestDecodable(api: api, with: .withToken)
.map { (dto: CenterProfileDTO) in dto.toEntity() }
}

public func getCenterProfile(id: String) -> Single<CenterProfileVO> {
userInformationService
.requestDecodable(api: .getCenterProfile, with: .withToken)
.requestDecodable(api: .getOtherCenterProfile(id: id), with: .withToken)
.map { (dto: CenterProfileDTO) in dto.toEntity() }
}

Expand All @@ -45,7 +78,6 @@ public class DefaultUserProfileRepository: UserProfileRepository {

/// 이미지 업로드
public func uploadImage(_ userType: UserType, imageInfo: ImageUploadInfo) -> Single<Void> {

getPreSignedUrl(userType, ext: imageInfo.ext)
.flatMap { [unowned self] dto in
self.uploadImageToPreSignedUrl(url: dto.uploadUrl, data: imageInfo.data)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,12 @@ extension UserType {

public enum UserInformationAPI {

// 프로필 생성
case registerCenterProfile(data: Data)

// 프로필 조회
case getCenterProfile
case getOtherCenterProfile(id: String)
case updateCenterProfile(officeNumber: String, introduce: String?)

// 프로필 사진 업로드
Expand All @@ -43,8 +47,12 @@ extension UserInformationAPI: BaseAPI {

public var path: String {
switch self {
case .registerCenterProfile:
"center/my/profile"
case .getCenterProfile:
"center/my/profile"
case .getOtherCenterProfile(let id):
"center/profile/\(id)"
case .updateCenterProfile:
"center/my/profile"
case .getPreSignedUrl(let type, _):
Expand All @@ -56,8 +64,12 @@ extension UserInformationAPI: BaseAPI {

public var method: Moya.Method {
switch self {
case .registerCenterProfile:
.post
case .getCenterProfile:
.get
case .getOtherCenterProfile:
.get
case .updateCenterProfile:
.patch
case .getPreSignedUrl:
Expand All @@ -76,8 +88,8 @@ extension UserInformationAPI: BaseAPI {

public var task: Moya.Task {
switch self {
case .getCenterProfile:
return .requestPlain
case .registerCenterProfile(let data):
return .requestData(data)
case .updateCenterProfile(let officeNumber, let introduce):
var bodyData: [String: String] = ["officeNumber": officeNumber]
if let introduce {
Expand All @@ -95,7 +107,8 @@ extension UserInformationAPI: BaseAPI {
"imageFileExtension": imageExt
]
return .requestParameters(parameters: params, encoding: parameterEncoding)
default:
return .requestPlain
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,14 @@ public struct WorkerRegistrationDTO: Encodable {
public let phoneNumber: String
public let roadNameAddress: String
public let lotNumberAddress: String
public let longitude: String
public let latitude: String

public init(carerName: String, birthYear: Int, genderType: Gender, phoneNumber: String, roadNameAddress: String, lotNumberAddress: String, longitude: String, latitude: String) {
public init(carerName: String, birthYear: Int, genderType: Gender, phoneNumber: String, roadNameAddress: String, lotNumberAddress: String) {
self.carerName = carerName
self.birthYear = birthYear
self.genderType = Self.convertGenderValue(genderType)
self.phoneNumber = phoneNumber
self.roadNameAddress = roadNameAddress
self.lotNumberAddress = lotNumberAddress
self.longitude = longitude
self.latitude = latitude
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,26 @@ import Foundation
import Entity

public struct CenterProfileDTO: Codable {
let centerName: String?
let officeNumber: String?
let roadNameAddress: String?
let lotNumberAddress: String?
let detailedAddress: String?
let centerName: String
let officeNumber: String
let roadNameAddress: String
let lotNumberAddress: String
let detailedAddress: String
let introduce: String?
let longitude: String?
let latitude: String?
let introduce: String?
let profileImageUrl: String?
}

public extension CenterProfileDTO {

func toEntity() -> CenterProfileVO {
CenterProfileVO(
centerName: centerName ?? "",
officeNumber: officeNumber ?? "",
roadNameAddress: roadNameAddress ?? "",
lotNumberAddress: lotNumberAddress ?? "",
detailedAddress: detailedAddress ?? "",
centerName: centerName,
officeNumber: officeNumber,
roadNameAddress: roadNameAddress,
lotNumberAddress: lotNumberAddress,
detailedAddress: detailedAddress,
longitude: longitude ?? "",
latitude: latitude ?? "",
introduce: introduce ?? "",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
//
// RegisterCenterProfileDTO.swift
// NetworkDataSource
//
// Created by choijunios on 7/27/24.
//

import Foundation
import Entity

public struct RegisterCenterProfileDTO: Codable {
public let centerName: String
public let officeNumber: String
public let roadNameAddress: String
public let lotNumberAddress: String
public let detailedAddress: String
public let introduce: String

public init(centerName: String, officeNumber: String, roadNameAddress: String, lotNumberAddress: String, detailedAddress: String, introduce: String) {
self.centerName = centerName
self.officeNumber = officeNumber
self.roadNameAddress = roadNameAddress
self.lotNumberAddress = lotNumberAddress
self.detailedAddress = detailedAddress
self.introduce = introduce
}
}
Loading
Loading