Commit de40bc68 authored by Ilham Maulana's avatar Ilham Maulana 💻

fix: password required on update profile

parent 0ea18f2d
...@@ -11,25 +11,22 @@ class UserSerializer(serializers.ModelSerializer): ...@@ -11,25 +11,22 @@ class UserSerializer(serializers.ModelSerializer):
"id", "id",
"username", "username",
"email", "email",
"password",
"first_name", "first_name",
"last_name", "last_name",
"is_staff", "is_staff",
"password",
] ]
extra_kwargs = {"password": {"write_only": True}}
def create(self, validated_data): def create(self, validated_data):
password = validated_data.get("password") password = validated_data.get("password")
print(validated_data)
user = User.objects.create(**validated_data) user = User.objects.create(**validated_data)
user.set_password(password) user.set_password(password)
user.save() user.save()
return user return user
def update(self, instance, validated_data):
partial = validated_data.get("is_partial", False)
return serializers.ModelSerializer.update(self, instance, validated_data)
class LoginHistorySerializer(serializers.ModelSerializer): class LoginHistorySerializer(serializers.ModelSerializer):
class Meta: class Meta:
...@@ -157,9 +154,14 @@ class MemberSerializer(serializers.ModelSerializer): ...@@ -157,9 +154,14 @@ class MemberSerializer(serializers.ModelSerializer):
return instance return instance
class TokenSerializer(TokenObtainPairSerializer): class UpdateProfileSerializer(serializers.ModelSerializer):
@classmethod class Meta:
def get_token(cls, user): model = User
token = super().get_token(user) fields = [
token["user_id"] = user.id "id",
return token "username",
"email",
"first_name",
"last_name",
"is_staff",
]
...@@ -19,6 +19,7 @@ from .serializers import ( ...@@ -19,6 +19,7 @@ from .serializers import (
MemberSerializer, MemberSerializer,
User, User,
UserSerializer, UserSerializer,
UpdateProfileSerializer,
) )
from .permissions import IsStaffUser, IsNotStaffUser from .permissions import IsStaffUser, IsNotStaffUser
...@@ -307,8 +308,8 @@ class ResetPasswordConfirmView(views.APIView): ...@@ -307,8 +308,8 @@ class ResetPasswordConfirmView(views.APIView):
) )
class UserViewSet(viewsets.ModelViewSet): class UpdateProfileView(viewsets.ModelViewSet):
serializer_class = UserSerializer serializer_class = UpdateProfileSerializer
queryset = User.objects.all().order_by("id") queryset = User.objects.all().order_by("id")
def update(self, request, pk): def update(self, request, pk):
...@@ -316,4 +317,16 @@ class UserViewSet(viewsets.ModelViewSet): ...@@ -316,4 +317,16 @@ class UserViewSet(viewsets.ModelViewSet):
serializer = self.get_serializer(instance, data=request.data) serializer = self.get_serializer(instance, data=request.data)
serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
serializer.save() serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
user_id = serializer.data.get("id")
user = User.objects.get(pk=user_id)
account_id = None
if user.is_staff:
account_id = user.librarian.id
else:
account_id = user.member.id
response = serializer.data
response["account_id"] = account_id
return Response(response, status=status.HTTP_200_OK)
...@@ -14,7 +14,7 @@ from .auth.views import ( ...@@ -14,7 +14,7 @@ from .auth.views import (
TokenResetPasswordView, TokenResetPasswordView,
ResetPasswordConfirmView, ResetPasswordConfirmView,
UserDetailView, UserDetailView,
UserViewSet, UpdateProfileView,
) )
from .book.views import BookViewSet, CategoryViewSet from .book.views import BookViewSet, CategoryViewSet
from .loans.views import ( from .loans.views import (
...@@ -26,7 +26,7 @@ from .loans.views import ( ...@@ -26,7 +26,7 @@ from .loans.views import (
router = routers.DefaultRouter() router = routers.DefaultRouter()
router.register(r"user", UserViewSet, basename="user") router.register(r"user", UpdateProfileView, basename="user")
router.register(r"librarians", LibrarianViewSet, basename="librarians") router.register(r"librarians", LibrarianViewSet, basename="librarians")
router.register(r"members", MemberViewSet, basename="members") router.register(r"members", MemberViewSet, basename="members")
router.register(r"books", BookViewSet, basename="books") router.register(r"books", BookViewSet, basename="books")
...@@ -53,6 +53,11 @@ urlpatterns = [ ...@@ -53,6 +53,11 @@ urlpatterns = [
UserDetailView.as_view(), UserDetailView.as_view(),
name="user_detail", name="user_detail",
), ),
path(
"user",
UserDetailView.as_view(),
name="user_detail",
),
path( path(
"reset-password/request-token", "reset-password/request-token",
TokenResetPasswordView.as_view(), TokenResetPasswordView.as_view(),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment