230 lines
6.6 KiB
Python
230 lines
6.6 KiB
Python
from sqlite3 import Connection, Cursor
|
|
from database import SmartCursor
|
|
import random
|
|
|
|
|
|
class GameTableException(Exception):
|
|
def __init__(self, message):
|
|
super().__init__(self, message)
|
|
|
|
|
|
class GameTable:
|
|
_game_table_id: int
|
|
_game_table_name: str
|
|
_game_table_link: str
|
|
_active: bool
|
|
_version: int
|
|
_docker_id: str
|
|
_created: bool
|
|
_updated: bool
|
|
_delete: bool
|
|
|
|
def __init__(
|
|
self,
|
|
game_table_id: int,
|
|
game_table_name: str,
|
|
game_table_link: str,
|
|
active: bool,
|
|
version: int,
|
|
docker_id: int,
|
|
created: bool = False,
|
|
updated: bool = False,
|
|
delete: bool = False,
|
|
):
|
|
self._game_table_id = game_table_id
|
|
self._game_table_name = game_table_name
|
|
self._game_table_link = game_table_link
|
|
self._active = active
|
|
self._version = version
|
|
self._docker_id = docker_id
|
|
self._created = created
|
|
self._updated = updated
|
|
self._delete = delete
|
|
|
|
def toJson(self):
|
|
return {
|
|
"id": self._game_table_id,
|
|
"table_name": self._game_table_name,
|
|
"table_link": self._game_table_link,
|
|
"version": self._version,
|
|
"active": self._active,
|
|
}
|
|
|
|
def commit(self, cursor):
|
|
if not self._created:
|
|
|
|
self._game_table_id = cursor.execute("""SELECT MAX(game_table_id) + 1 FROM game_tables""").fetchone()[0]
|
|
|
|
cursor.execute(
|
|
"""INSERT INTO game_tables
|
|
(game_table_id, game_table_name, game_table_link, version, active, docker_id)
|
|
VALUES (?, ?, ?, ?, ?, ?)""",
|
|
(
|
|
self._game_table_id,
|
|
self._game_table_name,
|
|
self._game_table_link,
|
|
self._version,
|
|
self._active,
|
|
self._docker_id,
|
|
),
|
|
)
|
|
self._created = True
|
|
self._updated = True
|
|
return
|
|
if not self._updated:
|
|
cursor.execute(
|
|
"""UPDATE game_tables
|
|
SET game_table_name = ?, game_table_link = ?, version = ?, active = ?, docker_id = ?
|
|
WHERE game_table_id = ?""",
|
|
(
|
|
self._game_table_name,
|
|
self._game_table_link,
|
|
self._version,
|
|
self._active,
|
|
self._docker_id,
|
|
self._game_table_id,
|
|
),
|
|
)
|
|
self._updated = True
|
|
return
|
|
if self._delete:
|
|
cursor.execute(
|
|
"DELETE FROM game_tables WHERE game_table_id = ?",
|
|
(self._game_table_id,),
|
|
)
|
|
self._created = False
|
|
self._updated = True
|
|
self._delete = False
|
|
|
|
def delete(self):
|
|
if not self._created:
|
|
raise GameTableException("Cannot delete a table if it is not created.")
|
|
if not self._updated:
|
|
raise GameTableException("Cannot delete a table if it is dirty.")
|
|
self._delete = True
|
|
|
|
@property
|
|
def game_table_id(self):
|
|
return self._game_table_id
|
|
|
|
@game_table_id.setter
|
|
def set_game_table_id(self, game_table_id: int):
|
|
self._updated = False
|
|
self._game_table_id = game_table_id
|
|
|
|
@property
|
|
def game_table_name(self):
|
|
return self._game_table_name
|
|
|
|
@game_table_name.setter
|
|
def game_table_name(self, game_table_name: str):
|
|
self._updated = False
|
|
self._game_table_name = game_table_name
|
|
|
|
@property
|
|
def game_table_link(self):
|
|
return self._game_table_link
|
|
|
|
@game_table_link.setter
|
|
def game_table_link(self, game_table_link):
|
|
self._updated = False
|
|
self._game_table_link = game_table_link
|
|
|
|
@property
|
|
def version(self):
|
|
return self._version
|
|
|
|
@version.setter
|
|
def version(self, version: int):
|
|
self._updated = False
|
|
self._version = version
|
|
|
|
@property
|
|
def active(self):
|
|
return self._active
|
|
|
|
@active.setter
|
|
def active(self, active: bool):
|
|
self._updated = False
|
|
self._active = active
|
|
|
|
@property
|
|
def docker_id(self):
|
|
return self._docker_id
|
|
|
|
@docker_id.setter
|
|
def docker_id(self, docker_id: int):
|
|
self._upadted = False
|
|
self._docker_id = docker_id
|
|
|
|
|
|
class GameService:
|
|
connection: Connection
|
|
|
|
def __init__(self, connection: Connection):
|
|
self.connection = connection
|
|
|
|
def read_by_id(self, game_table_id, cursor=None):
|
|
with SmartCursor(cursor, self.connection) as smartCursor:
|
|
rows = smartCursor.execute(
|
|
"""SELECT game_table_id, game_table_name, game_table_link, active, version, docker_id
|
|
FROM game_tables
|
|
WHERE game_table_id = ?""",
|
|
(game_table_id,),
|
|
).fetchone()
|
|
|
|
if len(rows) == 0:
|
|
return None
|
|
|
|
return GameTable(
|
|
game_table_id=rows[0],
|
|
game_table_name=rows[1],
|
|
game_table_link=rows[2],
|
|
active=rows[3],
|
|
version=rows[4],
|
|
docker_id=rows[5],
|
|
created=True,
|
|
updated=True,
|
|
delete=False,
|
|
)
|
|
|
|
def read_all(self, cursor=None):
|
|
with SmartCursor(cursor, self.connection) as smartCursor:
|
|
rows = smartCursor.execute(
|
|
"SELECT game_table_id, game_table_name, game_table_link, active, version, docker_id FROM game_tables"
|
|
).fetchall()
|
|
return [
|
|
GameTable(
|
|
game_table_id=row[0],
|
|
game_table_name=row[1],
|
|
game_table_link=row[2],
|
|
active=row[3],
|
|
version=row[4],
|
|
docker_id=row[5],
|
|
created=True,
|
|
updated=True,
|
|
delete=False,
|
|
)
|
|
for row in rows
|
|
]
|
|
|
|
def read_active(self, cursor=None):
|
|
with SmartCursor(cursor, self.connection) as smartCursor:
|
|
rows = smartCursor.execute(
|
|
"SELECT game_table_id, game_table_name, game_table_link, active, version, docker_id FROM game_tables WHERE active != 0"
|
|
).fetchall()
|
|
return [
|
|
GameTable(
|
|
game_table_id=row[0],
|
|
game_table_name=row[1],
|
|
game_table_link=row[2],
|
|
active=row[3],
|
|
version=row[4],
|
|
docker_id=row[5],
|
|
created=True,
|
|
updated=True,
|
|
delete=False,
|
|
)
|
|
for row in rows
|
|
]
|