diff --git a/backend/configuration/__init__.py b/backend/configuration/__init__.py index e69de29..dbfabf6 100644 --- a/backend/configuration/__init__.py +++ b/backend/configuration/__init__.py @@ -0,0 +1,18 @@ +from typing import Annotated + +from fastapi.params import Depends +from sqlalchemy import create_engine +from sqlalchemy.ext.asyncio import AsyncSession +from sqlalchemy.orm import Session +import os + + +DB_URL = os.environ['DB_URL_CONFIG'] + +session_engine = create_engine(DB_URL) + +def get_db_session(): + with Session(session_engine) as session: + yield session + +DBSessionDep = Annotated[AsyncSession, Depends(get_db_session)] \ No newline at end of file diff --git a/backend/controllers/users.py b/backend/controllers/users.py new file mode 100644 index 0000000..6ab86fc --- /dev/null +++ b/backend/controllers/users.py @@ -0,0 +1,33 @@ +from fastapi import APIRouter, HTTPException +from models.users import User +from configuration import DBSessionDep + +router = APIRouter(prefix="/api") + +@router.get("/users") +def get_users(session: DBSessionDep): + resultado = session.query(User).order_by(User.last_visit_date.desc()).limit(10).all() + if resultado == []: + return 'Usuário não encontrado' + else: + return resultado + +@router.get("/search-user") +def search_user(query: str, db: DBSessionDep): + user = db.query(User).filter( + (User.name.ilike(f"%{query}%")) | + (User.email.ilike(f"%{query}%")) | + (User.username.ilike(f"%{query}%")) + ).all() + + if not user: + raise HTTPException(status_code=404, detail="Usuário não encontrado") + + return user + +# @router.get("/study-track-access-log") +# def get_study_track_access_log(session: DBSessionDep): +# if resultado == []: +# return 'Nenhum registro encontrado' +# else: +# return resultado \ No newline at end of file diff --git a/backend/main.py b/backend/main.py index e69de29..c38584b 100644 --- a/backend/main.py +++ b/backend/main.py @@ -0,0 +1,15 @@ +from fastapi import FastAPI +from fastapi.middleware.cors import CORSMiddleware +from controllers import users + +app = FastAPI() + +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_methods=["*"], + allow_headers=["*"] +) + + +app.include_router(users.router) \ No newline at end of file diff --git a/backend/models/users.py b/backend/models/users.py new file mode 100644 index 0000000..7b64c25 --- /dev/null +++ b/backend/models/users.py @@ -0,0 +1,17 @@ +from sqlalchemy import String, DateTime, Integer +from sqlalchemy.orm import Mapped, mapped_column, DeclarativeBase + +class Base(DeclarativeBase): + pass + +class User(Base): + __tablename__ = "users" + + id: Mapped[int] = mapped_column(primary_key=True) + name: Mapped[str] = mapped_column(String(255),nullable=False) + username: Mapped[str] = mapped_column(String(150),nullable=False) + register_date: Mapped[DateTime] = mapped_column(DateTime, nullable=False) + last_visit_date: Mapped[DateTime] = mapped_column(DateTime, nullable=True) + email: Mapped[str] = mapped_column(String(255),nullable=False) + password: Mapped[str] = mapped_column(String(100),nullable=False) + block: Mapped[str] = mapped_column(Integer,nullable=False) diff --git a/backend/requirements.txt b/backend/requirements.txt index e69de29..5ab2a9c 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -0,0 +1 @@ +sqlalchemy>=2.0.0