Migrate from Core Data to SwiftData
- 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>
This commit is contained in:
@@ -1,26 +0,0 @@
|
||||
//
|
||||
// MoodEntryExtension.swift
|
||||
// Feels
|
||||
//
|
||||
// Created by Trey Tartt on 1/5/22.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
enum EntryType: Int {
|
||||
case notification
|
||||
case header
|
||||
case listView
|
||||
case filledInMissing
|
||||
case widget
|
||||
}
|
||||
|
||||
extension MoodEntry {
|
||||
var moodString: String {
|
||||
return Mood.init(rawValue: Int(self.moodValue))?.strValue ?? "NA"
|
||||
}
|
||||
|
||||
var mood: Mood {
|
||||
return Mood.init(rawValue: Int(self.moodValue))!
|
||||
}
|
||||
}
|
||||
81
Shared/Models/MoodEntryModel.swift
Normal file
81
Shared/Models/MoodEntryModel.swift
Normal file
@@ -0,0 +1,81 @@
|
||||
//
|
||||
// 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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user