item-create

This commit is contained in:
Bedir Tuğra Karaabalı 2025-05-08 22:43:42 +03:00
parent 7c35097c88
commit 039b877241
4 changed files with 31 additions and 21 deletions

View File

@ -12,6 +12,11 @@ from sqlalchemy import Integer, DateTime
from sqlalchemy.orm import Session, relationship, mapped_column, Mapped from sqlalchemy.orm import Session, relationship, mapped_column, Mapped
from sqlalchemy.dialects.postgresql import ARRAY from sqlalchemy.dialects.postgresql import ARRAY
from email.message import EmailMessage from email.message import EmailMessage
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from ..items.models import Items
import jwt import jwt
@ -69,10 +74,9 @@ class DBUser(Base):
created_date : Mapped[datetime] = mapped_column(DateTime, default=datetime.now()) #datetime.datetime -> python, DateTime -> sqlalchemy created_date : Mapped[datetime] = mapped_column(DateTime, default=datetime.now()) #datetime.datetime -> python, DateTime -> sqlalchemy
bio : Mapped[str] = mapped_column(default="No bio") bio : Mapped[str] = mapped_column(default="No bio")
follow_users : Mapped[list[int]] = mapped_column(ARRAY(Integer), default=[]) # takip edilen kullanıcılar follow_users : Mapped[list[int]] = mapped_column(ARRAY(Integer), default=[]) # takip edilen kullanıcılar
# -> buralar diğer tablolar ile olan ilişkiler # -> 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")
items : Mapped[list['Items']] = relationship("Items", back_populates="user", cascade="all, delete-orphan", lazy='select') 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( credentials_exception = HTTPException(
status_code=401, status_code=401,
detail="Invalid credentials", detail="Invalid credentials currently",
headers={"WWW-Authenticate": "Bearer"}, headers={"WWW-Authenticate": "Bearer"},
) )
try: try:

View File

@ -30,7 +30,7 @@ class Base(DeclarativeBase):
def init_db(): def init_db():
#Base.metadata.drop_all(engine) # Veritabanını her başlangıcta siler burayada dikkat !!!!!!!! #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) # Session dependency (FastAPI için)
def get_session_db(): def get_session_db():

View File

@ -1,6 +1,5 @@
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
from typing import Annotated from typing import Annotated
from sqlalchemy import DateTime from sqlalchemy import DateTime
from pydantic import BaseModel from pydantic import BaseModel
from fastapi import Depends from fastapi import Depends
@ -9,10 +8,7 @@ from sqlalchemy import ForeignKey, Column, Integer, String, Float
from sqlalchemy.dialects.postgresql import ARRAY from sqlalchemy.dialects.postgresql import ARRAY
from ..config import Base, get_session_db from ..config import Base, get_session_db
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from ..auth.models import Role, Status, UserBase from ..auth.models import Role, Status, UserBase, DBUser
####!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
from ..auth.models import DBUser # -> tam burda bir hata var circle import yaparken karışıyor nasıl çözülecek bilmiyorum
class UserProfileBase(UserBase): class UserProfileBase(UserBase):
@ -28,10 +24,11 @@ class UserProfilePublic(UserProfileBase):
pass pass
class UserProfilePrivate(UserProfilePublic): class UserProfilePrivate(UserProfilePublic):
collection : list[str] | None = None #collection : list[str] | None = None
role : Role | None = None role : Role | None = None
status : Status | None = None status : Status | None = None
follow_user : list[int] | 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 class ItemCreate(BaseItem): # item oluşturma için ekstra bir ihtiyaci olmaz
pass 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İ ##### ##### VERİTABANI MODELİ #####
# Tüm modeller AUTH'da veri tabanına işlendi yukardaki # Tüm modeller AUTH'da veri tabanına işlendi yukardaki
#modeller veri tabanında mevcuttur. Değiştirmek için AUTH'daki #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 #DBUser veritabanındaki nesnedir her niteliğe sahiptir
user = session.query(DBUser).filter(DBUser.username == username).first() user = session.query(DBUser).filter(DBUser.username == username).first()
return user 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() users = session.query(DBUser).all()
return [UserProfilePublic( return [UserProfilePrivate(
username=user.username, username=user.username,
bio=user.bio, bio=user.bio,
created_date=user.created_date, created_date=user.created_date,
items=user.items, items = [Item.model_validate(item) for item in user.items],
collections=user.collections, collections=user.collections,
role=user.role, role=user.role,
status=user.status status=user.status
@ -102,7 +108,6 @@ def add_Item_user(
item_location=item.item_location, item_location=item.item_location,
item_type=item.item_type, item_type=item.item_type,
item_content=item.item_content, item_content=item.item_content,
item_score=item.item_score,
item_created_date=item.item_created_date item_created_date=item.item_created_date
) )

View File

@ -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 fastapi import APIRouter, Depends
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from ..config import get_session_db from ..config import get_session_db
@ -13,7 +13,7 @@ router = APIRouter(
) )
@router.get('/all_profiles') @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) return all_users(session=session)
@ -24,7 +24,7 @@ async def get_user_profile_by_username(
session: Annotated[Session, Depends(get_session_db)], session: Annotated[Session, Depends(get_session_db)],
) -> UserProfilePublic | dict: ) -> UserProfilePublic | dict:
user : UserProfilePublic = is_user_exsist(username, session) user : UserProfilePublic = is_user_exsist_get(username, session)
if user is None: if user is None:
return {"error": "User not found"} return {"error": "User not found"}
@ -32,10 +32,11 @@ async def get_user_profile_by_username(
@router.get('/profile/me') @router.get('/profile/me')
async def get_user_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: ) -> UserProfilePrivate:
return current_user return is_user_exsist_get(current_user.username, session)
@router.post('/create') @router.post('/create')