This commit is contained in:
Egor Matveev
2022-02-02 00:15:14 +03:00
parent 82a15f15c6
commit 715cd274c3
10 changed files with 152 additions and 19 deletions

View File

@@ -37,6 +37,10 @@ class UserInfo(models.Model):
def has_favourite_language(self):
return self.favourite_language_id is not None
@property
def verified_friends(self):
return User.objects.filter(Q(to_friendship__from_user=self.user) | Q(from_friendship__to_user=self.user))
@cached_property
def friends(self):
return Friendship.objects.filter(Q(to_user=self.user) | Q(from_user=self.user)).order_by("verified")

47
Main/views/GroupView.py Normal file
View File

@@ -0,0 +1,47 @@
from django.contrib.auth.models import User
from SprintLib.BaseView import BaseView, AccessError
class GroupView(BaseView):
required_login = True
endpoint = 'group'
view_file = 'group.html'
owner = False
def pre_handle(self):
self.owner = self.entities.group.creator == self.request.user or self.request.user.username in self.entities.group.editors
def get(self):
if self.owner:
self.context['possible_users'] = set(self.entities.group.users.all()) | set(self.request.user.userinfo.verified_friends)
def post_sets_edit(self):
if not self.owner:
raise AccessError()
current_sets = self.entities.group.sets.all()
set_ids = [set.id for set in current_sets]
for key, value in self.request.POST.items():
if key.startswith("set_"):
i = int(key.split("_")[1])
if i not in set_ids:
self.entities.group.sets.add(i)
to_delete = [i for i in set_ids if "set_" + str(i) not in self.request.POST]
for t in to_delete:
self.entities.group.sets.remove(t)
return "/group?group_id=" + str(self.entities.group.id)
def post_users_edit(self):
if not self.owner:
raise AccessError()
current_users = self.entities.group.users.all()
users_ids = [user.id for user in current_users]
for key, value in self.request.POST.items():
if key.startswith("user_"):
i = int(key.split("_")[1])
if i not in users_ids:
self.entities.group.users.add(i)
to_delete = [i for i in users_ids if "user_" + str(i) not in self.request.POST]
for t in to_delete:
self.entities.group.users.remove(t)
return "/group?group_id=" + str(self.entities.group.id)

View File

@@ -1,9 +1,9 @@
from random import sample
from django.db.models import Count, Max
from django.db.models import Count, Max, Q
from django.utils import timezone
from Main.models import Task, UserInfo, Solution
from Main.models import Task, UserInfo, Solution, Group
from SprintLib.BaseView import BaseView
@@ -29,3 +29,4 @@ class MainView(BaseView):
setattr(task, 'solution', Solution.objects.filter(user=self.request.user, task=task).first())
new_tasks = set(Task.objects.filter(public=True)) - set(all_tasks)
self.context['new_tasks'] = sample(new_tasks, k=min(5, len(new_tasks)))
self.context['groups'] = Group.objects.filter(Q(editors__in=self.request.user.username) | Q(creator=self.request.user) | Q(users=self.request.user)).distinct()

View File

@@ -14,17 +14,11 @@ class SolutionsTableView(BaseView):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.filters = [
self.filter_user,
self.filter_task,
self.filter_set,
self.filter_task,
]
self.queryset = Solution.objects.all()
def filter_user(self, queryset: QuerySet):
if 'username' in self.request.GET:
return queryset.filter(user__username=self.request.GET["username"])
return queryset
def filter_task(self, queryset: QuerySet):
if 'task_id' in self.request.GET:
return queryset.filter(task_id=int(self.request.GET['task_id']))
@@ -32,7 +26,7 @@ class SolutionsTableView(BaseView):
def filter_set(self, queryset: QuerySet):
if 'set_id' in self.request.GET:
return queryset.filter()
return queryset.filter(task__settasks__set_id=self.request.GET['set_id']).distinct()
return queryset
def pre_handle(self):

View File

@@ -7,10 +7,6 @@ class SolutionsView(BaseView):
view_file = "solutions.html"
def get(self):
self.context["username"] = self.request.GET.get("username")
self.context["task_id"] = self.request.GET.get("task_id")
if self.context["task_id"]:
self.context["task_id"] = int(self.context["task_id"])
self.context["set_id"] = self.request.GET.get("set_id")
if self.context["set_id"]:
self.context["set_id"] = int(self.context["set_id"])
self.context['task_id'] = self.request.GET.get('task_id')
if not self.context['task_id']:
self.context['set_id'] = self.request.GET['set_id']

View File

@@ -19,3 +19,4 @@ from Main.views.ChatView import ChatView
from Main.views.ChatWithView import ChatWithView
from Main.views.MessagesView import MessagesView
from Main.views.SetView import SetView
from Main.views.GroupView import GroupView