recopytex/backend/repository/tribe_sqlite_repository.py

90 lines
2.2 KiB
Python
Raw Permalink Normal View History

2022-12-26 17:07:23 +00:00
from backend.model.tribe import Tribe
from backend.repository.abstract_repository import AbstractRepository
class TribeRepositoryError(Exception):
pass
2022-12-26 17:07:23 +00:00
class TribeSQLiteRepository(AbstractRepository):
def __init__(self, conn) -> None:
self.conn = conn
def add(self, tribe: Tribe) -> None:
tribes = self.list()
if tribe.name in map(lambda x: x.name, tribes):
raise TribeRepositoryError(
f"The tribe {tribe.name} already exists. Can't add it"
)
2022-12-26 18:39:44 +00:00
self.conn.execute(
2022-12-26 18:21:00 +00:00
"""
INSERT INTO tribes(name, level) VALUES (?, ?)
""",
(
tribe.name,
tribe.level,
),
)
2022-12-26 17:07:23 +00:00
def update(self, name: str, tribe: Tribe) -> None:
tribes = self.list()
if name not in map(lambda x: x.name, tribes):
raise TribeRepositoryError(
f"The tribe {name} doesn't exists. Can't update it"
)
2022-12-26 18:39:44 +00:00
self.conn.execute(
"""
UPDATE tribes SET name=:newname, level=:newlevel WHERE name=:name
""",
{
"newname": tribe.name,
"newlevel": tribe.level,
"name": name,
},
)
2022-12-26 17:07:23 +00:00
def get(self, name: str) -> Tribe:
2022-12-26 18:05:50 +00:00
cursor = self.conn.cursor()
cursor.execute(
"""
SELECT * FROM tribes WHERE name=?
""",
(name,),
)
row = cursor.fetchone()
if row:
return Tribe(*row)
raise TribeRepositoryError(f"The tribe {name} does not exists")
2022-12-26 17:07:23 +00:00
def list(self) -> list[Tribe]:
cursor = self.conn.cursor()
cursor.execute(
"""
SELECT * FROM tribes
"""
)
2022-12-26 18:05:50 +00:00
2022-12-26 17:07:23 +00:00
rows = cursor.fetchall()
return [Tribe(*r) for r in rows]
2022-12-30 12:29:43 +00:00
def delete(self, name: str) -> None:
tribes = self.list()
2022-12-30 12:29:43 +00:00
if name not in map(lambda x: x.name, tribes):
raise TribeRepositoryError(
2022-12-30 12:29:43 +00:00
f"The tribe {name} doesn't exists. Can't delete it."
)
2022-12-26 18:39:44 +00:00
self.conn.execute(
"""
DELETE FROM tribes WHERE name=:name
""",
{
2022-12-30 12:29:43 +00:00
"name": name,
2022-12-26 18:39:44 +00:00
},
)