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 MailAliasCreate, MailAliasListResponse, MailAliasRead from app.services.mail_aliases import create_mail_alias, list_mail_aliases router = APIRouter(prefix="/aliases", tags=["aliases"]) @router.get("", response_model=MailAliasListResponse) async def get_aliases( manager: Account = Depends(require_org_manager), session: AsyncSession = Depends(get_postgres_session), ) -> MailAliasListResponse: items, counts = await list_mail_aliases(session, manager.company_domain) return MailAliasListResponse(items=items, counts=counts) @router.post("", response_model=MailAliasRead, status_code=status.HTTP_201_CREATED) async def add_alias( payload: MailAliasCreate, manager: Account = Depends(require_org_manager), session: AsyncSession = Depends(get_postgres_session), ) -> MailAliasRead: try: alias = await create_mail_alias(session, manager=manager, payload=payload) await session.commit() return alias 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 alias could not be created.", ) from error