79 lines
2.7 KiB
Python
79 lines
2.7 KiB
Python
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 String, Float, Integer, ForeignKey
|
||
from sqlalchemy.dialects.postgresql import ARRAY
|
||
from ..config import Base, get_session_db, collection_item
|
||
from typing import TYPE_CHECKING
|
||
from ..auth.models import Role, Status, UserBase
|
||
from ..collectionObj.models import CollectionsDB
|
||
|
||
|
||
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)
|
||
#collection_id : Mapped[list[int]] = mapped_column(Integer, ForeignKey("collections_table.collection_id"), nullable=True) # collection_id ile ilişki
|
||
item_created_date : Mapped[datetime] = mapped_column(DateTime, default=datetime.now())
|
||
item_location: Mapped[str] = mapped_column(String, default="No location")
|
||
item_type: Mapped[str] = mapped_column(String, default="No type")
|
||
item_content: Mapped[str] = mapped_column(String, default="No content")
|
||
item_score: Mapped[float] = mapped_column(Float, default=0.0)
|
||
|
||
# ilişkiler
|
||
collections : Mapped[list['CollectionsDB']]= relationship(
|
||
"CollectionsDB",
|
||
secondary=collection_item,
|
||
back_populates="items",
|
||
lazy='select'
|
||
) #back_populates karşı tarafın ismi
|