generated _collections class

This commit is contained in:
Bedir Tuğra Karaabalı 2025-05-07 20:15:51 +03:00
parent 842c127817
commit 938f950646
6 changed files with 132 additions and 13 deletions

18
_collections/models.py Normal file
View File

@ -0,0 +1,18 @@
from fastapi import HTTPException
from sqlalchemy import Column, Integer, String, Float, Boolean, ForeignKey
from sqlalchemy.dialects.postgresql import ARRAY
from sqlalchemy.orm import Session
from ..config import Base
##### veri tabanı modelleri #####
class Collections(Base):
__tablename__ = "collections_table"
collection_id = Column(Integer, index=True, primary_key=True , autoincrement=True)
user_id = Column(Integer, ForeignKey('users_table.user_id'), nullable=False)
visibility = Column(Boolean, default=True)
colllection_name = Column(String, default="No name")
collection_description = Column(String, default="No description")

8
_collections/router.py Normal file
View File

@ -0,0 +1,8 @@
from fastapi import FastAPI, APIRouter
router = APIRouter(
prefix="/collections",
tags=["collections"],
responses={404: {"description": "Not found"}},
dependencies=[],
)

View File

@ -10,6 +10,7 @@ from fastapi.security import OAuth2PasswordBearer
from pydantic.networks import EmailStr
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import Session
from sqlalchemy.dialects.postgresql import ARRAY
from email.message import EmailMessage
import jwt
@ -53,6 +54,7 @@ class UserCreate(BaseModel):
status: Status | None = None
password : str | None = None
### VERİTABANI MODELİ ###
class DBUser(Base):
__tablename__ = "users_table"
@ -64,6 +66,9 @@ class DBUser(Base):
role = Column(String, default="user")
status = Column(String, default="active")
created_date = Column(String, default=datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S"))
bio = Column(String, default="No bio")
collections = Column(ARRAY(String), default=['likes'])
follower_user = Column(ARRAY(Integer), default=[])
### AUTH ###
@ -230,11 +235,9 @@ def update_password_w_user(
user: Annotated[DBUser , None],
password: str | None = None,
):
) -> any:
hashed_password = get_password_hash(password)
session.query(DBUser).filter(DBUser.user_id == user.user_id).update({"hashed_password": hashed_password})
session.commit()
session.refresh(user)

View File

@ -1,11 +1,69 @@
from datetime import datetime, timedelta, timezone
from ..auth.models import UserBase
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 UserProfile(UserBase):
class UserProfileBase(UserBase):
bio : str | None = None
created_date : datetime | None = None
collections : list[str] | None = None
items :list[str] | 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]

View File

@ -1,5 +1,7 @@
from .models import UserProfile
from .models import UserProfileBase, UserProfileID, UserProfilePrivate, UserProfilePublic, all_users, is_user_exsist
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from ..config import get_session_db
from typing import Annotated
from ..auth.models import get_current_active_user
@ -10,9 +12,37 @@ router = APIRouter(
dependencies=[],
)
@router.get('/profile', response_model=UserProfile)
async def get_user_profile(
current_user: Annotated[UserProfile, Depends(get_current_active_user)]
) -> UserProfile:
@router.get('/all_profiles')
async def get_user_profile(session: Annotated[Session, Depends(get_session_db)]) -> list[UserProfilePublic]:
return all_users(session=session)
@router.get('/profile/{username}')
async def get_user_profile_by_username(
username: str,
session: Annotated[Session, Depends(get_session_db)],
) -> UserProfilePublic | dict:
user : UserProfilePublic = is_user_exsist(username, session)
if user is None:
return {"error": "User not found"}
return user
@router.get('/profile/me')
async def get_user_profile_me(
current_user: Annotated[UserProfilePrivate, Depends(get_current_active_user)] #dependtek kaynaklı UserPublic doner
) -> UserProfilePrivate:
return current_user
@router.post('/create')
async def create_user_profile(
user : Annotated[UserProfileID, Depends(get_current_active_user)],
session: Annotated[Session, Depends(get_session_db)],
) -> UserProfileBase:
return user

View File

@ -1,6 +1,8 @@
from .config import app
from .auth.router import router as auth_router
from .items.router import router as items_router
from ._collections.router import router as collections_router
app.include_router(auth_router)
app.include_router(collections_router)
app.include_router(items_router)