def landing(request): stats = cache.get("landing_stats") if not stats: stats = { "users": User.registered_members().count(), "countries": User.registered_members().values("country").annotate( total=Count("country")).order_by().count() + 1, } cache.set("landing_stats", stats, settings.LANDING_CACHE_TIMEOUT) return render(request, "landing.html", {"stats": stats})
def stats(request): achievements = Achievement.objects\ .annotate(user_count=Count('users'))\ .filter(is_visible=True)\ .filter(user_count__gt=0)\ .exclude(code__in=["old", "parliament_member"])\ .order_by('-user_count') latest_badges = UserBadge.objects\ .select_related("badge", "to_user")\ .order_by('-created_at')[:20] top_badges = list( filter( None.__ne__, [ User.registered_members().filter(id=to_user).first() for to_user, _ in UserBadge.objects.filter( created_at__gte=datetime.utcnow() - timedelta(days=150)). values_list("to_user").annotate( sum_price=Sum("badge__price_days")).order_by("-sum_price") [:7] # select more in case someone gets deleted ]))[:5] # filter None moderators = User.objects\ .filter(Q(roles__contains=[User.ROLE_MODERATOR]) | Q(roles__contains=[User.ROLE_GOD])) parliament = User.objects.filter( achievements__achievement_id="parliament_member") top_users = User.objects\ .filter( moderation_status=User.MODERATION_STATUS_APPROVED, membership_expires_at__gte=datetime.utcnow() + timedelta(days=70) )\ .order_by("-membership_expires_at")[:64] return render( request, "pages/stats.html", { "achievements": achievements, "latest_badges": latest_badges, "top_badges": top_badges, "top_users": top_users, "moderators": moderators, "parliament": parliament, })
def api_search_users(request): if request.method != "GET": raise Http404() prefix = request.GET.get("prefix", "") if len(prefix) < MIN_PREFIX_LENGTH or len(prefix) > MAX_PREFIX_LENGTH: return JsonResponse({ "users": [] }) suggested_users = User.registered_members().filter(slug__startswith=prefix)[:5] return JsonResponse({ "users": [{ "slug": user.slug, "full_name": user.full_name } for user in suggested_users], })
def people(request): users = User.registered_members().order_by("-created_at").select_related( "geo") query = request.GET.get("query") if query: users = users.filter(index__index=SearchQuery(query, config="russian")) tags = request.GET.getlist("tags") if tags: users = users.filter(index__tags__contains=tags) country = request.GET.get("country") if country: users = users.filter(country=country) filters = request.GET.getlist("filters") if filters: if "faang" in filters: users = users.filter(company__in=[ "Facebook", "Apple", "Google", "Amazon", "Netflix", "Microsoft", "Фейсбук", "Гугл", "Амазон", "Нетфликс", "Майкрософт", "Микрософт" ]) if "same_city" in filters: users = users.filter(city=request.me.city) if "activity" in filters: users = users.filter(last_activity_at__gte=datetime.utcnow() - timedelta(days=30)) tags_with_stats = Tag.tags_with_stats() tag_stat_groups = group_by(tags_with_stats, "group", todict=True) tag_stat_groups.update({ "travel": [ tag for tag in tag_stat_groups[Tag.GROUP_CLUB] if tag.code in { "can_coffee", "can_city", "can_beer", "can_office", "can_sleep", } ], "grow": [ tag for tag in tag_stat_groups[Tag.GROUP_CLUB] if tag.code in { "can_advice", "can_project", "can_teach", "search_idea", "can_idea", "can_invest", "search_mentor", "can_mentor", "can_hobby" } ], "work": [ tag for tag in tag_stat_groups[Tag.GROUP_CLUB] if tag.code in { "can_refer", "search_employees", "search_job", "search_remote", "search_relocate" } ], }) active_countries = User.registered_members().filter(country__isnull=False)\ .values("country")\ .annotate(country_count=Count("country"))\ .order_by("-country_count") map_stat_groups = { "💼 Топ компаний": top(users, "company")[:5], "🏰 Города": top(users, "city")[:5], "🎬 Экспертиза": top(UserExpertise.objects.filter(user_id__in=[u.id for u in users]), "name")[:5], } return render( request, "users/people.html", { "people_query": { "query": query, "country": country, "tags": tags, "filters": filters, }, "users": users, "users_paginated": paginate(request, users, page_size=settings.PEOPLE_PAGE_SIZE), "tag_stat_groups": tag_stat_groups, "max_tag_user_count": max(tag.user_count for tag in tags_with_stats), "active_countries": active_countries, "map_stat_groups": map_stat_groups, })