mirror of
https://github.com/rzmk/learnhouse.git
synced 2025-12-19 04:19:25 +00:00
feat: invite-only org signup
This commit is contained in:
parent
689625b0d5
commit
0d775a0fe9
22 changed files with 1733 additions and 387 deletions
|
|
@ -1,6 +1,20 @@
|
|||
from typing import List
|
||||
from typing import List, Literal
|
||||
from fastapi import APIRouter, Depends, Request, UploadFile
|
||||
from sqlmodel import Session
|
||||
from src.services.orgs.invites import (
|
||||
create_invite_code,
|
||||
delete_invite_code,
|
||||
get_invite_code,
|
||||
get_invite_codes,
|
||||
)
|
||||
from src.services.orgs.users import (
|
||||
get_list_of_invited_users,
|
||||
get_organization_users,
|
||||
invite_batch_users,
|
||||
remove_invited_user,
|
||||
remove_user_from_org,
|
||||
update_user_role,
|
||||
)
|
||||
from src.db.organization_config import OrganizationConfigBase
|
||||
from src.db.users import PublicUser
|
||||
from src.db.organizations import (
|
||||
|
|
@ -18,12 +32,10 @@ from src.services.orgs.orgs import (
|
|||
delete_org,
|
||||
get_organization,
|
||||
get_organization_by_slug,
|
||||
get_organization_users,
|
||||
get_orgs_by_user,
|
||||
remove_user_from_org,
|
||||
update_org,
|
||||
update_org_logo,
|
||||
update_user_role,
|
||||
update_org_signup_mechanism,
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -119,6 +131,120 @@ async def api_remove_user_from_org(
|
|||
)
|
||||
|
||||
|
||||
# Config related routes
|
||||
@router.put("/{org_id}/signup_mechanism")
|
||||
async def api_get_org_signup_mechanism(
|
||||
request: Request,
|
||||
org_id: int,
|
||||
signup_mechanism: Literal["open", "inviteOnly"],
|
||||
current_user: PublicUser = Depends(get_current_user),
|
||||
db_session: Session = Depends(get_db_session),
|
||||
):
|
||||
"""
|
||||
Get org signup mechanism
|
||||
"""
|
||||
return await update_org_signup_mechanism(
|
||||
request, signup_mechanism, org_id, current_user, db_session
|
||||
)
|
||||
|
||||
|
||||
# Invites related routes
|
||||
@router.post("/{org_id}/invites")
|
||||
async def api_create_invite_code(
|
||||
request: Request,
|
||||
org_id: int,
|
||||
current_user: PublicUser = Depends(get_current_user),
|
||||
db_session: Session = Depends(get_db_session),
|
||||
):
|
||||
"""
|
||||
Create invite code
|
||||
"""
|
||||
return await create_invite_code(request, org_id, current_user, db_session)
|
||||
|
||||
|
||||
@router.get("/{org_id}/invites")
|
||||
async def api_get_invite_codes(
|
||||
request: Request,
|
||||
org_id: int,
|
||||
current_user: PublicUser = Depends(get_current_user),
|
||||
db_session: Session = Depends(get_db_session),
|
||||
):
|
||||
"""
|
||||
Get invite codes
|
||||
"""
|
||||
return await get_invite_codes(request, org_id, current_user, db_session)
|
||||
|
||||
@router.get("/{org_id}/invites/code/{invite_code}")
|
||||
async def api_get_invite_code(
|
||||
request: Request,
|
||||
org_id: int,
|
||||
invite_code: str,
|
||||
current_user: PublicUser = Depends(get_current_user),
|
||||
db_session: Session = Depends(get_db_session),
|
||||
):
|
||||
"""
|
||||
Get invite code
|
||||
"""
|
||||
print(f"org_id: {org_id}, invite_code: {invite_code}")
|
||||
return await get_invite_code(request, org_id,invite_code, current_user, db_session)
|
||||
|
||||
|
||||
@router.delete("/{org_id}/invites/{org_invite_code_uuid}")
|
||||
async def api_delete_invite_code(
|
||||
request: Request,
|
||||
org_id: int,
|
||||
org_invite_code_uuid: str,
|
||||
current_user: PublicUser = Depends(get_current_user),
|
||||
db_session: Session = Depends(get_db_session),
|
||||
):
|
||||
"""
|
||||
Delete invite code
|
||||
"""
|
||||
return await delete_invite_code(
|
||||
request, org_id, org_invite_code_uuid, current_user, db_session
|
||||
)
|
||||
|
||||
|
||||
@router.post("/{org_id}/invites/users/batch")
|
||||
async def api_invite_batch_users(
|
||||
request: Request,
|
||||
org_id: int,
|
||||
users: str,
|
||||
current_user: PublicUser = Depends(get_current_user),
|
||||
db_session: Session = Depends(get_db_session),
|
||||
):
|
||||
"""
|
||||
Invite batch users
|
||||
"""
|
||||
return await invite_batch_users(request, org_id, users, db_session, current_user)
|
||||
|
||||
|
||||
@router.get("/{org_id}/invites/users")
|
||||
async def api_get_org_users_invites(
|
||||
request: Request,
|
||||
org_id: int,
|
||||
current_user: PublicUser = Depends(get_current_user),
|
||||
db_session: Session = Depends(get_db_session),
|
||||
):
|
||||
"""
|
||||
Get org users invites
|
||||
"""
|
||||
return await get_list_of_invited_users(request, org_id, db_session, current_user)
|
||||
|
||||
@router.delete("/{org_id}/invites/users/{email}")
|
||||
async def api_delete_org_users_invites(
|
||||
request: Request,
|
||||
org_id: int,
|
||||
email: str,
|
||||
current_user: PublicUser = Depends(get_current_user),
|
||||
db_session: Session = Depends(get_db_session),
|
||||
):
|
||||
"""
|
||||
Delete org users invites
|
||||
"""
|
||||
return await remove_invited_user(request, org_id, email, db_session, current_user)
|
||||
|
||||
|
||||
@router.get("/slug/{org_slug}")
|
||||
async def api_get_org_by_slug(
|
||||
request: Request,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue