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 pydantic.networks import EmailStr
|
||||||
from sqlalchemy import Column, Integer, String
|
from sqlalchemy import Column, Integer, String
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
|
from sqlalchemy.dialects.postgresql import ARRAY
|
||||||
from email.message import EmailMessage
|
from email.message import EmailMessage
|
||||||
import jwt
|
import jwt
|
||||||
|
|
||||||
|
|
@ -53,6 +54,7 @@ class UserCreate(BaseModel):
|
||||||
status: Status | None = None
|
status: Status | None = None
|
||||||
password : str | None = None
|
password : str | None = None
|
||||||
|
|
||||||
|
|
||||||
### VERİTABANI MODELİ ###
|
### VERİTABANI MODELİ ###
|
||||||
class DBUser(Base):
|
class DBUser(Base):
|
||||||
__tablename__ = "users_table"
|
__tablename__ = "users_table"
|
||||||
|
|
@ -64,6 +66,9 @@ class DBUser(Base):
|
||||||
role = Column(String, default="user")
|
role = Column(String, default="user")
|
||||||
status = Column(String, default="active")
|
status = Column(String, default="active")
|
||||||
created_date = Column(String, default=datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S"))
|
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 ###
|
### AUTH ###
|
||||||
|
|
@ -230,11 +235,9 @@ def update_password_w_user(
|
||||||
user: Annotated[DBUser , None],
|
user: Annotated[DBUser , None],
|
||||||
password: str | None = None,
|
password: str | None = None,
|
||||||
|
|
||||||
):
|
) -> any:
|
||||||
|
|
||||||
hashed_password = get_password_hash(password)
|
hashed_password = get_password_hash(password)
|
||||||
session.query(DBUser).filter(DBUser.user_id == user.user_id).update({"hashed_password": hashed_password})
|
session.query(DBUser).filter(DBUser.user_id == user.user_id).update({"hashed_password": hashed_password})
|
||||||
session.commit()
|
session.commit()
|
||||||
session.refresh(user)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,11 +1,69 @@
|
||||||
from datetime import datetime, timedelta, timezone
|
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
|
bio : str | None = None
|
||||||
created_date : datetime | None = None
|
created_date : datetime | None = None
|
||||||
collections : list[str] | None = None
|
# collection : list[str] | None = None
|
||||||
items :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 fastapi import APIRouter, Depends
|
||||||
|
from sqlalchemy.orm import Session
|
||||||
|
from ..config import get_session_db
|
||||||
from typing import Annotated
|
from typing import Annotated
|
||||||
from ..auth.models import get_current_active_user
|
from ..auth.models import get_current_active_user
|
||||||
|
|
||||||
|
|
@ -10,9 +12,37 @@ router = APIRouter(
|
||||||
dependencies=[],
|
dependencies=[],
|
||||||
)
|
)
|
||||||
|
|
||||||
@router.get('/profile', response_model=UserProfile)
|
@router.get('/all_profiles')
|
||||||
async def get_user_profile(
|
async def get_user_profile(session: Annotated[Session, Depends(get_session_db)]) -> list[UserProfilePublic]:
|
||||||
current_user: Annotated[UserProfile, Depends(get_current_active_user)]
|
|
||||||
) -> UserProfile:
|
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
|
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 .config import app
|
||||||
from .auth.router import router as auth_router
|
from .auth.router import router as auth_router
|
||||||
from .items.router import router as items_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(auth_router)
|
||||||
|
app.include_router(collections_router)
|
||||||
app.include_router(items_router)
|
app.include_router(items_router)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue