f1tness_parser/dbapi/repositories.py

76 lines
2.5 KiB
Python

from sqlalchemy import create_engine, insert
from sqlalchemy.engine.base import Engine
from datetime import date
from dbapi.tables import training, exercise, approach
class DatabaseInterfasesMixin:
"""Mixin for interfaces, that works with database"""
def __init__(self, engine: Engine) -> None:
self.engine: Engine = engine
class TrainingRepository(DatabaseInterfasesMixin):
"""Training table repository"""
def create_training(self, date: date) -> int:
"""Method for creating new instance of training
Args:
date: date of a training
Returns:
Primary key of created training entry
"""
new_instance_statement = insert(training).values(Date=date)
with self.engine.connect() as conn:
result = conn.execute(new_instance_statement)
inerted_entry_pk: int = result.inserted_primary_key[0]
conn.commit()
return inerted_entry_pk
class ExerciseRepository(DatabaseInterfasesMixin):
"""Exercise table repository"""
def create_exercise(self, training_pk: int, exercise_name: str) -> int:
"""Method for creating new instance of exercise table
Args:
training_pk: Primary key of associated training instance
exercise_name: Name of an exercise
Returns:
Primary key of created exercise entry
"""
new_instance_statement = insert(exercise).values(
Training=training_pk, Name=exercise_name
)
with self.engine.connect() as conn:
result = conn.execute(new_instance_statement)
inserted_entry_pk: int = result.inserted_primary_key[0]
conn.commit()
return inserted_entry_pk
class ApproachRepository(DatabaseInterfasesMixin):
"""Approach table repository"""
def create_approach(self, exercise_pk: int, weight: float, reps: int) -> int:
"""Method for creating new instance of approach table
Args:
exercise_pk: Primary key of an associated exercise
weight: Approach weight
reps: Amount of reps in approach
Returns:
Primary key of created exercise entry
"""
new_instance_statement = insert(approach).values(
Exercise=exercise_pk, Weight=weight, Reps=reps
)
with self.engine.connect() as conn:
result = conn.execute(new_instance_statement)
inserted_entry_pk: int = result.inserted_primary_key[0]
conn.commit()
return inserted_entry_pk