generated _collections class
This commit is contained in:
parent
842c127817
commit
938f950646
6 changed files with 132 additions and 13 deletions
18
_collections/models.py
Normal file
18
_collections/models.py
Normal 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
8
_collections/router.py
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
from fastapi import FastAPI, APIRouter
|
||||
|
||||
router = APIRouter(
|
||||
prefix="/collections",
|
||||
tags=["collections"],
|
||||
responses={404: {"description": "Not found"}},
|
||||
dependencies=[],
|
||||
)
|
||||
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
@ -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]
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
2
main.py
2
main.py
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue