compass/backend/api/supabase_user.py

85 lines
2.4 KiB
Python

from fastapi import APIRouter, Depends
from ..services import SupabaseUserService
from ..models.user_model import User, UserTypeEnum
from typing import List
api = APIRouter(prefix="/api/supabaseuser")
openapi_tags = {
"name": "Supabase Users",
"description": "User profile search and related operations.",
}
@api.get("/", response_model=User, tags=["Supabase Users"])
def get_user(id: str, user_svc: SupabaseUserService = Depends()):
return user_svc.get_user(id)
@api.post("/", response_model=User, tags=["Supabase Users"])
def create_user(
id: str,
email: str,
password: str,
role: UserTypeEnum,
user_svc: SupabaseUserService = Depends(),
):
subject = user_svc.get_user(id)
if subject.role != UserTypeEnum.ADMIN:
raise Exception(f"Insufficient permissions for user {subject.uuid}")
return user_svc.create_user(email=email, password=password, role=role)
@api.put("/", response_model=User, tags=["Supabase Users"])
def update_user(uuid: str, user: User, user_svc: SupabaseUserService = Depends()):
subject = user_svc.get_user(uuid)
if subject.role != UserTypeEnum.ADMIN:
raise Exception(f"Insufficient permissions for user {subject.uuid}")
return user_svc.update_user(user)
@api.delete("/", response_model=None, tags=["Supabase Users"])
def delete_user(uuid: str, user: User, user_svc: SupabaseUserService = Depends()):
subject = user_svc.get_user(uuid)
if subject.role != UserTypeEnum.ADMIN:
raise Exception(f"Insufficient permissions for user {subject.uuid}")
return user_svc.delete_user(user.id)
@api.get("/login", response_model=List[User], tags=["Supabase Users"])
def login_user(
email: str,
password: str,
user_svc: SupabaseUserService = Depends(),
):
return user_svc.login_user(email=email, password=password)
@api.get("/logout", response_model=User, tags=["Supabase Users"])
def logout_user(
id: str,
user_svc: SupabaseUserService = Depends(),
):
return user_svc.logout_user(id=id)
@api.get("/forgot-password", response_model=User, tags=["Supabase Users"])
def forgot_password(
email: str,
user_svc: SupabaseUserService = Depends(),
):
return user_svc.forgot_password(email=email)
@api.get("/update-password", response_model=User, tags=["Supabase Users"])
def update_password(
id: str,
new_password: str,
user_svc: SupabaseUserService = Depends(),
):
return user_svc.update_password(new_password=new_password)