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 + } +}