feat: add community contribution ranks
This commit is contained in:
@@ -20,6 +20,8 @@ from apps.blog.api.schemas import (
|
||||
BlogFiltersSchema,
|
||||
BlogInteractionSchema,
|
||||
BlogProfileActivitySchema,
|
||||
PaginatedProfileCommentsSchema,
|
||||
PaginatedProfilePostsSchema,
|
||||
CategorySchema,
|
||||
CategoryWriteSchema,
|
||||
CommentCreateSchema,
|
||||
@@ -608,6 +610,48 @@ def my_blog_activity(request):
|
||||
}
|
||||
|
||||
|
||||
def _profile_page_payload(queryset, page: int, page_size: int = 10):
|
||||
count = queryset.count()
|
||||
total_pages = max(1, (count + page_size - 1) // page_size)
|
||||
start = (page - 1) * page_size
|
||||
return {
|
||||
"count": count,
|
||||
"page": page,
|
||||
"page_size": page_size,
|
||||
"total_pages": total_pages,
|
||||
"results": list(queryset[start : start + page_size]),
|
||||
}
|
||||
|
||||
|
||||
@blog_router.get("/me/activity/liked", response=PaginatedProfilePostsSchema, auth=jwt_auth)
|
||||
def my_liked_posts(request, page: int = Query(1, ge=1)):
|
||||
queryset = _published_queryset().filter(likes__user=request.auth).order_by("-published_at", "-created_at", "-id")
|
||||
return _profile_page_payload(queryset, page)
|
||||
|
||||
|
||||
@blog_router.get("/me/activity/saved", response=PaginatedProfilePostsSchema, auth=jwt_auth)
|
||||
def my_saved_posts(request, page: int = Query(1, ge=1)):
|
||||
queryset = _published_queryset().filter(saves__user=request.auth).order_by("-published_at", "-created_at", "-id")
|
||||
return _profile_page_payload(queryset, page)
|
||||
|
||||
|
||||
@blog_router.get("/me/activity/comments", response=PaginatedProfileCommentsSchema, auth=jwt_auth)
|
||||
def my_blog_comments(request, page: int = Query(1, ge=1)):
|
||||
queryset = (
|
||||
Comment.objects.filter(
|
||||
author=request.auth,
|
||||
is_approved=True,
|
||||
is_hidden=False,
|
||||
is_deleted=False,
|
||||
post__status=Post.StatusChoices.PUBLISHED,
|
||||
post__is_deleted=False,
|
||||
)
|
||||
.select_related("author", "post")
|
||||
.order_by("-created_at", "-id")
|
||||
)
|
||||
return _profile_page_payload(queryset, page)
|
||||
|
||||
|
||||
@blog_router.get("/banners", response=List[BlogBannerSchema])
|
||||
def list_banners(request):
|
||||
return BlogBanner.objects.filter(is_active=True, is_deleted=False).order_by("sort_order", "-created_at")
|
||||
|
||||
Reference in New Issue
Block a user