item-create
This commit is contained in:
parent
7c35097c88
commit
039b877241
4 changed files with 31 additions and 21 deletions
|
|
@ -12,6 +12,11 @@ from sqlalchemy import Integer, DateTime
|
||||||
from sqlalchemy.orm import Session, relationship, mapped_column, Mapped
|
from sqlalchemy.orm import Session, relationship, mapped_column, Mapped
|
||||||
from sqlalchemy.dialects.postgresql import ARRAY
|
from sqlalchemy.dialects.postgresql import ARRAY
|
||||||
from email.message import EmailMessage
|
from email.message import EmailMessage
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from ..items.models import Items
|
||||||
|
|
||||||
|
|
||||||
import jwt
|
import jwt
|
||||||
|
|
||||||
|
|
@ -69,10 +74,9 @@ class DBUser(Base):
|
||||||
created_date : Mapped[datetime] = mapped_column(DateTime, default=datetime.now()) #datetime.datetime -> python, DateTime -> sqlalchemy
|
created_date : Mapped[datetime] = mapped_column(DateTime, default=datetime.now()) #datetime.datetime -> python, DateTime -> sqlalchemy
|
||||||
bio : Mapped[str] = mapped_column(default="No bio")
|
bio : Mapped[str] = mapped_column(default="No bio")
|
||||||
follow_users : Mapped[list[int]] = mapped_column(ARRAY(Integer), default=[]) # takip edilen kullanıcılar
|
follow_users : Mapped[list[int]] = mapped_column(ARRAY(Integer), default=[]) # takip edilen kullanıcılar
|
||||||
|
|
||||||
# -> buralar diğer tablolar ile olan ilişkiler
|
# -> 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")
|
||||||
items : Mapped[list['Items']] = relationship("Items", back_populates="user", cascade="all, delete-orphan", lazy='select')
|
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(
|
credentials_exception = HTTPException(
|
||||||
status_code=401,
|
status_code=401,
|
||||||
detail="Invalid credentials",
|
detail="Invalid credentials currently",
|
||||||
headers={"WWW-Authenticate": "Bearer"},
|
headers={"WWW-Authenticate": "Bearer"},
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ class Base(DeclarativeBase):
|
||||||
|
|
||||||
def init_db():
|
def init_db():
|
||||||
#Base.metadata.drop_all(engine) # Veritabanını her başlangıcta siler burayada dikkat !!!!!!!!
|
#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)
|
# Session dependency (FastAPI için)
|
||||||
def get_session_db():
|
def get_session_db():
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta, timezone
|
||||||
from typing import Annotated
|
from typing import Annotated
|
||||||
|
|
||||||
from sqlalchemy import DateTime
|
from sqlalchemy import DateTime
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
from fastapi import Depends
|
from fastapi import Depends
|
||||||
|
|
@ -9,10 +8,7 @@ from sqlalchemy import ForeignKey, Column, Integer, String, Float
|
||||||
from sqlalchemy.dialects.postgresql import ARRAY
|
from sqlalchemy.dialects.postgresql import ARRAY
|
||||||
from ..config import Base, get_session_db
|
from ..config import Base, get_session_db
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
from ..auth.models import Role, Status, UserBase
|
from ..auth.models import Role, Status, UserBase, DBUser
|
||||||
|
|
||||||
####!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
||||||
from ..auth.models import DBUser # -> tam burda bir hata var circle import yaparken karışıyor nasıl çözülecek bilmiyorum
|
|
||||||
|
|
||||||
|
|
||||||
class UserProfileBase(UserBase):
|
class UserProfileBase(UserBase):
|
||||||
|
|
@ -28,10 +24,11 @@ class UserProfilePublic(UserProfileBase):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class UserProfilePrivate(UserProfilePublic):
|
class UserProfilePrivate(UserProfilePublic):
|
||||||
collection : list[str] | None = None
|
#collection : list[str] | None = None
|
||||||
role : Role | None = None
|
role : Role | None = None
|
||||||
status : Status | None = None
|
status : Status | None = None
|
||||||
follow_user : list[int] | 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
|
class ItemCreate(BaseItem): # item oluşturma için ekstra bir ihtiyaci olmaz
|
||||||
pass
|
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İ #####
|
##### VERİTABANI MODELİ #####
|
||||||
# Tüm modeller AUTH'da veri tabanına işlendi yukardaki
|
# Tüm modeller AUTH'da veri tabanına işlendi yukardaki
|
||||||
#modeller veri tabanında mevcuttur. Değiştirmek için AUTH'daki
|
#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
|
#DBUser veritabanındaki nesnedir her niteliğe sahiptir
|
||||||
user = session.query(DBUser).filter(DBUser.username == username).first()
|
user = session.query(DBUser).filter(DBUser.username == username).first()
|
||||||
return user
|
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()
|
users = session.query(DBUser).all()
|
||||||
|
|
||||||
return [UserProfilePublic(
|
return [UserProfilePrivate(
|
||||||
username=user.username,
|
username=user.username,
|
||||||
bio=user.bio,
|
bio=user.bio,
|
||||||
created_date=user.created_date,
|
created_date=user.created_date,
|
||||||
items=user.items,
|
items = [Item.model_validate(item) for item in user.items],
|
||||||
collections=user.collections,
|
collections=user.collections,
|
||||||
role=user.role,
|
role=user.role,
|
||||||
status=user.status
|
status=user.status
|
||||||
|
|
@ -102,7 +108,6 @@ def add_Item_user(
|
||||||
item_location=item.item_location,
|
item_location=item.item_location,
|
||||||
item_type=item.item_type,
|
item_type=item.item_type,
|
||||||
item_content=item.item_content,
|
item_content=item.item_content,
|
||||||
item_score=item.item_score,
|
|
||||||
item_created_date=item.item_created_date
|
item_created_date=item.item_created_date
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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 fastapi import APIRouter, Depends
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
from ..config import get_session_db
|
from ..config import get_session_db
|
||||||
|
|
@ -13,7 +13,7 @@ router = APIRouter(
|
||||||
)
|
)
|
||||||
|
|
||||||
@router.get('/all_profiles')
|
@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)
|
return all_users(session=session)
|
||||||
|
|
||||||
|
|
@ -24,7 +24,7 @@ async def get_user_profile_by_username(
|
||||||
session: Annotated[Session, Depends(get_session_db)],
|
session: Annotated[Session, Depends(get_session_db)],
|
||||||
) -> UserProfilePublic | dict:
|
) -> UserProfilePublic | dict:
|
||||||
|
|
||||||
user : UserProfilePublic = is_user_exsist(username, session)
|
user : UserProfilePublic = is_user_exsist_get(username, session)
|
||||||
if user is None:
|
if user is None:
|
||||||
return {"error": "User not found"}
|
return {"error": "User not found"}
|
||||||
|
|
||||||
|
|
@ -32,10 +32,11 @@ async def get_user_profile_by_username(
|
||||||
|
|
||||||
@router.get('/profile/me')
|
@router.get('/profile/me')
|
||||||
async def get_user_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:
|
) -> UserProfilePrivate:
|
||||||
|
|
||||||
return current_user
|
return is_user_exsist_get(current_user.username, session)
|
||||||
|
|
||||||
|
|
||||||
@router.post('/create')
|
@router.post('/create')
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue