sessions, or something
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
from django.contrib import admin
|
||||
from django.utils.http import urlencode
|
||||
from django.shortcuts import redirect
|
||||
from .models import Track, Artist, Album, Background, Vote, Profile
|
||||
from .models import Track, Artist, Album, Background, Vote, Profile, Session
|
||||
|
||||
class SessionAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
class TrackAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
class ArtistAdmin(admin.ModelAdmin):
|
||||
@@ -34,3 +36,4 @@ admin.site.register(Album, AlbumAdmin)
|
||||
admin.site.register(Background, BackgroundAdmin)
|
||||
admin.site.register(Vote, VoteAdmin)
|
||||
admin.site.register(Profile, ProfileAdmin)
|
||||
admin.site.register(Session, SessionAdmin)
|
||||
|
||||
@@ -0,0 +1,98 @@
|
||||
# Generated by Django 5.2.4 on 2025-08-07 17:36
|
||||
|
||||
import django.core.validators
|
||||
import django.db.models.deletion
|
||||
import uuid
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("playlist", "0022_background_cover"),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name="vote",
|
||||
name="points",
|
||||
field=models.IntegerField(
|
||||
validators=[
|
||||
django.core.validators.MinValueValidator(1),
|
||||
django.core.validators.MaxValueValidator(5),
|
||||
]
|
||||
),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Session",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("opens", models.DateTimeField(default=None, null=True)),
|
||||
("session_id", models.UUIDField(default=uuid.uuid4, editable=False)),
|
||||
("seed", models.IntegerField(default=892933)),
|
||||
(
|
||||
"status",
|
||||
models.CharField(
|
||||
choices=[
|
||||
("lobby", "Lobby"),
|
||||
("voting", "Voting"),
|
||||
("waiting_for_next_track", "Waiting for Next Track"),
|
||||
("paused", "Paused"),
|
||||
("voting_done", "Voting Done"),
|
||||
],
|
||||
default="lobby",
|
||||
max_length=30,
|
||||
),
|
||||
),
|
||||
("voting_open", models.BooleanField(default=False)),
|
||||
(
|
||||
"current_track",
|
||||
models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.SET_NULL,
|
||||
to="playlist.track",
|
||||
),
|
||||
),
|
||||
(
|
||||
"host",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
(
|
||||
"players_connected",
|
||||
models.ManyToManyField(
|
||||
related_name="sessions_joined", to=settings.AUTH_USER_MODEL
|
||||
),
|
||||
),
|
||||
(
|
||||
"players_wanted",
|
||||
models.ManyToManyField(
|
||||
related_name="players_wanted", to=settings.AUTH_USER_MODEL
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="vote",
|
||||
name="session",
|
||||
field=models.ForeignKey(
|
||||
default=None,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
to="playlist.session",
|
||||
),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.2.4 on 2025-08-09 06:41
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("playlist", "0023_alter_vote_points_session_vote_session"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name="session",
|
||||
name="seed",
|
||||
field=models.IntegerField(default=689663),
|
||||
),
|
||||
]
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
# Generated by Django 5.2.4 on 2025-08-09 08:42
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("playlist", "0024_alter_session_seed"),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name="session",
|
||||
name="players_connected",
|
||||
field=models.ManyToManyField(
|
||||
null=True, related_name="players_joined", to=settings.AUTH_USER_MODEL
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="session",
|
||||
name="seed",
|
||||
field=models.IntegerField(default=804599),
|
||||
),
|
||||
]
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
# Generated by Django 5.2.4 on 2025-08-09 08:42
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("playlist", "0025_alter_session_players_connected_alter_session_seed"),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name="session",
|
||||
name="players_connected",
|
||||
field=models.ManyToManyField(
|
||||
blank=True, related_name="players_joined", to=settings.AUTH_USER_MODEL
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="session",
|
||||
name="seed",
|
||||
field=models.IntegerField(default=456463),
|
||||
),
|
||||
]
|
||||
@@ -4,3 +4,4 @@ from .album import Album
|
||||
from .vote import Vote
|
||||
from .profile import Profile, Background
|
||||
from .playlist import Playlist
|
||||
from .session import Session
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User
|
||||
import uuid
|
||||
import random
|
||||
from datetime import datetime
|
||||
|
||||
class Session(models.Model):
|
||||
def __str__(self):
|
||||
return f"Session {self.session_id} - Host: {self.host.username}"
|
||||
|
||||
@property
|
||||
def is_open(self):
|
||||
return datetime.now() < self.opens
|
||||
|
||||
opens = models.DateTimeField(null=True, default=None)
|
||||
session_id = models.UUIDField(default=uuid.uuid4, editable=False)
|
||||
host = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||
players_wanted = models.ManyToManyField(User, related_name='players_wanted')
|
||||
players_connected= models.ManyToManyField(User, related_name='players_joined', blank=True)
|
||||
seed = models.IntegerField(default=random.randint(1, 1000000))
|
||||
status = models.CharField(
|
||||
max_length=30,
|
||||
choices=[
|
||||
('lobby', 'Lobby'),
|
||||
('voting', 'Voting'),
|
||||
('waiting_for_next_track', 'Waiting for Next Track'),
|
||||
('paused', 'Paused'),
|
||||
('voting_done', 'Voting Done'),
|
||||
],
|
||||
default='lobby'
|
||||
)
|
||||
current_track = models.ForeignKey('Track', on_delete=models.SET_NULL, null=True, blank=True)
|
||||
voting_open = models.BooleanField(default=False)
|
||||
@@ -1,6 +1,7 @@
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.validators import MinValueValidator, MaxValueValidator
|
||||
from .session import Session
|
||||
|
||||
class Vote(models.Model):
|
||||
class Meta:
|
||||
@@ -9,3 +10,4 @@ class Vote(models.Model):
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||
points = models.IntegerField(validators=[MinValueValidator(1), MaxValueValidator(5)])
|
||||
skipped = models.BooleanField(default=False)
|
||||
session = models.ForeignKey(Session, on_delete=models.CASCADE, null=True, default=None)
|
||||
|
||||
@@ -4,3 +4,4 @@ from .user import *
|
||||
from .album import *
|
||||
from .profile import *
|
||||
from .vote import *
|
||||
from .session import *
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
from rest_framework import serializers
|
||||
from playlist.models import Session
|
||||
|
||||
class SessionSerializer(serializers.ModelSerializer):
|
||||
host = serializers.EmailField(source='host.email', read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = Session
|
||||
fields = '__all__'
|
||||
Reference in New Issue
Block a user