From: Guillaume Pellerin Date: Thu, 19 Jun 2025 16:01:51 +0000 (+0200) Subject: add media read flag (todo: add read duration) X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=refs%2Fheads%2Ffeature%2Fvideo-stats;p=teleforma.git add media read flag (todo: add read duration) --- diff --git a/teleforma/migrations/0031_mediaread.py b/teleforma/migrations/0031_mediaread.py new file mode 100644 index 00000000..126b2f40 --- /dev/null +++ b/teleforma/migrations/0031_mediaread.py @@ -0,0 +1,25 @@ +# Generated by Django 3.2.25 on 2025-06-19 17:12 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('teleforma', '0030_auto_20250428_1124'), + ] + + operations = [ + migrations.CreateModel( + name='MediaRead', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('duration', models.DurationField(verbose_name='duration')), + ('media', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='read', to='teleforma.media', verbose_name='media')), + ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='read', to=settings.AUTH_USER_MODEL, verbose_name='user')), + ], + ), + ] diff --git a/teleforma/migrations/0032_alter_mediaread_duration.py b/teleforma/migrations/0032_alter_mediaread_duration.py new file mode 100644 index 00000000..d003a717 --- /dev/null +++ b/teleforma/migrations/0032_alter_mediaread_duration.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.25 on 2025-06-19 17:37 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('teleforma', '0031_mediaread'), + ] + + operations = [ + migrations.AlterField( + model_name='mediaread', + name='duration', + field=models.DurationField(blank=True, null=True, verbose_name='duration'), + ), + ] diff --git a/teleforma/models/core.py b/teleforma/models/core.py index 778af7d8..185f6c1d 100644 --- a/teleforma/models/core.py +++ b/teleforma/models/core.py @@ -1155,3 +1155,13 @@ class WebClassGroup(models.Model): 'iejs': [iej.name for iej in self.iejs.all()], } return data + + +class MediaRead(models.Model): + "Store media read and time by user" + + media = models.ForeignKey('Media', related_name='read', verbose_name=_('media'), + blank=True, null=True, on_delete=models.SET_NULL) + user = models.ForeignKey(User, related_name='read', verbose_name=_('user'), + blank=True, null=True, on_delete=models.SET_NULL) + duration = models.DurationField(_("duration"), blank=True, null=True) diff --git a/teleforma/views/core.py b/teleforma/views/core.py index 8283aa91..68dea393 100644 --- a/teleforma/views/core.py +++ b/teleforma/views/core.py @@ -73,7 +73,7 @@ from ..decorators import access_required from ..models.appointment import Appointment, AppointmentPeriod from ..models.chat import ChatMessage from ..models.core import (Conference, ConferencePublication, Course, CourseType, Department, - Document, DocumentType, Media, MediaTranscoded, + Document, DocumentType, Media, MediaRead, MediaTranscoded, Organization, Period, Professor, WebClassGroup, StreamingServer, LiveStream, get_user_role) @@ -714,6 +714,7 @@ class MediaView(CourseAccessMixin, DetailView): reverse("teleforma-media-detail", kwargs={"period_id": period_id, "pk": media.id})) if get_access(media, courses) and referer == media_detail_url: + media_read, c = MediaRead.objects.get_or_create(media=media, user=request.user) return serve_media(media.file, content_type=media.mime_type, streaming=streaming,