Skip to content

Commit

Permalink
[IDLE-000] 앱내/워크넷 즐겨찾기한 공고 API 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
J0onYEong committed Sep 7, 2024
1 parent a8358d2 commit 6c99d9a
Show file tree
Hide file tree
Showing 12 changed files with 145 additions and 192 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -114,56 +114,31 @@ public class DefaultRecruitmentPostRepository: RecruitmentPostRepository {
api: .getOnGoingNativePostListForWorker(nextPageId: nextPageId, requestCnt: String(requestCnt)),
with: .withToken
)
.map(RecruitmentPostListForWorkerDTO<NativeRecruitmentPostForWorkerDTO>.self)
.catch({ error in
if let moyaError = error as? MoyaError, case .objectMapping(let error, _) = moyaError {
#if DEBUG
print("앱용 공고 전체조회 에러:", error.localizedDescription)
#endif
}
return .error(error)
})
.map { dto in
dto.toEntity()
}
.mapToEntity(RecruitmentPostListForWorkerDTO<NativeRecruitmentPostForWorkerDTO>.self)
}

public func getFavoritePostListForWorker(nextPageId: String?, requestCnt: Int) -> RxSwift.Single<RecruitmentPostListForWorkerVO> {
public func getNativeFavoritePostListForWorker() -> RxSwift.Single<[RecruitmentPostForWorkerRepresentable]> {
recruitmentPostService.request(
api: .getFavoritePostListForWorker(nextPageId: nextPageId, requestCnt: String(requestCnt)),
api: .getNativeFavoritePost,
with: .withToken
)
.map(RecruitmentPostListForWorkerDTO<NativeRecruitmentPostForWorkerDTO>.self)
.catch({ error in
if let moyaError = error as? MoyaError, case .objectMapping(let error, _) = moyaError {
#if DEBUG
print("즐겨찾기한 공고 전체조회 에러:",error.localizedDescription)
#endif
}
return .error(error)
})
.map { dto in
dto.toEntity()
}
.mapToEntity(FavoriteRecruitmentPostListForWorkerDTO<NativeRecruitmentPostForWorkerDTO>.self)
}

public func getWorknetFavoritePostListForWorker() -> RxSwift.Single<[RecruitmentPostForWorkerRepresentable]> {
crawlingPostService.request(
api: .getWorknetFavoritePost,
with: .withToken
)
.mapToEntity(FavoriteRecruitmentPostListForWorkerDTO<WorkNetRecruitmentPostForWorkerDTO>.self)
}

public func getAppliedPostListForWorker(nextPageId: String?, requestCnt: Int) -> RxSwift.Single<RecruitmentPostListForWorkerVO> {
recruitmentPostService.request(
api: .getAppliedPostListForWorker(nextPageId: nextPageId, requestCnt: String(requestCnt)),
with: .withToken
)
.map(RecruitmentPostListForWorkerDTO<NativeRecruitmentPostForWorkerDTO>.self)
.catch({ error in
if let moyaError = error as? MoyaError, case .objectMapping(let error, _) = moyaError {
#if DEBUG
print("지원한 공고 전체조회 에러:", error.localizedDescription)
#endif
}
return .error(error)
})
.map { dto in
dto.toEntity()
}
.mapToEntity(RecruitmentPostListForWorkerDTO<NativeRecruitmentPostForWorkerDTO>.self)
}

public func getWorknetPostListForWorker(nextPageId: String?, requestCnt: Int) -> RxSwift.Single<RecruitmentPostListForWorkerVO> {
Expand All @@ -172,19 +147,7 @@ public class DefaultRecruitmentPostRepository: RecruitmentPostRepository {
api: .getPostList(nextPageId: nextPageId, requestCnt: requestCnt),
with: .withToken
)
.map(RecruitmentPostListForWorkerDTO<WorkNetRecruitmentPostForWorkerDTO>.self)
.catch({ error in
if let moyaError = error as? MoyaError, case .objectMapping(let error, _) = moyaError {
#if DEBUG
print("지원한 공고 전체조회 에러:", error.localizedDescription)
#endif
}
return .error(error)
})
.map { dto in
dto.toEntity()
}

.mapToEntity(RecruitmentPostListForWorkerDTO<WorkNetRecruitmentPostForWorkerDTO>.self)
}

public func applyToPost(postId: String, method: ApplyType) -> Single<Void> {
Expand Down
11 changes: 8 additions & 3 deletions project/Projects/Data/DataSource/API/CrawlingPostAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ public enum CrawlingPostAPI {

case getPostList(nextPageId: String?, requestCnt: Int)
case getDetail(postId: String)
case getWorknetFavoritePost
}

extension CrawlingPostAPI: BaseAPI {
Expand All @@ -22,18 +23,22 @@ extension CrawlingPostAPI: BaseAPI {

public var path: String {
switch self {
case .getPostList(let nextPageId, let requestCnt):
case .getPostList:
""
case .getDetail(let postId):
"/\(postId)"
case .getWorknetFavoritePost:
"/my/favorites"
}
}

public var method: Moya.Method {
switch self {
case .getPostList(let nextPageId, let requestCnt):
case .getPostList:
.get
case .getDetail(let postId):
case .getDetail:
.get
case .getWorknetFavoritePost:
.get
}
}
Expand Down
20 changes: 8 additions & 12 deletions project/Projects/Data/DataSource/API/RcruitmentPostAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,10 @@ public enum RcruitmentPostAPI {

// Worker
case getOnGoingNativePostListForWorker(nextPageId: String?, requestCnt: String)
case getFavoritePostListForWorker(nextPageId: String?, requestCnt: String)
case getAppliedPostListForWorker(nextPageId: String?, requestCnt: String)

// Favorite posts
case getNativeFavoritePost
case addFavoritePost(id: String, jobPostingType: RecruitmentPostType)
case removeFavoritePost(id: String)
}
Expand Down Expand Up @@ -73,11 +75,12 @@ extension RcruitmentPostAPI: BaseAPI {

case .getOnGoingNativePostListForWorker:
""
case .getFavoritePostListForWorker:
"/my/favorites"
case .getAppliedPostListForWorker:
"/carer/my/applied"


case .getNativeFavoritePost:
"/my/favorites"
case .addFavoritePost(let id, _):
"/\(id)/favorites"
case .removeFavoritePost(let id):
Expand Down Expand Up @@ -115,11 +118,11 @@ extension RcruitmentPostAPI: BaseAPI {

case .getOnGoingNativePostListForWorker:
.get
case .getFavoritePostListForWorker:
.get
case .getAppliedPostListForWorker:
.get

case .getNativeFavoritePost:
.get
case .addFavoritePost:
.post
case .removeFavoritePost:
Expand All @@ -135,11 +138,6 @@ extension RcruitmentPostAPI: BaseAPI {
params["next"] = nextPageId
}
params["limit"] = requestCnt
case .getFavoritePostListForWorker(let nextPageId, let requestCnt):
if let nextPageId {
params["next"] = nextPageId
}
params["limit"] = requestCnt
case .getAppliedPostListForWorker(let nextPageId, let requestCnt):
if let nextPageId {
params["next"] = nextPageId
Expand All @@ -156,7 +154,6 @@ extension RcruitmentPostAPI: BaseAPI {
var parameterEncoding: ParameterEncoding {
switch self {
case .getOnGoingNativePostListForWorker,
.getFavoritePostListForWorker,
.getAppliedPostListForWorker:
return URLEncoding.queryString
default:
Expand All @@ -167,7 +164,6 @@ extension RcruitmentPostAPI: BaseAPI {
public var task: Moya.Task {
switch self {
case .getOnGoingNativePostListForWorker,
.getFavoritePostListForWorker,
.getAppliedPostListForWorker:
.requestParameters(parameters: bodyParameters ?? [:], encoding: parameterEncoding)
case .registerPost(let bodyData):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public protocol EntityRepresentable: Codable {
func toEntity() -> Entity
}

public struct RecruitmentPostListForWorkerDTO<T: EntityRepresentable>: Codable where T.Entity: RecruitmentPostForWorkerRepresentable {
public struct RecruitmentPostListForWorkerDTO<T: EntityRepresentable>: EntityRepresentable where T.Entity: RecruitmentPostForWorkerRepresentable {

public let items: [T]
public let next: String?
Expand All @@ -29,6 +29,18 @@ public struct RecruitmentPostListForWorkerDTO<T: EntityRepresentable>: Codable w
}
}

public struct FavoriteRecruitmentPostListForWorkerDTO<T: EntityRepresentable>: EntityRepresentable where T.Entity: RecruitmentPostForWorkerRepresentable {

public let favoriteJobPostings: [T]

public func toEntity() -> [RecruitmentPostForWorkerRepresentable] {

favoriteJobPostings.map { dto in
dto.toEntity()
}
}
}

// MARK: Worknet post의 카드 정보
public struct WorkNetRecruitmentPostForWorkerDTO: EntityRepresentable {

Expand All @@ -41,6 +53,7 @@ public struct WorkNetRecruitmentPostForWorkerDTO: EntityRepresentable {
public let applyDeadline: String
public let isFavorite: Bool
public let jobPostingType: RecruitmentPostType
public let createdAt: String?

public func toEntity() -> WorknetRecruitmentPostVO {

Expand All @@ -49,6 +62,12 @@ public struct WorkNetRecruitmentPostForWorkerDTO: EntityRepresentable {

let deadlineDate = dateFormatter.date(from: self.applyDeadline)!

let iso8601Formatter = ISO8601DateFormatter()
var createdDate: Date?
if let createdAt {
createdDate = iso8601Formatter.date(from: createdAt)
}

return .init(
id: id,
title: title,
Expand All @@ -58,7 +77,8 @@ public struct WorkNetRecruitmentPostForWorkerDTO: EntityRepresentable {
payInfo: payInfo,
applyDeadline: deadlineDate,
isFavorite: isFavorite,
postType: jobPostingType
postType: jobPostingType,
beFavoritedTime: createdDate
)
}
}
Expand All @@ -84,6 +104,7 @@ public struct NativeRecruitmentPostForWorkerDTO: EntityRepresentable {
public let applyTime: String?
public let isFavorite: Bool
public let jobPostingType: RecruitmentPostType
public let createdAt: String?

public func toEntity() -> NativeRecruitmentPostForWorkerVO {

Expand All @@ -97,6 +118,12 @@ public struct NativeRecruitmentPostForWorkerDTO: EntityRepresentable {
let deadlineDate = self.applyDeadline != nil ? dateFormatter.date(from: self.applyDeadline!) : nil
let applyDate = self.applyTime != nil ? dateFormatter.date(from: self.applyDeadline!) : nil

let iso8601Formatter = ISO8601DateFormatter()
var createdDate: Date?
if let createdAt {
createdDate = iso8601Formatter.date(from: createdAt)
}

return .init(
postId: id,
workDays: workDayList,
Expand All @@ -115,7 +142,8 @@ public struct NativeRecruitmentPostForWorkerDTO: EntityRepresentable {
distanceFromWorkPlace: distance,
applyTime: applyDate,
isFavorite: isFavorite,
postType: jobPostingType
postType: jobPostingType,
beFavoritedTime: createdDate
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,17 @@ public extension PrimitiveSequence where Trait == SingleTrait, Element == Respon

func mapToEntity<T: EntityRepresentable>(_ type: T.Type) -> Single<T.Entity> {
map(T.self)
.map { dto in
dto.toEntity()
}
.catch({ error in
if let moyaError = error as? MoyaError, case .objectMapping(let error, _) = moyaError {
#if DEBUG
print("[디코딩에러] \(String(describing: T.self))")
#endif
}
return .error(error)
})
.map { dto in
dto.toEntity()
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -125,30 +125,18 @@ public class DefaultRecruitmentPostUseCase: RecruitmentPostUseCase {
return convert(task: stream)
}

public func getFavoritePostListForWorker(request: PostPagingRequestForWorker, postCount: Int) -> RxSwift.Single<Result<Entity.RecruitmentPostListForWorkerVO, Entity.DomainError>> {
public func getFavoritePostListForWorker() -> RxSwift.Single<Result<[RecruitmentPostForWorkerRepresentable], Entity.DomainError>> {

let stream: Single<RecruitmentPostListForWorkerVO>!
let nativeList = repository.getNativeFavoritePostListForWorker()
let worknetList = repository.getWorknetFavoritePostListForWorker()

switch request {
case .initial:
stream = repository.getFavoritePostListForWorker(
nextPageId: nil,
requestCnt: postCount
)
case .paging(let source, let nextPageId):
switch source {
case .native:
stream = repository.getFavoritePostListForWorker(
nextPageId: nextPageId,
requestCnt: postCount
)
case .thirdParty:
// TODO: ‼️ ‼️워크넷 가져오기 미구현
fatalError()
let task = Single
.zip(nativeList, worknetList)
.map { (native, worknet) in
native + worknet
}
}

return convert(task: stream)
return convert(task: task)
}

public func getAppliedPostListForWorker(request: PostPagingRequestForWorker, postCount: Int) -> RxSwift.Single<Result<Entity.RecruitmentPostListForWorkerVO, Entity.DomainError>> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@ import Foundation

public struct NativeRecruitmentPostForWorkerVO: RecruitmentPostForWorkerRepresentable {

// protocol required
public var postType: RecruitmentPostType
public var beFavoritedTime: Date?

public let postId: String

Expand All @@ -34,6 +36,7 @@ public struct NativeRecruitmentPostForWorkerVO: RecruitmentPostForWorkerRepresen
public let applyTime: Date?
public let isFavorite: Bool


public init(
postId: String,
workDays: [WorkDay],
Expand All @@ -52,7 +55,8 @@ public struct NativeRecruitmentPostForWorkerVO: RecruitmentPostForWorkerRepresen
distanceFromWorkPlace: Int,
applyTime: Date?,
isFavorite: Bool,
postType: RecruitmentPostType
postType: RecruitmentPostType,
beFavoritedTime: Date?
) {
self.postId = postId
self.workDays = workDays
Expand All @@ -72,6 +76,7 @@ public struct NativeRecruitmentPostForWorkerVO: RecruitmentPostForWorkerRepresen
self.applyTime = applyTime
self.isFavorite = isFavorite
self.postType = postType
self.beFavoritedTime = beFavoritedTime
}

public static let mock = NativeRecruitmentPostForWorkerVO(
Expand All @@ -92,6 +97,7 @@ public struct NativeRecruitmentPostForWorkerVO: RecruitmentPostForWorkerRepresen
distanceFromWorkPlace: 2500,
applyTime: Date(),
isFavorite: true,
postType: .native
postType: .native,
beFavoritedTime: Calendar.current.date(byAdding: .day, value: 7, to: Date())
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public struct RecruitmentPostListForWorkerVO {
self.fetchedPostCount = fetchedPostCount
}
}

public protocol RecruitmentPostForWorkerRepresentable {
var postType: RecruitmentPostType { get }
var beFavoritedTime: Date? { get }
}
Loading

0 comments on commit 6c99d9a

Please sign in to comment.