Skip to content

Commit 9e37d60

Browse files
authored
Feature/toggle exercise goal (#93)
* Change branch rulls * Add Text * ToggleTrainingModeUsecase * Change TraningMode by long press
1 parent 2dc0657 commit 9e37d60

File tree

6 files changed

+84
-19
lines changed

6 files changed

+84
-19
lines changed

.github/workflows/build_and_test.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ name: iOS starter workflow
22

33
on:
44
push:
5-
branches: ["main", "staging"]
5+
branches: ["main", "develop"]
66
pull_request:
7-
branches: ["main", "staging"]
7+
branches: ["main", "develop"]
88

99
jobs:
1010
build:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
//
2+
// ToggleTrainingModeUsecaseTests.swift
3+
// AppTests
4+
//
5+
// Created by 신동규 on 8/28/24.
6+
//
7+
8+
import XCTest
9+
import Domain
10+
import MockData
11+
12+
final class ToggleTrainingModeUsecaseTests: XCTestCase {
13+
14+
var userRepository: UserRepository?
15+
var usecase: ToggleTrainingModeUsecase?
16+
17+
override func setUpWithError() throws {
18+
userRepository = UserRepositoryMock()
19+
usecase = .init(userRepository: userRepository!)
20+
}
21+
22+
override func tearDownWithError() throws {
23+
userRepository = nil
24+
usecase = nil
25+
}
26+
27+
func testExample() throws {
28+
let prevTrainingMode = userRepository?.get()?.trainingMode
29+
usecase?.implement()
30+
let nextTrainingMode = userRepository?.get()?.trainingMode
31+
32+
XCTAssertNotEqual(prevTrainingMode, nextTrainingMode)
33+
}
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
//
2+
// ToggleTrainingModeUsecase.swift
3+
// Domain
4+
//
5+
// Created by 신동규 on 8/28/24.
6+
//
7+
8+
public final class ToggleTrainingModeUsecase {
9+
private let userRepository: UserRepository
10+
11+
public init(userRepository: UserRepository) {
12+
self.userRepository = userRepository
13+
}
14+
15+
public func implement() {
16+
guard let user: User = userRepository.get() else { return }
17+
let previousTrainingMode = user.trainingMode
18+
let nextTrainigMode: TrainingMode
19+
20+
switch previousTrainingMode {
21+
case .mass:
22+
nextTrainigMode = .strength
23+
case .strength:
24+
nextTrainigMode = .mass
25+
}
26+
27+
userRepository.updateUser(trainingMode: nextTrainigMode)
28+
}
29+
}

dg-muscle-ios/sources/Presentation/History/View/Form/Manage/GoalView.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ struct GoalView: View {
3131
.foregroundStyle(goal.achive ? .green : .gray)
3232
}
3333
} header: {
34-
Text("give it a try")
34+
Text("give it a try(\(trainingMode.text))")
3535
} footer: {
3636
if goal.achive {
3737
Text("You did it!").foregroundStyle(.green)

dg-muscle-ios/sources/Presentation/History/View/Form/Manage/ManageRecordView.swift

+8-16
Original file line numberDiff line numberDiff line change
@@ -34,23 +34,15 @@ public struct ManageRecordView: View {
3434

3535
public var body: some View {
3636
List {
37-
3837
if let mode = viewModel.traingMode {
39-
switch mode {
40-
case .mass:
41-
if let goal = viewModel.goal {
42-
GoalView(goal: goal, color: viewModel.color, trainingMode: mode)
43-
.onTapGesture {
44-
URLManager.shared.open(url: "dgmuscle://managetraingmode")
45-
}
46-
}
47-
case .strength:
48-
if let goal = viewModel.strengthGoal {
49-
GoalView(goal: goal, color: viewModel.color, trainingMode: mode)
50-
.onTapGesture {
51-
URLManager.shared.open(url: "dgmuscle://managetraingmode")
52-
}
53-
}
38+
if let goal = viewModel.goal ?? viewModel.strengthGoal {
39+
GoalView(goal: goal, color: viewModel.color, trainingMode: mode)
40+
.onTapGesture {
41+
URLManager.shared.open(url: "dgmuscle://managetraingmode")
42+
}
43+
.onLongPressGesture {
44+
viewModel.toggleTraningMode()
45+
}
5446
}
5547
}
5648

dg-muscle-ios/sources/Presentation/History/View/Form/Manage/ManageRecordViewModel.swift

+10
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ final class ManageRecordViewModel: ObservableObject {
3232
private let checkGoalAchievedUsecase: CheckGoalAchievedUsecase
3333
private let checkStrengthGoalAchievedUsecase: CheckStrengthGoalAchievedUsecase
3434
private let registerExerciseTimerUsecase: RegisterExerciseTimerUsecase
35+
private let toggleTrainingModeUsecase: ToggleTrainingModeUsecase
3536
private var cancellables = Set<AnyCancellable>()
3637

3738
init(
@@ -61,6 +62,7 @@ final class ManageRecordViewModel: ObservableObject {
6162
checkGoalAchievedUsecase = .init()
6263
checkStrengthGoalAchievedUsecase = .init()
6364
registerExerciseTimerUsecase = .init(exerciseTimerRepository: exerciseTimerRepository)
65+
toggleTrainingModeUsecase = .init(userRepository: userRepository)
6466

6567
let color: Common.HeatMapColor = .init(domain: getHeatMapColorUsecase.implement())
6668
self.color = color.color
@@ -76,6 +78,14 @@ final class ManageRecordViewModel: ObservableObject {
7678
bind()
7779
}
7880

81+
func toggleTraningMode() {
82+
toggleTrainingModeUsecase.implement()
83+
let type = UINotificationFeedbackGenerator.FeedbackType.success // .error, .error
84+
let generator = UINotificationFeedbackGenerator()
85+
generator.prepare()
86+
generator.notificationOccurred(type)
87+
}
88+
7989
func selectTime(time: Int) {
8090

8191
for i in (0..<10) {

0 commit comments

Comments
 (0)