Add start of invitations route
This commit is contained in:
@@ -10,6 +10,7 @@ from modules.assets.router import router as asset_router
|
|||||||
from modules.auth.router import router as auth_router
|
from modules.auth.router import router as auth_router
|
||||||
from modules.users.router import router as users_router
|
from modules.users.router import router as users_router
|
||||||
from modules.organizations.router import router as organizations_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.httpsredirect import HTTPSRedirectMiddleware
|
||||||
from fastapi.middleware.trustedhost import TrustedHostMiddleware
|
from fastapi.middleware.trustedhost import TrustedHostMiddleware
|
||||||
@@ -53,3 +54,4 @@ app.include_router(auth_router)
|
|||||||
app.include_router(users_router)
|
app.include_router(users_router)
|
||||||
app.include_router(organizations_router)
|
app.include_router(organizations_router)
|
||||||
app.include_router(asset_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()
|
||||||
Reference in New Issue
Block a user