From 612fae4fa740349981af83006af2a8e4d6ee737f Mon Sep 17 00:00:00 2001 From: Edward Tirado Jr Date: Sun, 20 Apr 2025 22:29:55 -0500 Subject: [PATCH] database cleanup --- movie_db/serializers.py | 1 + movie_manager/migrations/0001_initial.py | 55 +++++++++++++--- ...ptions_alter_movielist_options_and_more.py | 26 -------- .../migrations/0002_showing_schedule.py | 20 ++++++ .../migrations/0003_movie_added_by.py | 22 ------- ...ter_movie_last_watched_showing_schedule.py | 50 -------------- movie_manager/migrations/0005_showing_slug.py | 18 ----- .../0006_remove_showing_slug_schedule_slug.py | 22 ------- .../0007_alter_movie_critic_score.py | 18 ----- ...itic_score_movie_critic_scores_and_more.py | 65 ------------------- .../0009_alter_schedule_showings.py | 18 ----- .../0010_alter_schedule_showings.py | 18 ----- .../0011_alter_movie_mpaa_rating.py | 18 ----- movie_manager/models.py | 21 ++++-- movie_manager/serializers.py | 2 +- movie_manager/views.py | 11 ++-- s User(Base): | 3 + 17 files changed, 94 insertions(+), 294 deletions(-) delete mode 100644 movie_manager/migrations/0002_alter_movie_options_alter_movielist_options_and_more.py create mode 100644 movie_manager/migrations/0002_showing_schedule.py delete mode 100644 movie_manager/migrations/0003_movie_added_by.py delete mode 100644 movie_manager/migrations/0004_alter_movie_last_watched_showing_schedule.py delete mode 100644 movie_manager/migrations/0005_showing_slug.py delete mode 100644 movie_manager/migrations/0006_remove_showing_slug_schedule_slug.py delete mode 100644 movie_manager/migrations/0007_alter_movie_critic_score.py delete mode 100644 movie_manager/migrations/0008_rename_critic_score_movie_critic_scores_and_more.py delete mode 100644 movie_manager/migrations/0009_alter_schedule_showings.py delete mode 100644 movie_manager/migrations/0010_alter_schedule_showings.py delete mode 100644 movie_manager/migrations/0011_alter_movie_mpaa_rating.py create mode 100644 s User(Base): diff --git a/movie_db/serializers.py b/movie_db/serializers.py index 7d7b570..077d771 100644 --- a/movie_db/serializers.py +++ b/movie_db/serializers.py @@ -2,6 +2,7 @@ from rest_framework import serializers class MovieSerializer(serializers.Serializer): + actors = serializers.CharField(source="Actors") director = serializers.CharField(source="Director") genre = serializers.CharField(source="Genre") imdb_id = serializers.CharField(source="imdbID") diff --git a/movie_manager/migrations/0001_initial.py b/movie_manager/migrations/0001_initial.py index 8b7d822..19195fa 100644 --- a/movie_manager/migrations/0001_initial.py +++ b/movie_manager/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.1.4 on 2025-03-31 04:04 +# Generated by Django 5.1.4 on 2025-04-21 00:50 import django.db.models.deletion from django.conf import settings @@ -20,18 +20,22 @@ class Migration(migrations.Migration): ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=100)), ('imdb_id', models.CharField(max_length=100)), - ('year', models.IntegerField()), - ('critic_score', models.CharField(max_length=500)), - ('genre', models.CharField(max_length=100)), - ('director', models.CharField(max_length=500)), - ('actors', models.CharField(max_length=500)), - ('plot', models.CharField(max_length=500)), - ('poster', models.CharField(max_length=500)), - ('last_watched', models.DateTimeField()), + ('year', models.IntegerField(blank=True, null=True)), + ('director', models.CharField(blank=True, max_length=500, null=True)), + ('actors', models.TextField(blank=True, null=True)), + ('plot', models.TextField(blank=True, null=True)), + ('genre', models.CharField(blank=True, max_length=100, null=True)), + ('mpaa_rating', models.CharField(blank=True, max_length=20, null=True)), + ('critic_scores', models.TextField(blank=True, null=True)), + ('poster', models.TextField(blank=True, null=True)), ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ('deleted_at', models.DateTimeField(blank=True, null=True)), + ('added_by', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), ], + options={ + 'ordering': ['title'], + }, ), migrations.CreateModel( name='MovieList', @@ -42,7 +46,40 @@ class Migration(migrations.Migration): ('created_at', models.DateTimeField(auto_now_add=True)), ('updated_at', models.DateTimeField(auto_now=True)), ('deleted_at', models.DateTimeField(blank=True, null=True)), + ('movies', models.ManyToManyField(to='movie_manager.movie')), + ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + options={ + 'ordering': ['name'], + }, + ), + migrations.CreateModel( + name='Schedule', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100)), + ('public', models.BooleanField(default=False)), + ('slug', models.SlugField(default='', max_length=100)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('deleted_at', models.DateTimeField(blank=True, null=True)), ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), + migrations.CreateModel( + name='Showing', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('public', models.BooleanField(default=False)), + ('showtime', models.DateTimeField()), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ('deleted_at', models.DateTimeField(blank=True, null=True)), + ('movie', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='movie_manager.movie')), + ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + options={ + 'ordering': ['showtime'], + }, + ), ] diff --git a/movie_manager/migrations/0002_alter_movie_options_alter_movielist_options_and_more.py b/movie_manager/migrations/0002_alter_movie_options_alter_movielist_options_and_more.py deleted file mode 100644 index b0f1663..0000000 --- a/movie_manager/migrations/0002_alter_movie_options_alter_movielist_options_and_more.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 5.1.4 on 2025-04-07 05:02 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('movie_manager', '0001_initial'), - ] - - operations = [ - migrations.AlterModelOptions( - name='movie', - options={'ordering': ['title']}, - ), - migrations.AlterModelOptions( - name='movielist', - options={'ordering': ['name']}, - ), - migrations.AddField( - model_name='movielist', - name='movies', - field=models.ManyToManyField(to='movie_manager.movie'), - ), - ] diff --git a/movie_manager/migrations/0002_showing_schedule.py b/movie_manager/migrations/0002_showing_schedule.py new file mode 100644 index 0000000..b081684 --- /dev/null +++ b/movie_manager/migrations/0002_showing_schedule.py @@ -0,0 +1,20 @@ +# Generated by Django 5.1.4 on 2025-04-21 01:01 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('movie_manager', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='showing', + name='schedule', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='movie_manager.schedule'), + preserve_default=False, + ), + ] diff --git a/movie_manager/migrations/0003_movie_added_by.py b/movie_manager/migrations/0003_movie_added_by.py deleted file mode 100644 index 94fee8e..0000000 --- a/movie_manager/migrations/0003_movie_added_by.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 5.1.4 on 2025-04-08 00:18 - -import django.db.models.deletion -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('movie_manager', '0002_alter_movie_options_alter_movielist_options_and_more'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.AddField( - model_name='movie', - name='added_by', - field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), - preserve_default=False, - ), - ] diff --git a/movie_manager/migrations/0004_alter_movie_last_watched_showing_schedule.py b/movie_manager/migrations/0004_alter_movie_last_watched_showing_schedule.py deleted file mode 100644 index 9895ec9..0000000 --- a/movie_manager/migrations/0004_alter_movie_last_watched_showing_schedule.py +++ /dev/null @@ -1,50 +0,0 @@ -# Generated by Django 5.1.4 on 2025-04-08 03:39 - -import django.db.models.deletion -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('movie_manager', '0003_movie_added_by'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.AlterField( - model_name='movie', - name='last_watched', - field=models.DateTimeField(blank=True, null=True), - ), - migrations.CreateModel( - name='Showing', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('public', models.BooleanField(default=False)), - ('showtime', models.DateTimeField()), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('updated_at', models.DateTimeField(auto_now=True)), - ('deleted_at', models.DateTimeField(blank=True, null=True)), - ('movie', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='movie_manager.movie')), - ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - options={ - 'ordering': ['showtime'], - }, - ), - migrations.CreateModel( - name='Schedule', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=100)), - ('public', models.BooleanField(default=False)), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('updated_at', models.DateTimeField(auto_now=True)), - ('deleted_at', models.DateTimeField(blank=True, null=True)), - ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ('showings', models.ManyToManyField(to='movie_manager.showing')), - ], - ), - ] diff --git a/movie_manager/migrations/0005_showing_slug.py b/movie_manager/migrations/0005_showing_slug.py deleted file mode 100644 index 4d5c0b1..0000000 --- a/movie_manager/migrations/0005_showing_slug.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.1.4 on 2025-04-08 03:45 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('movie_manager', '0004_alter_movie_last_watched_showing_schedule'), - ] - - operations = [ - migrations.AddField( - model_name='showing', - name='slug', - field=models.SlugField(default='', max_length=100), - ), - ] diff --git a/movie_manager/migrations/0006_remove_showing_slug_schedule_slug.py b/movie_manager/migrations/0006_remove_showing_slug_schedule_slug.py deleted file mode 100644 index dfe8b61..0000000 --- a/movie_manager/migrations/0006_remove_showing_slug_schedule_slug.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 5.1.4 on 2025-04-08 04:03 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('movie_manager', '0005_showing_slug'), - ] - - operations = [ - migrations.RemoveField( - model_name='showing', - name='slug', - ), - migrations.AddField( - model_name='schedule', - name='slug', - field=models.SlugField(default='', max_length=100), - ), - ] diff --git a/movie_manager/migrations/0007_alter_movie_critic_score.py b/movie_manager/migrations/0007_alter_movie_critic_score.py deleted file mode 100644 index 2d27d83..0000000 --- a/movie_manager/migrations/0007_alter_movie_critic_score.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.1.4 on 2025-04-12 04:49 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('movie_manager', '0006_remove_showing_slug_schedule_slug'), - ] - - operations = [ - migrations.AlterField( - model_name='movie', - name='critic_score', - field=models.CharField(blank=True, max_length=500, null=True), - ), - ] diff --git a/movie_manager/migrations/0008_rename_critic_score_movie_critic_scores_and_more.py b/movie_manager/migrations/0008_rename_critic_score_movie_critic_scores_and_more.py deleted file mode 100644 index 225eeaf..0000000 --- a/movie_manager/migrations/0008_rename_critic_score_movie_critic_scores_and_more.py +++ /dev/null @@ -1,65 +0,0 @@ -# Generated by Django 5.1.4 on 2025-04-20 21:20 - -import django.db.models.deletion -from django.conf import settings -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('movie_manager', '0007_alter_movie_critic_score'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.RenameField( - model_name='movie', - old_name='critic_score', - new_name='critic_scores', - ), - migrations.RemoveField( - model_name='movie', - name='last_watched', - ), - migrations.AddField( - model_name='movie', - name='mpaa_rating', - field=models.CharField(blank=True, max_length=5, null=True), - ), - migrations.AlterField( - model_name='movie', - name='actors', - field=models.CharField(blank=True, max_length=500, null=True), - ), - migrations.AlterField( - model_name='movie', - name='added_by', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL), - ), - migrations.AlterField( - model_name='movie', - name='director', - field=models.CharField(blank=True, max_length=500, null=True), - ), - migrations.AlterField( - model_name='movie', - name='genre', - field=models.CharField(blank=True, max_length=100, null=True), - ), - migrations.AlterField( - model_name='movie', - name='plot', - field=models.CharField(blank=True, max_length=500, null=True), - ), - migrations.AlterField( - model_name='movie', - name='poster', - field=models.CharField(blank=True, max_length=500, null=True), - ), - migrations.AlterField( - model_name='movie', - name='year', - field=models.IntegerField(blank=True, null=True), - ), - ] diff --git a/movie_manager/migrations/0009_alter_schedule_showings.py b/movie_manager/migrations/0009_alter_schedule_showings.py deleted file mode 100644 index 9ff71e4..0000000 --- a/movie_manager/migrations/0009_alter_schedule_showings.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.1.4 on 2025-04-20 21:28 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('movie_manager', '0008_rename_critic_score_movie_critic_scores_and_more'), - ] - - operations = [ - migrations.AlterField( - model_name='schedule', - name='showings', - field=models.ManyToManyField(blank=True, null=True, to='movie_manager.showing'), - ), - ] diff --git a/movie_manager/migrations/0010_alter_schedule_showings.py b/movie_manager/migrations/0010_alter_schedule_showings.py deleted file mode 100644 index 281f96d..0000000 --- a/movie_manager/migrations/0010_alter_schedule_showings.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.1.4 on 2025-04-20 21:29 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('movie_manager', '0009_alter_schedule_showings'), - ] - - operations = [ - migrations.AlterField( - model_name='schedule', - name='showings', - field=models.ManyToManyField(blank=True, to='movie_manager.showing'), - ), - ] diff --git a/movie_manager/migrations/0011_alter_movie_mpaa_rating.py b/movie_manager/migrations/0011_alter_movie_mpaa_rating.py deleted file mode 100644 index 3140a04..0000000 --- a/movie_manager/migrations/0011_alter_movie_mpaa_rating.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.1.4 on 2025-04-20 21:34 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('movie_manager', '0010_alter_schedule_showings'), - ] - - operations = [ - migrations.AlterField( - model_name='movie', - name='mpaa_rating', - field=models.CharField(blank=True, max_length=20, null=True), - ), - ] diff --git a/movie_manager/models.py b/movie_manager/models.py index 09d2db2..f401dde 100644 --- a/movie_manager/models.py +++ b/movie_manager/models.py @@ -1,6 +1,7 @@ from django.db import models from django.contrib.auth.models import User from django.db.models import SET_NULL +import datetime class Movie(models.Model): @@ -8,12 +9,12 @@ class Movie(models.Model): imdb_id = models.CharField(max_length=100) year = models.IntegerField(null=True, blank=True) director = models.CharField(max_length=500, null=True, blank=True) - actors = models.CharField(max_length=500, null=True, blank=True) - plot = models.CharField(max_length=500, null=True, blank=True) + actors = models.TextField(null=True, blank=True) + plot = models.TextField(null=True, blank=True) genre = models.CharField(max_length=100, null=True, blank=True) mpaa_rating = models.CharField(max_length=20, null=True, blank=True) - critic_scores = models.CharField(max_length=500, null=True, blank=True) - poster = models.CharField(max_length=500, null=True, blank=True) + critic_scores = models.TextField(null=True, blank=True) + poster = models.TextField(null=True, blank=True) added_by = models.ForeignKey(User, on_delete=SET_NULL, null=True) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) @@ -46,16 +47,22 @@ class Schedule(models.Model): name = models.CharField(max_length=100) owner = models.ForeignKey(User, on_delete=models.CASCADE) public = models.BooleanField(default=False) - showings = models.ManyToManyField("Showing", blank=True) slug = models.SlugField(max_length=100, default="") created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) deleted_at = models.DateTimeField(null=True, blank=True) + class Meta: + ordering = ["name"] + + def __str__(self): + return self.name + class Showing(models.Model): movie = models.ForeignKey(Movie, on_delete=models.CASCADE) owner = models.ForeignKey(User, on_delete=models.CASCADE) + schedule = models.ForeignKey(Schedule, on_delete=models.CASCADE) public = models.BooleanField(default=False) showtime = models.DateTimeField() created_at = models.DateTimeField(auto_now_add=True) @@ -64,3 +71,7 @@ class Showing(models.Model): class Meta: ordering = ["showtime"] + + def __str__(self): + showtime = self.showtime.strftime("%Y-%m-%d %H:%M") + return showtime diff --git a/movie_manager/serializers.py b/movie_manager/serializers.py index d2b472c..75d451c 100644 --- a/movie_manager/serializers.py +++ b/movie_manager/serializers.py @@ -48,7 +48,7 @@ class ShowingSerializer(serializers.ModelSerializer): class ScheduleSerializer(serializers.ModelSerializer): name = serializers.CharField(read_only=True) - showings = ShowingSerializer(read_only=True, many=True) + showings = ShowingSerializer(source="showing_set", read_only=True, many=True) class Meta: model = Schedule diff --git a/movie_manager/views.py b/movie_manager/views.py index dbb91e0..3dd7d76 100644 --- a/movie_manager/views.py +++ b/movie_manager/views.py @@ -91,6 +91,7 @@ class MovieListViewset(viewsets.ModelViewSet): new_movie = Movie.objects.create( title=movie["title"], + actors=movie["actors"], year=movie["year"], imdb_id=movie["imdb_id"], poster=movie["poster"], @@ -127,7 +128,9 @@ class ScheduleViewset(viewsets.ModelViewSet): instance = self.get_object() today = datetime.datetime.now() - upcoming_showings = instance.showings.filter(showtime__gte=today) + upcoming_showings = Showing.objects.filter( + showtime__gte=today, schedule=instance + ) # Create a serialized response serializer = self.get_serializer(instance) @@ -137,7 +140,9 @@ class ScheduleViewset(viewsets.ModelViewSet): data["showings"] = ShowingSerializer(upcoming_showings, many=True).data if request.GET.get("past_showings") == "true": - past_showings = instance.showings.filter(showtime__lt=today) + past_showings = Showing.objects.filter( + showtime__lt=today, schedule=instance + ) # Add both to the response data["past_showings"] = [ @@ -179,6 +184,4 @@ class ShowingViewset(viewsets.ModelViewSet): owner=request.user, ) - schedule.showings.add(showing) - return JsonResponse(ShowingSerializer(showing).data) diff --git a/s User(Base): b/s User(Base): new file mode 100644 index 0000000..f807cbb --- /dev/null +++ b/s User(Base): @@ -0,0 +1,3 @@ + add-schedule-support +* main + movie-search