SqliteRdvDao.swift
88 lignes · 2898 octets
import Foundation struct SqliteRdvDao: RdvDao { let db: SqliteDatabase private static let columns = """ localId, serverId, titre, description, lieu, debutMs, finMs, contactIdsJson, \ projetId, updatedAt, calendarEventId, dirtyLocal """ private static func map(_ row: SqliteRow) -> RdvEntity { var e = RdvEntity() e.localId = row.int64(0) e.serverId = row.textOrNil(1) e.titre = row.text(2) e.description = row.text(3) e.lieu = row.text(4) e.debutMs = row.int64(5) e.finMs = row.int64(6) e.contactIdsJson = row.text(7) e.projetId = row.textOrNil(8) e.updatedAt = row.int64(9) e.calendarEventId = row.int64OrNil(10) e.dirtyLocal = row.bool(11) return e } @discardableResult func upsert(_ entity: RdvEntity) async throws -> Int64 { try await db.insert( "INSERT OR REPLACE INTO rdv (\(Self.columns)) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", [ .rowId(entity.localId), .optText(entity.serverId), .text(entity.titre), .text(entity.description), .text(entity.lieu), .int(entity.debutMs), .int(entity.finMs), .text(entity.contactIdsJson), .optText(entity.projetId), .int(entity.updatedAt), .optInt(entity.calendarEventId), .bool(entity.dirtyLocal), ] ) } func getByServerId(_ serverId: String) async throws -> RdvEntity? { try await db.query( "SELECT \(Self.columns) FROM rdv WHERE serverId = ?", [.text(serverId)], map: Self.map ).first } func getByLocalId(_ localId: Int64) async throws -> RdvEntity? { try await db.query( "SELECT \(Self.columns) FROM rdv WHERE localId = ?", [.int(localId)], map: Self.map ).first } func getByCalendarEventId(_ calendarEventId: Int64) async throws -> RdvEntity? { try await db.query( "SELECT \(Self.columns) FROM rdv WHERE calendarEventId = ?", [.int(calendarEventId)], map: Self.map ).first } func listDirty() async throws -> [RdvEntity] { try await db.query("SELECT \(Self.columns) FROM rdv WHERE dirtyLocal = 1", map: Self.map) } func deleteByServerId(_ serverId: String) async throws { try await db.write("DELETE FROM rdv WHERE serverId = ?", [.text(serverId)]) } func deleteByLocalId(_ localId: Int64) async throws { try await db.write("DELETE FROM rdv WHERE localId = ?", [.int(localId)]) } func listAll() async throws -> [RdvEntity] { try await db.query("SELECT \(Self.columns) FROM rdv", map: Self.map) } }
GitRust