Skip to content

Commit 4e6f09d

Browse files
authored
Merge pull request #442 from Team-return/feature/(#441)-recruitment_filter_refactoring
♻️ :: (#441) 모집의뢰서 필터 Repository/UseCase 기반 수정
2 parents 46285d4 + 09d3ba1 commit 4e6f09d

20 files changed

Lines changed: 226 additions & 68 deletions

Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
generate:
22
tuist install
3-
tuist generate
3+
tuist generate --no-open
4+
open -a /Applications/Xcode-beta.app *.xcworkspace
45

56
clean:
67
rm -rf **/*.xcodeproj
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
public enum CompanyDetailPreviousViewType {
22
case searchCompany
33
case recruitmentDetail
4+
case home
45
}

Projects/Core/Sources/Steps/RecruitmentFilterStep.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ import RxFlow
22

33
public enum RecruitmentFilterStep: Step {
44
case recruitmentFilterIsRequired
5-
case popToRecruitment(jobCode: String?, techCode: [String]?, years: [String]?, region: String?, status: String?)
5+
case popToRecruitment
66
}

Projects/Data/Sources/DI/DataSourceAssembly.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,5 +85,9 @@ public final class DataSourceAssembly: Assembly {
8585
container.register(RemoteInterestsDataSource.self) { resolver in
8686
RemoteInterestsDataSourceImpl(keychain: self.keychain(resolver))
8787
}
88+
89+
container.register(LocalRecruitmentFilterDataSource.self) { _ in
90+
LocalRecruitmentFilterDataSourceImpl()
91+
}
8892
}
8993
}

Projects/Data/Sources/DI/RepositoryAssembly.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,5 +111,11 @@ public final class RepositoryAssembly: Assembly {
111111
remoteInterestsDataSource: resolver.resolve(RemoteInterestsDataSource.self)!
112112
)
113113
}
114+
115+
container.register(RecruitmentFilterRepository.self) { resolver in
116+
RecruitmentFilterRepositoryImpl(
117+
localRecruitmentFilterDataSource: resolver.resolve(LocalRecruitmentFilterDataSource.self)!
118+
)
119+
}
114120
}
115121
}

Projects/Data/Sources/DI/UseCaseAssembly.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,16 @@ public final class UseCaseAssembly: Assembly {
203203
recruitmentsRepository: resolver.resolve(RecruitmentsRepository.self)!
204204
)
205205
}
206+
container.register(SaveRecruitmentFilterUseCase.self) { resolver in
207+
SaveRecruitmentFilterUseCase(
208+
recruitmentFilterRepository: resolver.resolve(RecruitmentFilterRepository.self)!
209+
)
210+
}
211+
container.register(FetchRecruitmentFilterUseCase.self) { resolver in
212+
FetchRecruitmentFilterUseCase(
213+
recruitmentFilterRepository: resolver.resolve(RecruitmentFilterRepository.self)!
214+
)
215+
}
206216

207217
// Codes
208218
container.register(FetchCodeListUseCase.self) { resolver in
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import Domain
2+
3+
struct RecruitmentFilterDTO: Codable {
4+
let jobCode: String
5+
let techCode: [String]?
6+
let years: [String]?
7+
let region: String?
8+
let status: String?
9+
10+
init(entity: RecruitmentFilterEntity) {
11+
self.jobCode = entity.jobCode
12+
self.techCode = entity.techCode
13+
self.years = entity.years
14+
self.region = entity.region
15+
self.status = entity.status
16+
}
17+
}
18+
19+
extension RecruitmentFilterDTO {
20+
func toDomain() -> RecruitmentFilterEntity {
21+
RecruitmentFilterEntity(
22+
jobCode: jobCode,
23+
techCode: techCode,
24+
years: years,
25+
region: region,
26+
status: status
27+
)
28+
}
29+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import Foundation
2+
import Domain
3+
4+
protocol LocalRecruitmentFilterDataSource {
5+
func saveFilter(_ filter: RecruitmentFilterEntity)
6+
func fetchFilter() -> RecruitmentFilterEntity
7+
}
8+
9+
public struct LocalRecruitmentFilterDataSourceImpl: LocalRecruitmentFilterDataSource {
10+
private let userDefaults = UserDefaults.standard
11+
private let key = "RECRUITMENT_FILTER"
12+
13+
public init() {}
14+
15+
public func saveFilter(_ filter: RecruitmentFilterEntity) {
16+
guard let data = try? JSONEncoder().encode(RecruitmentFilterDTO(entity: filter)) else { return }
17+
userDefaults.set(data, forKey: key)
18+
}
19+
20+
public func fetchFilter() -> RecruitmentFilterEntity {
21+
guard let data = userDefaults.data(forKey: key),
22+
let dto = try? JSONDecoder().decode(RecruitmentFilterDTO.self, from: data)
23+
else { return .empty }
24+
return dto.toDomain()
25+
}
26+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import Domain
2+
3+
struct RecruitmentFilterRepositoryImpl: RecruitmentFilterRepository {
4+
private let localRecruitmentFilterDataSource: any LocalRecruitmentFilterDataSource
5+
6+
init(localRecruitmentFilterDataSource: any LocalRecruitmentFilterDataSource) {
7+
self.localRecruitmentFilterDataSource = localRecruitmentFilterDataSource
8+
}
9+
10+
func saveRecruitmentFilter(_ filter: RecruitmentFilterEntity) {
11+
localRecruitmentFilterDataSource.saveFilter(filter)
12+
}
13+
14+
func fetchRecruitmentFilter() -> RecruitmentFilterEntity {
15+
localRecruitmentFilterDataSource.fetchFilter()
16+
}
17+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
public struct RecruitmentFilterEntity: Equatable {
2+
public let jobCode: String
3+
public let techCode: [String]?
4+
public let years: [String]?
5+
public let region: String?
6+
public let status: String?
7+
8+
public init(
9+
jobCode: String = "",
10+
techCode: [String]? = nil,
11+
years: [String]? = nil,
12+
region: String? = nil,
13+
status: String? = nil
14+
) {
15+
self.jobCode = jobCode
16+
self.techCode = techCode
17+
self.years = years
18+
self.region = region
19+
self.status = status
20+
}
21+
22+
public static let empty = RecruitmentFilterEntity()
23+
}

0 commit comments

Comments
 (0)