from datetime import datetime, timedelta, timezone from typing import Annotated from pydantic import BaseModel from fastapi import Depends from sqlalchemy.orm import Session from sqlalchemy import ForeignKey, Column, Integer, String, Float from sqlalchemy.dialects.postgresql import ARRAY from ..auth.models import DBUser, Role, Status, UserBase from ..config import Base, get_session_db 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 ##### 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 = Column(Integer, primary_key=True, index=True) user_id = Column(Integer, ForeignKey("users_table.user_id"), nullable=False) #collection_id = Column(Integer, ForeignKey("collections_table.collection_id"), nullable=False) item_created_date = Column(String, default=datetime.now()) item_location = Column(String, default="No location") #daha net tanımlancak item_type = Column(String, default="No type") item_content = Column(String, default="No content") item_score = Column(Float, default=0.0) 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]