Skip to content
Open
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,4 @@ buildServer.json
.claude/
.codex/
.mcp.json
PR.md
3 changes: 2 additions & 1 deletion FoodDiary/App/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@ let project = Project(
],
settings: .settings(
base: [
"MARKETING_VERSION": "1.0.0",
"MARKETING_VERSION": "1.1.0",
"CURRENT_PROJECT_VERSION": "26050725",
"BASE_URL": "$(BASE_URL)",
"SENTRY_DSN": "$(SENTRY_DSN)",
"TARGETED_DEVICE_FAMILY": "1"
Expand Down
16 changes: 2 additions & 14 deletions FoodDiary/App/Sources/SceneDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -259,18 +259,6 @@ extension SceneDelegate {
return FetchFoodRecordsUseCase(repository: repository)
}

container.register(LoadWeeklyRecordUseCase.self) { resolver in
guard let recordRepo = resolver.resolve(FoodRecordRepositoryImpl.self),
let fetchAssetUseCase = resolver.resolve(FetchFoodImageAssetUseCase.self) else {
fatalError("LoadWeeklyRecordUseCase dependencies not registered")
}
return LoadWeeklyRecordUseCase(
calendar: .current,
recordRepository: recordRepo,
fetchFoodImageAssetUseCase: fetchAssetUseCase
)
}

container.register(UpdateFoodRecordUseCase.self) { resolver in
guard let repository = resolver.resolve(FoodRecordRepositoryImpl.self) else {
fatalError("FoodRecordRepositoryImpl not registered")
Expand Down Expand Up @@ -418,7 +406,7 @@ extension SceneDelegate {
// Calendar
guard
let requestPhotoAuthUseCase = try? container.resolve(RequestPhotoAuthorizationUseCase.self),
let loadWeeklyUseCase = try? container.resolve(LoadWeeklyRecordUseCase.self),
let fetchImageAssetUseCase = try? container.resolve(FetchFoodImageAssetUseCase.self),
let coachmarkStorage = try? container.resolve(CoachmarkStoring.self),
let checkAppReviewUseCase = try? container.resolve(CheckAppReviewEligibilityUseCase.self),
let fetchMonthlyUseCase = try? container.resolve(FetchMonthlyCalendarDaysUseCase.self)
Expand All @@ -434,7 +422,7 @@ extension SceneDelegate {
login: LoginSceneFactory(useCase: finalizeUseCase),
calendar: CalendarSceneFactory(
requestPhotoAuthorizationUseCase: requestPhotoAuthUseCase,
loadWeeklyCalendarDataUseCase: loadWeeklyUseCase,
fetchFoodImageAssetUseCase: fetchImageAssetUseCase,
saveFoodRecordUseCase: saveFoodRecordUseCase,
pushNotificationObserver: pushNotificationObserver,
getNicknameUseCase: getNicknameUseCase,
Expand Down
11 changes: 6 additions & 5 deletions FoodDiary/Data/Sources/Repository/FoodRecordRepositoryImpl.swift
Original file line number Diff line number Diff line change
Expand Up @@ -128,11 +128,12 @@ public struct FoodRecordRepositoryImpl: FoodRecordRepository {
result[date] = entry.value.photos.compactMap { URL(string: $0.url) }
}

let current = await photoURLCache.get(for: dateRange)
if current != fresh {
await photoURLCache.set(fresh, for: dateRange)
continuation.yield(fresh)
}
// 이 호출의 응답은 항상 그대로 방출한다.
// 전역 캐시와 비교해서 동일하면 건너뛰는 방식은, 동시에 같은 기간을 요청한
// 다른 호출(예: 콜드 스타트 시 loadInitialData/refreshCurrentMonth 경쟁)이
// 먼저 캐시를 채워버리는 경우 이 호출의 결과가 통째로 유실되는 문제가 있었다.
await photoURLCache.set(fresh, for: dateRange)
continuation.yield(fresh)

continuation.finish()
} catch {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xF9",
"green" : "0xF6",
"red" : "0xF3"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "0.700",
"blue" : "0x18",
"green" : "0x1E",
"red" : "0x21"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x3C",
"green" : "0x3C",
"red" : "0x3C"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xF9",
"green" : "0xF6",
"red" : "0xF3"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x80",
"green" : "0x80",
"red" : "0x80"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x1E",
"green" : "0x1E",
"red" : "0x1E"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x2C",
"green" : "0x2C",
"red" : "0x2C"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"colors" : [
{
"color" : {
"color-space" : "srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xE0",
"green" : "0xE0",
"red" : "0xE0"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "pic.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "pic 1.svg",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "pic 2.svg",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
{
"images" : [
{
"filename" : "mini-logo.png",
"filename" : "Group 2147239449.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "mini-logo@2x.png",
"filename" : "Group 2147239450.svg",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "mini-logo@3x.png",
"filename" : "Group 2147239451.svg",
"idiom" : "universal",
"scale" : "3x"
}
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "icon-18.svg",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "icon-18 1.svg",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "icon-18 2.svg",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading