sessions, or something

This commit is contained in:
2025-08-09 16:28:49 +02:00
parent 4c70a3f72d
commit 21d5f56a39
30 changed files with 683 additions and 38 deletions
+4 -1
View File
@@ -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),
),
]
@@ -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),
),
]
@@ -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),
),
]
+1
View File
@@ -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
+33
View File
@@ -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)
+2
View File
@@ -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)
+1
View File
@@ -4,3 +4,4 @@ from .user import *
from .album import *
from .profile import *
from .vote import *
from .session import *
+9
View File
@@ -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__'