- Replace Core Data with SwiftData for iOS 18+ - Create MoodEntryModel as @Model class replacing MoodEntry entity - Create SharedModelContainer for App Group container sharing - Create DataController with CRUD extensions replacing PersistenceController - Update all views and view models to use MoodEntryModel - Update widget extension to use SwiftData - Remove old Core Data files (Persistence*.swift, .xcdatamodeld) - Add EntryType enum with all entry type cases - Fix widget label truncation with proper spacing and text scaling 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
82 lines
1.7 KiB
Swift
82 lines
1.7 KiB
Swift
//
|
|
// MoodEntryModel.swift
|
|
// Feels
|
|
//
|
|
// SwiftData model replacing Core Data MoodEntry
|
|
//
|
|
|
|
import Foundation
|
|
import SwiftData
|
|
|
|
// MARK: - Entry Type Enum
|
|
|
|
enum EntryType: Int, Codable {
|
|
case listView = 0
|
|
case widget = 1
|
|
case watch = 2
|
|
case shortcut = 3
|
|
case filledInMissing = 4
|
|
case notification = 5
|
|
case header = 6
|
|
}
|
|
|
|
// MARK: - SwiftData Model
|
|
|
|
@Model
|
|
final class MoodEntryModel {
|
|
// Primary attributes
|
|
var forDate: Date
|
|
var moodValue: Int
|
|
var timestamp: Date
|
|
var weekDay: Int
|
|
var entryType: Int
|
|
|
|
// Metadata
|
|
var canEdit: Bool
|
|
var canDelete: Bool
|
|
|
|
// Computed properties
|
|
var mood: Mood {
|
|
Mood(rawValue: moodValue) ?? .missing
|
|
}
|
|
|
|
var moodString: String {
|
|
mood.strValue
|
|
}
|
|
|
|
init(
|
|
forDate: Date,
|
|
mood: Mood,
|
|
entryType: EntryType,
|
|
canEdit: Bool = true,
|
|
canDelete: Bool = true
|
|
) {
|
|
self.forDate = forDate
|
|
self.moodValue = mood.rawValue
|
|
self.timestamp = Date()
|
|
self.weekDay = Calendar.current.component(.weekday, from: forDate)
|
|
self.entryType = entryType.rawValue
|
|
self.canEdit = canEdit
|
|
self.canDelete = canDelete
|
|
}
|
|
|
|
// Convenience initializer for raw values
|
|
init(
|
|
forDate: Date,
|
|
moodValue: Int,
|
|
entryType: Int,
|
|
timestamp: Date = Date(),
|
|
weekDay: Int? = nil,
|
|
canEdit: Bool = true,
|
|
canDelete: Bool = true
|
|
) {
|
|
self.forDate = forDate
|
|
self.moodValue = moodValue
|
|
self.timestamp = timestamp
|
|
self.weekDay = weekDay ?? Calendar.current.component(.weekday, from: forDate)
|
|
self.entryType = entryType
|
|
self.canEdit = canEdit
|
|
self.canDelete = canDelete
|
|
}
|
|
}
|