Spaces:
Paused
Paused
| from typing import Annotated | |
| from fastapi import Path, Query, Request, Response | |
| from sqlalchemy.ext.asyncio import AsyncSession | |
| from common.aspect.db_seesion import DBSessionDependency | |
| from common.router import APIRouterPro | |
| from common.vo import DataResponseModel, PageResponseModel | |
| from exceptions.exception import ServiceWarning | |
| from module_admin.dao.designer_dao import DesignerWorkDao | |
| from module_admin.entity.vo.designer_vo import ( | |
| DesignerCategoryModel, | |
| DesignerCategoryPageQueryModel, | |
| DesignerProfileModel, | |
| DesignerProfilePageQueryModel, | |
| DesignerWorkModel, | |
| DesignerWorkPageQueryModel, | |
| ) | |
| from module_admin.service.designer_service import DesignerCategoryService, DesignerProfileService, DesignerWorkService | |
| from utils.log_util import logger | |
| from utils.response_util import ResponseUtil | |
| designer_public_controller = APIRouterPro( | |
| prefix='/public/designer', order_num=21, tags=['设计师公开主页'] | |
| ) | |
| async def _get_profile_by_slug_or_404(query_db: AsyncSession, designer_slug: str) -> DesignerProfileModel: | |
| profile_result = await DesignerProfileService.get_profile_by_slug_services( | |
| query_db, designer_slug=designer_slug, only_active=True | |
| ) | |
| if not profile_result.profile_id: | |
| raise ServiceWarning(message='设计师不存在或未启用') | |
| return profile_result | |
| async def get_default_public_designer_profile( | |
| request: Request, | |
| query_db: Annotated[AsyncSession, DBSessionDependency()], | |
| ) -> Response: | |
| profile_result = await DesignerProfileService.get_default_profile_services(query_db) | |
| if not profile_result.profile_id: | |
| raise ServiceWarning(message='默认设计师未配置') | |
| logger.info('获取默认设计师公开档案成功') | |
| return ResponseUtil.success(data=profile_result) | |
| async def get_public_designer_list( | |
| request: Request, | |
| profile_page_query: Annotated[DesignerProfilePageQueryModel, Query()], | |
| query_db: Annotated[AsyncSession, DBSessionDependency()], | |
| ) -> Response: | |
| profile_page_query.status = '0' | |
| profile_list_result = await DesignerProfileService.get_profile_list_services( | |
| query_db, profile_page_query, is_page=True | |
| ) | |
| logger.info('获取公开设计师列表成功') | |
| return ResponseUtil.success(model_content=profile_list_result) | |
| async def get_public_designer_profile_by_slug( | |
| request: Request, | |
| designer_slug: Annotated[str, Path(description='设计师访问标识')], | |
| query_db: Annotated[AsyncSession, DBSessionDependency()], | |
| ) -> Response: | |
| profile_result = await _get_profile_by_slug_or_404(query_db, designer_slug) | |
| logger.info(f'获取slug为{designer_slug}的公开档案成功') | |
| return ResponseUtil.success(data=profile_result) | |
| async def get_public_designer_categories_by_slug( | |
| request: Request, | |
| designer_slug: Annotated[str, Path(description='设计师访问标识')], | |
| query_db: Annotated[AsyncSession, DBSessionDependency()], | |
| ) -> Response: | |
| profile_result = await _get_profile_by_slug_or_404(query_db, designer_slug) | |
| query_object = DesignerCategoryPageQueryModel(profileId=profile_result.profile_id, status='0') | |
| category_list_result = await DesignerCategoryService.get_category_list_services( | |
| query_db, query_object, is_page=False | |
| ) | |
| logger.info(f'获取slug为{designer_slug}的公开分类列表成功') | |
| return ResponseUtil.success(data=category_list_result) | |
| async def get_public_designer_works_by_slug( | |
| request: Request, | |
| designer_slug: Annotated[str, Path(description='设计师访问标识')], | |
| work_page_query: Annotated[DesignerWorkPageQueryModel, Query()], | |
| query_db: Annotated[AsyncSession, DBSessionDependency()], | |
| ) -> Response: | |
| profile_result = await _get_profile_by_slug_or_404(query_db, designer_slug) | |
| work_page_query.profile_id = profile_result.profile_id | |
| work_page_query.status = '0' | |
| work_list_result = await DesignerWorkService.get_work_list_services(query_db, work_page_query, is_page=True) | |
| logger.info(f'获取slug为{designer_slug}的公开作品列表成功') | |
| return ResponseUtil.success(model_content=work_list_result) | |
| async def get_public_designer_work_detail_by_slug( | |
| request: Request, | |
| designer_slug: Annotated[str, Path(description='设计师访问标识')], | |
| work_id: Annotated[int, Path(description='作品ID')], | |
| query_db: Annotated[AsyncSession, DBSessionDependency()], | |
| ) -> Response: | |
| profile_result = await _get_profile_by_slug_or_404(query_db, designer_slug) | |
| work_detail_result = await DesignerWorkService.work_detail_services(query_db, work_id) | |
| if work_detail_result.profile_id != profile_result.profile_id: | |
| return ResponseUtil.failure(msg='作品不存在') | |
| await DesignerWorkDao.increment_view_count(query_db, work_id) | |
| await query_db.commit() | |
| work_detail_result = await DesignerWorkService.work_detail_services(query_db, work_id) | |
| logger.info(f'获取slug为{designer_slug}、work_id为{work_id}的作品详情成功') | |
| return ResponseUtil.success(data=work_detail_result) | |
| async def get_public_designer_featured_works_by_slug( | |
| request: Request, | |
| designer_slug: Annotated[str, Path(description='设计师访问标识')], | |
| query_db: Annotated[AsyncSession, DBSessionDependency()], | |
| ) -> Response: | |
| profile_result = await _get_profile_by_slug_or_404(query_db, designer_slug) | |
| query_object = DesignerWorkPageQueryModel(profileId=profile_result.profile_id, isFeatured='1', status='0') | |
| featured_list_result = await DesignerWorkService.get_work_list_services(query_db, query_object, is_page=False) | |
| logger.info(f'获取slug为{designer_slug}的精选作品列表成功') | |
| return ResponseUtil.success(data=featured_list_result) | |
| async def get_public_designer_profile( | |
| request: Request, | |
| profile_id: Annotated[int, Path(description='设计师档案ID')], | |
| query_db: Annotated[AsyncSession, DBSessionDependency()], | |
| ) -> Response: | |
| profile_result = await DesignerProfileService.get_profile_services(query_db, profile_id) | |
| logger.info(f'获取profile_id为{profile_id}的公开档案成功') | |
| return ResponseUtil.success(data=profile_result) | |
| async def get_public_designer_categories( | |
| request: Request, | |
| profile_id: Annotated[int, Path(description='设计师档案ID')], | |
| query_db: Annotated[AsyncSession, DBSessionDependency()], | |
| ) -> Response: | |
| query_object = DesignerCategoryPageQueryModel(profileId=profile_id, status='0') | |
| category_list_result = await DesignerCategoryService.get_category_list_services( | |
| query_db, query_object, is_page=False | |
| ) | |
| logger.info(f'获取profile_id为{profile_id}的分类列表成功') | |
| return ResponseUtil.success(data=category_list_result) | |
| async def get_public_designer_works( | |
| request: Request, | |
| profile_id: Annotated[int, Path(description='设计师档案ID')], | |
| work_page_query: Annotated[DesignerWorkPageQueryModel, Query()], | |
| query_db: Annotated[AsyncSession, DBSessionDependency()], | |
| ) -> Response: | |
| work_page_query.profile_id = profile_id | |
| work_page_query.status = '0' | |
| work_list_result = await DesignerWorkService.get_work_list_services(query_db, work_page_query, is_page=True) | |
| logger.info(f'获取profile_id为{profile_id}的公开作品列表成功') | |
| return ResponseUtil.success(model_content=work_list_result) | |
| async def get_public_designer_work_detail( | |
| request: Request, | |
| profile_id: Annotated[int, Path(description='设计师档案ID')], | |
| work_id: Annotated[int, Path(description='作品ID')], | |
| query_db: Annotated[AsyncSession, DBSessionDependency()], | |
| ) -> Response: | |
| await DesignerWorkDao.increment_view_count(query_db, work_id) | |
| await query_db.commit() | |
| work_detail_result = await DesignerWorkService.work_detail_services(query_db, work_id) | |
| logger.info(f'获取work_id为{work_id}的作品详情成功') | |
| return ResponseUtil.success(data=work_detail_result) | |
| async def get_public_designer_featured_works( | |
| request: Request, | |
| profile_id: Annotated[int, Path(description='设计师档案ID')], | |
| query_db: Annotated[AsyncSession, DBSessionDependency()], | |
| ) -> Response: | |
| query_object = DesignerWorkPageQueryModel(profileId=profile_id, isFeatured='1', status='0') | |
| featured_list_result = await DesignerWorkService.get_work_list_services(query_db, query_object, is_page=False) | |
| logger.info(f'获取profile_id为{profile_id}的精选作品列表成功') | |
| return ResponseUtil.success(data=featured_list_result) | |