Files
PYTV/api/routers/user.py
2026-03-08 16:48:58 -04:00

59 lines
1.7 KiB
Python

from ninja import Router
from core.models import AppUser
from django.shortcuts import get_object_or_404
from ninja import Schema
from typing import List, Optional
from datetime import datetime
router = Router()
class UserSchema(Schema):
id: int
username: str
email: str
is_staff: bool
is_superuser: bool
is_active: bool
date_joined: datetime
class UserCreateSchema(Schema):
username: str
email: str
password: str
is_superuser: bool = False
class UserUpdateSchema(Schema):
username: Optional[str] = None
email: Optional[str] = None
is_active: Optional[bool] = None
@router.get("/", response=List[UserSchema])
def list_users(request):
return AppUser.objects.all()
@router.get("/{user_id}", response=UserSchema)
def get_user(request, user_id: int):
return get_object_or_404(AppUser, id=user_id)
@router.post("/", response={201: UserSchema})
def create_user(request, payload: UserCreateSchema):
if payload.is_superuser:
user = AppUser.objects.create_superuser(payload.username, payload.email, payload.password)
else:
user = AppUser.objects.create_user(payload.username, payload.email, payload.password)
return 201, user
@router.patch("/{user_id}", response=UserSchema)
def update_user(request, user_id: int, payload: UserUpdateSchema):
user = get_object_or_404(AppUser, id=user_id)
for attr, value in payload.dict(exclude_unset=True).items():
setattr(user, attr, value)
user.save()
return user
@router.delete("/{user_id}", response={204: None})
def delete_user(request, user_id: int):
user = get_object_or_404(AppUser, id=user_id)
user.delete()
return 204, None