feat(backend): add the db connection

This commit is contained in:
2025-08-20 15:08:30 -04:00
parent 7b64dbe150
commit 8f0dc0d658
13 changed files with 375 additions and 1 deletions

View File

@@ -0,0 +1,3 @@
# database/__init__.py
from .connection import DatabaseConnection
from .repository import Repository

View File

@@ -0,0 +1,24 @@
import sqlite3
from typing import List, Tuple
class DatabaseConnection:
def __init__(self, db_name: str):
self.conn = sqlite3.connect(db_name)
self.cursor = self.conn.cursor()
def close_connection(self):
self.conn.close()
def execute_query(self, query: str, params: Tuple = None):
if params:
self.cursor.execute(query, params)
else:
self.cursor.execute(query)
self.conn.commit()
def execute_query_with_return(self, query: str, params: Tuple = None):
if params:
self.cursor.execute(query, params)
else:
self.cursor.execute(query)
return self.cursor.fetchall()

View File

@@ -0,0 +1,6 @@
# database/models/__init__.py
from .classification import Classification
from .member import Member
from .service_type import ServiceType
from .service import Service
from .service_availability import ServiceAvailability

View File

@@ -0,0 +1,14 @@
from ..connection import DatabaseConnection
class Classification:
def __init__(self, classification_name: str):
self.classification_name = classification_name
def save(self, db: DatabaseConnection):
query = "INSERT INTO Classifications (ClassificationName) VALUES (?)"
db.execute_query(query, (self.classification_name,))
@classmethod
def get_all(cls, db: DatabaseConnection):
query = "SELECT * FROM Classifications"
return db.execute_query_with_return(query)

View File

@@ -0,0 +1,19 @@
from ..connection import DatabaseConnection
class Member:
def __init__(self, first_name: str, last_name: str, email: str, phone_number: str, classification_id: int, notes: str = None):
self.first_name = first_name
self.last_name = last_name
self.email = email
self.phone_number = phone_number
self.classification_id = classification_id
self.notes = notes
def save(self, db: DatabaseConnection):
query = "INSERT INTO Members (FirstName, LastName, Email, PhoneNumber, ClassificationId, Notes) VALUES (?, ?, ?, ?, ?, ?)"
db.execute_query(query, (self.first_name, self.last_name, self.email, self.phone_number, self.classification_id, self.notes))
@classmethod
def get_all(cls, db: DatabaseConnection):
query = "SELECT * FROM Members"
return db.execute_query_with_return(query)

View File

@@ -0,0 +1,15 @@
from ..connection import DatabaseConnection
class Service:
def __init__(self, service_type_id: int, service_date: str):
self.service_type_id = service_type_id
self.service_date = service_date
def save(self, db: DatabaseConnection):
query = "INSERT INTO Services (ServiceTypeId, ServiceDate) VALUES (?, ?)"
db.execute_query(query, (self.service_type_id, self.service_date))
@classmethod
def get_all(cls, db: DatabaseConnection):
query = "SELECT * FROM Services"
return db.execute_query_with_return(query)

View File

@@ -0,0 +1,15 @@
from ..connection import DatabaseConnection
class ServiceAvailability:
def __init__(self, member_id: int, service_type_id: int):
self.member_id = member_id
self.service_type_id = service_type_id
def save(self, db: DatabaseConnection):
query = "INSERT INTO ServiceAvailability (MemberId, ServiceTypeId) VALUES (?, ?)"
db.execute_query(query, (self.member_id, self.service_type_id))
@classmethod
def get_all(cls, db: DatabaseConnection):
query = "SELECT * FROM ServiceAvailability"
return db.execute_query_with_return(query)

View File

@@ -0,0 +1,14 @@
from ..connection import DatabaseConnection
class ServiceType:
def __init__(self, type_name: str):
self.type_name = type_name
def save(self, db: DatabaseConnection):
query = "INSERT INTO ServiceTypes (TypeName) VALUES (?)"
db.execute_query(query, (self.type_name,))
@classmethod
def get_all(cls, db: DatabaseConnection):
query = "SELECT * FROM ServiceTypes"
return db.execute_query_with_return(query)

View File

@@ -0,0 +1,41 @@
from .connection import DatabaseConnection
from .models import Classification, Member, ServiceType, Service, ServiceAvailability
class Repository:
def __init__(self, db: DatabaseConnection):
self.db = db
def create_classification(self, classification_name: str):
classification = Classification(classification_name)
classification.save(self.db)
def create_member(self, first_name: str, last_name: str, email: str, phone_number: str, classification_id: int, notes: str = None):
member = Member(first_name, last_name, email, phone_number, classification_id, notes)
member.save(self.db)
def create_service_type(self, type_name: str):
service_type = ServiceType(type_name)
service_type.save(self.db)
def create_service(self, service_type_id: int, service_date: str):
service = Service(service_type_id, service_date)
service.save(self.db)
def create_service_availability(self, member_id: int, service_type_id: int):
service_availability = ServiceAvailability(member_id, service_type_id)
service_availability.save(self.db)
def get_all_classifications(self):
return Classification.get_all(self.db)
def get_all_members(self):
return Member.get_all(self.db)
def get_all_service_types(self):
return ServiceType.get_all(self.db)
def get_all_services(self):
return Service.get_all(self.db)
def get_all_service_availability(self):
return ServiceAvailability.get_all(self.db)