Refactor models and endpoints, add logging, and improve error handling.
This commit is contained in:
+55
-18
@@ -1,10 +1,14 @@
|
||||
from datetime import datetime
|
||||
import bcrypt
|
||||
import requests
|
||||
|
||||
from lib.database.database import db_run
|
||||
from models import Message
|
||||
from models.user import UserCredentials
|
||||
from models.movie import Movie
|
||||
from models.movie import MovieIn, Movie
|
||||
from models.card import Card
|
||||
|
||||
import bcrypt
|
||||
from lib.settings import settings
|
||||
from lib.logger import logger
|
||||
|
||||
|
||||
def add_user(user: UserCredentials):
|
||||
@@ -14,40 +18,71 @@ def add_user(user: UserCredentials):
|
||||
sql = f"INSERT INTO users (username, password) VALUES ('{user.username}', '{hashed_password}')"
|
||||
try:
|
||||
db_run(sql)
|
||||
except:
|
||||
return Message(message="User already exists", message_type="error")
|
||||
except Exception as e:
|
||||
return Message(message=f"User already exists. Error: {e}", message_type="error")
|
||||
|
||||
return Message(message="User added successfully", message_type="success")
|
||||
|
||||
|
||||
def remove_user(user_id: str):
|
||||
logger.debug(f"Removing user {user_id}")
|
||||
sql = f"DELETE FROM users WHERE id = '{user_id}'"
|
||||
|
||||
try:
|
||||
db_run(sql)
|
||||
except:
|
||||
return Message(message="User not found", message_type="error")
|
||||
except Exception as e:
|
||||
return Message(message=f"User not found. Error: {e}", message_type="error")
|
||||
|
||||
return Message(message="User removed successfully", message_type="success")
|
||||
|
||||
|
||||
def add_movie(movie: Movie):
|
||||
sql = "INSERT INTO movies (name, imdb_id, actors, release_date, plot, showtime) VALUES (?, ?, ?, ?, ?, ?)"
|
||||
def add_movie(movie: MovieIn):
|
||||
logger.info(f"Adding movie {movie.imdb_id}")
|
||||
logger.debug(f"Requesting movie data from OMDB: {movie.imdb_id}")
|
||||
request_url = "https://omdbapi.com/"
|
||||
request_params = {
|
||||
"apikey": settings.OMDB_API_KEY,
|
||||
"i": movie.imdb_id,
|
||||
}
|
||||
|
||||
response = requests.get(request_url, params=request_params)
|
||||
if response.status_code != 200:
|
||||
logger.error(f"Failed to add movie {movie.imdb_id}")
|
||||
return Message(message="Failed to add movie", message_type="error")
|
||||
movie_data = response.json()
|
||||
logger.debug(f"Movie data received from OMDB: {movie_data}")
|
||||
if "Released" in movie_data:
|
||||
movie_data["Released"] = datetime.strptime(movie_data["Released"], "%d %b %Y")
|
||||
|
||||
new_movie = Movie(
|
||||
name=movie_data["Title"],
|
||||
imdb_id=movie_data["imdbID"],
|
||||
actors=[actor.strip() for actor in movie_data["Actors"].split(",")],
|
||||
release_date=movie_data["Released"],
|
||||
plot=movie.plot,
|
||||
poster_url=movie_data["Poster"],
|
||||
showtime=movie.showtime,
|
||||
)
|
||||
logger.debug(f"Movie data: {new_movie.model_dump()}")
|
||||
sql = "INSERT INTO movies (name, imdb_id, actors, release_date, plot, showtime, poster_url) VALUES (?, ?, ?, ?, ?, ?, ?)"
|
||||
try:
|
||||
db_run(
|
||||
sql,
|
||||
(
|
||||
movie.name,
|
||||
movie.imdb_id,
|
||||
movie.actors,
|
||||
movie.release_date,
|
||||
movie.plot,
|
||||
movie.showtime,
|
||||
new_movie.name,
|
||||
new_movie.imdb_id,
|
||||
new_movie.actors,
|
||||
new_movie.release_date,
|
||||
new_movie.plot,
|
||||
new_movie.showtime,
|
||||
new_movie.poster_url,
|
||||
),
|
||||
)
|
||||
except:
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to add movie {movie.imdb_id}. Error: {e}")
|
||||
return Message(message="Failed to add movie", message_type="error")
|
||||
|
||||
logger.info(f"Movie {movie.imdb_id} added successfully")
|
||||
return Message(message="Movie added successfully", message_type="success")
|
||||
|
||||
|
||||
@@ -55,8 +90,10 @@ def set_movie_watched(movie_id: str):
|
||||
sql = f"UPDATE movies SET is_watched = TRUE WHERE id = '{movie_id}'"
|
||||
try:
|
||||
db_run(sql)
|
||||
except:
|
||||
return Message(message="Failed to set movie as watched", message_type="error")
|
||||
except Exception as e:
|
||||
return Message(
|
||||
message=f"Failed to set movie as watched. Error: {e}", message_type="error"
|
||||
)
|
||||
|
||||
return Message(message="Movie set as watched successfully", message_type="success")
|
||||
|
||||
|
||||
+12
-15
@@ -1,25 +1,22 @@
|
||||
from models.movie import Movie
|
||||
from lib.database.database import get_db
|
||||
from lib.logger import logger
|
||||
|
||||
|
||||
@logger.catch
|
||||
def get_all_movies() -> list[Movie]:
|
||||
logger.info("Getting all movies")
|
||||
sql = "SELECT * FROM movies"
|
||||
with get_db() as conn:
|
||||
result = conn.execute(sql).fetchall()
|
||||
result = conn.execute(sql).df()
|
||||
result_dict = result.to_dict(orient="records")
|
||||
movies = []
|
||||
for row in result:
|
||||
movie = Movie(
|
||||
id=str(row[0]),
|
||||
name=row[1],
|
||||
imdb_id=row[2],
|
||||
actors=row[3],
|
||||
release_date=row[4],
|
||||
plot=row[5],
|
||||
showtime=row[6],
|
||||
is_watched=row[7],
|
||||
created_at=row[8],
|
||||
updated_at=row[9],
|
||||
)
|
||||
for row in result_dict:
|
||||
row["id"] = str(row["id"])
|
||||
logger.debug(f"Found movie: {row}")
|
||||
print("Type of name:", type(row["name"]))
|
||||
movie = Movie(**row)
|
||||
|
||||
movies.append(movie)
|
||||
|
||||
return movies
|
||||
@@ -28,7 +25,7 @@ def get_all_movies() -> list[Movie]:
|
||||
|
||||
|
||||
def get_next_movie() -> Movie | None:
|
||||
sql = "SELECT * FROM movies WHERE is_watched = FALSE AND showtime > CURRENT_TIMESTAMP ORDER BY showtime ASC"
|
||||
sql = "SELECT * FROM movies WHERE is_watched = FALSE AND showtime = CURRENT_DATE ORDER BY showtime ASC"
|
||||
with get_db() as conn:
|
||||
result = conn.execute(sql).fetchdf()
|
||||
if result.empty:
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
from datetime import datetime
|
||||
|
||||
from models.user import UserIn, UserOut
|
||||
from lib.database.database import get_db, db_run
|
||||
from lib.database.database import get_db
|
||||
from lib.logger import logger
|
||||
|
||||
|
||||
def set_last_login(user_id: str) -> datetime:
|
||||
logger.debug(f"Setting last login for user {user_id}")
|
||||
cur_time = datetime.now()
|
||||
sql = f"UPDATE users SET last_login = '{cur_time}' WHERE id = '{user_id}'"
|
||||
with get_db() as conn:
|
||||
|
||||
Reference in New Issue
Block a user