agentic.email/backend/app/routers/groups.py
2026-10-05 04:53:45 +05:30

66 lines
2.2 KiB
Python

from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.exc import IntegrityError
from sqlalchemy.ext.asyncio import AsyncSession
from app.database import get_postgres_session
from app.deps.org_manager import require_org_manager
from app.models import Account
from app.schemas import MailGroupCreate, MailGroupEmailCheck, MailGroupListResponse, MailGroupRead
from app.services.mail_groups import (
check_group_email_available,
create_mail_group,
list_mail_groups,
)
router = APIRouter(prefix="/groups", tags=["groups"])
@router.get("", response_model=MailGroupListResponse)
async def get_groups(
manager: Account = Depends(require_org_manager),
session: AsyncSession = Depends(get_postgres_session),
) -> MailGroupListResponse:
items, counts = await list_mail_groups(session, manager.company_domain)
return MailGroupListResponse(items=items, counts=counts)
@router.get("/check-email", response_model=MailGroupEmailCheck)
async def check_email(
email: str,
manager: Account = Depends(require_org_manager),
session: AsyncSession = Depends(get_postgres_session),
) -> MailGroupEmailCheck:
if manager.company_domain is None:
raise HTTPException(
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
detail="Company domain is required.",
)
result = await check_group_email_available(
session,
manager.company_domain,
email,
)
return result
@router.post("", response_model=MailGroupRead, status_code=status.HTTP_201_CREATED)
async def add_group(
payload: MailGroupCreate,
manager: Account = Depends(require_org_manager),
session: AsyncSession = Depends(get_postgres_session),
) -> MailGroupRead:
try:
group = await create_mail_group(session, manager=manager, payload=payload)
await session.commit()
return group
except ValueError as error:
raise HTTPException(
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
detail=str(error),
) from error
except IntegrityError as error:
await session.rollback()
raise HTTPException(
status_code=status.HTTP_409_CONFLICT,
detail="That group could not be created.",
) from error