From 91496c9254960f5c6d029e5732c5de944b0148e3 Mon Sep 17 00:00:00 2001 From: erbrown2 Date: Sun, 17 May 2026 18:24:25 -0400 Subject: [PATCH] Honestly this was really fun to do. I am pretty proud to build an app to successfully work. I was able to create multiple differnt routes including adding movies, searching, updating status, rating, and genre. This project has made me realize how useful it is to understanding how apps are developed. I feel like this is super applicable and super knowledgable to understand. Some skills I learned with this project is how to design and build models, create API routes, working databases, and handling errors. --- project/app/database.sqlite | Bin 0 -> 139264 bytes project/app/migrations/0001_initial.py | 29 ++++++++ .../app/migrations/0002_alter_movie_genre.py | 19 +++++ .../app/migrations/0003_remove_movie_year.py | 17 +++++ project/app/migrations/__init__.py | 0 project/app/models.py | 24 ++++++ project/app/views.py | 70 ++++++++++++++++++ 7 files changed, 159 insertions(+) create mode 100644 project/app/database.sqlite create mode 100644 project/app/migrations/0001_initial.py create mode 100644 project/app/migrations/0002_alter_movie_genre.py create mode 100644 project/app/migrations/0003_remove_movie_year.py create mode 100644 project/app/migrations/__init__.py create mode 100644 project/app/models.py create mode 100644 project/app/views.py diff --git a/project/app/database.sqlite b/project/app/database.sqlite new file mode 100644 index 0000000000000000000000000000000000000000..676b9f82e53dc33af1c6bb84c06105061728b4d4 GIT binary patch literal 139264 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 10: + raise BadRequest("Rating must be between 1 and 10") + movie.rating = rating + movie.save() + return movie.to_dict() + except Movie.DoesNotExist: + raise NotFound("Movie not found") + +@route_post('movies/update-genre', args={'id': int, 'genre': str}) +def update_genre(params): + """Update the genre of an existing movie""" + try: + movie = Movie.objects.get(id=params['id']) + movie.genre = params['genre'] + movie.save() + return movie.to_dict() + except Movie.DoesNotExist: + raise NotFound("Movie not found") \ No newline at end of file