Skip to content

Commit

Permalink
[Update] bulk routes + schema updates
Browse files Browse the repository at this point in the history
  • Loading branch information
Pk13055 committed Jun 5, 2020
1 parent cb18333 commit 98ff7d2
Show file tree
Hide file tree
Showing 7 changed files with 64 additions and 34 deletions.
14 changes: 7 additions & 7 deletions backend/app/categories/controller.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
from typing import List, Union, Dict
from typing import Dict, List, Union

from fastapi import APIRouter, Depends, HTTPException
from motor.motor_asyncio import AsyncIOMotorClient

from app.utils.token import verify_token
from app.utils.mongodb import get_database
from app.models.base import ObjectID
from app.models.responses import ResponseBase, ItemInResponse, ItemsInResponse
from app.models.category import Movie, Anime, Show, Music

from ..models.base import ObjectID
from ..models.category import Anime, Category, Movie, Music, Show
from ..models.responses import (CategorysInResponse, ItemInResponse,
ItemsInResponse, ResponseBase)
from ..utils.mongodb import get_database
from ..utils.token import verify_token

router = APIRouter()

Expand Down
51 changes: 42 additions & 9 deletions backend/app/core/controller.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,24 @@
import hashlib
import urllib
import logging
import random
import urllib

import jwt

import ujson
from cas import CASClient
from fastapi import APIRouter, Depends, HTTPException
import jwt
from motor.motor_asyncio import AsyncIOMotorClient
from starlette.responses import RedirectResponse
import ujson

from app.utils.cas import get_cas
from app.utils.token import verify_token
from app.utils.mongodb import get_database
from config import SECRET_KEY
from ..models.category import Category
from ..models.responses import (CategorysInResponse, ResponseBase,
UsersInResponse)
from ..models.user import User
from ..utils.cas import get_cas
from ..utils.mongodb import get_database
from ..utils.token import verify_token

router = APIRouter()

Expand All @@ -37,6 +42,34 @@ async def login_route(next: str = "/", ticket: str = None, cas_client: CASClient
}
else:
logging.debug(f"CAS verify ticket response: user: {_user}")
# TODO add additional login functionality here
redirect_url = f"{next}#/?user={_user}"
return RedirectResponse(url=redirect_url)
if await db["core"]["users"].find_one({"username": _user}):
_res = await db["core"]["users"].update_one({
"last_login": attributes["authenticationDate"]
})
else:
_res = await db["core"]["users"].insert_one({
"username": _user,
"last_login": attributes["authenticationDate"],
"first_login": attributes["authenticationDate"],
})

jwt_token = jwt.encode({'username': _user}, str(
SECRET_KEY), algorithm="HS256").decode()
return ResponseBase(data={
"token": jwt_token
})


@router.get("/categories", response_model=CategorysInResponse, dependencies=[Depends(verify_token)], tags=["fetch", "categories"])
async def get_category_list(db: AsyncIOMotorClient = Depends(get_database)) -> CategorysInResponse:
"""Returns list of categories available"""
categories = [Category(**category) async for
category in db["core"]["categories"].find()]
return CategorysInResponse(data=categories)


@router.get("/users", response_model=UsersInResponse, dependencies=[Depends(verify_token)], tags=["fetch", "users", "testing"])
async def get_users_route(db: AsyncIOMotorClient = Depends(get_database)) -> UsersInResponse:
"""Get user information for logged in user"""
users = [User(**user) async for user in db["core"]["users"].find()]
return UsersInResponse(data=users)
2 changes: 1 addition & 1 deletion backend/app/models/category.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

class Category(Base):
"""Category definiton"""
_id: CategoryEnum
id: CategoryEnum = Field(None, alias="_id")


class ItemBase(Base):
Expand Down
11 changes: 8 additions & 3 deletions backend/app/models/responses.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
from typing import List, Optional, Union
from typing import List, Optional, Union, Dict

from .base import Base, ObjectID
from .category import Anime, Movie, Music, Show, Book
from .category import Anime, Movie, Music, Show, Book, Category
from .user import User, Like


class ResponseBase(Base):
"""Base return response"""
success: bool = True
error: Optional[List] = None
error: Optional[List]
data: Optional[Union[List, Dict[str, str]]]


class ItemInResponse(ResponseBase):
Expand All @@ -31,3 +32,7 @@ class UsersInResponse(ResponseBase):

class LikeInResponse(ResponseBase):
data: Like


class CategorysInResponse(ResponseBase):
data: List[Category]
1 change: 0 additions & 1 deletion backend/app/models/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,5 @@ class Like(Base):
class User(Base):
id: ObjectID = Field(None, alias="_id")
username: str
password: SecretStr
ratings: List[UserRating] = list()
likes: List[Like] = list()
17 changes: 5 additions & 12 deletions backend/app/user/controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,21 @@
from fastapi import APIRouter, Depends, HTTPException
from motor.motor_asyncio import AsyncIOMotorClient

from app.utils.token import verify_token
from app.utils.mongodb import get_database
from app.models.base import ObjectID
from app.models.user import User, LikeEnum
from app.models.responses import UserInResponse, UsersInResponse, LikeInResponse
from ..models.base import ObjectID
from ..models.responses import LikeInResponse, UserInResponse, UsersInResponse
from ..models.user import LikeEnum, User
from ..utils.mongodb import get_database
from ..utils.token import verify_token

router = APIRouter()


@router.post("/signup", tags=["signup", "auth", "testing"])
async def signup_route(user: User, db: AsyncIOMotorClient = Depends(get_database)):
"""Signup route (for testing)"""
# TODO signup functionality
return {"success": True}


@router.get("/", response_model=UsersInResponse, dependencies=[Depends(verify_token)], tags=["fetch", "bulk"])
async def get_users_route(db: AsyncIOMotorClient = Depends(get_database)) -> UsersInResponse:
"""Get user information for logged in user"""
# TODO fetch users functionality
return {"success": True}


@router.get("/{user_id}", response_model=UserInResponse, tags=["fetch"])
async def get_user_route(user_id: ObjectID,
Expand Down
2 changes: 1 addition & 1 deletion backend/app/utils/token.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from config import SECRET_KEY


async def verify_token(authorization: str = Header(None)):
async def verify_token(authorization: str = Header("Authorization")):
"""Verify JWT token for protected routes"""
# NOTE: remove if extra jwt auth not required
try:
Expand Down

0 comments on commit 98ff7d2

Please sign in to comment.