diff --git a/apps/courses/urls.py b/apps/courses/urls.py index 51b0df3..1a2b3b2 100644 --- a/apps/courses/urls.py +++ b/apps/courses/urls.py @@ -10,8 +10,8 @@ app_name = 'courses' urlpatterns = [ path('', views.IndexView.as_view(), name='index'), path('course//', views.CourseDetailView.as_view(), name='course-detail'), - path('course//lesson//', views.LessonDetailView.as_view(), name='lesson-detail'), + path('course//lesson//', views.LessonDetailView.as_view(), name='lesson-detail'), ] -urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) \ No newline at end of file +urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/apps/courses/views.py b/apps/courses/views.py index 4d56d7d..a76838e 100644 --- a/apps/courses/views.py +++ b/apps/courses/views.py @@ -1,6 +1,11 @@ +import json + +from django.http import HttpResponse, JsonResponse + from django.shortcuts import render from django.views import View from apps.courses.models import Course, Lesson +from apps.users.models import User, PlayHistory # Create your views here. @@ -24,7 +29,27 @@ class CourseDetailView(View): class LessonDetailView(View): - def get(self, request, pk, lesson_pk): + def get(self, request, course_pk, lesson_pk): lesson = Lesson.objects.get(pk=lesson_pk) - context = {'lesson': lesson} - return render(request, 'courses/lesson_detail.html', context) \ No newline at end of file + play_history = PlayHistory.objects.filter(lesson=lesson, user=request.user).first() + if play_history: + play_time = play_history.time + else: + play_time = 0 + print(play_time) + + context = {'lesson': lesson, 'play_time': play_time} + return render(request, 'courses/lesson_detail.html', context) + + def post(self, request, course_pk, lesson_pk): + # print the post data + print(json.loads(request.body)) + play_time = json.loads(request.body)['time'] + + PlayHistory.objects.update_or_create( + lesson=Lesson.objects.get(pk=lesson_pk), + user=User.objects.get(id=request.user.id), + defaults={'time': play_time} + ) + + return JsonResponse({'status': 'ok'}, status=200) \ No newline at end of file diff --git a/apps/users/migrations/0002_playhistory.py b/apps/users/migrations/0002_playhistory.py new file mode 100644 index 0000000..d567717 --- /dev/null +++ b/apps/users/migrations/0002_playhistory.py @@ -0,0 +1,26 @@ +# Generated by Django 5.0.3 on 2024-03-19 13:19 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('courses', '0004_lesson_cover'), + ('users', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='PlayHistory', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('time', models.IntegerField()), + ('update_time', models.DateTimeField(auto_now=True)), + ('lesson', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='courses.lesson')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/apps/users/models.py b/apps/users/models.py index 7f367f6..ea70c10 100644 --- a/apps/users/models.py +++ b/apps/users/models.py @@ -1,7 +1,19 @@ from django.db import models from django.contrib.auth.models import AbstractUser +from apps.courses.models import Course, Lesson + # Create your models here. + + + class User(AbstractUser): pass + + +class PlayHistory(models.Model): + lesson = models.ForeignKey(Lesson, on_delete=models.SET_NULL, null=True) + time = models.IntegerField() + user = models.ForeignKey(User, on_delete=models.CASCADE) + update_time = models.DateTimeField(auto_now=True) diff --git a/templates/courses/lesson_detail.html b/templates/courses/lesson_detail.html index 3979d3a..b0a821d 100644 --- a/templates/courses/lesson_detail.html +++ b/templates/courses/lesson_detail.html @@ -18,10 +18,54 @@