groupe-meditation/backend/app/routers/invitations.py

32 lines
1 KiB
Python
Raw Normal View History

2026-03-04 14:01:00 -05:00
"""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)."""
2026-03-04 14:01:00 -05:00
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)