This commit is contained in:
Egor Matveev 2021-11-22 15:33:26 +03:00
parent 8bf25ef4f0
commit d8946dc267
14 changed files with 70 additions and 12 deletions

View File

@ -24,8 +24,17 @@ def register(message: Message):
bot.send_message(message.chat.id, "Ты уже зарегистрировался") bot.send_message(message.chat.id, "Ты уже зарегистрировался")
return return
user = User.objects.create(username=username) user = User.objects.create(username=username)
UserInfo.objects.create(user=user, telegram_chat_id=message.chat.id) ui = UserInfo.objects.create(user=user, telegram_chat_id=message.chat.id)
bot.send_message(message.chat.id, 'Приветствую в Sprint! Сейчас я помогу тебе создать аккаунт.\nДля начала отправь мне свою фамилию') name = message.from_user.first_name
surname = message.from_user.last_name
if surname is None or surname == '' or name is None or name == '':
bot.send_message(message.chat.id, 'Приветствую в Sprint! Сейчас я помогу тебе создать аккаунт.\nДля начала отправь мне свою фамилию')
else:
ui.surname = surname
ui.name = name
ui.verified = True
ui.save()
bot.send_message(message.chat.id, f"Регистрация завершена! Теперь можешь ты можешь войти в сервис под именем пользователя: {user.username}")
@bot.message_handler(content_types=["text"]) @bot.message_handler(content_types=["text"])

View File

@ -0,0 +1,21 @@
# Generated by Django 3.2.4 on 2021-11-21 20:27
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0002_auto_20211120_2009'),
]
operations = [
migrations.AddField(
model_name='userinfo',
name='verified',
field=models.BooleanField(default=False),
),
migrations.DeleteModel(
name='File',
),
]

View File

@ -2,6 +2,8 @@ from django.contrib.auth.models import User
from django.db import models from django.db import models
from django.utils import timezone from django.utils import timezone
from Main.models.task import Task
class Set(models.Model): class Set(models.Model):
name = models.TextField() name = models.TextField()
@ -18,3 +20,7 @@ class Set(models.Model):
and (self.start_time is None or timezone.now() >= self.start_time) and (self.start_time is None or timezone.now() >= self.start_time)
and (self.end_time is None or timezone.now() <= self.end_time) and (self.end_time is None or timezone.now() <= self.end_time)
) )
@property
def tasks(self):
return Task.objects.filter(settasks__set=self).order_by('settasks__name')

View File

@ -5,6 +5,6 @@ from Main.models.set import Set
class SetTask(models.Model): class SetTask(models.Model):
set = models.ForeignKey(Set, on_delete=models.CASCADE) set = models.ForeignKey(Set, on_delete=models.CASCADE, related_name="settasks")
task = models.ForeignKey(Task, on_delete=models.CASCADE, related_name="settasks") task = models.ForeignKey(Task, on_delete=models.CASCADE, related_name="settasks")
name = models.CharField(max_length=2) name = models.CharField(max_length=2)

View File

@ -1,8 +1,8 @@
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.db import models from django.db import models
from django.db.models import Q
from django.utils import timezone from django.utils import timezone
from Main.models.set import Set
from Main.models.group import Group from Main.models.group import Group
from Main.models.settask import SetTask from Main.models.settask import SetTask
from Main.models.subscription import Subscription from Main.models.subscription import Subscription
@ -55,6 +55,10 @@ class UserInfo(models.Model):
self._append_task(task, tasks) self._append_task(task, tasks)
return sorted(tasks, key=lambda x: x.time_estimation) return sorted(tasks, key=lambda x: x.time_estimation)
@property
def available_sets(self):
return Set.objects.all()
@property @property
def place(self): def place(self):
return len(UserInfo.objects.filter(rating__gt=self.rating)) + 1 return len(UserInfo.objects.filter(rating__gt=self.rating)) + 1

View File

@ -9,5 +9,5 @@ class RatingView(BaseView):
def get(self): def get(self):
self.context["users"] = User.objects.filter(userinfo__verified=True).order_by( self.context["users"] = User.objects.filter(userinfo__verified=True).order_by(
"-userinfo__rating", "date_joined" "-userinfo__rating", "-date_joined"
) )

View File

@ -0,0 +1,6 @@
from SprintLib.BaseView import BaseView
class SetSettingsView(BaseView):
required_login = True
view_file = 'set_settings.html'

View File

@ -7,6 +7,6 @@ class SetsView(BaseView):
required_login = True required_login = True
def post(self): def post(self):
task_name = self.request.POST["name"] set_name = self.request.POST["name"]
task = Set.objects.create(name=task_name, creator=self.request.user) set = Set.objects.create(name=set_name, creator=self.request.user)
return f"/admin/task?task_id={task.id}" return f"/admin/set?set_id={set.id}"

View File

@ -3,7 +3,6 @@ from zipfile import ZipFile
from Main.models import Solution, Progress, SolutionFile from Main.models import Solution, Progress, SolutionFile
from SprintLib.BaseView import BaseView from SprintLib.BaseView import BaseView
from SprintLib.language import languages
from SprintLib.queue import send_testing from SprintLib.queue import send_testing
from SprintLib.utils import write_bytes from SprintLib.utils import write_bytes

View File

@ -12,3 +12,4 @@ from Main.views.TaskRuntimeView import TaskRuntimeView
from Main.views.SolutionView import SolutionView from Main.views.SolutionView import SolutionView
from Main.views.ImageView import ImageView from Main.views.ImageView import ImageView
from Main.views.SendCodeView import SendCodeView from Main.views.SendCodeView import SendCodeView
from Main.views.SetSettingsView import SetSettingsView

View File

@ -10,6 +10,7 @@ urlpatterns = [
path("account", AccountView.as_view()), path("account", AccountView.as_view()),
path("exit", ExitView.as_view()), path("exit", ExitView.as_view()),
path("admin/task", TaskSettingsView.as_view()), path("admin/task", TaskSettingsView.as_view()),
path("admin/set", SetSettingsView.as_view()),
path("sets", SetsView.as_view()), path("sets", SetsView.as_view()),
path("task", TaskView.as_view()), path("task", TaskView.as_view()),
path("solution", SolutionView.as_view()), path("solution", SolutionView.as_view()),

View File

@ -21,8 +21,8 @@ class BaseView:
view_file: Optional[str] = None view_file: Optional[str] = None
@classmethod @classmethod
@transaction.atomic
def as_view(cls): def as_view(cls):
@transaction.atomic
def execute(request): def execute(request):
if request.user.is_authenticated: if request.user.is_authenticated:
user_info = request.user.userinfo user_info = request.user.userinfo

View File

@ -24,8 +24,8 @@
<h3> <h3>
{{ account.userinfo.surname }} {{ account.userinfo.name }} {{ account.userinfo.surname }} {{ account.userinfo.name }}
<span style="margin-left: 15px;" class="badge badge-{% if account.userinfo.activity_status == online_status %}success{% else %}secondary{% endif %}">{{ account.userinfo.activity_status }}</span> <span style="margin-left: 15px;" class="badge badge-{% if account.userinfo.activity_status == online_status %}success{% else %}secondary{% endif %}">{{ account.userinfo.activity_status }}</span>
{% if user.is_superuser %} {% if user.is_superuser and owner %}
<a style="margin-left: 15px;" href="/admin/" class="badge badge-secondary"> Админ</a> <a style="margin-left: 15px;" href="/admin/" class="badge badge-secondary">Админ</a>
{% endif %} {% endif %}
</h3> </h3>
<table> <table>

View File

@ -0,0 +1,11 @@
{% extends 'base_main.html' %}
{% block title %}{{ set.name }}{% endblock %}
{% block main %}
<h2>{{ set.name }}</h2>
<h4>Таски</h4>
{% for settask in set.settasks.all %}
<input name="settask_{{ settask.id }}" value="{{ settask.name }}"> {{ settask.task.name }}<br>
{% endfor %}
{% endblock %}