50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
from datetime import UTC, datetime
|
|
|
|
from .provider import DatabaseProvider
|
|
|
|
|
|
class MapDrawingsDAO:
|
|
def __init__(self, provider: DatabaseProvider):
|
|
self.provider = provider
|
|
|
|
def upsert_drawing(self, identity_hash, name, data):
|
|
now = datetime.now(UTC)
|
|
# Check if drawing with same name exists for this user
|
|
existing = self.provider.fetchone(
|
|
"SELECT id FROM map_drawings WHERE identity_hash = ? AND name = ?",
|
|
(identity_hash, name),
|
|
)
|
|
|
|
if existing:
|
|
self.provider.execute(
|
|
"UPDATE map_drawings SET data = ?, updated_at = ? WHERE id = ?",
|
|
(data, now, existing["id"]),
|
|
)
|
|
else:
|
|
self.provider.execute(
|
|
"""
|
|
INSERT INTO map_drawings (identity_hash, name, data, created_at, updated_at)
|
|
VALUES (?, ?, ?, ?, ?)
|
|
""",
|
|
(identity_hash, name, data, now, now),
|
|
)
|
|
|
|
def get_drawings(self, identity_hash):
|
|
return self.provider.fetchall(
|
|
"SELECT * FROM map_drawings WHERE identity_hash = ? ORDER BY updated_at DESC",
|
|
(identity_hash,),
|
|
)
|
|
|
|
def delete_drawing(self, drawing_id):
|
|
self.provider.execute(
|
|
"DELETE FROM map_drawings WHERE id = ?",
|
|
(drawing_id,),
|
|
)
|
|
|
|
def update_drawing(self, drawing_id, name, data):
|
|
now = datetime.now(UTC)
|
|
self.provider.execute(
|
|
"UPDATE map_drawings SET name = ?, data = ?, updated_at = ? WHERE id = ?",
|
|
(name, data, now, drawing_id),
|
|
)
|