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.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:

View File

@ -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():

View File

@ -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
)

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 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')