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:
@@ -24,24 +24,25 @@ struct AllMoodsTotalTemplate: View, SharingTemplate {
|
||||
|
||||
@StateObject private var shareImage = StupidAssShareObservableObject()
|
||||
private var entries = [MoodMetrics]()
|
||||
|
||||
@MainActor
|
||||
init(isPreview: Bool, startDate: Date, endDate: Date, fakeData: Bool) {
|
||||
self.isPreview = isPreview
|
||||
self.startDate = startDate
|
||||
self.endDate = endDate
|
||||
|
||||
var moodEntries: [MoodEntry]?
|
||||
|
||||
|
||||
var moodEntries: [MoodEntryModel]?
|
||||
|
||||
if fakeData {
|
||||
moodEntries = PersistenceController.shared.randomEntries(count: 10)
|
||||
moodEntries = DataController.shared.randomEntries(count: 10)
|
||||
} else {
|
||||
|
||||
moodEntries = PersistenceController.shared.getData(startDate:startDate,
|
||||
endDate: endDate,
|
||||
includedDays: [1,2,3,4,5,6,7])
|
||||
moodEntries = DataController.shared.getData(startDate:startDate,
|
||||
endDate: endDate,
|
||||
includedDays: [1,2,3,4,5,6,7])
|
||||
}
|
||||
|
||||
|
||||
totalEntryCount = moodEntries?.count ?? 0
|
||||
|
||||
|
||||
if let moodEntries = moodEntries {
|
||||
entries = Random.createTotalPerc(fromEntries: moodEntries)
|
||||
entries = entries.sorted(by: {
|
||||
|
||||
@@ -11,12 +11,12 @@ struct CurrentStreakTemplate: View, SharingTemplate {
|
||||
static var description: String {
|
||||
"Last 10 Days"
|
||||
}
|
||||
|
||||
|
||||
var isPreview: Bool
|
||||
var startDate: Date
|
||||
var endDate: Date
|
||||
let moodEntries: [MoodEntry]
|
||||
|
||||
let moodEntries: [MoodEntryModel]
|
||||
|
||||
@State var showSharingTemplate = false
|
||||
@StateObject private var shareImage = StupidAssShareObservableObject()
|
||||
|
||||
@@ -32,24 +32,24 @@ struct CurrentStreakTemplate: View, SharingTemplate {
|
||||
GridItem(.flexible(minimum: 5, maximum: .infinity), alignment: .center),
|
||||
GridItem(.flexible(minimum: 5, maximum: .infinity), alignment: .center)
|
||||
]
|
||||
|
||||
|
||||
@MainActor
|
||||
init(isPreview: Bool, startDate: Date, endDate: Date, fakeData: Bool) {
|
||||
self.isPreview = isPreview
|
||||
self.startDate = startDate
|
||||
self.endDate = endDate
|
||||
|
||||
var _moodEntries: [MoodEntry]?
|
||||
|
||||
|
||||
var _moodEntries: [MoodEntryModel]?
|
||||
|
||||
if fakeData {
|
||||
_moodEntries = PersistenceController.shared.randomEntries(count: 10)
|
||||
_moodEntries = DataController.shared.randomEntries(count: 10)
|
||||
} else {
|
||||
|
||||
_moodEntries = PersistenceController.shared.getData(startDate:startDate,
|
||||
endDate: endDate,
|
||||
includedDays: [1,2,3,4,5,6,7])
|
||||
_moodEntries = DataController.shared.getData(startDate:startDate,
|
||||
endDate: endDate,
|
||||
includedDays: [1,2,3,4,5,6,7])
|
||||
}
|
||||
|
||||
self.moodEntries = _moodEntries ?? [MoodEntry]()
|
||||
|
||||
self.moodEntries = _moodEntries ?? [MoodEntryModel]()
|
||||
}
|
||||
|
||||
var image: UIImage {
|
||||
|
||||
@@ -24,7 +24,7 @@ struct LongestStreakTemplate: View, SharingTemplate {
|
||||
var endDate: Date
|
||||
var fakeData: Bool
|
||||
|
||||
@State var moodEntries = [MoodEntry]()
|
||||
@State var moodEntries = [MoodEntryModel]()
|
||||
@State var selectedMood: Mood = .great
|
||||
|
||||
@State var showSharingTemplate = false
|
||||
@@ -57,28 +57,29 @@ struct LongestStreakTemplate: View, SharingTemplate {
|
||||
return image
|
||||
}
|
||||
|
||||
@MainActor
|
||||
private func configureData(fakeData: Bool, mood: Mood) {
|
||||
var _moodEntries: [MoodEntry]?
|
||||
var _moodEntries: [MoodEntryModel]?
|
||||
|
||||
if fakeData {
|
||||
_moodEntries = PersistenceController.shared.randomEntries(count: 10)
|
||||
_moodEntries = DataController.shared.randomEntries(count: 10)
|
||||
} else {
|
||||
_moodEntries = PersistenceController.shared.getData(startDate:startDate,
|
||||
endDate: endDate,
|
||||
includedDays: [1,2,3,4,5,6,7])
|
||||
_moodEntries = DataController.shared.getData(startDate:startDate,
|
||||
endDate: endDate,
|
||||
includedDays: [1,2,3,4,5,6,7])
|
||||
}
|
||||
let data = _moodEntries ?? [MoodEntry]()
|
||||
|
||||
let data = _moodEntries ?? [MoodEntryModel]()
|
||||
|
||||
var splitArrays = createSubArrays(fromMoodEntries: data, splitOn: mood)
|
||||
splitArrays = splitArrays.sorted(by: {
|
||||
$0.count > $1.count
|
||||
} )
|
||||
self.moodEntries = splitArrays.first ?? [MoodEntry]()
|
||||
self.moodEntries = splitArrays.first ?? [MoodEntryModel]()
|
||||
}
|
||||
|
||||
private func createSubArrays(fromMoodEntries: [MoodEntry], splitOn: Mood) -> [[MoodEntry]] {
|
||||
var splitArrays = [[MoodEntry]]()
|
||||
var currentSplit = [MoodEntry]()
|
||||
|
||||
private func createSubArrays(fromMoodEntries: [MoodEntryModel], splitOn: Mood) -> [[MoodEntryModel]] {
|
||||
var splitArrays = [[MoodEntryModel]]()
|
||||
var currentSplit = [MoodEntryModel]()
|
||||
for entry in fromMoodEntries {
|
||||
if entry.mood == splitOn {
|
||||
currentSplit.append(entry)
|
||||
|
||||
@@ -28,8 +28,8 @@ struct MonthTotalTemplate: View, SharingTemplate {
|
||||
@AppStorage(UserDefaultsStore.Keys.textColor.rawValue, store: GroupUserDefaults.groupDefaults) private var textColor: Color = .white
|
||||
|
||||
private var moodMetrics = [MoodMetrics]()
|
||||
private var moodEntries = [MoodEntry]()
|
||||
|
||||
private var moodEntries = [MoodEntryModel]()
|
||||
|
||||
let columns = [
|
||||
GridItem(.flexible(minimum: 5, maximum: .infinity), alignment: .center),
|
||||
GridItem(.flexible(minimum: 5, maximum: .infinity), alignment: .center),
|
||||
@@ -39,30 +39,25 @@ struct MonthTotalTemplate: View, SharingTemplate {
|
||||
GridItem(.flexible(minimum: 5, maximum: .infinity), alignment: .center),
|
||||
GridItem(.flexible(minimum: 5, maximum: .infinity), alignment: .center)
|
||||
]
|
||||
|
||||
|
||||
@MainActor
|
||||
init(isPreview: Bool, startDate: Date, endDate: Date, fakeData: Bool) {
|
||||
self.isPreview = isPreview
|
||||
self.startDate = startDate
|
||||
self.endDate = endDate
|
||||
|
||||
var _moodEntries: [MoodEntry]?
|
||||
|
||||
|
||||
var _moodEntries: [MoodEntryModel]?
|
||||
|
||||
if fakeData {
|
||||
_moodEntries = PersistenceController.shared.randomEntries(count: 10)
|
||||
_moodEntries = DataController.shared.randomEntries(count: 10)
|
||||
} else {
|
||||
|
||||
_moodEntries = PersistenceController.shared.getData(startDate: startDate,
|
||||
endDate: endDate,
|
||||
includedDays: [1,2,3,4,5,6,7])
|
||||
|
||||
// _moodEntries = PersistenceController.shared.getData(startDate:Calendar.current.date(byAdding: .day, value: -33, to: Date())!,
|
||||
// endDate: Date(),
|
||||
// includedDays: [1,2,3,4,5,6,7])
|
||||
|
||||
_moodEntries = DataController.shared.getData(startDate: startDate,
|
||||
endDate: endDate,
|
||||
includedDays: [1,2,3,4,5,6,7])
|
||||
}
|
||||
|
||||
moodEntries = _moodEntries ?? [MoodEntry]()
|
||||
|
||||
|
||||
moodEntries = _moodEntries ?? [MoodEntryModel]()
|
||||
|
||||
totalEntryCount = moodEntries.count
|
||||
moodMetrics = Random.createTotalPerc(fromEntries: moodEntries)
|
||||
moodMetrics = moodMetrics.sorted(by: {
|
||||
|
||||
Reference in New Issue
Block a user