backend: add db initializer logic
- Add some logging to DB Client Create a db initializer #4
This commit is contained in:
parent
6d7ce9b8db
commit
7118bb2c5b
@ -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
|
||||
|
||||
# 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"]
|
||||
@ -1,5 +1,3 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
backend:
|
||||
build:
|
||||
|
||||
@ -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 []
|
||||
@ -63,3 +93,17 @@ class DBClient:
|
||||
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}')
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user