feat: deals viewer mode and links for viewers
This commit is contained in:
		@@ -45,8 +45,9 @@ async def create_deal_bill(
 | 
			
		||||
async def cancel_deal_billing(
 | 
			
		||||
        session: SessionDependency,
 | 
			
		||||
        request: CancelCardBillRequest,
 | 
			
		||||
        user: CurrentUserDependency,
 | 
			
		||||
):
 | 
			
		||||
    return await BillingService(session).cancel_card_billing(request)
 | 
			
		||||
    return await BillingService(session).cancel_card_billing(user, request)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@billing_router.get(
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ from models import User
 | 
			
		||||
from parsers import DealParser
 | 
			
		||||
from schemas.barcode import GetCardProductsBarcodesPdfRequest, GetCardProductsBarcodesPdfResponse
 | 
			
		||||
from schemas.card import *
 | 
			
		||||
from services.auth import get_current_user, authorized_user, guest_user
 | 
			
		||||
from services.auth import get_current_user, authorized_user, guest_user, user_deals_viewer, user_deal_editor
 | 
			
		||||
from services.barcode import BarcodeService
 | 
			
		||||
from services.billing import BillingService
 | 
			
		||||
from services.card import CardsService
 | 
			
		||||
@@ -82,14 +82,14 @@ async def change_status(
 | 
			
		||||
    '/summaries',
 | 
			
		||||
    response_model=CardSummaryResponse,
 | 
			
		||||
    operation_id='getCardSummaries',
 | 
			
		||||
    dependencies=[Depends(authorized_user)]
 | 
			
		||||
)
 | 
			
		||||
async def get_summary(
 | 
			
		||||
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
			
		||||
        request: GetCardSummariesRequest,
 | 
			
		||||
        pagination: PaginationDependency,
 | 
			
		||||
        user: CurrentUserDependency,
 | 
			
		||||
):
 | 
			
		||||
    return await CardsService(session).get_summary(request, pagination)
 | 
			
		||||
    return await CardsService(session).get_summary(request, pagination, user)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@card_router.post(
 | 
			
		||||
@@ -151,13 +151,13 @@ async def update_general_info(
 | 
			
		||||
    '/update-products-and-services-general-info',
 | 
			
		||||
    response_model=ProductsAndServicesGeneralInfoResponse,
 | 
			
		||||
    operation_id='update_products_and_services_general_info',
 | 
			
		||||
    dependencies=[Depends(authorized_user)]
 | 
			
		||||
)
 | 
			
		||||
async def update_products_and_services_general_info(
 | 
			
		||||
        request: ProductsAndServicesGeneralInfoRequest,
 | 
			
		||||
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
			
		||||
        user: CurrentUserDependency,
 | 
			
		||||
):
 | 
			
		||||
    return await CardsService(session).update_products_and_services_general_info(request)
 | 
			
		||||
    return await CardsService(session).update_products_and_services_general_info(request, user)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@card_router.post(
 | 
			
		||||
@@ -185,6 +185,7 @@ async def update_card_client(
 | 
			
		||||
):
 | 
			
		||||
    return await CardsService(session).update_card_client(request)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@card_router.post(
 | 
			
		||||
    '/add-kit',
 | 
			
		||||
    response_model=CardAddKitResponse,
 | 
			
		||||
@@ -206,9 +207,8 @@ async def add_kit_to_card(
 | 
			
		||||
async def create_guest_url(
 | 
			
		||||
        session: SessionDependency,
 | 
			
		||||
        request: CardCreateGuestUrlRequest,
 | 
			
		||||
        user: CurrentUserDependency
 | 
			
		||||
):
 | 
			
		||||
    return CardsService(session).create_guest_url(user, request)
 | 
			
		||||
    return await CardsService(session).create_guest_url(request)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@card_router.get(
 | 
			
		||||
@@ -267,6 +267,7 @@ async def recalculate_card_price(
 | 
			
		||||
    '/employee',
 | 
			
		||||
    response_model=ManageEmployeeResponse,
 | 
			
		||||
    operation_id='manage_employee',
 | 
			
		||||
    dependencies=[Depends(user_deal_editor)],
 | 
			
		||||
)
 | 
			
		||||
async def manage_employee(
 | 
			
		||||
        session: SessionDependency,
 | 
			
		||||
@@ -279,6 +280,7 @@ async def manage_employee(
 | 
			
		||||
    '/employee/available/{card_id}',
 | 
			
		||||
    response_model=GetAvailableEmployeesToAssignResponse,
 | 
			
		||||
    operation_id='get_available_employees_to_assign',
 | 
			
		||||
    dependencies=[Depends(user_deal_editor)],
 | 
			
		||||
)
 | 
			
		||||
async def get_available_employees_to_assign(
 | 
			
		||||
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
			
		||||
@@ -291,6 +293,7 @@ async def get_available_employees_to_assign(
 | 
			
		||||
    '/prefill/excel/parse',
 | 
			
		||||
    response_model=ParseCardsExcelResponse,
 | 
			
		||||
    operation_id='parse_deals_excel',
 | 
			
		||||
    dependencies=[Depends(authorized_user)]
 | 
			
		||||
)
 | 
			
		||||
async def parse_deals_excel(
 | 
			
		||||
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
			
		||||
@@ -304,6 +307,7 @@ async def parse_deals_excel(
 | 
			
		||||
    '/prefill/excel/create',
 | 
			
		||||
    response_model=CreateCardsFromExcelResponse,
 | 
			
		||||
    operation_id='create_deals_excel',
 | 
			
		||||
    dependencies=[Depends(authorized_user)],
 | 
			
		||||
)
 | 
			
		||||
async def create_deals_from_excel(
 | 
			
		||||
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
			
		||||
@@ -312,6 +316,7 @@ async def create_deals_from_excel(
 | 
			
		||||
):
 | 
			
		||||
    return await CardsService(session).create_cards_from_excel(request, user)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# endregion
 | 
			
		||||
 | 
			
		||||
# region Card services
 | 
			
		||||
@@ -519,5 +524,4 @@ async def get_card_products_barcodes_pdf(
 | 
			
		||||
        mime_type='application/pdf'
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# endregion
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@ from typing import Annotated
 | 
			
		||||
from fastapi import APIRouter, Depends, UploadFile
 | 
			
		||||
from sqlalchemy.ext.asyncio import AsyncSession
 | 
			
		||||
 | 
			
		||||
from backend.dependecies import CurrentUserDependency
 | 
			
		||||
from backend.session import get_session
 | 
			
		||||
from models import User
 | 
			
		||||
from schemas.chat import *
 | 
			
		||||
@@ -111,8 +112,9 @@ async def get_client_chats_list(
 | 
			
		||||
async def create_chat(
 | 
			
		||||
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
			
		||||
        request: CreateChatRequest,
 | 
			
		||||
        user: CurrentUserDependency,
 | 
			
		||||
):
 | 
			
		||||
    return await ChatService(session).create_chat(request)
 | 
			
		||||
    return await ChatService(session).create_chat(request, user)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@chat_router.post(
 | 
			
		||||
 
 | 
			
		||||
@@ -98,3 +98,15 @@ async def delete_client(
 | 
			
		||||
        session: Annotated[AsyncSession, Depends(get_session)]
 | 
			
		||||
):
 | 
			
		||||
    return await ClientService(session).delete(request)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@client_router.post(
 | 
			
		||||
    '/link/{client_id}',
 | 
			
		||||
    operation_id='client_link',
 | 
			
		||||
    response_model=CreateGuestUrlResponse,
 | 
			
		||||
)
 | 
			
		||||
async def client_link(
 | 
			
		||||
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
			
		||||
        client_id: int,
 | 
			
		||||
):
 | 
			
		||||
    return await ClientService(session).create_guest_url(client_id)
 | 
			
		||||
 
 | 
			
		||||
@@ -8,17 +8,16 @@ from services.marketplace import MarketplaceService
 | 
			
		||||
marketplace_router = APIRouter(
 | 
			
		||||
    prefix="/marketplace",
 | 
			
		||||
    tags=["marketplace"],
 | 
			
		||||
    dependencies=[Depends(authorized_user)]
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@marketplace_router.get(
 | 
			
		||||
    '/base/get-all',
 | 
			
		||||
    operation_id='get_all_base_marketplaces',
 | 
			
		||||
    response_model=GetAllBaseMarketplacesResponse
 | 
			
		||||
    response_model=GetAllBaseMarketplacesResponse,
 | 
			
		||||
)
 | 
			
		||||
async def get_all(
 | 
			
		||||
        session: SessionDependency
 | 
			
		||||
        session: SessionDependency,
 | 
			
		||||
):
 | 
			
		||||
    return await MarketplaceService(session).get_all_base_marketplaces()
 | 
			
		||||
 | 
			
		||||
@@ -26,7 +25,8 @@ async def get_all(
 | 
			
		||||
@marketplace_router.post(
 | 
			
		||||
    '/get',
 | 
			
		||||
    operation_id='get_client_marketplaces',
 | 
			
		||||
    response_model=GetClientMarketplacesResponse
 | 
			
		||||
    response_model=GetClientMarketplacesResponse,
 | 
			
		||||
    dependencies=[Depends(authorized_user)]
 | 
			
		||||
)
 | 
			
		||||
async def get(
 | 
			
		||||
        session: SessionDependency,
 | 
			
		||||
@@ -38,7 +38,8 @@ async def get(
 | 
			
		||||
@marketplace_router.post(
 | 
			
		||||
    '/create',
 | 
			
		||||
    operation_id='create_marketplace',
 | 
			
		||||
    response_model=CreateMarketplaceResponse
 | 
			
		||||
    response_model=CreateMarketplaceResponse,
 | 
			
		||||
    dependencies=[Depends(authorized_user)],
 | 
			
		||||
)
 | 
			
		||||
async def create(
 | 
			
		||||
        session: SessionDependency,
 | 
			
		||||
@@ -50,7 +51,8 @@ async def create(
 | 
			
		||||
@marketplace_router.post(
 | 
			
		||||
    '/delete',
 | 
			
		||||
    operation_id='delete_marketplace',
 | 
			
		||||
    response_model=DeleteMarketplaceResponse
 | 
			
		||||
    response_model=DeleteMarketplaceResponse,
 | 
			
		||||
    dependencies=[Depends(authorized_user)],
 | 
			
		||||
)
 | 
			
		||||
async def delete(
 | 
			
		||||
        session: SessionDependency,
 | 
			
		||||
@@ -62,7 +64,8 @@ async def delete(
 | 
			
		||||
@marketplace_router.post(
 | 
			
		||||
    '/update',
 | 
			
		||||
    operation_id='update_marketplace',
 | 
			
		||||
    response_model=UpdateMarketplaceResponse
 | 
			
		||||
    response_model=UpdateMarketplaceResponse,
 | 
			
		||||
    dependencies=[Depends(authorized_user)],
 | 
			
		||||
)
 | 
			
		||||
async def update(
 | 
			
		||||
        session: SessionDependency,
 | 
			
		||||
@@ -70,10 +73,12 @@ async def update(
 | 
			
		||||
):
 | 
			
		||||
    return await MarketplaceService(session).update_marketplace(request)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@marketplace_router.post(
 | 
			
		||||
    '/yandex-market/get-campaigns',
 | 
			
		||||
    operation_id='get_yandex_market_campaigns',
 | 
			
		||||
    response_model=GetYandexMarketCampaignsResponse
 | 
			
		||||
    response_model=GetYandexMarketCampaignsResponse,
 | 
			
		||||
    dependencies=[Depends(authorized_user)],
 | 
			
		||||
)
 | 
			
		||||
async def get_yandex_market_campaigns(
 | 
			
		||||
        session: SessionDependency,
 | 
			
		||||
 
 | 
			
		||||
@@ -31,8 +31,9 @@ product_router = APIRouter(
 | 
			
		||||
async def create_product(
 | 
			
		||||
        request: ProductCreateRequest,
 | 
			
		||||
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
			
		||||
        user: CurrentUserDependency,
 | 
			
		||||
):
 | 
			
		||||
    return await ProductService(session).create(request)
 | 
			
		||||
    return await ProductService(session).create(request, user)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@product_router.post(
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
 | 
			
		||||
 | 
			
		||||
from backend.session import get_session
 | 
			
		||||
from schemas.project import *
 | 
			
		||||
from services.auth import guest_user, authorized_user
 | 
			
		||||
from services.auth import guest_user, authorized_user, user_deals_viewer
 | 
			
		||||
from services.project import ProjectService
 | 
			
		||||
 | 
			
		||||
project_router = APIRouter(
 | 
			
		||||
@@ -18,6 +18,7 @@ project_router = APIRouter(
 | 
			
		||||
    "/",
 | 
			
		||||
    response_model=GetProjectsResponse,
 | 
			
		||||
    operation_id="get_projects",
 | 
			
		||||
    dependencies=[Depends(user_deals_viewer)],
 | 
			
		||||
)
 | 
			
		||||
async def get_projects(
 | 
			
		||||
        session: Annotated[AsyncSession, Depends(get_session)],
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user