from datetime import datetime, timedelta, timezone from typing import Annotated from sqlalchemy import DateTime from pydantic import BaseModel from fastapi import Depends from sqlalchemy.orm import Session, relationship, mapped_column, Mapped 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 class UserProfileBase(UserBase): bio : str | None = None created_date : datetime | None = None # collection : list[str] | None = None class UserProfileID(UserProfileBase): user_id : int | None = None class UserProfilePublic(UserProfileBase): pass class UserProfilePrivate(UserProfilePublic): collection : list[str] | None = None role : Role | None = None status : Status | None = None follow_user : list[int] | None = None ######## ITEMS ###### class BaseItem(BaseModel): item_created_date : datetime | None = None item_location : str | None = None item_type : str | None = None item_content : str | None = None class ItemCreate(BaseItem): # item oluşturma için ekstra bir ihtiyaci olmaz pass ##### 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 # DBUser modelini değiştirip tekrar veri tabanına işleyebilirsin ''' ''' class Items(Base): __tablename__ = "items_table" item_id : Mapped[int] = mapped_column(primary_key=True, index=True, autoincrement=True) user_id : Mapped[int] = mapped_column(ForeignKey('users_table.user_id'), nullable=False, index=True) item_created_date : Mapped[datetime] = mapped_column(DateTime, default=datetime.now()) item_location = Column(String, default="No location") item_type = Column(String, default="No type") item_content = Column(String, default="No content") item_score = Column(Float, default=0.0) # ilişkiler user : Mapped['DBUser'] = relationship("DBUser", back_populates="items", lazy='select') #collection = relationship("Collections", back_populates="items") ''' ''' def is_user_exsist(username : str, session : Annotated[Session, Depends(get_session_db)]) -> bool | UserProfilePublic: #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]: users = session.query(DBUser).all() return [UserProfilePublic( username=user.username, bio=user.bio, created_date=user.created_date, items=user.items, collections=user.collections, role=user.role, status=user.status ) for user in users] def add_Item_user( user: Annotated[UserProfileID, Depends(get_session_db)], session: Annotated[Session, Depends(get_session_db)], item: ItemCreate) -> bool: # DBUser veritabanındaki nesnedir her niteliğe sahiptir item = Items( user_id=user.user_id, 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 ) session.add(item) session.commit() return True