Skip to content

Commit ea4c86e

Browse files
committed
Merge branch 'master' into dev
2 parents e030828 + ad4f2e5 commit ea4c86e

4 files changed

Lines changed: 58 additions & 8 deletions

File tree

users/helpers.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,12 @@ def update_links(links, pk):
8787
for link in links
8888
]
8989
)
90+
91+
92+
def force_verify_user(user: User) -> None:
93+
if user.is_active:
94+
return
95+
96+
# todo: send email
97+
user.is_active = True
98+
user.save()
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Generated by Django 4.2.3 on 2023-10-27 06:48
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("users", "0040_alter_customuser_user_type_and_more"),
10+
]
11+
12+
operations = [
13+
migrations.AlterModelOptions(
14+
name="customuser",
15+
options={
16+
"ordering": ["-ordering_score", "id"],
17+
"verbose_name": "Пользователь",
18+
"verbose_name_plural": "Пользователи",
19+
},
20+
),
21+
]

users/urls.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
ResendVerifyEmail,
1919
CurrentUserPrograms,
2020
CurrentUserProgramsTags,
21+
ForceVerifyView,
2122
)
2223

2324
app_name = "users"
@@ -33,6 +34,7 @@
3334
path("users/types/", UserTypesView.as_view()),
3435
path("users/<int:pk>/", UserDetail.as_view()),
3536
path("users/<int:pk>/set_onboarding_stage/", SetUserOnboardingStage.as_view()),
37+
path("users/<int:pk>/force_verify/", ForceVerifyView.as_view()),
3638
path("users/current/", CurrentUser.as_view()),
3739
# todo: change password view
3840
path("users/current/programs/", CurrentUserPrograms.as_view()),

users/views.py

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from django.db.models import Q
77
from django.shortcuts import redirect
88
from django_filters import rest_framework as filters
9-
from rest_framework import status
9+
from rest_framework import status, permissions
1010
from rest_framework.generics import (
1111
GenericAPIView,
1212
ListAPIView,
@@ -28,10 +28,12 @@
2828
UserProgramsSerializer,
2929
PartnerProgramListSerializer,
3030
)
31+
from projects.pagination import ProjectsPagination
3132
from projects.serializers import ProjectListSerializer
3233
from users.helpers import (
3334
verify_email,
3435
check_related_fields_update,
36+
force_verify_user,
3537
)
3638
from users.constants import (
3739
VERBOSE_ROLE_TYPES,
@@ -248,17 +250,20 @@ class AchievementDetail(RetrieveUpdateDestroyAPIView):
248250
permission_classes = [IsAchievementOwnerOrReadOnly]
249251

250252

251-
class UserProjectsList(APIView):
253+
class UserProjectsList(GenericAPIView):
252254
permission_classes = [IsAuthenticated]
255+
pagination_class = ProjectsPagination
256+
serializer_class = ProjectListSerializer
253257

254258
def get(self, request):
255-
serializer = ProjectListSerializer(
256-
Project.objects.get_user_projects_for_list_view().filter(
257-
Q(leader_id=self.request.user.id)
258-
| Q(collaborator__user=self.request.user)
259-
),
260-
many=True,
259+
queryset = Project.objects.get_user_projects_for_list_view().filter(
260+
Q(leader_id=self.request.user.id) | Q(collaborator__user=self.request.user)
261261
)
262+
263+
page = self.paginate_queryset(queryset)
264+
if page is not None:
265+
serializer = self.get_serializer(page, many=True)
266+
return self.get_paginated_response(serializer.data)
262267
return Response(serializer.data, status=status.HTTP_200_OK)
263268

264269

@@ -348,3 +353,16 @@ def post(self, request, *args, **kwargs):
348353
)
349354
except Exception:
350355
return Response(status=status.HTTP_400_BAD_REQUEST)
356+
357+
358+
class ForceVerifyView(APIView):
359+
queryset = User.objects.get_users_for_detail_view()
360+
permission_classes = [permissions.IsAdminUser]
361+
362+
def post(self, request, *args, **kwargs):
363+
try:
364+
user = User.objects.get(pk=kwargs["pk"])
365+
force_verify_user(user)
366+
return Response(status=status.HTTP_200_OK)
367+
except User.DoesNotExist:
368+
return Response(status=status.HTTP_404_NOT_FOUND)

0 commit comments

Comments
 (0)