-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #3 from PROCOLLAB-github/dev
Dev
- Loading branch information
Showing
30 changed files
with
535 additions
and
51 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
from rest_framework.permissions import BasePermission | ||
|
||
from core.constants import SAFE_METHODS | ||
|
||
|
||
class IndustryPermission(BasePermission): | ||
""" | ||
Allows access to update only to staff users. | ||
""" | ||
|
||
def has_permission(self, request, view) -> bool: | ||
if request.method in SAFE_METHODS or request.user and request.user.is_staff: | ||
return True | ||
return False | ||
|
||
def has_object_permission(self, request, view, obj) -> bool: | ||
if request.method in SAFE_METHODS or request.user and request.user.is_staff: | ||
return True | ||
return False |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,18 +1,17 @@ | ||
from rest_framework import generics | ||
|
||
from core.permissions import IsStaffOrReadOnly | ||
from industries.models import Industry | ||
from industries.serializers import IndustrySerializer | ||
|
||
|
||
class IndustryList(generics.ListCreateAPIView): | ||
queryset = Industry.objects.all() | ||
serializer_class = IndustrySerializer | ||
# TODO check permissions using JWT | ||
# permission_classes = [permissions.IsAuthenticatedOrReadOnly] | ||
permission_classes = [IsStaffOrReadOnly] | ||
|
||
|
||
class IndustryDetail(generics.RetrieveUpdateDestroyAPIView): | ||
queryset = Industry.objects.all() | ||
serializer_class = IndustrySerializer | ||
# TODO check permissions using JWT | ||
# permission_classes = [permissions.IsAuthenticatedOrReadOnly] | ||
permission_classes = [IsStaffOrReadOnly] |
Empty file.
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
from django.apps import AppConfig | ||
|
||
|
||
class MetricsConfig(AppConfig): | ||
default_auto_field = "django.db.models.BigAutoField" | ||
name = "metrics" | ||
verbose_name = "Метрики" |
Empty file.
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
from django.urls import path | ||
|
||
|
||
from metrics.views import MetricsView | ||
|
||
app_name = "metrics" | ||
|
||
urlpatterns = [ | ||
path("", MetricsView.as_view()), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
from django.contrib.auth import get_user_model | ||
from projects.models import Project | ||
from rest_framework import permissions | ||
from rest_framework.response import Response | ||
from rest_framework.views import APIView | ||
from users.models import Expert, Investor, Member, Mentor | ||
from vacancy.models import Vacancy | ||
|
||
User = get_user_model() | ||
|
||
|
||
class MetricsView(APIView): | ||
""" | ||
Metrics view | ||
Shows metrics from the database. | ||
""" | ||
|
||
permission_classes = [permissions.IsAdminUser] | ||
|
||
def get(self, request, format=None): | ||
data = {} | ||
|
||
models = [User, Expert, Investor, Member, Mentor, Project, Vacancy] | ||
|
||
for model in models: | ||
data = self._update_total_counts(data, model) | ||
|
||
return Response(data) | ||
|
||
def _update_total_counts(self, data, model) -> dict[str, int]: | ||
""" | ||
Updates the total counts of the given model. | ||
Args: | ||
data: dict with data. | ||
model: model to get count from. | ||
Returns: | ||
dict: A dictionary with the updated data. | ||
For example: | ||
{ | ||
"total_Investor_count": 3, | ||
} | ||
""" | ||
|
||
new_data = dict(data) | ||
new_data[f"total_{model.__name__}_count"] = model.objects.count() | ||
|
||
return new_data |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
from django.db.models import Manager | ||
from django.db.models import Prefetch | ||
|
||
from industries.models import Industry | ||
from users.models import CustomUser | ||
|
||
|
||
class ProjectManager(Manager): | ||
def get_projects_for_list_view(self): | ||
return ( | ||
self.get_queryset() | ||
.prefetch_related( | ||
Prefetch( | ||
"industry", | ||
queryset=Industry.objects.only("name").all(), | ||
), | ||
Prefetch( | ||
"leader", | ||
queryset=CustomUser.objects.only("id").all(), | ||
), | ||
) | ||
.only( | ||
"id", | ||
"name", | ||
"leader__id", | ||
"description", | ||
"short_description", | ||
"step", | ||
"industry__name", | ||
"image_address", | ||
"draft", | ||
"datetime_created", | ||
) | ||
.all() | ||
) | ||
|
||
def get_projects_for_detail_view(self): | ||
return ( | ||
self.get_queryset() | ||
.prefetch_related( | ||
"collaborators", | ||
"achievements", | ||
) | ||
.all() | ||
) | ||
|
||
|
||
class AchievementManager(Manager): | ||
def get_achievements_for_list_view(self): | ||
return ( | ||
self.get_queryset() | ||
.select_related("project") | ||
.only("id", "title", "status", "project__id") | ||
) | ||
|
||
def get_achievements_for_detail_view(self): | ||
return ( | ||
self.get_queryset() | ||
.select_related("project") | ||
.only("id", "title", "status", "project") | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.