Skip to content

Commit

Permalink
Merge pull request #153 from Team-return/feature/(#149)-recruitment_D…
Browse files Browse the repository at this point in the history
…etail_API

🔗 :: (#149) recruitmentDetail API 연동
  • Loading branch information
ray3238 committed Mar 10, 2024
2 parents 92535d2 + 4b6c435 commit b819b54
Show file tree
Hide file tree
Showing 6 changed files with 65 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@ import Foundation
import Domain

struct RecruitmentDetailResponseDTO: Decodable {
let recruitmentID: Int
let companyID: Int
let companyProfileUrl: String
let companyName: String
let areas: [AreaResponseDTO]
let requiredGrade: Int?
let startTime, endTime: String
let workingHours: String
let requiredLicenses: [String]?
let hiringProgress: [InterviewType]
let trainPay: Int
Expand All @@ -17,15 +18,17 @@ struct RecruitmentDetailResponseDTO: Decodable {
let submitDocument: String
let startDate, endDate: String
let etc: String?
let isApplicable: Bool
let bookmarked: Bool

init(
recruitmentID: Int,
companyID: Int,
companyProfileUrl: String,
companyName: String,
areas: [AreaResponseDTO],
requiredGrade: Int?,
startTime: String,
endTime: String,
workingHours: String,
requiredLicenses: [String]?,
hiringProgress: [InterviewType],
trainPay: Int,
Expand All @@ -35,15 +38,17 @@ struct RecruitmentDetailResponseDTO: Decodable {
submitDocument: String,
startDate: String,
endDate: String,
etc: String?
etc: String?,
isApplicable: Bool,
bookmarked: Bool
) {
self.recruitmentID = recruitmentID
self.companyID = companyID
self.companyProfileUrl = companyProfileUrl
self.companyName = companyName
self.areas = areas
self.requiredGrade = requiredGrade
self.startTime = startTime
self.endTime = endTime
self.workingHours = workingHours
self.requiredLicenses = requiredLicenses
self.hiringProgress = hiringProgress
self.trainPay = trainPay
Expand All @@ -54,24 +59,28 @@ struct RecruitmentDetailResponseDTO: Decodable {
self.startDate = startDate
self.endDate = endDate
self.etc = etc
self.isApplicable = isApplicable
self.bookmarked = bookmarked
}

enum CodingKeys: String, CodingKey {
case recruitmentID = "recruitment_id"
case companyID = "company_id"
case companyProfileUrl = "company_profile_url"
case companyName = "company_name"
case areas
case requiredGrade = "required_grade"
case startTime = "start_time"
case endTime = "end_time"
case requiredLicenses = "required_licenses"
case hiringProgress = "hiring_progress"
case trainPay = "train_pay"
case pay, benefits, military
case submitDocument = "submit_document"
case workingHours = "working_hours"
case startDate = "start_date"
case endDate = "end_date"
case etc
case isApplicable = "is_applicable"
case bookmarked
}
}

Expand All @@ -81,18 +90,14 @@ extension RecruitmentDetailResponseDTO {
guard let requiredGrade else { return nil }
return String(requiredGrade) + "% 이내"
}
var workTime: String {
[startTime, endTime].map {
$0.components(separatedBy: ":")[0...1].joined(separator: ":")
}.joined(separator: " ~ ")
}
return RecruitmentDetailEntity(
recruitmentID: recruitmentID,
companyID: companyID,
companyProfileUrl: companyProfileUrl,
companyName: companyName,
areas: areas.map { $0.toDomain() },
requiredGrade: unwrappedRequiredGrade,
workTime: workTime,
workingHours: workingHours,
requiredLicenses: requiredLicenses?.joined(separator: ", "),
hiringProgress: hiringProgress.enumerated().map { (index, value) in
"\(index + 1). \(value.localizedString())"
Expand All @@ -104,7 +109,9 @@ extension RecruitmentDetailResponseDTO {
submitDocument: submitDocument,
startDate: startDate,
endDate: endDate,
etc: etc ?? "없음"
etc: etc ?? "없음",
isApplicable: isApplicable,
bookmarked: bookmarked
)
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import Foundation

public struct RecruitmentDetailEntity: Equatable {
public let recruitmentID: Int
public let companyID: Int
public let companyProfileUrl: String
public let companyName: String
public let areas: [AreaEntity]
public let requiredGrade: String?
public let workTime: String
public let workingHours: String
public let requiredLicenses: String?
public let hiringProgress: String
public let trainPay: String
Expand All @@ -16,14 +17,17 @@ public struct RecruitmentDetailEntity: Equatable {
public let submitDocument: String
public let startDate, endDate: String
public let etc: String
public let isApplicable: Bool
public let bookmarked: Bool

public init(
recruitmentID: Int,
companyID: Int,
companyProfileUrl: String,
companyName: String,
areas: [AreaEntity],
requiredGrade: String?,
workTime: String,
workingHours: String,
requiredLicenses: String?,
hiringProgress: String,
trainPay: String,
Expand All @@ -33,14 +37,17 @@ public struct RecruitmentDetailEntity: Equatable {
submitDocument: String,
startDate: String,
endDate: String,
etc: String
etc: String,
isApplicable: Bool,
bookmarked: Bool
) {
self.recruitmentID = recruitmentID
self.companyID = companyID
self.companyProfileUrl = companyProfileUrl
self.companyName = companyName
self.areas = areas
self.requiredGrade = requiredGrade
self.workTime = workTime
self.workingHours = workingHours
self.requiredLicenses = requiredLicenses
self.hiringProgress = hiringProgress
self.trainPay = trainPay
Expand All @@ -51,5 +58,7 @@ public struct RecruitmentDetailEntity: Equatable {
self.startDate = startDate
self.endDate = endDate
self.etc = etc
self.isApplicable = isApplicable
self.bookmarked = bookmarked
}
}
6 changes: 4 additions & 2 deletions Projects/Presentation/Sources/DI/PresentationAssembly.swift
Original file line number Diff line number Diff line change
Expand Up @@ -133,8 +133,10 @@ public final class PresentationAssembly: Assembly {
CompanyDetailViewController(resolver.resolve(CompanyDetailViewModel.self)!)
}

container.register(RecruitmentDetailViewModel.self) { _ in
RecruitmentDetailViewModel()
container.register(RecruitmentDetailViewModel.self) { resolver in
RecruitmentDetailViewModel(
fetchRecruitmentDetailUseCase: resolver.resolve(FetchRecruitmentDetailUseCase.self)!
)
}

container.register(RecruitmentDetailViewController.self) { resolver in
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import Core
import DesignSystem

public class RecruitmentDetailViewController: BaseViewController<RecruitmentDetailViewModel> {
static var companyID = 0

var tableViewHeightConstraint: Constraint?
var selectedIndexPath: IndexPath?
private var isBookmarked = false {
Expand Down Expand Up @@ -310,6 +312,7 @@ public class RecruitmentDetailViewController: BaseViewController<RecruitmentDeta

public override func bind() {
let input = RecruitmentDetailViewModel.Input(
viewAppear: self.viewWillAppearPublisher,
companyDetailButtonDidClicked: companyDetailButton.rx.tap.asSignal()
)
_ = viewModel.transform(input)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,38 @@ public final class RecruitmentDetailViewModel: BaseViewModel, Stepper {
public let steps = PublishRelay<Step>()
private let disposeBag = DisposeBag()

init( ) { }
private let fetchRecruitmentDetailUseCase: FetchRecruitmentDetailUseCase

init(
fetchRecruitmentDetailUseCase: FetchRecruitmentDetailUseCase
) {
self.fetchRecruitmentDetailUseCase = fetchRecruitmentDetailUseCase
}

public struct Input {
let viewAppear: PublishRelay<Void>
let companyDetailButtonDidClicked: Signal<Void>
}

public struct Output { }
public struct Output {
let recruitmentDetailInfo: PublishRelay<RecruitmentDetailEntity>
}

public func transform(_ input: Input) -> Output {
let recruitmentDetailInfo = PublishRelay<RecruitmentDetailEntity>()

input.viewAppear.asObservable()
.flatMap {
self.fetchRecruitmentDetailUseCase.execute(id: RecruitmentDetailViewController.companyID)
}
.bind(to: recruitmentDetailInfo)
.disposed(by: disposeBag)

input.companyDetailButtonDidClicked.asObservable()
.map { _ in RecruitmentDetailStep.companyDetailIsRequired }
.bind(to: steps)
.disposed(by: disposeBag)
return Output()

return Output(recruitmentDetailInfo: recruitmentDetailInfo)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ public final class RecruitmentViewController: BaseViewController<RecruitmentView
cell.bookmarkButtonDidTap = {
self.bookmarkButtonDidClicked.accept(cell.recruitmentID)
}
RecruitmentDetailViewController.companyID = cell.recruitmentID
}
.disposed(by: disposeBag)
}
Expand Down

0 comments on commit b819b54

Please sign in to comment.