Add start of invitations route

This commit is contained in:
2025-06-25 17:00:01 +00:00
parent c4a1a574de
commit 9a01074ad1
4 changed files with 83 additions and 0 deletions
+2
View File
@@ -10,6 +10,7 @@ from modules.assets.router import router as asset_router
from modules.auth.router import router as auth_router
from modules.users.router import router as users_router
from modules.organizations.router import router as organizations_router
from modules.invitations.router import router as invitations_router
from fastapi.middleware.httpsredirect import HTTPSRedirectMiddleware
from fastapi.middleware.trustedhost import TrustedHostMiddleware
@@ -53,3 +54,4 @@ app.include_router(auth_router)
app.include_router(users_router)
app.include_router(organizations_router)
app.include_router(asset_router)
app.include_router(invitations_router)
@@ -0,0 +1,15 @@
import uuid
from tortoise import Model, fields
from mixins import CMDMixin
from modules.users.models import User
class Invite(Model, CMDMixin):
id: uuid.UUID = fields.UUIDField(primary_key=True)
receiver: str = fields.CharField(max_length=128)
sender: str = fields.UUIDField()
message: str | None = fields.TextField(null=True)
accepted: bool = fields.BooleanField()
disabled: bool = fields.BooleanField(default=False)
@@ -0,0 +1,66 @@
from typing import Annotated
import uuid
from fastapi import APIRouter, Depends, HTTPException
from modules.invitations.models import Invite
from modules.users.models import User
from modules.users.utils import get_current_active_user
from tortoise.expressions import Q
router = APIRouter(prefix="/api/v1/Users", tags=["User"])
@router.get("/")
async def get_all_invitations(user: Annotated[User, Depends(get_current_active_user)]):
pass
@router.get("/accept/{invitation_id}")
async def accept_invitation(
user: Annotated[User, Depends(get_current_active_user)], invitation_id: uuid.UUID
):
invite: Invite | None = await Invite.get_or_none(
Q(id=invitation_id) & (Q(receiver=user.username) | Q(receiver=user.email))
)
invite.accepted = True
invite.save()
return invite
@router.get("/reject/{invitation_id}")
async def reject_invitation(
user: Annotated[User, Depends(get_current_active_user)], invitation_id: uuid.UUID
) -> Invite:
invite: Invite | None = await Invite.get_or_none(
Q(id=invitation_id) & (Q(receiver=user.username) | Q(receiver=user.email))
)
invite.accepted = False
invite.save()
return invite
@router.get("/send")
async def accept_invitation(
user: Annotated[User, Depends(get_current_active_user)],
):
pass
@router.get("/cancel/{invitation_id}", status_code=204)
async def accept_invitation(
user: Annotated[User, Depends(get_current_active_user)], invitation_id: uuid.UUID
) -> None:
invite: Invite | None = await Invite.get_or_none(
Q(id=invitation_id) & Q(sender=user.id)
)
if not invite:
raise HTTPException(
status_code=403,
detail="The invitation doesn't exist or you don't have access to it.",
)
invite.delete()