diff --git a/src/database/init/schema.sql b/src/database/init/schema.sql index f9b0733..2a4d78c 100644 --- a/src/database/init/schema.sql +++ b/src/database/init/schema.sql @@ -1,6 +1,6 @@ CREATE TABLE users ( id INTEGER PRIMARY KEY AUTOINCREMENT, - person_name TEXT NOT NULL, + name TEXT NOT NULL, age INTEGER, height REAL ); \ No newline at end of file diff --git a/src/main/routes/user_route.py b/src/main/routes/user_route.py index a62c7f6..715a050 100644 --- a/src/main/routes/user_route.py +++ b/src/main/routes/user_route.py @@ -6,5 +6,4 @@ # Route to register a new user @user_routes_bp.route("/user", methods=["POST"]) def registry_user(): - # TODO: Implement registration logic and components return jsonify({"route": "User registration route"}), 200 diff --git a/src/models/connection/base.py b/src/models/connection/base.py new file mode 100644 index 0000000..5bec245 --- /dev/null +++ b/src/models/connection/base.py @@ -0,0 +1,3 @@ +from sqlalchemy.orm import declarative_base +Base = declarative_base() + diff --git a/src/models/connection/db_connection_handle.py b/src/models/connection/db_connection_handler.py similarity index 76% rename from src/models/connection/db_connection_handle.py rename to src/models/connection/db_connection_handler.py index dd83356..6ac4b0c 100644 --- a/src/models/connection/db_connection_handle.py +++ b/src/models/connection/db_connection_handler.py @@ -1,9 +1,9 @@ from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker -class DbCoonectionHandle: +class DbConnectionHandler: def __init__(self): - self.__connection_string = "sqlite:///schema.db" + self.__connection_string = "sqlite:///src/database/schema.db" self.__engine = self.__create_database_engine() self.session = None @@ -12,7 +12,7 @@ def __create_database_engine(self): return engine def __enter__(self): - session_make = sessionmaker() + session_make = sessionmaker(bind=self.__engine) self.session = session_make() return self diff --git a/src/models/connection/db_connection_handler_test.py b/src/models/connection/db_connection_handler_test.py new file mode 100644 index 0000000..5d5f453 --- /dev/null +++ b/src/models/connection/db_connection_handler_test.py @@ -0,0 +1,12 @@ +import pytest +from .db_connection_handler import DbConnectionHandler + +#@pytest.mark.skip(reason="Integration with DB") +def test_db_connection_handler(): + db_conn_handler = DbConnectionHandler() + + assert db_conn_handler.session is None + + with db_conn_handler: + print(db_conn_handler.session) + assert db_conn_handler.session is not None \ No newline at end of file diff --git a/src/models/entities/__init__.py b/src/models/entities/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/models/entities/users.py b/src/models/entities/users.py new file mode 100644 index 0000000..d0d7e03 --- /dev/null +++ b/src/models/entities/users.py @@ -0,0 +1,16 @@ +# pylint: disable=R0903 + +from sqlalchemy import Column, String, Integer, Float +from src.models.connection.base import Base + +class Users(Base): + __tablename__="users" + + id = Column(Integer, primary_key=True, autoincrement=True) + name = Column(String, nullable=False) + age = Column(Integer) + height = Column(Float) + + def __repr__(self): + return f"Users [id={self.id}, name{self.name}]" + \ No newline at end of file diff --git a/src/models/repositories/__init__.py b/src/models/repositories/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/models/repositories/users_repository.py b/src/models/repositories/users_repository.py new file mode 100644 index 0000000..1e97646 --- /dev/null +++ b/src/models/repositories/users_repository.py @@ -0,0 +1,29 @@ +from src.models.connection.db_connection_handler import DbConnectionHandler +from src.models.entities.users import Users +class UsersRepository: + def __init__(self, db_conn_handler: DbConnectionHandler): + self.__db_conn_handler = db_conn_handler + + def insert_user(self, name: str, age: int, height: float) -> None: + with self.__db_conn_handler as database: + try: + new_user = Users( + name=name, + age=age, + height=height + ) + database.session.add(new_user) + database.session.commit() + except Exception as exception: + database.session.rollback() + raise exception + + def select_user(self, name: str) -> list[Users]: + with self.__db_conn_handler as database: + users = ( + database.session + .query(Users) + .filter(Users.name == name) + .all() + ) + return users \ No newline at end of file diff --git a/src/models/repositories/users_repository_test.py b/src/models/repositories/users_repository_test.py new file mode 100644 index 0000000..b76a2a3 --- /dev/null +++ b/src/models/repositories/users_repository_test.py @@ -0,0 +1,21 @@ +import pytest +from src.models.connection.db_connection_handler import DbConnectionHandler +from .users_repository import UsersRepository + +@pytest.mark.skip(reason="Insert in DB") +def test_users_repository(): + db_conn = DbConnectionHandler() + users_repo = UsersRepository(db_conn) + + name = "Test name" + age = 100 + height = 1.85 + + users_repo.insert_user(name, age, height) + users = users_repo.select_user(name) + + assert isinstance(users, list) + assert len(users) >= 1 + assert users[0].name == name + assert users[0].age == age + assert users[0].height == height