Skip to content
Closed
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
81 changes: 78 additions & 3 deletions app/api/api_v1/render_project.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,22 @@
from dependencies.annotations import AuthUserByAccessTokenDep, RenderProjectServiceDep
from fastapi import APIRouter
from schemas.render_project import RenderProjectResponse
from fastapi import APIRouter, status
from schemas.render_project import (
RenderProjectCreate,
RenderProjectResponse,
RenderProjectResponseList,
)

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


@router.get("/{render_project_id}")
@router.get(
"/{render_project_id}",
response_model=RenderProjectResponse,
status_code=status.HTTP_200_OK,
)
async def get_render_project(
render_project_id: int,
user_id: AuthUserByAccessTokenDep,
Expand All @@ -18,3 +26,70 @@ async def get_render_project(
render_project_id=render_project_id,
user_id=user_id,
)


@router.get(
"/",
response_model=RenderProjectResponseList,
status_code=status.HTTP_200_OK,
)
async def get_current_user_render_projects(
render_project_service: RenderProjectServiceDep,
user_id: AuthUserByAccessTokenDep,
size: int = 10,
page: int = 1,
) -> RenderProjectResponseList:
return await render_project_service.get_user_render_projects(
user_id=user_id,
size=size,
page=page,
)


@router.get(
"/{user_id}/public",
response_model=RenderProjectResponseList,
status_code=status.HTTP_200_OK,
)
async def get_user_public_render_projects(
render_project_service: RenderProjectServiceDep,
user_id: int,
size: int = 10,
page: int = 1,
) -> RenderProjectResponseList:
return await render_project_service.get_user_public_render_projects(
user_id=user_id,
size=size,
page=page,
)


@router.post(
"/create",
response_model=RenderProjectResponse,
status_code=status.HTTP_201_CREATED,
)
async def create_render_project(
user_id: AuthUserByAccessTokenDep,
create_render_project_data: RenderProjectCreate,
render_project_service: RenderProjectServiceDep,
) -> RenderProjectResponse:
return await render_project_service.create_render_project(
user_id=user_id,
create_render_project=create_render_project_data,
)


@router.delete(
"delete/{render_project_id}",
status_code=status.HTTP_204_NO_CONTENT,
)
async def delete_render_project(
render_project_id: int,
user_id: AuthUserByAccessTokenDep,
render_project_service: RenderProjectServiceDep,
) -> None:
return await render_project_service.delete_by_id(
render_project_id=render_project_id,
user_id=user_id,
)
1 change: 1 addition & 0 deletions app/repositories/render_project.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

from core.constants import ProjectVisibility
from core.interfaces.repositories import AbstractRenderProjectRepository
from models import RenderProject, User
Expand Down
22 changes: 18 additions & 4 deletions app/schemas/render_project.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from core.constants import ProjectVisibility
from pydantic import BaseModel
from typing import ClassVar

from core.constants import ProjectVisibility, RenderStatus
from pydantic import BaseModel, ConfigDict


class RenderProjectBase(BaseModel):
Expand All @@ -9,14 +11,15 @@ class RenderProjectBase(BaseModel):

name: str
description: str
source_file_id: int
model_config: ClassVar[ConfigDict] = ConfigDict(from_attributes=True)


class RenderProjectCreate(RenderProjectBase):
"""
Схема для создания проекта.
"""

source_file_id: int
visibility: ProjectVisibility


Expand All @@ -25,6 +28,17 @@ class RenderProjectResponse(RenderProjectBase):
Схема для вывода информации о проекте.
"""

render_file_id: int | None
render_file_id: int | None = None
visibility: ProjectVisibility
status: RenderStatus
id: int


class RenderProjectResponseList(BaseModel):
"""
Схема для вывода информации о списке проектов.
"""

render_projects: list[RenderProjectResponse]
size: int
page: int
45 changes: 44 additions & 1 deletion app/services/render_project.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,11 @@
from core.exceptions.render_project import RenderProjectIdNotFoundError
from core.interfaces.repositories import AbstractRenderProjectRepository
from models import User
from schemas.render_project import RenderProjectCreate, RenderProjectResponse
from schemas.render_project import (
RenderProjectCreate,
RenderProjectResponse,
RenderProjectResponseList,
)


class RenderProjectService:
Expand Down Expand Up @@ -39,6 +43,45 @@ async def get_by_id(

return RenderProjectResponse.model_validate(render_project)

async def get_user_render_projects(
self,
user_id: int,
size: int,
page: int,
) -> RenderProjectResponseList:
get_projects = self.render_project_repository.get_user_render_projects(
user_id,
)
render_projects = [
RenderProjectResponse.model_validate(render_project)
for render_project in await get_projects
]
return RenderProjectResponseList(
render_projects=render_projects,
size=size,
page=page,
)

async def get_user_public_render_projects(
self,
user_id: int,
size: int,
page: int,
) -> RenderProjectResponseList:
get_projects = self.render_project_repository.get_user_public_render_projects(
user_id,
)

render_projects = [
RenderProjectResponse.model_validate(render_project)
for render_project in await get_projects
]
return RenderProjectResponseList(
render_projects=render_projects,
size=size,
page=page,
)

async def create_render_project(
self,
user_id: int,
Expand Down
Loading