From 039b8772419ac5efc6bd42bf4c4583edd0760905 Mon Sep 17 00:00:00 2001 From: bdrtr Date: Thu, 8 May 2025 22:43:42 +0300 Subject: [PATCH] item-create --- auth/models.py | 12 ++++++++---- config.py | 2 +- items/models.py | 27 ++++++++++++++++----------- items/router.py | 11 ++++++----- 4 files changed, 31 insertions(+), 21 deletions(-) diff --git a/auth/models.py b/auth/models.py index 6305dcc..d231622 100644 --- a/auth/models.py +++ b/auth/models.py @@ -12,6 +12,11 @@ from sqlalchemy import Integer, DateTime from sqlalchemy.orm import Session, relationship, mapped_column, Mapped from sqlalchemy.dialects.postgresql import ARRAY from email.message import EmailMessage +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from ..items.models import Items + import jwt @@ -69,10 +74,9 @@ class DBUser(Base): created_date : Mapped[datetime] = mapped_column(DateTime, default=datetime.now()) #datetime.datetime -> python, DateTime -> sqlalchemy bio : Mapped[str] = mapped_column(default="No bio") follow_users : Mapped[list[int]] = mapped_column(ARRAY(Integer), default=[]) # takip edilen kullanıcılar - # -> buralar diğer tablolar ile olan ilişkiler - from ..items.models import Items - items : Mapped[list['Items']] = relationship("Items", back_populates="user", cascade="all, delete-orphan", lazy='select') + items : Mapped[list['Items']] = relationship("Items", back_populates="user", cascade="all, delete-orphan") + collections : Mapped[int] = mapped_column(default=0) # hat vermesin diye eklendi collections aktif değil @@ -128,7 +132,7 @@ async def get_current_user( credentials_exception = HTTPException( status_code=401, - detail="Invalid credentials", + detail="Invalid credentials currently", headers={"WWW-Authenticate": "Bearer"}, ) try: diff --git a/config.py b/config.py index 40dc1d9..7137b4c 100644 --- a/config.py +++ b/config.py @@ -30,7 +30,7 @@ class Base(DeclarativeBase): def init_db(): #Base.metadata.drop_all(engine) # Veritabanını her başlangıcta siler burayada dikkat !!!!!!!! - Base.metadata.create_all(bind=engine) + Base.metadata.create_all(bind=engine) # Veritabanını oluşturur # Session dependency (FastAPI için) def get_session_db(): diff --git a/items/models.py b/items/models.py index 220ba7d..40aec27 100644 --- a/items/models.py +++ b/items/models.py @@ -1,6 +1,5 @@ from datetime import datetime, timedelta, timezone from typing import Annotated - from sqlalchemy import DateTime from pydantic import BaseModel from fastapi import Depends @@ -9,10 +8,7 @@ from sqlalchemy import ForeignKey, Column, Integer, String, Float from sqlalchemy.dialects.postgresql import ARRAY from ..config import Base, get_session_db from typing import TYPE_CHECKING -from ..auth.models import Role, Status, UserBase - -####!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -from ..auth.models import DBUser # -> tam burda bir hata var circle import yaparken karışıyor nasıl çözülecek bilmiyorum +from ..auth.models import Role, Status, UserBase, DBUser class UserProfileBase(UserBase): @@ -28,10 +24,11 @@ class UserProfilePublic(UserProfileBase): pass class UserProfilePrivate(UserProfilePublic): - collection : list[str] | None = None + #collection : list[str] | None = None role : Role | None = None status : Status | None = None follow_user : list[int] | None = None + items : list['Item'] | None = None @@ -46,6 +43,15 @@ class BaseItem(BaseModel): class ItemCreate(BaseItem): # item oluşturma için ekstra bir ihtiyaci olmaz pass + +class Item(BaseItem): + item_id : int | None = None + user_id : int | None = None + item_score : float | None = None + + class Config: + from_attributes = True #sqlalchemy ile pydantic arasında geçiş yapabilmek için kullanılır + ##### VERİTABANI MODELİ ##### # Tüm modeller AUTH'da veri tabanına işlendi yukardaki #modeller veri tabanında mevcuttur. Değiştirmek için AUTH'daki @@ -71,20 +77,20 @@ class Items(Base): ''' ''' -def is_user_exsist(username : str, session : Annotated[Session, Depends(get_session_db)]) -> bool | UserProfilePublic: +def is_user_exsist_get(username : str, session : Annotated[Session, Depends(get_session_db)]) -> bool | UserProfilePrivate: #DBUser veritabanındaki nesnedir her niteliğe sahiptir user = session.query(DBUser).filter(DBUser.username == username).first() return user -def all_users(session: Annotated[Session, Depends(get_session_db)]) -> list[UserProfilePublic]: +def all_users(session: Annotated[Session, Depends(get_session_db)]) -> list[UserProfilePrivate]: users = session.query(DBUser).all() - return [UserProfilePublic( + return [UserProfilePrivate( username=user.username, bio=user.bio, created_date=user.created_date, - items=user.items, + items = [Item.model_validate(item) for item in user.items], collections=user.collections, role=user.role, status=user.status @@ -102,7 +108,6 @@ def add_Item_user( item_location=item.item_location, item_type=item.item_type, item_content=item.item_content, - item_score=item.item_score, item_created_date=item.item_created_date ) diff --git a/items/router.py b/items/router.py index f2e4718..d570b30 100644 --- a/items/router.py +++ b/items/router.py @@ -1,4 +1,4 @@ -from .models import ItemCreate, UserProfileBase, UserProfileID, UserProfilePrivate, UserProfilePublic, add_Item_user, all_users, is_user_exsist +from .models import ItemCreate, UserProfileBase, UserProfileID, UserProfilePrivate, UserProfilePublic, add_Item_user, all_users, is_user_exsist_get from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from ..config import get_session_db @@ -13,7 +13,7 @@ router = APIRouter( ) @router.get('/all_profiles') -async def get_user_profile(session: Annotated[Session, Depends(get_session_db)]) -> list[UserProfilePublic]: +async def get_user_profile(session: Annotated[Session, Depends(get_session_db)]) -> list[UserProfilePrivate]: return all_users(session=session) @@ -24,7 +24,7 @@ async def get_user_profile_by_username( session: Annotated[Session, Depends(get_session_db)], ) -> UserProfilePublic | dict: - user : UserProfilePublic = is_user_exsist(username, session) + user : UserProfilePublic = is_user_exsist_get(username, session) if user is None: return {"error": "User not found"} @@ -32,10 +32,11 @@ async def get_user_profile_by_username( @router.get('/profile/me') async def get_user_profile_me( - current_user: Annotated[UserProfilePrivate, Depends(get_current_active_user)] #dependtek kaynaklı UserPublic doner + current_user: Annotated[UserProfilePrivate, Depends(get_current_active_user)], + session : Annotated[Session, Depends(get_session_db)], #dependtek kaynaklı UserPublic doner ) -> UserProfilePrivate: - return current_user + return is_user_exsist_get(current_user.username, session) @router.post('/create')