- 설정 화면 신규(첫 화면 헤더 톱니 진입): 화면 모드(시스템/라이트/다크) 선택, '기간 지난 데이터 삭제'로 만료된 기록 일괄 정리(매장 무관, 확인 후 실행) - Theme 색상을 라이트/다크 자동 전환 동적 색으로 전환, 기본값은 기존과 동일한 다크 - 유통기한에 시각(시:분) 선택 입력: 날짜 선택 후 '시간 추가' 버튼으로만 노출돼 기본 사용성(사진→날짜→저장)은 그대로 유지, 유제품 등 필요 시에만 사용 - ProductRecord.hasTime 플래그 추가(기본 false, 라이트웨이트 마이그레이션), 시각 포함 기록은 날짜 상세 그리드에 시각 배지 표시 - .gitignore에 Xcode 빌드 산출물/파생 데이터/SwiftPM 상태 추가해 상태 오염 방지 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J2HQuA6RPtkh45QTMN83i2
41 lines
1.0 KiB
Swift
41 lines
1.0 KiB
Swift
import Foundation
|
|
import SwiftData
|
|
|
|
@Model
|
|
final class Store {
|
|
var name: String
|
|
var createdAt: Date
|
|
|
|
@Relationship(deleteRule: .cascade, inverse: \ProductRecord.store)
|
|
var records: [ProductRecord] = []
|
|
|
|
init(name: String) {
|
|
self.name = name
|
|
self.createdAt = .now
|
|
}
|
|
}
|
|
|
|
@Model
|
|
final class ProductRecord {
|
|
/// 유통기한. `hasTime`이 false면 자정으로 정규화된 날짜, true면 시각까지 포함.
|
|
var expiryDate: Date
|
|
/// 유통기한에 시각(시:분)이 포함되는지 여부. 기본값 false(날짜만).
|
|
var hasTime: Bool = false
|
|
var createdAt: Date
|
|
|
|
@Attribute(.externalStorage)
|
|
var imageData: Data
|
|
var thumbnailData: Data
|
|
|
|
var store: Store?
|
|
|
|
init(expiryDate: Date, hasTime: Bool = false, imageData: Data, thumbnailData: Data, store: Store?) {
|
|
self.expiryDate = expiryDate
|
|
self.hasTime = hasTime
|
|
self.createdAt = .now
|
|
self.imageData = imageData
|
|
self.thumbnailData = thumbnailData
|
|
self.store = store
|
|
}
|
|
}
|