From 7118bb2c5bfcd6a9e8c72aae5efdf9f96beab65e Mon Sep 17 00:00:00 2001 From: tylen Date: Thu, 11 Sep 2025 23:55:18 +0300 Subject: [PATCH] backend: add db initializer logic - Add some logging to DB Client Create a db initializer #4 --- backend/Dockerfile | 15 +++++++-- backend/docker-compose.yaml | 2 -- backend/src/db_client.py | 62 +++++++++++++++++++++++++++++++------ backend/src/server.py | 2 +- 4 files changed, 66 insertions(+), 15 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 07ad0f5..841877e 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,10 +1,19 @@ FROM python:3.13-slim-bookworm +# Set the PYTHONPATH environment variable ENV PYTHONPATH=/usr/local/lib -COPY . /app +# Set the working directory WORKDIR /app -RUN pip3 install -r requirements.txt +# Copy only the requirements file first +COPY requirements.txt requirements.txt -CMD ["/bin/sh", "entrypoint.sh"] \ No newline at end of file +# Install dependencies +RUN pip3 install --no-cache-dir -r requirements.txt + +# Copy the rest of the application code +COPY . . + +# Set the command to run your application +CMD ["/bin/sh", "entrypoint.sh"] diff --git a/backend/docker-compose.yaml b/backend/docker-compose.yaml index d9ca187..93cc26d 100644 --- a/backend/docker-compose.yaml +++ b/backend/docker-compose.yaml @@ -1,5 +1,3 @@ -version: '3.8' - services: backend: build: diff --git a/backend/src/db_client.py b/backend/src/db_client.py index 348499a..95f7540 100644 --- a/backend/src/db_client.py +++ b/backend/src/db_client.py @@ -6,9 +6,39 @@ db_client.py is the module for managing teh Dungeon's database services. ''' +from enum import Enum +import sys import mysql.connector import os +STARTUP_TABLE_CREATION_QUERIES = { + "users": """CREATE TABLE IF NOT EXISTS users ( + Name varchar(255), + Attendance varchar(255), + HasCar bool + );""", + "car": """CREATE TABLE IF NOT EXISTS car ( + Name varchar(255), + Car varchar(255), + FreeCarSpaces tinyint(1) + );""", + "food": """CREATE TABLE IF NOT EXISTS food ( + Name varchar(255), + Suggestion varchar(2048) + );""", + "passengers": """CREATE TABLE IF NOT EXISTS passengers ( + Name varchar(255), + Car varchar(255) + );""", +} + + +class Severity(Enum): + INFO = "INFO" + WARNING = "WARNING" + ERROR = "ERROR" + + class DBClient: def __init__(self): self.db_server = os.environ.get('DB_SERVER') @@ -18,13 +48,13 @@ class DBClient: self.database = os.environ.get('DB_NAME') if not self.db_server: - raise ValueError("Environment variable 'DB_SERVER' is not set.") + self.error("Environment variable 'DB_SERVER' is not set.") if not self.db_port: - raise ValueError("Environment variable 'DB_PORT' is not set.") + self.error("Environment variable 'DB_PORT' is not set.") if not self.password: - raise ValueError("Environment variable 'ROOT_PWD' is not set.") + self.error("Environment variable 'ROOT_PWD' is not set.") if not self.database: - raise ValueError("Environment variable 'DB_NAME' is not set.") + self.error("Environment variable 'DB_NAME' is not set.") self.connection = mysql.connector.connect( host=self.db_server, @@ -47,13 +77,13 @@ class DBClient: def initialize_database(self): self.create_database(self.database) self.switch_database(self.database) - self.query("""CREATE TABLE IF NOT EXISTS users ( - Name varchar(255), - Attendance bool, - HasCar bool - );""") + self.query(STARTUP_TABLE_CREATION_QUERIES['users']) + self.query(STARTUP_TABLE_CREATION_QUERIES['car']) + self.query(STARTUP_TABLE_CREATION_QUERIES['food']) + self.query(STARTUP_TABLE_CREATION_QUERIES['passengers']) def query(self, query_str, quiet=False): + self.info(f'Executing query: {query_str}') self.cursor.execute(query_str) if quiet: return [] @@ -62,4 +92,18 @@ class DBClient: def close(self): self.cursor.close() self.connection.close() + + def info(self, message): + self.message(severity=Severity.INFO, message=message) + + + def warning(self, message): + self.message(severity=Severity.WARNING, message=message) + + def error(self, message): + self.message(severity=Severity.ERROR, message=message) + sys.exit(1) + + def message(self, severity, message): + print(f'DBClient [{severity.value}]: {message}') diff --git a/backend/src/server.py b/backend/src/server.py index 7493622..4b3dfd8 100644 --- a/backend/src/server.py +++ b/backend/src/server.py @@ -16,7 +16,7 @@ database = DBClient() @app.route('/login', methods=['POST']) def login(): if request.is_json: - return request.json, 200 + return jsonify({"hello": "user"}), 200 else: return jsonify({'error': 'Request must contain JSON data'}), 400