Refactor Database to its own folder

This commit is contained in:
Esa Kataja
2024-11-09 16:50:39 +02:00
parent 1243d61164
commit e1acb062ae
5 changed files with 50 additions and 48 deletions
+2 -2
View File
@@ -2,8 +2,8 @@ from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
from routes import admin_router, score_router, user_router, card_router, movie_router from routes import admin_router, score_router, user_router, card_router, movie_router
from models import *
from lib.database import init_db from lib.database.database import init_db
origins = [ origins = [
+46
View File
@@ -0,0 +1,46 @@
from contextlib import contextmanager
import duckdb
import bcrypt
from rich import print
from lib import settings
from models.user import UserIn, UserOut
@contextmanager
def get_db():
try:
conn = duckdb.connect(database=settings.db_url)
yield conn
finally:
conn.close()
def db_run(sql):
with get_db() as conn:
conn.execute(sql)
def init_db():
if settings.db_url.exists():
# TODO: Development feature. Remove this in production
from os import unlink
unlink(settings.db_url)
# return
sql = ""
with open("lib/database/database.sql") as f:
sql = f.read()
db_run(sql)
# Initialize default user
hashed_password = bcrypt.hashpw("password".encode("utf-8"), bcrypt.gensalt())
sql = f"INSERT INTO users (username, password, is_admin) VALUES ('admin', '{hashed_password.decode('utf-8')}', true)"
db_run(sql)
sql = f"INSERT INTO users (username, password, is_admin) VALUES ('test', '{hashed_password.decode('utf-8')}', false)"
db_run(sql)
@@ -1,49 +1,5 @@
from contextlib import contextmanager
import duckdb
import bcrypt
from rich import print
from lib import settings
from models.user import UserIn, UserOut from models.user import UserIn, UserOut
from lib.database.database import get_db
@contextmanager
def get_db():
try:
conn = duckdb.connect(database=settings.db_url)
yield conn
finally:
conn.close()
def db_run(sql):
with get_db() as conn:
conn.execute(sql)
def init_db():
if settings.db_url.exists():
# TODO: Development feature. Remove this in production
from os import unlink
unlink(settings.db_url)
# return
sql = ""
with open("lib/database.sql") as f:
sql = f.read()
db_run(sql)
# Initialize default user
hashed_password = bcrypt.hashpw("password".encode("utf-8"), bcrypt.gensalt())
sql = f"INSERT INTO users (username, password, is_admin) VALUES ('admin', '{hashed_password.decode('utf-8')}', true)"
db_run(sql)
sql = f"INSERT INTO users (username, password, is_admin) VALUES ('test', '{hashed_password.decode('utf-8')}', false)"
db_run(sql)
def get_user_by_username(username) -> UserIn | None: def get_user_by_username(username) -> UserIn | None:
+1 -1
View File
@@ -3,7 +3,7 @@ import bcrypt
from models.user import UserIn, UserOut, UserCredentials from models.user import UserIn, UserOut, UserCredentials
from models.general import Message from models.general import Message
from lib.database import get_all_users, get_user_by_username from lib.database.user import get_all_users, get_user_by_username
router = APIRouter( router = APIRouter(