From 63e87a3ed84ee9e9e4a4ff329a40d2b7ce5e5d0d Mon Sep 17 00:00:00 2001 From: l3wdfut4pwr Date: Sat, 4 Apr 2026 00:03:04 +0300 Subject: add profile --- app/routes/__init__.py | 3 ++- app/routes/register.py | 28 +++++++++++++++++++++++++++- app/routes/user.py | 21 +++++++++++++++++++++ 3 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 app/routes/user.py (limited to 'app/routes') diff --git a/app/routes/__init__.py b/app/routes/__init__.py index 383ef66..a57869a 100644 --- a/app/routes/__init__.py +++ b/app/routes/__init__.py @@ -3,10 +3,11 @@ from fastapi import APIRouter from .auth import router as auth_router from .me import router as me_router from .register import router as register_router +from .user import router as user_router router = APIRouter() router.include_router(register_router, prefix="/auth") router.include_router(auth_router, prefix="/auth") - +router.include_router(user_router) router.include_router(me_router) diff --git a/app/routes/register.py b/app/routes/register.py index ffcd336..779cf73 100644 --- a/app/routes/register.py +++ b/app/routes/register.py @@ -4,8 +4,10 @@ from typing import Optional from fastapi import APIRouter, Depends, HTTPException, Response from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.future import select +from sqlalchemy.orm import selectinload from app.auth.jwt import create_access_token, create_refresh_token +from app.models.profile import Profile from app.models.user import User from app.schemas.user import UserCreate, UserRead from app.utils.db import get_async_session @@ -69,8 +71,32 @@ async def register_user( new_user = User(username=user.username, email=email, password=hashed_password) session.add(new_user) + await session.flush() + + new_profile = Profile(user_id=new_user.id) + session.add(new_profile) + + from app.models.integrations import UserIntegration + + new_integrations = UserIntegration(user_id=new_user.id) + session.add(new_integrations) + await session.commit() - await session.refresh(new_user) + + result = await session.execute( + select(User) + .options( + selectinload(User.profile), + selectinload(User.integrations), + ) + .where(User.id == new_user.id) + ) + new_user = result.scalars().first() + + result = await session.execute( + select(User).options(selectinload(User.profile)).where(User.id == new_user.id) + ) + new_user = result.scalars().first() logger.success( "User successfully registered | id={} username={} email={}", diff --git a/app/routes/user.py b/app/routes/user.py new file mode 100644 index 0000000..0860cc1 --- /dev/null +++ b/app/routes/user.py @@ -0,0 +1,21 @@ +from fastapi import APIRouter, Depends, HTTPException +from sqlalchemy.ext.asyncio import AsyncSession + +from app.models.user import User +from app.schemas.user import UserRead +from app.utils.db import get_async_session + +router = APIRouter(prefix="/users", tags=["users"]) + + +@router.get("/{username}", response_model=UserRead) +async def get_user( + username: str, + session: AsyncSession = Depends(get_async_session), +): + user = await User.get_user_by_username(username, session=session) + + if not user: + raise HTTPException(status_code=404, detail="User not found") + + return user -- cgit v1.3-3-g829e