Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions app/api/api_v1/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@

from fastapi import APIRouter

from api.api_v1.projects import router as project_router

from .auth import router as auth_router
from .project import router as project_router
from .upload_file import router as upload_file_router
from .user import router as user_router
from .users import router as user_router

router = APIRouter(
prefix="/v1",
Expand Down
13 changes: 13 additions & 0 deletions app/api/api_v1/projects/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
__all__ = ("router",)
from fastapi import APIRouter

from .details_views import router as details_router
from .list_view import router as list_router

router = APIRouter(
prefix="/projects",
tags=["Project"],
)

router.include_router(list_router)
router.include_router(details_router)
65 changes: 65 additions & 0 deletions app/api/api_v1/projects/details_views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
from dependencies.annotations import (
AuthUserByAccessTokenDep,
MinioClientDep,
ProjectServiceDep,
)
from fastapi import APIRouter
from schemas.project import (
ProjectPartialUpdate,
ProjectWithRenderFileFullResponse,
ProjectWithRenderFileResponse,
)
from starlette import status

router = APIRouter()


@router.get(
"/{project_id}",
response_model=ProjectWithRenderFileFullResponse,
status_code=status.HTTP_200_OK,
)
async def get_project(
project_id: int,
user_id: AuthUserByAccessTokenDep,
project_service: ProjectServiceDep,
s3_client: MinioClientDep,
) -> ProjectWithRenderFileFullResponse:
return await project_service.get_by_id(
project_id=project_id,
user_id=user_id,
s3_client=s3_client,
)


@router.patch(
"/{project_id}",
response_model=ProjectWithRenderFileResponse,
status_code=status.HTTP_200_OK,
)
async def partial_update_project(
project_id: int,
user_id: AuthUserByAccessTokenDep,
partial_update_project_data: ProjectPartialUpdate,
project_service: ProjectServiceDep,
) -> ProjectWithRenderFileResponse:
return await project_service.partial_update_project(
project_id,
user_id,
partial_update_project_data,
)


@router.delete(
"/{project_id}",
status_code=status.HTTP_204_NO_CONTENT,
)
async def delete_project(
project_id: int,
user_id: AuthUserByAccessTokenDep,
project_service: ProjectServiceDep,
) -> None:
return await project_service.delete_by_id(
project_id=project_id,
user_id=user_id,
)
233 changes: 89 additions & 144 deletions app/api/api_v1/project.py → app/api/api_v1/projects/list_view.py
Original file line number Diff line number Diff line change
@@ -1,144 +1,89 @@
from dependencies.annotations import (
AuthUserByAccessTokenDep,
MinioClientDep,
PaginationPageDep,
PaginationSizeDep,
ProjectServiceDep,
)
from dependencies.auth import get_auth_user_by_access_token
from fastapi import APIRouter, Depends, status
from schemas.project import (
ProjectPartialUpdate,
ProjectResponseList,
ProjectWithRenderCreate,
ProjectWithRenderFileFullResponse,
ProjectWithRenderFileResponse,
ProjectWithRenderResponse,
)

router = APIRouter(
prefix="/project",
tags=["Project"],
)


@router.get(
"/",
response_model=ProjectResponseList,
status_code=status.HTTP_200_OK,
)
async def get_current_user_projects(
project_service: ProjectServiceDep,
user_id: AuthUserByAccessTokenDep,
size: PaginationSizeDep = 10,
page: PaginationPageDep = 1,
) -> ProjectResponseList:
return await project_service.get_user_projects(
user_id=user_id,
size=size,
page=page,
)


@router.get(
"/public",
response_model=ProjectResponseList,
status_code=status.HTTP_200_OK,
dependencies=[
Depends(get_auth_user_by_access_token),
],
)
async def get_public_projects(
project_service: ProjectServiceDep,
size: PaginationSizeDep = 10,
page: PaginationPageDep = 1,
) -> ProjectResponseList:
return await project_service.get_public_projects(size=size, page=page)


@router.get(
"/public/user/{user_id}",
response_model=ProjectResponseList,
status_code=status.HTTP_200_OK,
dependencies=[
Depends(get_auth_user_by_access_token),
],
)
async def get_user_public_projects(
project_service: ProjectServiceDep,
user_id: int,
size: PaginationSizeDep = 10,
page: PaginationPageDep = 1,
) -> ProjectResponseList:
return await project_service.get_user_public_projects(
user_id=user_id,
size=size,
page=page,
)


@router.post(
"/create",
response_model=ProjectWithRenderResponse,
status_code=status.HTTP_201_CREATED,
)
async def create_project(
user_id: AuthUserByAccessTokenDep,
create_project_data: ProjectWithRenderCreate,
project_service: ProjectServiceDep,
) -> ProjectWithRenderResponse:
return await project_service.create_project(
user_id=user_id,
create_project=create_project_data,
)


@router.patch(
"/update/{project_id}",
response_model=ProjectWithRenderFileResponse,
status_code=status.HTTP_200_OK,
)
async def partial_update_project(
project_id: int,
user_id: AuthUserByAccessTokenDep,
partial_update_project_data: ProjectPartialUpdate,
project_service: ProjectServiceDep,
) -> ProjectWithRenderFileResponse:
return await project_service.partial_update_project(
project_id,
user_id,
partial_update_project_data,
)


@router.delete(
"/delete/{project_id}",
status_code=status.HTTP_204_NO_CONTENT,
)
async def delete_project(
project_id: int,
user_id: AuthUserByAccessTokenDep,
project_service: ProjectServiceDep,
) -> None:
return await project_service.delete_by_id(
project_id=project_id,
user_id=user_id,
)


@router.get(
"/{project_id}",
response_model=ProjectWithRenderFileFullResponse,
status_code=status.HTTP_200_OK,
)
async def get_project(
project_id: int,
user_id: AuthUserByAccessTokenDep,
project_service: ProjectServiceDep,
s3_client: MinioClientDep,
) -> ProjectWithRenderFileFullResponse:
return await project_service.get_by_id(
project_id=project_id,
user_id=user_id,
s3_client=s3_client,
)
from dependencies.annotations import (
AuthUserByAccessTokenDep,
PaginationPageDep,
PaginationSizeDep,
ProjectServiceDep,
)
from dependencies.auth import get_auth_user_by_access_token
from fastapi import APIRouter, Depends, status
from schemas.project import (
ProjectResponseList,
ProjectWithRenderCreate,
ProjectWithRenderResponse,
)

router = APIRouter()


@router.get(
"/",
response_model=ProjectResponseList,
status_code=status.HTTP_200_OK,
dependencies=[
Depends(get_auth_user_by_access_token),
],
)
async def get_public_projects(
project_service: ProjectServiceDep,
size: PaginationSizeDep = 10,
page: PaginationPageDep = 1,
) -> ProjectResponseList:
return await project_service.get_public_projects(
size=size,
page=page,
)


@router.post(
"/create",
response_model=ProjectWithRenderResponse,
status_code=status.HTTP_201_CREATED,
)
async def create_project(
user_id: AuthUserByAccessTokenDep,
create_project_data: ProjectWithRenderCreate,
project_service: ProjectServiceDep,
) -> ProjectWithRenderResponse:
return await project_service.create_project(
user_id=user_id,
create_project=create_project_data,
)


@router.get(
"/about-me",
response_model=ProjectResponseList,
status_code=status.HTTP_200_OK,
)
async def get_current_user_projects(
project_service: ProjectServiceDep,
user_id: AuthUserByAccessTokenDep,
size: PaginationSizeDep = 10,
page: PaginationPageDep = 1,
) -> ProjectResponseList:
return await project_service.get_user_projects(
user_id=user_id,
size=size,
page=page,
)


@router.get(
"/user/{user_id}",
response_model=ProjectResponseList,
status_code=status.HTTP_200_OK,
dependencies=[
Depends(get_auth_user_by_access_token),
],
)
async def get_user_public_projects(
project_service: ProjectServiceDep,
user_id: int,
size: PaginationSizeDep = 10,
page: PaginationPageDep = 1,
) -> ProjectResponseList:
return await project_service.get_user_public_projects(
user_id=user_id,
size=size,
page=page,
)
Loading
Loading