Skip to content

Commit cc73d3c

Browse files
committed
refactor: 변경된 구조에 맞게 루틴 등록/수정 로직 변경
1 parent db4fa20 commit cc73d3c

11 files changed

Lines changed: 203 additions & 123 deletions

File tree

Projects/DataSource/Sources/DTO/RoutineCreationDTO.swift

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,34 @@
55
// Created by 이동현 on 8/3/25.
66
//
77

8+
import Domain
9+
810
struct RoutineCreationDTO: Codable {
11+
let routineId: String?
12+
let updateApplyDate: String?
913
let routineName: String
1014
let repeatDay: [String]
15+
let routineStartDate: String
16+
let routineEndDate: String
1117
let executionTime: String
1218
let subRoutineName: [String]
19+
let recommendedRoutineType: String?
20+
}
21+
22+
extension RoutineCreationDTO {
23+
func toRoutineCreationEntity() -> RoutineCreationEntity {
24+
let weeks = repeatDay.compactMap { Week(rawValue: $0) }
25+
let routineCategoryType = RoutineCategoryType(rawValue: recommendedRoutineType ?? "")
26+
27+
return RoutineCreationEntity(
28+
id: routineId,
29+
name: routineName,
30+
repeatDay: weeks,
31+
startDate: routineStartDate,
32+
endDate: routineEndDate,
33+
executionTime: executionTime,
34+
subroutines: subRoutineName,
35+
recommendedRoutineType: routineCategoryType,
36+
applyDateType: nil)
37+
}
1338
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
//
2+
// RoutineUpdateDTO.swift
3+
// DataSource
4+
//
5+
// Created by 이동현 on 8/3/25.
6+
//
7+
8+
struct RoutineUpdateDTO: Codable {
9+
let routineId: String
10+
let routineName: String
11+
let repeatDay: [String]
12+
let executionTime: String
13+
let subRoutineInfos: [SubRoutineUpdateDTO]
14+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
//
2+
// SubRoutineUpdateDTO.swift
3+
// DataSource
4+
//
5+
// Created by 이동현 on 8/3/25.
6+
//
7+
8+
struct SubRoutineUpdateDTO: Codable {
9+
let subRoutineId: String?
10+
let subRoutineName: String?
11+
let sortOrder: Int?
12+
}

Projects/DataSource/Sources/Endpoint/RoutineEndpoint.swift

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,20 @@ enum RoutineEndpoint {
99
case createRoutine(routine: RoutineCreationDTO)
1010
case fetchRoutine(routineId: String)
1111
case fetchRoutines(startDate: String, endDate: String)
12-
case updateRoutine(routine: RoutineUpdateDTO)
12+
case updateRoutine(routine: RoutineCreationDTO)
1313
case deleteAllRoutine(routineId: String)
1414
case deleteDailyRoutine(routine: DeleteRoutineDTO)
1515
case updateRoutineCompletion(routines: RoutineCompletionListDTO)
1616
}
1717

1818
extension RoutineEndpoint: Endpoint {
1919
var baseURL: String {
20-
return AppProperties.baseURL + "/api/v1/routines"
20+
switch self {
21+
case .createRoutine, .updateRoutine:
22+
return AppProperties.baseURL + "/api/v2/routines"
23+
default:
24+
return AppProperties.baseURL + "/api/v1/routines"
25+
}
2126
}
2227

2328
var path: String {

Projects/DataSource/Sources/Repository/RoutineRepository.swift

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,18 @@ import Domain
1010
final class RoutineRepository: RoutineRepositoryProtocol {
1111
private let networkService = NetworkService.shared
1212

13-
func createRoutine(routineSummary: RoutineSummaryEntity, subRoutineSummaries: [SubRoutineSummaryEntity]) async throws {
14-
let subRoutineNames = subRoutineSummaries.compactMap { $0.subRoutineName }
15-
13+
func createRoutine(routine: RoutineCreationEntity) async throws {
1614
let routineCreationDTO = RoutineCreationDTO(
17-
routineName: routineSummary.routineName,
18-
repeatDay: routineSummary.repeatDay.map { $0.rawValue },
19-
executionTime: routineSummary.executionTime,
20-
subRoutineName: subRoutineNames)
15+
routineId: nil,
16+
updateApplyDate: routine.applyDateType?.rawValue,
17+
routineName: routine.name,
18+
repeatDay: routine.repeatDay.map { $0.rawValue },
19+
routineStartDate: routine.startDate,
20+
routineEndDate: routine.endDate,
21+
executionTime: routine.executionTime,
22+
subRoutineName: routine.subroutines,
23+
recommendedRoutineType: routine.recommendedRoutineType?.rawValue)
24+
2125
let endpoint = RoutineEndpoint.createRoutine(routine: routineCreationDTO)
2226

2327
_ = try await networkService.request(endpoint: endpoint, type: EmptyResponseDTO.self)
@@ -42,22 +46,17 @@ final class RoutineRepository: RoutineRepositoryProtocol {
4246
return result
4347
}
4448

45-
func updateRoutine(routineSummary: RoutineSummaryEntity, subRoutineSummaries: [SubRoutineSummaryEntity]) async throws {
46-
guard let routineId = routineSummary.routineId else { return }
47-
48-
let subRoutineDTO = subRoutineSummaries.map {
49-
SubRoutineUpdateDTO(
50-
subRoutineId: $0.subRoutineId,
51-
subRoutineName: $0.subRoutineName,
52-
sortOrder: $0.sortOrder)
53-
}
54-
55-
let routineUpdateDTO = RoutineUpdateDTO(
56-
routineId: routineId,
57-
routineName: routineSummary.routineName,
58-
repeatDay: routineSummary.repeatDay.map { $0.rawValue },
59-
executionTime: routineSummary.executionTime,
60-
subRoutineInfos: subRoutineDTO)
49+
func updateRoutine(routine: RoutineCreationEntity) async throws {
50+
let routineUpdateDTO = RoutineCreationDTO(
51+
routineId: routine.id,
52+
updateApplyDate: routine.applyDateType?.rawValue,
53+
routineName: routine.name,
54+
repeatDay: routine.repeatDay.map { $0.rawValue },
55+
routineStartDate: routine.startDate,
56+
routineEndDate: routine.endDate,
57+
executionTime: routine.executionTime,
58+
subRoutineName: routine.subroutines,
59+
recommendedRoutineType: routine.recommendedRoutineType?.rawValue)
6160
let endpoint = RoutineEndpoint.updateRoutine(routine: routineUpdateDTO)
6261

6362
_ = try await networkService.request(endpoint: endpoint, type: EmptyResponseDTO.self)

Projects/Domain/Sources/Protocol/Repository/RoutineRepositoryProtocol.swift

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,8 @@
99
public protocol RoutineRepositoryProtocol {
1010
/// 루틴을 생성합니다.
1111
/// - Parameters:
12-
/// - routineSummary: 루틴 요약 정보
13-
/// - subRoutineSummaries: 서브 루틴 요약 정보 배열
14-
func createRoutine(routineSummary: RoutineSummaryEntity, subRoutineSummaries: [SubRoutineSummaryEntity]) async throws
12+
/// - routine: 생성할 루틴 엔티티
13+
func createRoutine(routine: RoutineCreationEntity) async throws
1514

1615
/// 루틴을 조회합니다.
1716
/// - Parameter routineId: 조회할 루틴 id
@@ -26,9 +25,8 @@ public protocol RoutineRepositoryProtocol {
2625

2726
/// 루틴을 수정합니다.
2827
/// - Parameters:
29-
/// - routineSummary: 루틴 요약 정보
30-
/// - subRoutineSummaries: 서브 루틴 요약 정보 배열
31-
func updateRoutine(routineSummary: RoutineSummaryEntity, subRoutineSummaries: [SubRoutineSummaryEntity]) async throws
28+
/// - routine: 수정할 루틴
29+
func updateRoutine(routine: RoutineCreationEntity) async throws
3230

3331
/// 반복되는 루틴을 모두 제거합니다.
3432
/// - Parameter routineId: 삭제할 루틴 id

Projects/Domain/Sources/Protocol/UseCase/RoutineUseCaseProtocol.swift

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,7 @@ public protocol RoutineUseCaseProtocol {
1212

1313
func fetchRoutines(startDate: Date, endDate: Date) async throws -> [String: [RoutineEntity]]
1414

15-
func saveRoutine(
16-
routineSummary: RoutineSummaryEntity,
17-
subRoutineSummaries: [SubRoutineSummaryEntity],
18-
deletedSubRoutineSummaries: [SubRoutineSummaryEntity]
19-
) async throws
15+
func saveRoutine(routine: RoutineCreationEntity) async throws
2016

2117
func deleteAllRoutine(routineId: String) async throws
2218

Projects/Domain/Sources/UseCase/Routine/RoutineUseCase.swift

Lines changed: 19 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -28,47 +28,31 @@ public final class RoutineUseCase: RoutineUseCaseProtocol {
2828
return routineEntities
2929
}
3030

31-
public func saveRoutine(
32-
routineSummary: RoutineSummaryEntity,
33-
subRoutineSummaries: [SubRoutineSummaryEntity],
34-
deletedSubRoutineSummaries: [SubRoutineSummaryEntity]
35-
) async throws {
36-
if routineSummary.routineId == nil { // 루틴 아이디가 있으면 수정, 없으면 생성
37-
try await createRoutine(routineSummary: routineSummary, subRoutinesSummaries: subRoutineSummaries)
31+
public func saveRoutine(routine: RoutineCreationEntity) async throws {
32+
let routine = RoutineCreationEntity(
33+
id: routine.id,
34+
name: routine.name,
35+
repeatDay: routine.repeatDay,
36+
startDate: routine.startDate,
37+
endDate: routine.endDate,
38+
executionTime: routine.executionTime,
39+
subroutines: routine.subroutines.filter { !$0.isEmpty },
40+
recommendedRoutineType: routine.recommendedRoutineType,
41+
applyDateType: routine.applyDateType)
42+
43+
if routine.id == nil { // 루틴 아이디가 있으면 수정, 없으면 생성
44+
try await createRoutine(routine: routine)
3845
} else {
39-
try await updateRoutine(
40-
routineSummary: routineSummary,
41-
subRoutineSummaries: subRoutineSummaries,
42-
deletedSubRoutineSummaries: deletedSubRoutineSummaries)
46+
try await updateRoutine(routine: routine)
4347
}
4448
}
4549

46-
private func createRoutine(routineSummary: RoutineSummaryEntity, subRoutinesSummaries: [SubRoutineSummaryEntity]) async throws {
47-
try await routineRepository.createRoutine(routineSummary: routineSummary, subRoutineSummaries: subRoutinesSummaries)
50+
private func createRoutine(routine: RoutineCreationEntity) async throws {
51+
try await routineRepository.createRoutine(routine: routine)
4852
}
4953

50-
private func updateRoutine(
51-
routineSummary: RoutineSummaryEntity,
52-
subRoutineSummaries: [SubRoutineSummaryEntity],
53-
deletedSubRoutineSummaries: [SubRoutineSummaryEntity]
54-
) async throws {
55-
let updatedSubRoutines = subRoutineSummaries
56-
.enumerated()
57-
.map {
58-
SubRoutineSummaryEntity(
59-
subRoutineId: $1.subRoutineId,
60-
subRoutineName: $1.subRoutineName,
61-
sortOrder: $0 + 1)
62-
}
63-
let deletedSubRoutines = deletedSubRoutineSummaries.map {
64-
SubRoutineSummaryEntity(
65-
subRoutineId: $0.subRoutineId,
66-
subRoutineName: nil,
67-
sortOrder: nil)
68-
}
69-
let finalSubRoutines = updatedSubRoutines + deletedSubRoutines
70-
71-
try await routineRepository.updateRoutine(routineSummary: routineSummary, subRoutineSummaries: finalSubRoutines)
54+
private func updateRoutine(routine: RoutineCreationEntity) async throws {
55+
try await routineRepository.updateRoutine(routine: routine)
7256
}
7357

7458
public func deleteAllRoutine(routineId: String) async throws {

Projects/Presentation/Sources/RoutineCreation/View/Component/RoutinePeriodContentView.swift

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ final class RoutinePeriodContentView: UIView, RoutineCreationExpandable {
3030
}
3131

3232
struct Dependency {
33-
let dates: (start: Date, end: Date)
33+
let dates: (start: Date?, end: Date?)
3434
}
3535

3636
private let startLabel = UILabel()
@@ -65,17 +65,19 @@ final class RoutinePeriodContentView: UIView, RoutineCreationExpandable {
6565
}
6666

6767
func configure(dependency: Dependency) {
68-
let startString = dependency
69-
.dates
70-
.start
71-
.convertToString(dateType: .yearMonthDate)
72-
let endString = dependency
73-
.dates
74-
.end
75-
.convertToString(dateType: .yearMonthDate)
76-
77-
startButton.setTitle(startString, for: .normal)
78-
endButton.setTitle(endString, for: .normal)
68+
if let startDate = dependency.dates.start {
69+
let startString = startDate.convertToString(dateType: .yearMonthDate)
70+
startButton.setTitle(startString, for: .normal)
71+
} else {
72+
startButton.setTitle("시작 일자 설정", for: .normal)
73+
}
74+
75+
if let endDate = dependency.dates.end {
76+
let endString = endDate.convertToString(dateType: .yearMonthDate)
77+
endButton.setTitle(endString, for: .normal)
78+
} else {
79+
endButton.setTitle("종료 일자 설정", for: .normal)
80+
}
7981
}
8082

8183
private func configureAttribute() {

0 commit comments

Comments
 (0)