This commit is contained in:
SDE
2023-05-16 17:14:16 +03:00
commit c17da7eaab
157 changed files with 14503 additions and 0 deletions

0
GameApp/__init__.py Normal file
View File

16
GameApp/admin.py Normal file
View File

@@ -0,0 +1,16 @@
from django.contrib import admin
from BaseModels.admin_utils import Admin_BaseIconModel
from .models import *
class Admin_Game(Admin_BaseIconModel):
pass
admin.site.register(Game, Admin_Game)
class Admin_UserInGame(Admin_BaseIconModel):
pass
admin.site.register(UserInGame, Admin_UserInGame)
class Admin_QuestionInGameForUser(Admin_BaseIconModel):
pass
admin.site.register(QuestionInGameForUser, Admin_QuestionInGameForUser)

6
GameApp/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class GameappConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'GameApp'

View File

@@ -0,0 +1,84 @@
# Generated by Django 4.2.1 on 2023-05-16 14:01
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
('QuestionsApp', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Game',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.TextField(blank=True, help_text='Название', null=True, verbose_name='Название')),
('name_plural', models.TextField(blank=True, null=True, verbose_name='Название (множественное число)')),
('order', models.IntegerField(blank=True, null=True, verbose_name='Очередность отображения')),
('createDT', models.DateTimeField(auto_now_add=True, verbose_name='Дата и время создания')),
('modifiedDT', models.DateTimeField(blank=True, null=True, verbose_name='Дата и время последнего изменения')),
('enable', models.BooleanField(db_index=True, default=True, verbose_name='Включено')),
('json_data', models.JSONField(blank=True, default=dict, verbose_name='Дополнительные данные')),
('level', models.IntegerField(default=1, verbose_name='Уровень игры')),
('status', models.CharField(default='waiting_users', max_length=100, verbose_name='Статус')),
('time_for_waiting_users', models.IntegerField(default=15, verbose_name='Время ожидания пользователей (сек)')),
('cur_lap', models.IntegerField(default=0, verbose_name='Текущий круг')),
('comment', models.TextField(blank=True, null=True, verbose_name='Комментарий')),
('winner', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='rel_games_for_user', to=settings.AUTH_USER_MODEL, verbose_name='id пользователя')),
],
options={
'verbose_name': 'Игра',
'verbose_name_plural': 'Игры',
},
),
migrations.CreateModel(
name='UserInGame',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.TextField(blank=True, help_text='Название', null=True, verbose_name='Название')),
('name_plural', models.TextField(blank=True, null=True, verbose_name='Название (множественное число)')),
('order', models.IntegerField(blank=True, null=True, verbose_name='Очередность отображения')),
('createDT', models.DateTimeField(auto_now_add=True, verbose_name='Дата и время создания')),
('modifiedDT', models.DateTimeField(blank=True, null=True, verbose_name='Дата и время последнего изменения')),
('enable', models.BooleanField(db_index=True, default=True, verbose_name='Включено')),
('json_data', models.JSONField(blank=True, default=dict, verbose_name='Дополнительные данные')),
('last_lap', models.IntegerField(default=0, verbose_name='Последний круг')),
('status', models.CharField(default='waiting_users', max_length=100, verbose_name='Статус')),
('game', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='rel_userInGame_for_game', to='GameApp.game', verbose_name='Игра')),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='rel_userInGame_for_user', to=settings.AUTH_USER_MODEL, verbose_name='Игрок')),
],
options={
'verbose_name': 'Игрок',
'verbose_name_plural': 'Игроки',
},
),
migrations.CreateModel(
name='QuestionInGameForUser',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.TextField(blank=True, help_text='Название', null=True, verbose_name='Название')),
('name_plural', models.TextField(blank=True, null=True, verbose_name='Название (множественное число)')),
('order', models.IntegerField(blank=True, null=True, verbose_name='Очередность отображения')),
('createDT', models.DateTimeField(auto_now_add=True, verbose_name='Дата и время создания')),
('modifiedDT', models.DateTimeField(blank=True, null=True, verbose_name='Дата и время последнего изменения')),
('enable', models.BooleanField(db_index=True, default=True, verbose_name='Включено')),
('json_data', models.JSONField(blank=True, default=dict, verbose_name='Дополнительные данные')),
('status', models.CharField(default='wait', max_length=100, verbose_name='Статус')),
('answer_right', models.BooleanField(default=False, verbose_name='Верный ответ')),
('use_time_for_answer', models.IntegerField(default=0, verbose_name='Потрачено времени на ответ (сек)')),
('question', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='rel_questionInGame_for_question', to='QuestionsApp.question', verbose_name='Вопрос')),
('user_in_game', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='rel_questionInGame_for_userInGame', to='GameApp.useringame', verbose_name='Игра')),
],
options={
'verbose_name': 'Игрок',
'verbose_name_plural': 'Игроки',
},
),
]

View File

@@ -0,0 +1,21 @@
# Generated by Django 4.2.1 on 2023-05-16 14:07
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('GameApp', '0001_initial'),
]
operations = [
migrations.AlterModelOptions(
name='questioningameforuser',
options={'verbose_name': 'Вопрос в игре', 'verbose_name_plural': 'Вопросы в игре'},
),
migrations.AlterModelOptions(
name='useringame',
options={'verbose_name': 'Пользователь в игре', 'verbose_name_plural': 'Пользователи в игре'},
),
]

View File

94
GameApp/models.py Normal file
View File

@@ -0,0 +1,94 @@
from django.db import models
from BaseModels.base_models import BaseModel
from django.utils.translation import gettext_lazy as _
from AuthApp.models import User
game_status_choices = (
('waiting_users', 'Ожидание пользователей'),
('game', 'В процессе'),
('finished', 'Завершена')
)
class Game(BaseModel):
level = models.IntegerField(verbose_name=_('Уровень игры'), default=1)
status = models.CharField(max_length=100, verbose_name=_('Статус'), default='waiting_users')
time_for_waiting_users = models.IntegerField(verbose_name=_('Время ожидания пользователей (сек)'), default=15)
cur_lap = models.IntegerField(verbose_name=_('Текущий круг'), default=0)
winner = models.OneToOneField(User, verbose_name=_(u'id пользователя'), related_name='rel_games_for_user',
null=True, blank=True, on_delete=models.CASCADE)
comment = models.TextField(verbose_name=_('Комментарий'), null=True, blank=True)
def __str__(self):
if self.name:
return f'{self.name}'
else:
return str(self.id)
class Meta:
verbose_name = _('Игра')
verbose_name_plural = _('Игры')
# ordering = ('user__last_name', 'user__first_name')
user_in_game_status_choices = (
('waiting_users', 'Ожидание пользователей'),
('in_game', 'В игре'),
('lose', 'Выбыл'),
('finish', 'Завершил игру')
)
class UserInGame(BaseModel):
game = models.OneToOneField(
Game, verbose_name=_('Игра'), related_name='rel_userInGame_for_game', on_delete=models.CASCADE)
user = models.OneToOneField(
User, verbose_name=_('Игрок'), related_name='rel_userInGame_for_user', on_delete=models.CASCADE)
last_lap = models.IntegerField(verbose_name=_('Последний круг'), default=0)
status = models.CharField(max_length=100, verbose_name=_('Статус'), default='waiting_users')
def __str__(self):
if self.name:
return f'{self.name}'
else:
return str(self.id)
class Meta:
verbose_name = _('Пользователь в игре')
verbose_name_plural = _('Пользователи в игре')
# ordering = ('question')
question_in_game_status_choices = (
('wait', 'Ожидание ответа'),
('answered', 'Ответил'),
)
class QuestionInGameForUser(BaseModel):
from QuestionsApp.models import Question
user_in_game = models.OneToOneField(
UserInGame, verbose_name=_('Игра'), related_name='rel_questionInGame_for_userInGame', on_delete=models.CASCADE)
question = models.OneToOneField(
Question, verbose_name=_('Вопрос'), related_name='rel_questionInGame_for_question', on_delete=models.CASCADE)
status = models.CharField(max_length=100, verbose_name=_('Статус'), default='wait')
answer_right = models.BooleanField(verbose_name=_('Верный ответ'), default=False)
use_time_for_answer = models.IntegerField(verbose_name=_('Потрачено времени на ответ (сек)'), default=0)
def __str__(self):
if self.name:
return f'{self.name}'
else:
return str(self.id)
class Meta:
verbose_name = _('Вопрос в игре')
verbose_name_plural = _('Вопросы в игре')
# ordering = ('question')

3
GameApp/tests.py Normal file
View File

@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

3
GameApp/views.py Normal file
View File

@@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.