45 lines
1.1 KiB
Python
45 lines
1.1 KiB
Python
import typing
|
|
import uuid
|
|
|
|
import fastapi
|
|
from fastapi import HTTPException
|
|
import sqlmodel
|
|
|
|
import app.api.auth.deps
|
|
from app.api.auth.deps import BearerAuth
|
|
from app.api.events.invites.routers import invites_router
|
|
import app.core.db
|
|
from app.models import Event
|
|
import app.models.base
|
|
from app.models.user import User
|
|
|
|
|
|
@invites_router.get(
|
|
'/{invite_id}',
|
|
responses={
|
|
fastapi.status.HTTP_400_BAD_REQUEST: {
|
|
'model': app.models.base.BasicResponse,
|
|
'detail': 'Invalid invite',
|
|
}
|
|
},
|
|
dependencies=[fastapi.Depends(BearerAuth())],
|
|
)
|
|
def join_by_invite(
|
|
invite_id: uuid.UUID,
|
|
user: typing.Annotated[
|
|
User, fastapi.Depends(app.api.auth.deps.get_current_user)
|
|
],
|
|
) -> app.models.event.Event:
|
|
with sqlmodel.Session(app.core.db.engine) as session:
|
|
user = session.get(User, user.id)
|
|
event = session.query(Event).filter_by(invite=invite_id).first()
|
|
if not event:
|
|
raise HTTPException(
|
|
fastapi.status.HTTP_404_NOT_FOUND, detail='Invite not found'
|
|
)
|
|
|
|
event.users.append(user)
|
|
session.commit()
|
|
|
|
return event
|