From 86536337f5bdd02aaff10a579c3a7aef775c990a Mon Sep 17 00:00:00 2001
From: Mateus Stano Junqueira <mateusstano@usp.br>
Date: Sun, 6 Nov 2022 14:31:46 -0300
Subject: [PATCH] Revert "Merge branch 'comment' into 'main'"

This reverts merge request !1
---
 albuns/migrations/0001_initial.py             |  56 --
 albuns/templates/albuns/delete.html           |  12 -
 albuns/templates/albuns/detail.html           |  50 -
 albuns/templates/albuns/index.html            |  22 -
 albuns/templates/albuns/review.html           |  13 -
 albuns/urls.py                                |  16 -
 albuns/views.py                               |  93 --
 entrega2/settings.py                          |   4 +-
 entrega2/urls.py                              |   2 +-
 {albuns => movies}/__init__.py                |   0
 {albuns => movies}/admin.py                   |   4 +-
 {albuns => movies}/apps.py                    |   4 +-
 {albuns => movies}/forms.py                   |  10 +-
 movies/migrations/0001_initial.py             |  40 +
 movies/migrations/0002_list.py                |  25 +
 movies/migrations/0003_provider.py            |  23 +
 .../0004_movie_info_movie_post_date.py        |  25 +
 ..._alter_movie_info_alter_movie_post_date.py |  23 +
 {albuns => movies}/migrations/__init__.py     |   0
 {albuns => movies}/models.py                  |  20 +-
 movies/temp_data.py                           | 866 ++++++++++++++++++
 .../templates/movies}/create.html             |   4 +-
 .../templates/movies}/create_list.html        |   2 +-
 movies/templates/movies/delete.html           |  12 +
 movies/templates/movies/detail.html           |  24 +
 movies/templates/movies/index.html            |  23 +
 .../templates/movies}/lists.html              |  10 +-
 movies/templates/movies/review.html           |  13 +
 .../templates/movies}/search.html             |  10 +-
 .../templates/movies}/update.html             |   4 +-
 {albuns => movies}/tests.py                   |   0
 movies/urls.py                                |  17 +
 movies/views.py                               | 116 +++
 templates/base.html                           |   4 +-
 34 files changed, 1245 insertions(+), 302 deletions(-)
 delete mode 100644 albuns/migrations/0001_initial.py
 delete mode 100644 albuns/templates/albuns/delete.html
 delete mode 100644 albuns/templates/albuns/detail.html
 delete mode 100644 albuns/templates/albuns/index.html
 delete mode 100644 albuns/templates/albuns/review.html
 delete mode 100644 albuns/urls.py
 delete mode 100644 albuns/views.py
 rename {albuns => movies}/__init__.py (100%)
 rename {albuns => movies}/admin.py (60%)
 rename {albuns => movies}/apps.py (64%)
 rename {albuns => movies}/forms.py (82%)
 create mode 100644 movies/migrations/0001_initial.py
 create mode 100644 movies/migrations/0002_list.py
 create mode 100644 movies/migrations/0003_provider.py
 create mode 100644 movies/migrations/0004_movie_info_movie_post_date.py
 create mode 100644 movies/migrations/0005_alter_movie_info_alter_movie_post_date.py
 rename {albuns => movies}/migrations/__init__.py (100%)
 rename {albuns => movies}/models.py (75%)
 create mode 100644 movies/temp_data.py
 rename {albuns/templates/albuns => movies/templates/movies}/create.html (75%)
 rename {albuns/templates/albuns => movies/templates/movies}/create_list.html (79%)
 create mode 100644 movies/templates/movies/delete.html
 create mode 100644 movies/templates/movies/detail.html
 create mode 100644 movies/templates/movies/index.html
 rename {albuns/templates/albuns => movies/templates/movies}/lists.html (59%)
 create mode 100644 movies/templates/movies/review.html
 rename {albuns/templates/albuns => movies/templates/movies}/search.html (67%)
 rename {albuns/templates/albuns => movies/templates/movies}/update.html (58%)
 rename {albuns => movies}/tests.py (100%)
 create mode 100644 movies/urls.py
 create mode 100644 movies/views.py

diff --git a/albuns/migrations/0001_initial.py b/albuns/migrations/0001_initial.py
deleted file mode 100644
index d311898..0000000
--- a/albuns/migrations/0001_initial.py
+++ /dev/null
@@ -1,56 +0,0 @@
-# Generated by Django 4.1.1 on 2022-11-06 17:04
-
-from django.conf import settings
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    initial = True
-
-    dependencies = [
-        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='Album',
-            fields=[
-                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=255)),
-                ('release_year', models.IntegerField()),
-                ('poster_url', models.URLField(null=True)),
-                ('post_date', models.DateTimeField(auto_now=True)),
-                ('info', models.CharField(max_length=255000)),
-            ],
-        ),
-        migrations.CreateModel(
-            name='Provider',
-            fields=[
-                ('album', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='albuns.album')),
-                ('service', models.CharField(blank=True, max_length=255)),
-                ('has_flat_price', models.BooleanField(default=False)),
-                ('price', models.DecimalField(blank=True, decimal_places=2, max_digits=6, null=True)),
-            ],
-        ),
-        migrations.CreateModel(
-            name='Review',
-            fields=[
-                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('post_date', models.DateTimeField(auto_now=True)),
-                ('text', models.CharField(max_length=255)),
-                ('album', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='albuns.album')),
-                ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
-            ],
-        ),
-        migrations.CreateModel(
-            name='List',
-            fields=[
-                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
-                ('name', models.CharField(max_length=255)),
-                ('albuns', models.ManyToManyField(to='albuns.album')),
-                ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
-            ],
-        ),
-    ]
diff --git a/albuns/templates/albuns/delete.html b/albuns/templates/albuns/delete.html
deleted file mode 100644
index 663ee57..0000000
--- a/albuns/templates/albuns/delete.html
+++ /dev/null
@@ -1,12 +0,0 @@
-{% extends 'base.html' %}
-
-{% block content %}
-<form action="{% url 'albuns:delete' album.id %}" method="post">
-    {% csrf_token %}
-    <p>
-        Você tem certeza que deseja apagar o álbum "{{ album.name }} ({{ album.release_year }})"?
-    </p>
-    <button type="submit">Apagar</button>
-</form>
-
-{% endblock content %}
\ No newline at end of file
diff --git a/albuns/templates/albuns/detail.html b/albuns/templates/albuns/detail.html
deleted file mode 100644
index b52ac35..0000000
--- a/albuns/templates/albuns/detail.html
+++ /dev/null
@@ -1,50 +0,0 @@
-{% extends 'base.html' %}
-
-{% block title %}
-{{ album.name }} ({{ album.release_year }}
-{% endblock title %}
-
-{% block content %}
-<h2>Detalhes do Álbum {{ album.name }} ({{ album.release_year }}) — {{ album.post_date|date:"D d M Y"}}</h2>
-
-<hr>
-
-<section class="dados-de-album">
-    <img src="{{ album.poster_url }}" alt="poster do album {{ album.name}}">
-    <ul>
-        <li>Nome: {{ album.name }}</li>
-        <li>Ano de Lançamento: {{ album.release_year }} </li>
-        <li>Data de Postagem: {{album.post_date }} </li>
-        <li>Informação: {{album.info }}</li>
-        <li><a href="{% url 'albuns:review' album.id %}">Comentar</a></li>
-        <li><a href="{% url 'albuns:update' album.id %}">Editar</a></li>
-        <li><a href="{% url 'albuns:delete' album.id %}">Apagar</a></li>
-    </ul>
-</section>
-
-<hr>
-
-<section>
-    <header>
-        <h3>Comentários</h3>
-    </header>
-    <ul>
-        {% if album.review_set.all %}
-        {% for review in album.review_set.all reversed %}
-        <figure>
-            <blockquote>
-                "{{ review.text }}"
-            </blockquote>
-            <figcaption>—{{ review.author }} | {{ review.post_date|date:"D d M Y" }} {{ review.post_date|time:"H:i" }}
-        </figure>
-        {% endfor %}
-        {% else %}
-        <p>Ainda não existe nenhum comentário para este filme.</p>
-        {% endif %}
-    </ul>
-
-    <hr>
-
-    <a href="{% url 'albuns:review' album.pk %}"><button>Adicione um Comentario</button></a>
-</section>
-{% endblock content %}
\ No newline at end of file
diff --git a/albuns/templates/albuns/index.html b/albuns/templates/albuns/index.html
deleted file mode 100644
index 015f012..0000000
--- a/albuns/templates/albuns/index.html
+++ /dev/null
@@ -1,22 +0,0 @@
-{% extends 'base.html' %}
-
-{% block content %}
-<h2>Todos os Álbuns</h2>
-<section>
-    <p>Não encontrou o álbum? <a href="{% url 'albuns:create' %}">Adicionar Novo Álbum</a></p>
-</section>
-{% if album_list %}
-<section class="lista-de-cards">
-    {% for album in album_list %}
-    <article class="card">
-        <a href="{% url 'albuns:detail' album.id %}"><img src="{{ album.poster_url }}"
-                alt="poster do album {{ album.name}}"></a> <!-- modifique esta linha -->
-        <p>{{ album.name }} ({{ album.release_year }})</p>
-    </article>
-    {% endfor %}
-</section>
-{% else %}
-<p>Não foi encontrado nenhum album.</p>
-{% endif %}
-
-{% endblock content %}
\ No newline at end of file
diff --git a/albuns/templates/albuns/review.html b/albuns/templates/albuns/review.html
deleted file mode 100644
index 83bf1ae..0000000
--- a/albuns/templates/albuns/review.html
+++ /dev/null
@@ -1,13 +0,0 @@
-{% extends 'base.html' %}
-
-{% block content %}
-<h2>Comentar sobre o Álbum {{ album.name }} ({{ album.release_year }})</h2>
-
-<form action="{% url 'albuns:review' album.id %}" method="post">
-    {% csrf_token %}
-    {{ form.as_p }}
-    <button type="submit">Comentar</button>
-</form>
-
-<p><a href="{% url 'albuns:detail' album.id %}">Voltar para a página do álbum</a></p>
-{% endblock content %}
\ No newline at end of file
diff --git a/albuns/urls.py b/albuns/urls.py
deleted file mode 100644
index 32a6858..0000000
--- a/albuns/urls.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from django.urls import path
-
-from . import views
-
-app_name = 'albuns'
-urlpatterns = [
-    path('', views.AlbumListView.as_view(), name='index'),
-    path('create/', views.create_album, name='create'),
-    path('<int:album_id>/', views.detail_album,
-         name='detail'),
-    path('update/<int:album_id>/', views.update_album, name='update'),
-    path('delete/<int:album_id>/', views.delete_album, name='delete'),
-    path('<int:album_id>/review/', views.create_review, name='review'),
-    path('lists/', views.ListListView.as_view(), name='lists'),
-    path('lists/create', views.ListCreateView.as_view(), name='create-list'),
-]
diff --git a/albuns/views.py b/albuns/views.py
deleted file mode 100644
index 5532b47..0000000
--- a/albuns/views.py
+++ /dev/null
@@ -1,93 +0,0 @@
-from django.http import HttpResponseRedirect
-from django.shortcuts import get_object_or_404, render
-from django.urls import reverse, reverse_lazy
-from django.views import generic
-
-from .forms import AlbumForm, ProviderForm, ReviewForm
-from .models import List, Album, Provider, Review
-
-
-def detail_album(request, album_id):
-    album = get_object_or_404(Album, pk=album_id)
-    context = {'album': album}
-    return render(request, 'albuns/detail.html', context)
-
-
-class AlbumListView(generic.ListView):
-    model = Album
-    template_name = 'albuns/index.html'
-
-
-def create_album(request):
-    if request.method == 'POST':
-        album_form = AlbumForm(request.POST)
-    else:
-        album_form = AlbumForm()
-    context = {'album_form': album_form, }
-    return render(request, 'albuns/create.html', context)
-
-
-def update_album(request, album_id):
-    album = get_object_or_404(Album, pk=album_id)
-
-    if request.method == "POST":
-        form = AlbumForm(request.POST)
-        if form.is_valid():
-            album.name = form.cleaned_data['name']
-            album.release_year = form.cleaned_data['release_year']
-            album.poster_url = form.cleaned_data['poster_url']
-            album.save()
-            return HttpResponseRedirect(
-                reverse('albuns:detail', args=(album.id, )))
-    else:
-        form = AlbumForm(
-            initial={
-                'name': album.name,
-                'release_year': album.release_year,
-                'poster_url': album.poster_url
-            })
-
-    context = {'album': album, 'form': form}
-    return render(request, 'albuns/update.html', context)
-
-
-def delete_album(request, album_id):
-    album = get_object_or_404(Album, pk=album_id)
-
-    if request.method == "POST":
-        album.delete()
-        return HttpResponseRedirect(reverse('albuns:index'))
-
-    context = {'album': album}
-    return render(request, 'albuns/delete.html', context)
-
-
-def create_review(request, album_id):
-    album = get_object_or_404(Album, pk=album_id)
-    if request.method == 'POST':
-        form = ReviewForm(request.POST)
-        if form.is_valid():
-            review_author = form.cleaned_data['author']
-            review_text = form.cleaned_data['text']
-            review = Review(author=review_author,
-                            text=review_text,
-                            album=album)
-            review.save()
-            return HttpResponseRedirect(
-                reverse('albuns:detail', args=(album_id, )))
-    else:
-        form = ReviewForm()
-    context = {'form': form, 'album': album}
-    return render(request, 'albuns/review.html', context)
-
-
-class ListListView(generic.ListView):
-    model = List
-    template_name = 'albuns/lists.html'
-
-
-class ListCreateView(generic.CreateView):
-    model = List
-    template_name = 'albuns/create_list.html'
-    fields = ['name', 'author', 'albuns']
-    success_url = reverse_lazy('albuns:lists')
diff --git a/entrega2/settings.py b/entrega2/settings.py
index 1c31032..693bbe5 100644
--- a/entrega2/settings.py
+++ b/entrega2/settings.py
@@ -1,5 +1,5 @@
 """
-Django settings for albunsite project.
+Django settings for moviesite project.
 
 Generated by 'django-admin startproject' using Django 3.2.5.
 
@@ -40,7 +40,7 @@ INSTALLED_APPS = [
     'django.contrib.messages',
     'django.contrib.staticfiles',
     'staticpages.apps.StaticpagesConfig',
-    'albuns.apps.AlbunsConfig',  # adicione esta linha
+    'movies.apps.MoviesConfig',  # adicione esta linha
 ]
 
 MIDDLEWARE = [
diff --git a/entrega2/urls.py b/entrega2/urls.py
index 3e121dd..af49cbb 100644
--- a/entrega2/urls.py
+++ b/entrega2/urls.py
@@ -18,6 +18,6 @@ from django.urls import include, path
 
 urlpatterns = [
     path('', include('staticpages.urls')),
-    path('albuns/', include('albuns.urls')),  # adicionar esta linha
+    path('movies/', include('movies.urls')),  # adicionar esta linha
     path('admin/', admin.site.urls),
 ]
diff --git a/albuns/__init__.py b/movies/__init__.py
similarity index 100%
rename from albuns/__init__.py
rename to movies/__init__.py
diff --git a/albuns/admin.py b/movies/admin.py
similarity index 60%
rename from albuns/admin.py
rename to movies/admin.py
index a36e22a..97f7d58 100644
--- a/albuns/admin.py
+++ b/movies/admin.py
@@ -1,8 +1,8 @@
 from django.contrib import admin
 
-from .models import Album, Review, List, Provider
+from .models import Movie, Review, List, Provider
 
-admin.site.register(Album)
+admin.site.register(Movie)
 admin.site.register(Review)
 admin.site.register(List)
 admin.site.register(Provider)
diff --git a/albuns/apps.py b/movies/apps.py
similarity index 64%
rename from albuns/apps.py
rename to movies/apps.py
index 788f7ff..0a30ddd 100644
--- a/albuns/apps.py
+++ b/movies/apps.py
@@ -1,6 +1,6 @@
 from django.apps import AppConfig
 
 
-class AlbunsConfig(AppConfig):
+class MoviesConfig(AppConfig):
     default_auto_field = 'django.db.models.BigAutoField'
-    name = 'albuns'
+    name = 'movies'
diff --git a/albuns/forms.py b/movies/forms.py
similarity index 82%
rename from albuns/forms.py
rename to movies/forms.py
index 12e858c..68e58aa 100644
--- a/albuns/forms.py
+++ b/movies/forms.py
@@ -1,10 +1,10 @@
 from django.forms import ModelForm
-from .models import Album, Review, Provider
+from .models import Movie, Review, Provider
 
 
-class AlbumForm(ModelForm):
+class MovieForm(ModelForm):
     class Meta:
-        model = Album
+        model = Movie
         fields = [
             'name',
             'release_year',
@@ -13,7 +13,7 @@ class AlbumForm(ModelForm):
         ]
         labels = {
             'name': 'Título',
-            'release_year': 'Ano de Lançamento',
+            'release_year': 'Data de Lançamento',
             'poster_url': 'URL do poster',
             'info': 'Informações do Álbum'
         }
@@ -28,7 +28,7 @@ class ReviewForm(ModelForm):
         ]
         labels = {
             'author': 'Usuário',
-            'text': 'Comentário',
+            'text': 'Resenha',
         }
 
 
diff --git a/movies/migrations/0001_initial.py b/movies/migrations/0001_initial.py
new file mode 100644
index 0000000..e0def2e
--- /dev/null
+++ b/movies/migrations/0001_initial.py
@@ -0,0 +1,40 @@
+# Generated by Django 4.1.1 on 2022-11-06 10:05
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Movie',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True,
+                 primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=255)),
+                ('release_year', models.IntegerField()),
+                ('poster_url', models.URLField(null=True)),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Review',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True,
+                 primary_key=True, serialize=False, verbose_name='ID')),
+                ('text', models.CharField(max_length=255)),
+                ('likes', models.IntegerField(default=0)),
+                ('author', models.ForeignKey(
+                    on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
+                ('movie', models.ForeignKey(
+                    on_delete=django.db.models.deletion.CASCADE, to='movies.movie')),
+            ],
+        ),
+    ]
diff --git a/movies/migrations/0002_list.py b/movies/migrations/0002_list.py
new file mode 100644
index 0000000..18d7013
--- /dev/null
+++ b/movies/migrations/0002_list.py
@@ -0,0 +1,25 @@
+# Generated by Django 4.1.1 on 2022-11-06 10:35
+
+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),
+        ('movies', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='List',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=255)),
+                ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
+                ('movies', models.ManyToManyField(to='movies.movie')),
+            ],
+        ),
+    ]
diff --git a/movies/migrations/0003_provider.py b/movies/migrations/0003_provider.py
new file mode 100644
index 0000000..8b25e1c
--- /dev/null
+++ b/movies/migrations/0003_provider.py
@@ -0,0 +1,23 @@
+# Generated by Django 4.1.1 on 2022-11-06 10:41
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('movies', '0002_list'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Provider',
+            fields=[
+                ('movie', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='movies.movie')),
+                ('service', models.CharField(blank=True, max_length=255)),
+                ('has_flat_price', models.BooleanField(default=False)),
+                ('price', models.DecimalField(blank=True, decimal_places=2, max_digits=6, null=True)),
+            ],
+        ),
+    ]
diff --git a/movies/migrations/0004_movie_info_movie_post_date.py b/movies/migrations/0004_movie_info_movie_post_date.py
new file mode 100644
index 0000000..f9ea2c3
--- /dev/null
+++ b/movies/migrations/0004_movie_info_movie_post_date.py
@@ -0,0 +1,25 @@
+# Generated by Django 4.1.1 on 2022-11-06 12:37
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('movies', '0003_provider'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='movie',
+            name='info',
+            field=models.CharField(default='no info', max_length=255),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name='movie',
+            name='post_date',
+            field=models.DateTimeField(default='2022-11-06 00:00'),
+            preserve_default=False,
+        ),
+    ]
diff --git a/movies/migrations/0005_alter_movie_info_alter_movie_post_date.py b/movies/migrations/0005_alter_movie_info_alter_movie_post_date.py
new file mode 100644
index 0000000..fb57712
--- /dev/null
+++ b/movies/migrations/0005_alter_movie_info_alter_movie_post_date.py
@@ -0,0 +1,23 @@
+# Generated by Django 4.1.1 on 2022-11-06 12:45
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('movies', '0004_movie_info_movie_post_date'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='movie',
+            name='info',
+            field=models.CharField(max_length=255000),
+        ),
+        migrations.AlterField(
+            model_name='movie',
+            name='post_date',
+            field=models.DateTimeField(max_length=255),
+        ),
+    ]
diff --git a/albuns/migrations/__init__.py b/movies/migrations/__init__.py
similarity index 100%
rename from albuns/migrations/__init__.py
rename to movies/migrations/__init__.py
diff --git a/albuns/models.py b/movies/models.py
similarity index 75%
rename from albuns/models.py
rename to movies/models.py
index fa49bb9..f4841c0 100644
--- a/albuns/models.py
+++ b/movies/models.py
@@ -2,11 +2,11 @@ from django.db import models
 from django.conf import settings
 
 
-class Album(models.Model):
+class Movie(models.Model):
     name = models.CharField(max_length=255)
     release_year = models.IntegerField()
     poster_url = models.URLField(max_length=200, null=True)
-    post_date = models.DateTimeField(auto_now=True)
+    post_date = models.DateTimeField(max_length=255)
     info = models.CharField(max_length=255000)
 
     def __str__(self):
@@ -14,13 +14,11 @@ class Album(models.Model):
 
 
 class Review(models.Model):
-    author = models.ForeignKey(
-        settings.AUTH_USER_MODEL,
-        on_delete=models.CASCADE,
-    )
-    post_date = models.DateTimeField(auto_now=True)
+    author = models.ForeignKey(settings.AUTH_USER_MODEL,
+                               on_delete=models.CASCADE)
     text = models.CharField(max_length=255)
-    album = models.ForeignKey(Album, on_delete=models.CASCADE)
+    likes = models.IntegerField(default=0)
+    movie = models.ForeignKey(Movie, on_delete=models.CASCADE)
 
     def __str__(self):
         return f'"{self.text}" - {self.author.username}'
@@ -30,15 +28,15 @@ class List(models.Model):
     author = models.ForeignKey(settings.AUTH_USER_MODEL,
                                on_delete=models.CASCADE)
     name = models.CharField(max_length=255)
-    albuns = models.ManyToManyField(Album)
+    movies = models.ManyToManyField(Movie)
 
     def __str__(self):
         return f'{self.name} by {self.author}'
 
 
 class Provider(models.Model):
-    album = models.OneToOneField(
-        Album,
+    movie = models.OneToOneField(
+        Movie,
         on_delete=models.CASCADE,
         primary_key=True,
     )
diff --git a/movies/temp_data.py b/movies/temp_data.py
new file mode 100644
index 0000000..f4eb866
--- /dev/null
+++ b/movies/temp_data.py
@@ -0,0 +1,866 @@
+
+movie_data = [{
+    "id":
+    "1",
+    "name":
+    "The Shawshank Redemption",
+    "release_year":
+    "1994",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/q6y0Go1tsGEsmtFryDOJo3dEmqu.jpg"
+}, {
+    "id":
+    "2",
+    "name":
+    "The Godfather",
+    "release_year":
+    "1972",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/3bhkrj58Vtu7enYsRolD1fZdja1.jpg"
+}, {
+    "id":
+    "3",
+    "name":
+    "Schindler's List",
+    "release_year":
+    "1993",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/sF1U4EUQS8YHUYjNl3pMGNIQyr0.jpg"
+}, {
+    "id":
+    "4",
+    "name":
+    "Black Beauty",
+    "release_year":
+    "2020",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/5ZjMNJJabwBEnGVQoR2yoMEL9um.jpg"
+}, {
+    "id":
+    "5",
+    "name":
+    "The Godfather: Part II",
+    "release_year":
+    "1974",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/hek3koDUyRQk7FIhPXsa6mT2Zc3.jpg"
+}, {
+    "id":
+    "6",
+    "name":
+    "Your Name.",
+    "release_year":
+    "2016",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/q719jXXEzOoYaps6babgKnONONX.jpg"
+}, {
+    "id":
+    "7",
+    "name":
+    "Spirited Away",
+    "release_year":
+    "2001",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/39wmItIWsg5sZMyRUHLkWBcuVCM.jpg"
+}, {
+    "id":
+    "8",
+    "name":
+    "Hope",
+    "release_year":
+    "2013",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/x9yjkm9gIz5qI5fJMUTfBnWiB2o.jpg"
+}, {
+    "id":
+    "9",
+    "name":
+    "Parasite",
+    "release_year":
+    "2019",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/7IiTTgloJzvGI1TAYymCfbfl3vT.jpg"
+}, {
+    "id":
+    "10",
+    "name":
+    "My Hero Academia: Heroes Rising",
+    "release_year":
+    "2019",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/zGVbrulkupqpbwgiNedkJPyQum4.jpg"
+}, {
+    "id":
+    "11",
+    "name":
+    "The Green Mile",
+    "release_year":
+    "1999",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/velWPhVMQeQKcxggNEU8YmIo52R.jpg"
+}, {
+    "id":
+    "12",
+    "name":
+    "12 Angry Men",
+    "release_year":
+    "1957",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/ppd84D2i9W8jXmsyInGyihiSyqz.jpg"
+}, {
+    "id":
+    "13",
+    "name":
+    "A Dog's Will",
+    "release_year":
+    "2000",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/m8eFedsS7vQCZCS8WGp5n1bVD0q.jpg"
+}, {
+    "id":
+    "14",
+    "name":
+    "Wolfwalkers",
+    "release_year":
+    "2020",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/ehAKuE48okTuonq6TpsNQj8vFTC.jpg"
+}, {
+    "id":
+    "15",
+    "name":
+    "Rascal Does Not Dream of a Dreaming Girl",
+    "release_year":
+    "2019",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/pvdBzHOWjrLl69lUswPiVnI8szv.jpg"
+}, {
+    "id":
+    "16",
+    "name":
+    "Pulp Fiction",
+    "release_year":
+    "1994",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/d5iIlFn5s0ImszYzBPb8JPIfbXD.jpg"
+}, {
+    "id":
+    "17",
+    "name":
+    "The Dark Knight",
+    "release_year":
+    "2008",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/qJ2tW6WMUDux911r6m7haRef0WH.jpg"
+}, {
+    "id":
+    "18",
+    "name":
+    "The Lord of the Rings: The Return of the King",
+    "release_year":
+    "2003",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/rCzpDGLbOoPwLjy3OAm5NUPOTrC.jpg"
+}, {
+    "id":
+    "19",
+    "name":
+    "Dedicated to my ex",
+    "release_year":
+    "2019",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/xc4bTXVwYNXi10jG9dwcaYt5IpU.jpg"
+}, {
+    "id":
+    "20",
+    "name":
+    "Forrest Gump",
+    "release_year":
+    "1994",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/h5J4W4veyxMXDMjeNxZI46TsHOb.jpg"
+}, {
+    "id":
+    "21",
+    "name":
+    "KonoSuba: God's Blessing on this Wonderful World! Legend of Crimson",
+    "release_year":
+    "2019",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/j73LuQcA21KvkVFcroWWMN8tTJv.jpg"
+}, {
+    "id":
+    "22",
+    "name":
+    "The Good, the Bad and the Ugly",
+    "release_year":
+    "1966",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/usIXFgUP0Fjbwgeg2GwEOlAHSFM.jpg"
+}, {
+    "id":
+    "23",
+    "name":
+    "Life Is Beautiful",
+    "release_year":
+    "1997",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/74hLDKjD5aGYOotO6esUVaeISa2.jpg"
+}, {
+    "id":
+    "24",
+    "name":
+    "Cinema Paradiso",
+    "release_year":
+    "1988",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/8SRUfRUi6x4O68n0VCbDNRa6iGL.jpg"
+}, {
+    "id":
+    "25",
+    "name":
+    "Seven Samurai",
+    "release_year":
+    "1954",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/8OKmBV5BUFzmozIC3pPWKHy17kx.jpg"
+}, {
+    "id":
+    "26",
+    "name":
+    "GoodFellas",
+    "release_year":
+    "1990",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/6QMSLvU5ziIL2T6VrkaKzN2YkxK.jpg"
+}, {
+    "id":
+    "27",
+    "name":
+    "Once Upon a Time in America",
+    "release_year":
+    "1984",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/i0enkzsL5dPeneWnjl1fCWm6L7k.jpg"
+}, {
+    "id":
+    "28",
+    "name":
+    "Hamilton",
+    "release_year":
+    "2020",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/h1B7tW0t399VDjAcWJh8m87469b.jpg"
+}, {
+    "id":
+    "29",
+    "name":
+    "Life in a Year",
+    "release_year":
+    "2020",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/bP7u19opmHXYeTCUwGjlLldmUMc.jpg"
+}, {
+    "id":
+    "30",
+    "name":
+    "Psycho",
+    "release_year":
+    "1960",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/AiLmJibnhIMDeWVE9lR747yOgq1.jpg"
+}, {
+    "id":
+    "31",
+    "name":
+    "Harakiri",
+    "release_year":
+    "1962",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/fRqVjso3rdEcxZHXWE2xazDAtjI.jpg"
+}, {
+    "id":
+    "32",
+    "name":
+    "Fight Club",
+    "release_year":
+    "1999",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/pB8BM7pdSp6B6Ih7QZ4DrQ3PmJK.jpg"
+}, {
+    "id":
+    "33",
+    "name":
+    "Clouds",
+    "release_year":
+    "2020",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/d0OdD1I8qAfETvE9Rp9Voq7R8LR.jpg"
+}, {
+    "id":
+    "34",
+    "name":
+    "One Flew Over the Cuckoo's Nest",
+    "release_year":
+    "1975",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/3jcbDmRFiQ83drXNOvRDeKHxS0C.jpg"
+}, {
+    "id":
+    "35",
+    "name":
+    "A Silent Voice: The Movie",
+    "release_year":
+    "2016",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/tuFaWiqX0TXoWu7DGNcmX3UW7sT.jpg"
+}, {
+    "id":
+    "36",
+    "name":
+    "Hotarubi no Mori e",
+    "release_year":
+    "2011",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/mDqzHV8UXWWNpZkoAbKmKX1ZxEE.jpg"
+}, {
+    "id":
+    "37",
+    "name":
+    "City of God",
+    "release_year":
+    "2002",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/k7eYdWvhYQyRQoU2TB2A2Xu2TfD.jpg"
+}, {
+    "id":
+    "38",
+    "name":
+    "Grave of the Fireflies",
+    "release_year":
+    "1988",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/qG3RYlIVpTYclR9TYIsy8p7m7AT.jpg"
+}, {
+    "id":
+    "39",
+    "name":
+    "Zack Snyder's Justice League",
+    "release_year":
+    "2021",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/tnAuB8q5vv7Ax9UAEje5Xi4BXik.jpg"
+}, {
+    "id":
+    "40",
+    "name":
+    "Spider-Man: Into the Spider-Verse",
+    "release_year":
+    "2018",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/iiZZdoQBEYBv6id8su7ImL0oCbD.jpg"
+}, {
+    "id":
+    "41",
+    "name":
+    "New Gods: Nezha Reborn",
+    "release_year":
+    "2021",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/6goDkAD6J3br81YMQf0Gat8Bqjy.jpg"
+}, {
+    "id":
+    "42",
+    "name":
+    "Steven Universe: The Movie",
+    "release_year":
+    "2019",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/8mRgpubxHqnqvENK4Bei30xMDvy.jpg"
+}, {
+    "id":
+    "43",
+    "name":
+    "Maquia: When the Promised Flower Blooms",
+    "release_year":
+    "2018",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/hL3NqRE2ccR4Y2sYSJTrmalRjrz.jpg"
+}, {
+    "id":
+    "44",
+    "name":
+    "Howl's Moving Castle",
+    "release_year":
+    "2004",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/TkTPELv4kC3u1lkloush8skOjE.jpg"
+}, {
+    "id":
+    "45",
+    "name":
+    "Sunset Boulevard",
+    "release_year":
+    "1950",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/zt8aQ6ksqK6p1AopC5zVTDS9pKT.jpg"
+}, {
+    "id":
+    "46",
+    "name":
+    "The Art of Racing in the Rain",
+    "release_year":
+    "2019",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/mi5VN4ww0JZgRFJIaPxxTGKjUg7.jpg"
+}, {
+    "id":
+    "47",
+    "name":
+    "Cruella",
+    "release_year":
+    "2021",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/wToO8opxkGwKgSfJ1JK8tGvkG6U.jpg"
+}, {
+    "id":
+    "48",
+    "name":
+    "Demon Slayer -Kimetsu no Yaiba- The Movie: Mugen Train",
+    "release_year":
+    "2020",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/h8Rb9gBr48ODIwYUttZNYeMWeUU.jpg"
+}, {
+    "id":
+    "49",
+    "name":
+    "Neon Genesis Evangelion: The End of Evangelion",
+    "release_year":
+    "1997",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/m9PTii0XWCIKZBBrCrOn8RLTK0w.jpg"
+}, {
+    "id":
+    "50",
+    "name":
+    "Justice League Dark: Apokolips War",
+    "release_year":
+    "2020",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/c01Y4suApJ1Wic2xLmaq1QYcfoZ.jpg"
+}, {
+    "id":
+    "51",
+    "name":
+    "Me contro Te: Il film - La vendetta del Signor S",
+    "release_year":
+    "2020",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/sfeQTIRkJjWt8IPDSBcPqkrcaas.jpg"
+}, {
+    "id":
+    "52",
+    "name":
+    "The Empire Strikes Back",
+    "release_year":
+    "1980",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/7BuH8itoSrLExs2YZSsM01Qk2no.jpg"
+}, {
+    "id":
+    "53",
+    "name":
+    "Whiplash",
+    "release_year":
+    "2014",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/oPxnRhyAIzJKGUEdSiwTJQBa3NM.jpg"
+}, {
+    "id":
+    "54",
+    "name":
+    "American History X",
+    "release_year":
+    "1998",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/c2gsmSQ2Cqv8zosqKOCwRS0GFBS.jpg"
+}, {
+    "id":
+    "55",
+    "name":
+    "The Pianist",
+    "release_year":
+    "2002",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/enFfoFd3TYs6ttTxrBIfmecQPnz.jpg"
+}, {
+    "id":
+    "56",
+    "name":
+    "Ikiru",
+    "release_year":
+    "1952",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/dgNTS4EQDDVfkzJI5msKuHu2Ei3.jpg"
+}, {
+    "id":
+    "57",
+    "name":
+    "The Great Dictator",
+    "release_year":
+    "1940",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/1QpO9wo7JWecZ4NiBuu625FiY1j.jpg"
+}, {
+    "id":
+    "58",
+    "name":
+    "City Lights",
+    "release_year":
+    "1931",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/bXNvzjULc9jrOVhGfjcc64uKZmZ.jpg"
+}, {
+    "id":
+    "59",
+    "name":
+    "Rear Window",
+    "release_year":
+    "1954",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/qitnZcLP7C9DLRuPpmvZ7GiEjJN.jpg"
+}, {
+    "id":
+    "60",
+    "name":
+    "The Lord of the Rings: The Fellowship of the Ring",
+    "release_year":
+    "2001",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/6oom5QYQ2yQTMJIbnvbkBL9cHo6.jpg"
+}, {
+    "id":
+    "61",
+    "name":
+    "High and Low",
+    "release_year":
+    "1963",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/tgNjemQPG96uIezpiUiXFcer5ga.jpg"
+}, {
+    "id":
+    "62",
+    "name":
+    "Five Feet Apart",
+    "release_year":
+    "2019",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/kreTuJBkUjVWePRfhHZuYfhNE1T.jpg"
+}, {
+    "id":
+    "63",
+    "name":
+    "Nobody",
+    "release_year":
+    "2021",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/oBgWY00bEFeZ9N25wWVyuQddbAo.jpg"
+}, {
+    "id":
+    "64",
+    "name":
+    "Princess Mononoke",
+    "release_year":
+    "1997",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/jHWmNr7m544fJ8eItsfNk8fs2Ed.jpg"
+}, {
+    "id":
+    "65",
+    "name":
+    "Inception",
+    "release_year":
+    "2010",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/9gk7adHYeDvHkCSEqAvQNLV5Uge.jpg"
+}, {
+    "id":
+    "66",
+    "name":
+    "Interstellar",
+    "release_year":
+    "2014",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/gEU2QniE6E77NI6lCU6MxlNBvIx.jpg"
+}, {
+    "id":
+    "67",
+    "name":
+    "The Lord of the Rings: The Two Towers",
+    "release_year":
+    "2002",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/5VTN0pR8gcqV3EPUHHfMGnJYN9L.jpg"
+}, {
+    "id":
+    "68",
+    "name":
+    "Modern Times",
+    "release_year":
+    "1936",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/7uoiKOEjxBBW0AgDGQWrlfGQ90w.jpg"
+}, {
+    "id":
+    "69",
+    "name":
+    "Se7en",
+    "release_year":
+    "1995",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/69Sns8WoET6CfaYlIkHbla4l7nC.jpg"
+}, {
+    "id":
+    "70",
+    "name":
+    "Mortal Kombat Legends: Scorpion's Revenge",
+    "release_year":
+    "2020",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/4VlXER3FImHeFuUjBShFamhIp9M.jpg"
+}, {
+    "id":
+    "71",
+    "name":
+    "We All Loved Each Other So Much",
+    "release_year":
+    "1974",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/zGGWYpiKNwjpKxelPxOMqJnUgDs.jpg"
+}, {
+    "id":
+    "72",
+    "name":
+    "The Silence of the Lambs",
+    "release_year":
+    "1991",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/rplLJ2hPcOQmkFhTqUte0MkEaO2.jpg"
+}, {
+    "id":
+    "73",
+    "name":
+    "Doctor Who: The Day of the Doctor",
+    "release_year":
+    "2013",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/qkhP3bhxQQjs1bGEWNts64DOUkK.jpg"
+}, {
+    "id":
+    "74",
+    "name":
+    "Paths of Glory",
+    "release_year":
+    "1957",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/l2IY0gOHHmCWM90LjteFssxIV1G.jpg"
+}, {
+    "id":
+    "75",
+    "name":
+    "Dead Poets Society",
+    "release_year":
+    "1989",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/ai40gM7SUaGA6fthvsd87o8IQq4.jpg"
+}, {
+    "id":
+    "76",
+    "name":
+    "Léon: The Professional",
+    "release_year":
+    "1994",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/hUJvnlCepB4xcp17E7Kc6unXgiS.jpg"
+}, {
+    "id":
+    "77",
+    "name":
+    "Once Upon a Time in the West",
+    "release_year":
+    "1968",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/qbYgqOczabWNn2XKwgMtVrntD6P.jpg"
+}, {
+    "id":
+    "78",
+    "name":
+    "Come and See",
+    "release_year":
+    "1985",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/90A8sXK9QZVJ7Rj8nLdsj5NuO5s.jpg"
+}, {
+    "id":
+    "79",
+    "name":
+    "Mommy",
+    "release_year":
+    "2014",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/iUN8FpWSjrHx0b8lPnBuIoLnd67.jpg"
+}, {
+    "id":
+    "80",
+    "name":
+    "Tokyo Story",
+    "release_year":
+    "1953",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/g2YbTYKpY7N2yDSk7BfXZ18I5QV.jpg"
+}, {
+    "id":
+    "81",
+    "name":
+    "Sansho the Bailiff",
+    "release_year":
+    "1954",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/6Ai1iAje7d59N7CnFZvb8zQACFH.jpg"
+}, {
+    "id":
+    "82",
+    "name":
+    "The Legend of 1900",
+    "release_year":
+    "1998",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/iOcbJ5pxokOPDRgieVDbsFMrCc6.jpg"
+}, {
+    "id":
+    "83",
+    "name":
+    "The Handmaiden",
+    "release_year":
+    "2016",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/xV3H7UmImtZ6adpwTbdOrZS0MvR.jpg"
+}, {
+    "id":
+    "84",
+    "name":
+    "My Mom is a Character 3",
+    "release_year":
+    "2019",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/zw77BFPGJ73Lig8GwRzYj1XHq53.jpg"
+}, {
+    "id":
+    "85",
+    "name":
+    "Back to the Future",
+    "release_year":
+    "1985",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/7lyBcpYB0Qt8gYhXYaEZUNlNQAv.jpg"
+}, {
+    "id":
+    "86",
+    "name":
+    "Miracle in Cell No. 7",
+    "release_year":
+    "2019",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/bOth4QmNyEkalwahfPCfiXjNh1r.jpg"
+}, {
+    "id":
+    "87",
+    "name":
+    "Woman in the Dunes",
+    "release_year":
+    "1964",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/rE6vtXBDXy3cjyFmxfsDese0Eo4.jpg"
+}, {
+    "id":
+    "88",
+    "name":
+    "Stalker",
+    "release_year":
+    "1979",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/lUE0Bp7wH0EterJ44qMRsqtKFnp.jpg"
+}, {
+    "id":
+    "89",
+    "name":
+    "Klaus",
+    "release_year":
+    "2019",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/q125RHUDgR4gjwh1QkfYuJLYkL.jpg"
+}, {
+    "id":
+    "90",
+    "name":
+    "Miraculous World: New York, United HeroeZ",
+    "release_year":
+    "2020",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/19kfvGktytDZInUmpv3WlaHoTxP.jpg"
+}, {
+    "id":
+    "91",
+    "name":
+    "Bicycle Thieves",
+    "release_year":
+    "1948",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/ihLPR2hiHljvvdTzHk6NeNTVMXf.jpg"
+}, {
+    "id":
+    "92",
+    "name":
+    "Apocalypse Now",
+    "release_year":
+    "1979",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/gQB8Y5RCMkv2zwzFHbUJX3kAhvA.jpg"
+}, {
+    "id":
+    "93",
+    "name":
+    "Investigation of a Citizen Above Suspicion",
+    "release_year":
+    "1970",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/vPTZwlq1IC4o1DCsEZEl2uGljzm.jpg"
+}, {
+    "id":
+    "94",
+    "name":
+    "Persona",
+    "release_year":
+    "1966",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/bdXbfUir63TQHA5NTNcXPICZCW8.jpg"
+}, {
+    "id":
+    "95",
+    "name":
+    "The Hate U Give",
+    "release_year":
+    "2018",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/2icwBom0t5nmOuZI9FVXF3gkMK0.jpg"
+}, {
+    "id":
+    "96",
+    "name":
+    "Wolf Children",
+    "release_year":
+    "2012",
+    "poster_url":
+    "https://image.tmdb.org/t/p/w500/nqqovhsvsWbsb7LcGaIGDRZrwgB.jpg"
+}]
diff --git a/albuns/templates/albuns/create.html b/movies/templates/movies/create.html
similarity index 75%
rename from albuns/templates/albuns/create.html
rename to movies/templates/movies/create.html
index bc3436e..36b55b6 100644
--- a/albuns/templates/albuns/create.html
+++ b/movies/templates/movies/create.html
@@ -7,9 +7,9 @@ Criar Álbum
 {% block content %}
 <h2>Adicionar Álbum</h2>
 
-<form action="{% url 'albuns:create' %}" method="post">
+<form action="{% url 'movies:create' %}" method="post">
     {% csrf_token %}
-    {{ album_form.as_p }}
+    {{ movie_form.as_p }}
     {{ provider_form.as_p }}
     <button type="submit">Criar</button>
 </form>
diff --git a/albuns/templates/albuns/create_list.html b/movies/templates/movies/create_list.html
similarity index 79%
rename from albuns/templates/albuns/create_list.html
rename to movies/templates/movies/create_list.html
index d1911fe..c1dc23e 100644
--- a/albuns/templates/albuns/create_list.html
+++ b/movies/templates/movies/create_list.html
@@ -7,7 +7,7 @@ Criar Álbum
 {% block content %}
 <h2>Criar Lista</h2>
 
-<form action="{% url 'albuns:create-list' %}" method="post">
+<form action="{% url 'movies:create-list' %}" method="post">
     {% csrf_token %}
     {{ form.as_p }}
     <button type="submit">Criar</button>
diff --git a/movies/templates/movies/delete.html b/movies/templates/movies/delete.html
new file mode 100644
index 0000000..ae4528d
--- /dev/null
+++ b/movies/templates/movies/delete.html
@@ -0,0 +1,12 @@
+{% extends 'base.html' %}
+
+{% block content %}
+<form action="{% url 'movies:delete' movie.id %}" method="post">
+    {% csrf_token %}
+    <p>
+        Você tem certeza que deseja apagar o álbum "{{ movie.name }} ({{ movie.release_year }})"?
+    </p>
+    <button type="submit">Apagar</button>
+</form>
+
+{% endblock content %}
\ No newline at end of file
diff --git a/movies/templates/movies/detail.html b/movies/templates/movies/detail.html
new file mode 100644
index 0000000..0dbc002
--- /dev/null
+++ b/movies/templates/movies/detail.html
@@ -0,0 +1,24 @@
+{% extends 'base.html' %}
+
+{% block title %}
+{{ movie.name }} ({{ movie.release_year }}
+{% endblock title %}
+
+{% block content %}
+<h2>Detalhes do Álbum {{ movie.name }} ({{ movie.release_year }})</h2>
+
+<hr>
+
+<section class="dados-de-album">
+    <img src="{{ movie.poster_url }}" alt="poster do album {{ movie.name}}">
+    <ul>
+        <li>Nome: {{ movie.name }}</li>
+        <li>Ano de Lançamento: {{ movie.release_year }} </li>
+        <li>Data de Postagem: {{movie.post_date }} </li>
+        <li>Informação: {{movie.info }}</li>
+        <li><a href="{% url 'movies:update' movie.id %}">Editar</a></li>
+        <li><a href="{% url 'movies:delete' movie.id %}">Apagar</a></li>
+    </ul>
+</section>
+
+{% endblock content %}
\ No newline at end of file
diff --git a/movies/templates/movies/index.html b/movies/templates/movies/index.html
new file mode 100644
index 0000000..985eb9c
--- /dev/null
+++ b/movies/templates/movies/index.html
@@ -0,0 +1,23 @@
+{% extends 'base.html' %}
+
+{% block content %}
+<h2>Todos os Álbuns</h2>
+<section>
+    <p>Muitos resultados? <a href="{% url 'movies:search' %}">Buscar Álbuns</a></p>
+    <p>Não encontrou o álbum? <a href="{% url 'movies:create' %}">Adicionar Novo Álbum</a></p>
+</section>
+{% if movie_list %}
+<section class="lista-de-cards">
+    {% for movie in movie_list %}
+    <article class="card">
+        <a href="{% url 'movies:detail' movie.id %}"><img src="{{ movie.poster_url }}"
+                alt="poster do album {{ movie.name}}"></a> <!-- modifique esta linha -->
+        <p>{{ movie.name }} ({{ movie.release_year }})</p>
+    </article>
+    {% endfor %}
+</section>
+{% else %}
+<p>Não foi encontrado nenhum album.</p>
+{% endif %}
+
+{% endblock content %}
\ No newline at end of file
diff --git a/albuns/templates/albuns/lists.html b/movies/templates/movies/lists.html
similarity index 59%
rename from albuns/templates/albuns/lists.html
rename to movies/templates/movies/lists.html
index 307d7b7..f8c5809 100644
--- a/albuns/templates/albuns/lists.html
+++ b/movies/templates/movies/lists.html
@@ -15,18 +15,18 @@ Listas
             <h3>{{list.name}} (de {{ list.author }}) </h3>
         </header>
         <div class="lista-de-cards">
-            {% for album in list.albuns.all %}
+            {% for movie in list.movies.all %}
             <div class="card">
-                <a href="{% url 'albuns:detail' album.id %}"><img src="{{ album.poster_url }}"
-                        alt="poster do álbum {{ album.name}}"></a>
-                <p>{{ album.name }} ({{ album.release_year }})</p>
+                <a href="{% url 'movies:detail' movie.id %}"><img src="{{ movie.poster_url }}"
+                        alt="poster do álbum {{ movie.name}}"></a>
+                <p>{{ movie.name }} ({{ movie.release_year }})</p>
             </div>
             {% endfor %}
         </div>
     </article>
     {% endfor %}
 
-    <a href="{% url 'albuns:create-list' %}"><button>Crie sua Lista</button></a>
+    <a href="{% url 'movies:create-list' %}"><button>Crie sua Lista</button></a>
 </section>
 
 {% endblock content %}
\ No newline at end of file
diff --git a/movies/templates/movies/review.html b/movies/templates/movies/review.html
new file mode 100644
index 0000000..d66faad
--- /dev/null
+++ b/movies/templates/movies/review.html
@@ -0,0 +1,13 @@
+{% extends 'base.html' %}
+
+{% block content %}
+<h2>Resenhar Álbum {{ movie.name }} ({{ movie.release_year }})</h2>
+
+<form action="{% url 'movies:review' movie.id %}" method="post">
+    {% csrf_token %}
+    {{ form.as_p }}
+    <button type="submit">Postar Resenha</button>
+</form>
+
+<p><a href="{% url 'movies:detail' movie.id %}">Voltar para a página do álbum</a></p>
+{% endblock content %}
\ No newline at end of file
diff --git a/albuns/templates/albuns/search.html b/movies/templates/movies/search.html
similarity index 67%
rename from albuns/templates/albuns/search.html
rename to movies/templates/movies/search.html
index 3081b11..1ab5be4 100644
--- a/albuns/templates/albuns/search.html
+++ b/movies/templates/movies/search.html
@@ -2,7 +2,7 @@
 
 {% block content %}
 <h2>Busca de Álbuns por Nome</h2>
-<form action="{% url 'albuns:search' %}">
+<form action="{% url 'movies:search' %}">
     <p>
         <label for="id_query">Título:</label>
         <input type="text" name="query" id="id_query" />
@@ -12,12 +12,12 @@
 
 
 <h2>Resultado da Busca</h2>
-{% if album_list %}
+{% if movie_list %}
 <section class="lista-de-cards">
-    {% for album in album_list %}
+    {% for movie in movie_list %}
     <article class="card">
-        <img src="{{ album.poster_url }}" alt="poster do álbum {{ album.name}}">
-        <p>{{ album.name }} ({{ album.release_year }})</p>
+        <img src="{{ movie.poster_url }}" alt="poster do álbum {{ movie.name}}">
+        <p>{{ movie.name }} ({{ movie.release_year }})</p>
     </article>
     {% endfor %}
 </section>
diff --git a/albuns/templates/albuns/update.html b/movies/templates/movies/update.html
similarity index 58%
rename from albuns/templates/albuns/update.html
rename to movies/templates/movies/update.html
index 4f319fc..1debedc 100644
--- a/albuns/templates/albuns/update.html
+++ b/movies/templates/movies/update.html
@@ -1,8 +1,8 @@
 {% extends 'base.html' %}
 
 {% block content %}
-<h2>Atualizar Dados do Álbum {{ album.name }}({{ album.release_year}})</h2>
-<form method="POST" action="{% url 'albuns:update' album.id%}">
+<h2>Atualizar Dados do Álbum {{ movie.name }}({{ movie.release_year}})</h2>
+<form method="POST" action="{% url 'movies:update' movie.id%}">
     {% csrf_token %}
     {{ form.as_p }}
     <button type="submit">Atualizar</button>
diff --git a/albuns/tests.py b/movies/tests.py
similarity index 100%
rename from albuns/tests.py
rename to movies/tests.py
diff --git a/movies/urls.py b/movies/urls.py
new file mode 100644
index 0000000..24b06c7
--- /dev/null
+++ b/movies/urls.py
@@ -0,0 +1,17 @@
+from django.urls import path
+
+from . import views
+
+app_name = 'movies'
+urlpatterns = [
+    path('', views.MovieListView.as_view(), name='index'),  # edite esta linha
+    path('search/', views.search_movies, name='search'),
+    path('create/', views.create_movie, name='create'),
+    path('<int:movie_id>/', views.detail_movie,
+         name='detail'),
+    path('update/<int:movie_id>/', views.update_movie, name='update'),
+    path('delete/<int:movie_id>/', views.delete_movie, name='delete'),
+    path('<int:movie_id>/review/', views.create_review, name='review'),
+    path('lists/', views.ListListView.as_view(), name='lists'),
+    path('lists/create', views.ListCreateView.as_view(), name='create-list'),
+]
diff --git a/movies/views.py b/movies/views.py
new file mode 100644
index 0000000..3adf3b6
--- /dev/null
+++ b/movies/views.py
@@ -0,0 +1,116 @@
+from django.http import HttpResponseRedirect
+from django.shortcuts import get_object_or_404, render
+from django.urls import reverse, reverse_lazy
+from django.views import generic
+
+from .forms import MovieForm, ProviderForm, ReviewForm
+from .models import List, Movie, Provider, Review
+from .temp_data import movie_data
+
+
+def detail_movie(request, movie_id):
+    movie = get_object_or_404(Movie, pk=movie_id)
+    context = {'movie': movie}
+    return render(request, 'movies/detail.html', context)
+
+
+class MovieListView(generic.ListView):
+    model = Movie
+    template_name = 'movies/index.html'
+
+
+def search_movies(request):
+    context = {}
+    if request.GET.get('query', False):
+        search_term = request.GET['query'].lower()
+        movie_list = Movie.objects.filter(name__icontains=search_term)
+        context = {"movie_list": movie_list}
+    return render(request, 'movies/search.html', context)
+
+
+def search_movies(request):
+    context = {}
+    if request.GET.get('query', False):
+        context = {
+            "movie_list": [
+                m for m in movie_data
+                if request.GET['query'].lower() in m['name'].lower()
+            ]
+        }
+    # modifique esta linha
+    return render(request, 'movies/search.html', context)
+
+
+def create_movie(request):
+    if request.method == 'POST':
+        movie_form = MovieForm(request.POST)
+    else:
+        movie_form = MovieForm()
+    context = {'movie_form': movie_form, }
+    return render(request, 'movies/create.html', context)
+
+
+def update_movie(request, movie_id):
+    movie = get_object_or_404(Movie, pk=movie_id)
+
+    if request.method == "POST":
+        form = MovieForm(request.POST)
+        if form.is_valid():
+            movie.name = form.cleaned_data['name']
+            movie.release_year = form.cleaned_data['release_year']
+            movie.poster_url = form.cleaned_data['poster_url']
+            movie.save()
+            return HttpResponseRedirect(
+                reverse('movies:detail', args=(movie.id, )))
+    else:
+        form = MovieForm(
+            initial={
+                'name': movie.name,
+                'release_year': movie.release_year,
+                'poster_url': movie.poster_url
+            })
+
+    context = {'movie': movie, 'form': form}
+    return render(request, 'movies/update.html', context)
+
+
+def delete_movie(request, movie_id):
+    movie = get_object_or_404(Movie, pk=movie_id)
+
+    if request.method == "POST":
+        movie.delete()
+        return HttpResponseRedirect(reverse('movies:index'))
+
+    context = {'movie': movie}
+    return render(request, 'movies/delete.html', context)
+
+
+def create_review(request, movie_id):
+    movie = get_object_or_404(Movie, pk=movie_id)
+    if request.method == 'POST':
+        form = ReviewForm(request.POST)
+        if form.is_valid():
+            review_author = form.cleaned_data['author']
+            review_text = form.cleaned_data['text']
+            review = Review(author=review_author,
+                            text=review_text,
+                            movie=movie)
+            review.save()
+            return HttpResponseRedirect(
+                reverse('movies:detail', args=(movie_id, )))
+    else:
+        form = ReviewForm()
+    context = {'form': form, 'movie': movie}
+    return render(request, 'movies/review.html', context)
+
+
+class ListListView(generic.ListView):
+    model = List
+    template_name = 'movies/lists.html'
+
+
+class ListCreateView(generic.CreateView):
+    model = List
+    template_name = 'movies/create_list.html'
+    fields = ['name', 'author', 'movies']
+    success_url = reverse_lazy('movies:lists')
diff --git a/templates/base.html b/templates/base.html
index 388e164..b803c05 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -24,8 +24,8 @@
         </a>
         <nav id="navegacao-principal">
             <ul>
-                <li><a href="{% url 'albuns:index' %}">Álbuns</a></li>
-                <li><a href="{% url 'albuns:lists' %}">Listas</a></li> <!-- adicionar esta linha -->
+                <li><a href="{% url 'movies:index' %}">Álbuns</a></li>
+                <li><a href="{% url 'movies:lists' %}">Listas</a></li> <!-- adicionar esta linha -->
                 <li><a href="{% url 'about' %}">Sobre</a></li>
             </ul>
         </nav>
-- 
GitLab