31 lines
1 KiB
Python
31 lines
1 KiB
Python
"""Routes invitations."""
|
|
import secrets
|
|
from datetime import datetime, timedelta, timezone
|
|
from fastapi import APIRouter, Depends
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.core.database import get_db
|
|
from app.core.config import settings
|
|
from app.core.security import require_executif
|
|
from app.models.invitation import Invitation
|
|
from app.schemas.schemas import InvitationOut
|
|
|
|
router = APIRouter(prefix="/invitations", tags=["Invitations"])
|
|
|
|
|
|
@router.post("/", response_model=InvitationOut)
|
|
async def creer_invitation(
|
|
executif=Depends(require_executif),
|
|
db: AsyncSession = Depends(get_db),
|
|
):
|
|
"""Générer un code d'invitation (expire après 48h)."""
|
|
code = secrets.token_hex(6).upper() # 12 caractères hex
|
|
invitation = Invitation(
|
|
groupe_id=executif.groupe_id,
|
|
code=code,
|
|
cree_par=executif.id,
|
|
expire_le=datetime.now(timezone.utc) + timedelta(hours=settings.INVITATION_EXPIRE_HOURS),
|
|
)
|
|
db.add(invitation)
|
|
await db.flush()
|
|
return InvitationOut.model_validate(invitation)
|