From 41754b1f56ce5d9ebfdac9264a209894b1b7cef7 Mon Sep 17 00:00:00 2001 From: Laurent Date: Sun, 24 May 2026 09:30:19 +0200 Subject: [PATCH] feat: add Playlist and PlaylistTrack models --- Music/Models/Playlist.swift | 28 ++++++++++++++++++++++++++++ Music/Models/PlaylistTrack.swift | 17 +++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 Music/Models/Playlist.swift create mode 100644 Music/Models/PlaylistTrack.swift diff --git a/Music/Models/Playlist.swift b/Music/Models/Playlist.swift new file mode 100644 index 0000000..82cffe4 --- /dev/null +++ b/Music/Models/Playlist.swift @@ -0,0 +1,28 @@ +import Foundation +import GRDB + +nonisolated struct Playlist: Codable, Identifiable, Equatable, Hashable, Sendable { + var id: Int64? + var name: String + var createdAt: Date +} + +nonisolated extension Playlist: FetchableRecord, MutablePersistableRecord { + static let databaseTableName = "playlists" + + mutating func didInsert(_ inserted: InsertionSuccess) { + id = inserted.rowID + } +} + +#if DEBUG +extension Playlist { + static func fixture( + id: Int64? = nil, + name: String = "Test Playlist", + createdAt: Date = Date() + ) -> Playlist { + Playlist(id: id, name: name, createdAt: createdAt) + } +} +#endif diff --git a/Music/Models/PlaylistTrack.swift b/Music/Models/PlaylistTrack.swift new file mode 100644 index 0000000..cca1d83 --- /dev/null +++ b/Music/Models/PlaylistTrack.swift @@ -0,0 +1,17 @@ +import Foundation +import GRDB + +nonisolated struct PlaylistTrack: Codable, Identifiable, Equatable, Hashable, Sendable { + var id: Int64? + var playlistId: Int64 + var trackId: Int64 + var position: Int +} + +nonisolated extension PlaylistTrack: FetchableRecord, MutablePersistableRecord { + static let databaseTableName = "playlist_tracks" + + mutating func didInsert(_ inserted: InsertionSuccess) { + id = inserted.rowID + } +}