From f66fd0e2aa961ad01c805ffcd18d828b42e6766a Mon Sep 17 00:00:00 2001 From: programador3 Date: Tue, 25 Mar 2025 14:16:49 -0500 Subject: [PATCH] first commit --- .idea/.gitignore | 3 ++ .../inspectionProfiles/profiles_settings.xml | 6 ++++ .idea/misc.xml | 7 +++++ .idea/modules.xml | 8 ++++++ .idea/programador3.iml | 8 ++++++ .idea/vcs.xml | 6 ++++ core/domain/user.py | 21 ++++++++++++++ infrastructure/adapters/contracts/product.py | 8 ++++++ infrastructure/adapters/contracts/user.py | 8 ++++++ .../adapters/repositories/repositories.py | 0 infrastructure/dependencies/dependencies.py | 28 +++++++++++++++++++ infrastructure/entrypoints/routes/routes.py | 17 +++++++++++ requirements.txt | 8 ++++++ 13 files changed, 128 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/programador3.iml create mode 100644 .idea/vcs.xml create mode 100644 core/domain/user.py create mode 100644 infrastructure/adapters/contracts/product.py create mode 100644 infrastructure/adapters/contracts/user.py create mode 100644 infrastructure/adapters/repositories/repositories.py create mode 100644 infrastructure/dependencies/dependencies.py create mode 100644 infrastructure/entrypoints/routes/routes.py create mode 100644 requirements.txt diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..1d3ce46 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..7e29c6a --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/programador3.iml b/.idea/programador3.iml new file mode 100644 index 0000000..d8b3f6c --- /dev/null +++ b/.idea/programador3.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/core/domain/user.py b/core/domain/user.py new file mode 100644 index 0000000..e8949a3 --- /dev/null +++ b/core/domain/user.py @@ -0,0 +1,21 @@ +from sqlalchemy import Column, Integer, String + +class User(Base): + __tablename__ = 'usuario' + id = Column(Integer, primary_key=True, index=True) + username = Column(String(20)) + nombre = Column(String(20)) + rol = Column(String(20)) + + class Config: + orm_mode = True + +class Producto(Base): + __tablename__ = 'producto' + id = Column(Integer, primary_key=True, index=True) + price = Column(float()) + nombre = Column(String(20)) + rol = Column(String(20)) + + class Config: + orm_mode = True diff --git a/infrastructure/adapters/contracts/product.py b/infrastructure/adapters/contracts/product.py new file mode 100644 index 0000000..f95b50d --- /dev/null +++ b/infrastructure/adapters/contracts/product.py @@ -0,0 +1,8 @@ +from pydantic import BaseModel + +class Producto(BaseModel): + id: int + username: str + nombre: str + rol: str + diff --git a/infrastructure/adapters/contracts/user.py b/infrastructure/adapters/contracts/user.py new file mode 100644 index 0000000..642def8 --- /dev/null +++ b/infrastructure/adapters/contracts/user.py @@ -0,0 +1,8 @@ +from pydantic import BaseModel + +class User(BaseModel): + id: int + username: str + nombre: str + rol: str + diff --git a/infrastructure/adapters/repositories/repositories.py b/infrastructure/adapters/repositories/repositories.py new file mode 100644 index 0000000..e69de29 diff --git a/infrastructure/dependencies/dependencies.py b/infrastructure/dependencies/dependencies.py new file mode 100644 index 0000000..33584e5 --- /dev/null +++ b/infrastructure/dependencies/dependencies.py @@ -0,0 +1,28 @@ +import os + +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker, Session +from typing import Generator +from fastapi import Depends + +DB_DATABASE = os.getenv('DB_DATABASE') +DB_USER = os.getenv('DB_USER') +DB_PASSWORD = os.getenv('DB_PASSWORD') +DB_NAME = os.getenv('DB_NAME') +DB_HOST = os.getenv('DB_HOST') +DB_PORT = os.getenv('DB_PORT') +DATABASE = os.getenv('DATABASE') + + +engine = create_engine(f'postgresql+psycopg2://{DB_NAME}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DATABASE}') +SessionLocal = sessionmaker(autocommit = False, autoflush=False, bind = engine) + +def getDb() -> Generator[Session, None, None]: + db: Session = SessionLocal + try: + yield db + finally: + db.close() + +def get_user_repo(db = Depends(getDb())): + return SQLUserRepository() diff --git a/infrastructure/entrypoints/routes/routes.py b/infrastructure/entrypoints/routes/routes.py new file mode 100644 index 0000000..79e4d51 --- /dev/null +++ b/infrastructure/entrypoints/routes/routes.py @@ -0,0 +1,17 @@ +from fastapi import APIRouter, FastAPI +from infrastructure.adapters.contracts.user import User +from infrastructure.adapters.contracts.product import Producto +from core.domain.user import User + + +router = APIRouter() + + +@router.get("/users/", response_model = User) +async def read_users(): + + return [{"username": "Rick"}, {"username": "Morty"}] + +@router.get("/users/", response_model = Producto) +async def read_users(): + return [{"username": "Rick"}, {"username": "Morty"}] \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..9b25bc1 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,8 @@ +psycopg[binary] == 3.2.6 +SQLAlchemy == 2.0.39 +pydantic == 2.10.6 +fastapi == 0.115.12 +uvicorn == 0.34.0 +alembic == 1.15.1 +python-jose == 3.4.0 +