FEATURE(accounts): provide all users endpoint
provide all users endpoint
This commit is contained in:
parent
cc6a76581e
commit
e6ea563d19
3 changed files with 21 additions and 9 deletions
|
|
@ -1,14 +1,15 @@
|
||||||
import django_filters
|
import django_filters
|
||||||
from .models import User
|
from .models import User
|
||||||
|
|
||||||
|
class ListUUIDFilter(django_filters.BaseInFilter, django_filters.UUIDFilter):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class UserFilter(django_filters.FilterSet):
|
class UserFilter(django_filters.FilterSet):
|
||||||
uuid_in = django_filters.UUIDFilter(required=True, lookup_expr='in')
|
uuid_in = ListUUIDFilter(field_name='uuid', required=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
fields = {
|
fields = {
|
||||||
# 'uuid': ['in'],
|
# 'uuid': ['in'],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,17 +2,17 @@ from django.urls import path
|
||||||
from django.contrib.auth.views import LogoutView
|
from django.contrib.auth.views import LogoutView
|
||||||
from .views import UserListView, UserPublicRetrieveView, AccountView, RequestOTPView, ChangePasswordView, \
|
from .views import UserListView, UserPublicRetrieveView, AccountView, RequestOTPView, ChangePasswordView, \
|
||||||
OTPLoginView, ProfileDetailView, ProfileUpdateView, RequestOTTView, UserCurrentAvatarUrlView, UserInquiryView, \
|
OTPLoginView, ProfileDetailView, ProfileUpdateView, RequestOTTView, UserCurrentAvatarUrlView, UserInquiryView, \
|
||||||
UserDetailedRetrieveView, UserSessionListView
|
UserDetailedRetrieveView, UserSessionListView, UserProfileView
|
||||||
|
|
||||||
app_name = "users"
|
app_name = "users"
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('login/', OTPLoginView.as_view(), name='login'),
|
path('login/', OTPLoginView.as_view(), name='login'),
|
||||||
path('logout/', LogoutView.as_view(), name='logout'),
|
path('logout/', LogoutView.as_view(), name='logout'),
|
||||||
path('account/', ProfileDetailView.as_view(), name='account_detail'),
|
path('account/', ProfileDetailView.as_view(), name='account_detail'),
|
||||||
path('account/update/', ProfileUpdateView.as_view(), name='account_update'),
|
path('account/update/', ProfileUpdateView.as_view(), name='account_update'),
|
||||||
path('api/account/', AccountView.as_view(), name='account_api'),
|
path('api/account/', AccountView.as_view(), name='account_api'),
|
||||||
path('api/users/', UserListView.as_view(), name='user_list_api'),
|
path('api/users/all', UserListView.as_view(), name='user_list_api'),
|
||||||
|
path('api/users/', UserProfileView.as_view(), name='user_profile_list_api'),
|
||||||
path('api/sessions/', UserSessionListView.as_view(), name='user_sessions_api'),
|
path('api/sessions/', UserSessionListView.as_view(), name='user_sessions_api'),
|
||||||
path('api/users/<uuid>/', UserPublicRetrieveView.as_view(), name='user_public_retrieve_api'),
|
path('api/users/<uuid>/', UserPublicRetrieveView.as_view(), name='user_public_retrieve_api'),
|
||||||
path('api/users/<uuid>/avatar', UserCurrentAvatarUrlView.as_view(), name='user_avatar_api'),
|
path('api/users/<uuid>/avatar', UserCurrentAvatarUrlView.as_view(), name='user_avatar_api'),
|
||||||
|
|
@ -22,3 +22,4 @@ urlpatterns = [
|
||||||
path('api/change_password/', ChangePasswordView.as_view(), name='change_password_api'),
|
path('api/change_password/', ChangePasswordView.as_view(), name='change_password_api'),
|
||||||
path('api/inquiry/', UserInquiryView.as_view(), name='user_inquiry_api'),
|
path('api/inquiry/', UserInquiryView.as_view(), name='user_inquiry_api'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,17 +26,27 @@ from utils.throttles import RequestOTPDayRateThrottle, RequestOTPMinRateThrottle
|
||||||
UserModel = get_user_model()
|
UserModel = get_user_model()
|
||||||
|
|
||||||
|
|
||||||
class UserListView(generics.ListAPIView):
|
class BaseUserListView(generics.ListAPIView):
|
||||||
permission_classes = [IsAuthenticatedOrTokenMatchesOASRequirements]
|
permission_classes = [IsAuthenticatedOrTokenMatchesOASRequirements]
|
||||||
queryset = User.objects.all()
|
queryset = User.objects.all()
|
||||||
serializer_class = PublicUserSerializer
|
serializer_class = PublicUserSerializer
|
||||||
filter_backends = (DjangoFilterBackend,)
|
filter_backends = (DjangoFilterBackend,)
|
||||||
filterset_class = UserFilter
|
|
||||||
|
|
||||||
|
# Make filterset_class abstract - must be defined in subclasses
|
||||||
|
filterset_class = None
|
||||||
|
|
||||||
|
class UserProfileView(BaseUserListView):
|
||||||
|
filterset_class = UserFilter
|
||||||
required_alternate_scopes = {
|
required_alternate_scopes = {
|
||||||
"GET": [["accounts.profile:list"]],
|
"GET": [["accounts.profile:list"]],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class UserListView(BaseUserListView):
|
||||||
|
# filterset_class = UserFilter
|
||||||
|
required_alternate_scopes = {
|
||||||
|
"GET": [["accounts.users:list"]],
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class UserPublicRetrieveView(generics.RetrieveAPIView):
|
class UserPublicRetrieveView(generics.RetrieveAPIView):
|
||||||
permission_classes = [IsAuthenticatedOrTokenMatchesOASRequirements]
|
permission_classes = [IsAuthenticatedOrTokenMatchesOASRequirements]
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue