From 8a34f17c46a87981f2ee9bed359cc91a8a0e40a8 Mon Sep 17 00:00:00 2001
From: tfrisinger2 <tfrisinger2@huskers.unl.edu>
Date: Thu, 27 Jul 2023 20:08:04 -0500
Subject: [PATCH] completed lab

---
 main.py | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 69 insertions(+), 4 deletions(-)

diff --git a/main.py b/main.py
index be0b0af..bc69178 100644
--- a/main.py
+++ b/main.py
@@ -1,6 +1,6 @@
 from sys import stderr
 
-from sqlalchemy.exc import SQLAlchemyError
+from sqlalchemy.exc import SQLAlchemyError, NoResultFound, MultipleResultsFound
 from movies import MovieDatabase, Movie, Genre
 
 from kivy.app import App
@@ -9,6 +9,7 @@ from kivy.properties import StringProperty
 
 class MoviesApp(App):
     message = StringProperty('')
+    name = StringProperty('')
 
     def __init__(self, **kwargs):
         super().__init__(**kwargs)
@@ -17,13 +18,77 @@ class MoviesApp(App):
         self.session = self.movie_database.create_session()
 
     def create_movie(self, title, action_selected, drama_selected, fantasy_selected):
-        pass
+        query = self.session.query(Genre).filter(Genre.name == 'Drama').one()
+        print(query.genre_id)
+        query = self.session.query(Genre).filter(Genre.name == 'Action').one()
+        print(query.genre_id)
+        query = self.session.query(Genre).filter(Genre.name == 'Fantasy').one()
+        print(query.genre_id)
+
+        try:
+            title_input = self.root.ids.title
+            title = title_input.text
+            genres = []
+            if action_selected:
+                genres.append(self.session.query(Genre).filter(Genre.name == 'Action').one())
+            if drama_selected:
+                genres.append(self.session.query(Genre).filter(Genre.name == 'Drama').one())
+            if fantasy_selected:
+                genres.append(self.session.query(Genre).filter(Genre.name == 'Fantasy').one())
+            new_movie = Movie(
+                title=self.name,
+                genres=genres,
+            )
+            self.session.add(new_movie)
+            self.session.commit()
+            self.message = f'Successfully created movie: {title}'
+        except NoResultFound:
+            self.message = 'Error Genre not found'
+        except MultipleResultsFound:
+            self.message = f'Error: Multiple movies with the same title "{title}" found.'
+        except SQLAlchemyError as e:
+            self.message = f'Error: {str(e)}'
 
     def update_movie(self, title, action_selected, drama_selected, fantasy_selected):
-        pass
+
+        try:
+            movie = self.session.query(Movie).filter(Movie.title == title).one()
+            genres = []
+            if action_selected:
+                genres.append(self.session.query(Genre).filter(Genre.name == 'Action').one())
+            if drama_selected:
+                genres.append(self.session.query(Genre).filter(Genre.name == 'Drama').one())
+            if fantasy_selected:
+                genres.append(self.session.query(Genre).filter(Genre.name == 'Fantasy').one())
+            Movie.genres = genres
+
+            self.session.add(movie)
+            self.session.commit()
+            self.message = f'Successfully updated movie: {title}'
+
+        except NoResultFound as e:
+            self.message = f'Error movie with tile {title} not found'
+        except MultipleResultsFound:
+            self.message = f'Error: Multiple movies with the same title "{title}" found.'
+        except SQLAlchemyError as e:
+            self.message = f'Error: {str(e)}'
 
     def delete_movie(self, title):
-        pass
+        try:
+            movies_to_delete = self.session.query(Movie).filter(Movie.title == title)
+
+            if movies_to_delete.count() == 0:
+                raise ValueError(f'Movie with title {title} was not found')
+
+            movies_to_delete.delete()
+
+            self.session.commit()
+
+            self.message = f'Successfully deleted movie(s) with title: {title}'
+        except NoResultFound as e:
+            self.message = f'Error: {str(e)}'
+        except SQLAlchemyError as e:
+            self.message = f'Error: {str(e)}'
 
 
 def main():
-- 
GitLab