Skip to content

Commit

Permalink
pro-111: started working on feed, create view and helpers
Browse files Browse the repository at this point in the history
  • Loading branch information
Yakser committed Jan 18, 2024
1 parent b26e2fc commit 11a9866
Show file tree
Hide file tree
Showing 10 changed files with 81 additions and 2 deletions.
Empty file added feed/__init__.py
Empty file.
6 changes: 6 additions & 0 deletions feed/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.apps import AppConfig


class FeedConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "feed"
Empty file added feed/constants.py
Empty file.
19 changes: 19 additions & 0 deletions feed/helpers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from projects.models import Project


def get_n_random_projects(num: int) -> list[Project]:
tries = 3
projects = set()

while len(projects) < num and tries > 0:
project = Project.objects.filter(draft=False).order_by("?").first()

if project not in projects:
projects.add(project)
else:
tries -= 1
return list(projects)


def get_n_latest_created_projects(num: int) -> list[Project]:
return list(Project.objects.filter(draft=False).order_by("-datetime_created")[:num])
Empty file added feed/migrations/__init__.py
Empty file.
6 changes: 6 additions & 0 deletions feed/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from rest_framework import serializers


class FeedListSerializer(serializers.Serializer):
# todo: add type for feed news item
pass
9 changes: 9 additions & 0 deletions feed/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from django.urls import path

from feed.views import FeedList

app_name = "feed"

urlpatterns = [
path("", FeedList.as_view()),
]
39 changes: 39 additions & 0 deletions feed/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
from drf_yasg import openapi
from drf_yasg.utils import swagger_auto_schema
from rest_framework import status
from rest_framework.request import Request
from rest_framework.response import Response
from rest_framework.views import APIView

from feed.helpers import get_n_random_projects, get_n_latest_created_projects
from projects.serializers import ProjectListSerializer


class FeedList(APIView):
@swagger_auto_schema(
responses={
200: openapi.Response(
description="List of some news: new projects, vacancies, project, users and program news",
schema=openapi.Schema(
type=openapi.TYPE_ARRAY,
items=openapi.Schema(
type=openapi.TYPE_OBJECT,
description="Feed item",
),
),
)
}
)
def get(self, request: Request, *args, **kwargs) -> Response:
return Response(status=status.HTTP_200_OK, data=collect_feed())


def collect_feed() -> list:
n_random_projects = get_n_random_projects(3)
n_latest_created_projects = get_n_latest_created_projects(3)
serializer = ProjectListSerializer(
data=set(n_random_projects + n_latest_created_projects), many=True
)

serializer.is_valid()
return serializer.data
2 changes: 1 addition & 1 deletion procollab/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,13 +93,13 @@
"events.apps.EventsConfig",
"partner_programs.apps.PartnerProgramsConfig",
"mailing.apps.MailingConfig",
"feed.apps.FeedConfig",
# Rest framework
"rest_framework",
"rest_framework_simplejwt",
"rest_framework_simplejwt.token_blacklist",
"django_cleanup.apps.CleanupConfig",
"django_rest_passwordreset",
# "rest_framework.authtoken",
# Plugins
"corsheaders",
"django_filters",
Expand Down
2 changes: 1 addition & 1 deletion procollab/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,12 @@
path("chats/", include("chats.urls", namespace="chats")),
path("events/", include("events.urls", namespace="events")),
path("programs/", include("partner_programs.urls", namespace="partner_programs")),
path("feed/", include("feed.urls", namespace="feed")),
path("api/token/", TokenObtainPairView.as_view(), name="token_obtain_pair"),
path("api/token/refresh/", TokenRefreshView.as_view(), name="token_refresh"),
path("api/token/verify/", TokenVerifyView.as_view(), name="token_verify"),
path("", include("metrics.urls", namespace="metrics")),
path("django_prometheus/", include("django_prometheus.urls")),
path("mailing_test/", include("mailing.urls")), # todo Убрать
]

if settings.DEBUG:
Expand Down

0 comments on commit 11a9866

Please sign in to comment.