backend/items/models.py
2025-05-08 22:43:42 +03:00

116 lines
3.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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, DBUser
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 : list['Item'] | 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
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
# 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_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[UserProfilePrivate]:
users = session.query(DBUser).all()
return [UserProfilePrivate(
username=user.username,
bio=user.bio,
created_date=user.created_date,
items = [Item.model_validate(item) for item in 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_created_date=item.item_created_date
)
session.add(item)
session.commit()
return True