59 lines
1.7 KiB
Python
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
|