Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions Dietto/Dietto.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@
2203D0AC2DD32098000EA331 /* Exceptions for "Dietto" folder in "Dietto" target */ = {
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
membershipExceptions = (
Apps/AppCoordinator.swift,
Apps/Destination.swift,
Info.plist,
);
target = 22C73C312DD1968A001EDF35 /* Dietto */;
Expand Down
28 changes: 0 additions & 28 deletions Dietto/Dietto/Apps/AppCoordinator.swift

This file was deleted.

51 changes: 51 additions & 0 deletions Dietto/Dietto/Apps/DIContainer.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
//
// DIContainer.swift
// Dietto
//
// Created by 안정흠 on 5/29/25.
//

import Foundation
import Observation
@Observable
final class DIContainer {
private let alanUsecase: AlanUsecase
private let interestsUsecase: InterestsUsecase
private let pedometerUsecase: PedometerUsecase
private let userStorageUsecase: UserStorageUsecase
private let weightHistoryUsecase: WeightHistoryUsecase

init() {
self.alanUsecase = AlanUsecaseImpl(repository: NetworkRepositoryImpl())
self.pedometerUsecase = PedometerUsecaseImpl(pedometer: PedometerRepositoryImpl())
self.interestsUsecase = InterestsUsecaseImpl(repository: StorageRepositoryImpl<InterestsDTO>())
self.userStorageUsecase = UserStorageUsecaseImpl(storage: StorageRepositoryImpl<UserDTO>())
self.weightHistoryUsecase = WeightHistoryUsecaseImpl(repository: StorageRepositoryImpl<WeightDTO>())
}

func getHomeViewModel() -> HomeViewModel {
HomeViewModel(
pedometerUsecase: pedometerUsecase,
weightHistroyUsecase: weightHistoryUsecase,
userStorageUsecase: userStorageUsecase
)
}

func getArticleViewModel() -> ArticleViewModel {
ArticleViewModel(
alanUsecase: alanUsecase,
storageUsecase: interestsUsecase
)
}

func getDietaryViewModel() -> DietaryViewModel {
DietaryViewModel(usecase: alanUsecase)
}

func getOnboardingViewModel() -> OnboardingViewModel {
OnboardingViewModel(
weightHistroyUsecase: weightHistoryUsecase,
userStorageUsecase: userStorageUsecase
)
}
}
50 changes: 0 additions & 50 deletions Dietto/Dietto/Apps/Destination.swift

This file was deleted.

4 changes: 4 additions & 0 deletions Dietto/Dietto/Apps/DiettoApp.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,17 @@ import SwiftData
@main
struct DiettoApp: App {
@AppStorage("isFirstLaunch") var isFirstLaunch: Bool = true
private var diContainer = DIContainer()

var body: some Scene {
WindowGroup {
if isFirstLaunch {
IntroView()
.environment(diContainer)
}
else {
MainTabView()
.environment(diContainer)
}
}
}
Expand Down
10 changes: 10 additions & 0 deletions Dietto/Dietto/Domain/Usecases/WeightHistoryUsecase.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import Foundation
protocol WeightHistoryUsecase {
func addNewWeight(weight: Int, date: Date)
func getWeightHistory(chartRange: ChartTimeType) -> [WeightEntity]
func deleteAllWeightHistory()
}

final class WeightHistoryUsecaseImpl<Repository: StorageRepository>: WeightHistoryUsecase where Repository.T == WeightDTO {
Expand All @@ -35,6 +36,15 @@ final class WeightHistoryUsecaseImpl<Repository: StorageRepository>: WeightHisto
}
}

func deleteAllWeightHistory() {
do {
try storage.deleteAll()
}
catch {
print("\(#function) : \(error.localizedDescription)")
}
}

private func getDateRange(range: ChartTimeType) -> Predicate<WeightDTO> {
let now = Date()
let calendar = Calendar.current
Expand Down
4 changes: 2 additions & 2 deletions Dietto/Dietto/Presentation/Article/View/ArticleView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ struct ArticleView: View {
"https://www.youtube.com/watch?v=FdYIvEc7e-0",
"https://www.youtube.com/watch?v=2tM1LFFxeKg"
]
@StateObject var viewModel = ArticleViewModel()
@StateObject var viewModel: ArticleViewModel
var body: some View {
NavigationView {
VStack(alignment: .leading){
Expand Down Expand Up @@ -59,7 +59,7 @@ struct ArticleView: View {

#Preview {
NavigationView {
ArticleView()
ArticleView(viewModel: ArticleViewModel())
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
import SwiftUI

final class ArticleViewModel: ObservableObject {
@Published private(set) var selectedInterests: [InterestEntity] = []
@Published var selectedInterests: [InterestEntity] = []
@Published var articles: [ArticleEntity] = []

private let alanUsecase: AlanUsecase
private let storageUsecase: InterestsUsecase
Expand All @@ -29,9 +30,17 @@ final class ArticleViewModel: ObservableObject {
}

// MARK: - 아티클 로드
func loadArticles() async throws -> [ArticleEntity] {
// alanUsecase.fetchArticle(topics: <#T##[ArticleEntity]#>)
[]
func loadArticles() {
Task {
do {
let result = try await alanUsecase.fetchArticle(topics: selectedInterests)
await MainActor.run{ articles = result }
}
catch {

}
}

}

// MARK: - 관심사 추가 / 삭제
Expand Down
4 changes: 2 additions & 2 deletions Dietto/Dietto/Presentation/Dietary/View/DietaryView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import SwiftUI

struct DietaryView: View {

@StateObject private var dietartViewModel = DietaryViewModel()
@StateObject var dietartViewModel: DietaryViewModel

@State private var newfood : String = ""

Expand Down Expand Up @@ -205,5 +205,5 @@ struct DietaryView: View {
}

#Preview {
DietaryView()
DietaryView(dietartViewModel: DietaryViewModel())
}
110 changes: 53 additions & 57 deletions Dietto/Dietto/Presentation/Home/HomeViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,20 +28,11 @@ enum ChartTimeType: String, CaseIterable {
@Observable
final class HomeViewModel {
var isAnimating: Bool = false
var chartTimeType: ChartTimeType = .monthly
var chartTimeType: ChartTimeType = .weekly
var bodyScaleHistory: [WeightEntity] = []
var pedometerData: PedometerModel?

var userData: UserEntity = UserEntity(
id: UUID(),
name: "홍길동",
gender: .male,
height: 170,
startWeight: 68,
currentWeight: 67,
targetWeight: 62,
targetDistance: 5
)
var userData: UserEntity


private let pedometerUsecase: PedometerUsecase
Expand All @@ -59,9 +50,12 @@ final class HomeViewModel {
self.pedometerUsecase = pedometerUsecase
self.weightHistroyUsecase = weightHistroyUsecase
self.userStorageUsecase = userStorageUsecase
if let userData = userStorageUsecase.getUserData() {
self.userData = userData
#warning("데이터 없으면 온보딩으로")
}
else { fatalError("데이터 없음") }
bodyScaleHistoryFetch(type: chartTimeType)

userStorageUsecase.createUserData(userData)
}

func fetchPedometer() {
Expand All @@ -80,55 +74,30 @@ final class HomeViewModel {
}

func updateCurrentBodyScale(_ value: String) {
print("Update!!!")
weightHistroyUsecase.addNewWeight(weight: Int(value)!, date: Date())
userStorageUsecase.updateCurrentWeight(id: userData.id, currentWeight: Int(value)!)
guard let value = Int(value) else {
print("\(#function) : FAILED to update current body scale")
return
}

print("Update: \(weightHistroyUsecase.getWeightHistory(chartRange: .weekly))")
print("Update: \(userStorageUsecase.getUserData()?.currentWeight)")
// 마지막에 bodyScaleHistoryFetch 필요함
#warning("업데이트 한 날짜가 같으면 기존 데이터 replace")
weightHistroyUsecase.addNewWeight(weight: value, date: Date())
userStorageUsecase.updateCurrentWeight(id: userData.id, currentWeight: value)
userData.currentWeight = value
bodyScaleHistoryFetch(type: chartTimeType)
}

func bodyScaleHistoryFetch(type: ChartTimeType) {
chartTimeType = type
var result = weightHistroyUsecase.getWeightHistory(chartRange: type)

if type == .weekly {
result = [
WeightEntity(date: Date()-(86400*3), scale: 70),
WeightEntity(date: Date()-(86400*2), scale: 65),
WeightEntity(date: Date()-86400, scale: 55),
WeightEntity(date: Date(), scale: 50),
WeightEntity(date: Date()+86400, scale: 55)
]
}
else if type == .monthly {
result = [
WeightEntity(date: Date()-(86400*3), scale: 70),
WeightEntity(date: Date()-(86400*2), scale: 65),
WeightEntity(date: Date()-86400, scale: 55),
WeightEntity(date: Date(), scale: 50),
WeightEntity(date: Date()+86400, scale: 55),
WeightEntity(date: Date()+(86400*2), scale: 63),
WeightEntity(date: Date()+(86400*3), scale: 72),
WeightEntity(date: Date()+(86400*4), scale: 82),
WeightEntity(date: Date()+(86400*5), scale: 72),
WeightEntity(date: Date()+(86400*6), scale: 62),
WeightEntity(date: Date()+(86400*7), scale: 52),
WeightEntity(date: Date()+(86400*8), scale: 52),
WeightEntity(date: Date()+(86400*9), scale: 52),
WeightEntity(date: Date()+(86400*10), scale: 52),
WeightEntity(date: Date()+(86400*11), scale: 58)
]
}
let result = weightHistroyUsecase.getWeightHistory(chartRange: type)

if result.count >= type.limitDataCount() {
bodyScaleHistory = result
chartAnimate()
}
else { bodyScaleHistory = []}
else { bodyScaleHistory = [] }
}

func chartAnimate() {
private func chartAnimate() {
guard !bodyScaleHistory.isEmpty else { return }
isAnimating = true
for (index, _) in bodyScaleHistory.enumerated() {
Expand All @@ -145,9 +114,36 @@ final class HomeViewModel {
}
}

// ProfileView Function
extension HomeViewModel {
func updateUserData() {}
func updateGoal() {}
func deleteAllData() {}
}

// result.forEach { item in
// print(item)
// }
// print()
// if type == .weekly {
// result = [
// WeightEntity(date: Date()-(86400*3), scale: 70),
// WeightEntity(date: Date()-(86400*2), scale: 65),
// WeightEntity(date: Date()-86400, scale: 55),
// WeightEntity(date: Date(), scale: 50),
// WeightEntity(date: Date()+86400, scale: 55)
// ]
// }
// else if type == .monthly {
// result = [
// WeightEntity(date: Date()-(86400*3), scale: 70),
// WeightEntity(date: Date()-(86400*2), scale: 65),
// WeightEntity(date: Date()-86400, scale: 55),
// WeightEntity(date: Date(), scale: 50),
// WeightEntity(date: Date()+86400, scale: 55),
// WeightEntity(date: Date()+(86400*2), scale: 63),
// WeightEntity(date: Date()+(86400*3), scale: 72),
// WeightEntity(date: Date()+(86400*4), scale: 82),
// WeightEntity(date: Date()+(86400*5), scale: 72),
// WeightEntity(date: Date()+(86400*6), scale: 62),
// WeightEntity(date: Date()+(86400*7), scale: 52),
// WeightEntity(date: Date()+(86400*8), scale: 52),
// WeightEntity(date: Date()+(86400*9), scale: 52),
// WeightEntity(date: Date()+(86400*10), scale: 52),
// WeightEntity(date: Date()+(86400*11), scale: 58)
// ]
// }
Loading