/// <summary> /// Get the user with a specific email /// </summary> /// <param name="idUser">ID User</param> /// <returns>Result object</returns> public DBResult <User> GetUser(string email) { DBResult <User> dbResult = new DBResult <User>(); try { using (SevenDaysContext db = new SevenDaysContext(Configuration)) { var user = db.User.Where(u => u.Email == email).FirstOrDefault(); if (user == null) { dbResult.Message = "User not found"; } else { dbResult.Success = true; dbResult.Item = user; } } } catch (Exception ex) { dbResult.Message = Common.GetMessageError(ex); } return(dbResult); }
/// <summary> /// Patch User /// </summary> /// <param name="patchUser">patch document</param> /// <param name="idUser">Id User</param> /// <returns>Result object</returns> public async Task <DBResult <User> > PatchUser(JsonPatchDocument <User> patchUser, int idUser) { DBResult <User> dbResult = new DBResult <User>(); try { using (SevenDaysContext db = new SevenDaysContext(Configuration)) { // Get our original object from the database. var user = await db.User.FindAsync(idUser); if (user == null) { dbResult.Message = "Movie not found"; return(dbResult); } // Applying Path to DB Object patchUser.ApplyTo(user); db.User.Update(user); await db.SaveChangesAsync(); dbResult.Item = user; dbResult.Success = true; } } catch (Exception ex) { dbResult.Message = Common.GetMessageError(ex); } return(dbResult); }
/// <summary> /// Check if a like exists /// </summary> /// <param name="liked"></param> /// <returns></returns> public bool HasALike(Liked liked) { using (SevenDaysContext db = new SevenDaysContext(Configuration)) { var likedDb = db.Liked.Where(lk => lk.IdMovie == liked.IdMovie && lk.IdUser == liked.IdUser).FirstOrDefault(); if (likedDb == null) { return(false); } else { return(true); } } }
/// <summary> /// Return rental /// </summary> /// <param name="id">Rental</param> /// <returns>Result object</returns> public DBResult <Rental> ReturnRental(int idRental) { DBResult <Rental> dbResult = new DBResult <Rental>(); try { using (SevenDaysContext db = new SevenDaysContext(Configuration)) { var rental = db.Rental.Find(idRental); if (rental == null) { dbResult.Message = "Rental not found"; } else { // Calculate penalty(if apply) DateTime today = DateTime.Now; // Difference in days, hours, and minutes. TimeSpan ts = today - (DateTime)rental.RentalDate; // Difference in days. int differenceInDays = ts.Days; if (differenceInDays > 7) { // 5 per day of penalty rental.Penalty = (decimal)(5.00m * ((decimal)differenceInDays - 7)); } else { rental.Penalty = 0.000m; } db.Rental.Update(rental); db.SaveChanges(); dbResult.Success = true; dbResult.Item = rental; } } } catch (Exception ex) { dbResult.Message = Common.GetMessageError(ex); } return(dbResult); }
/// <summary> /// Get All movies /// </summary> /// <returns>Result object</returns> public DBResults <Movie> GetMovies() { DBResults <Movie> dbResult = new DBResults <Movie>(); try { using (SevenDaysContext db = new SevenDaysContext(Configuration)) { var movie = db.Movie.Where(m => m.IsAvailable == true).OrderBy(m => m.Title).ToList(); dbResult.Success = true; dbResult.Items = movie; } } catch (Exception ex) { dbResult.Message = Common.GetMessageError(ex); } return(dbResult); }
/// <summary> /// Get All movies filtered /// </summary> /// <returns>Result object</returns> public DBFResults <Movie> GetMoviesFiltered(FilterModel filter) { DBFResults <Movie> dbResult = new DBFResults <Movie>(); try { using (SevenDaysContext db = new SevenDaysContext(Configuration)) { // Get filtered movies and count next page dbResult.Items = FilterData(filter, filter, db).ToList(); FilterModel nextFilter = filter.Clone() as FilterModel; nextFilter.Page += 1; dbResult.CountNextFilter = FilterData(nextFilter, filter, db).Count(); dbResult.Success = true; } } catch (Exception ex) { dbResult.Message = Common.GetMessageError(ex); } return(dbResult); }
/// <summary> /// Complex filter /// </summary> /// <param name="filterModel">filter new</param> /// <param name="filter">old filter</param> /// <param name="db">DB conext</param> /// <returns>Result enumerable</returns> private IEnumerable <Movie> FilterData(FilterModel filterModel, FilterModel filter, SevenDaysContext db) { // First filter IEnumerable <Movie> listaMovies; if (filterModel.IncludeInactive) { listaMovies = db.Movie.ToList(); } else { listaMovies = db.Movie.Where(m => m.IsAvailable == true).ToList(); } // Filter title if (filterModel.Title != null && !string.IsNullOrEmpty(filterModel.Title)) { listaMovies = listaMovies.Where(m => m.Title.Contains(filterModel.Title, StringComparison.InvariantCultureIgnoreCase)); } // Sorting movie list switch (filterModel.Sort) { case "title_desc": listaMovies = listaMovies.OrderByDescending(m => m.Title).ToList(); break; case "title": listaMovies = listaMovies.OrderBy(m => m.Title).ToList(); break; case "popularity_desc": listaMovies = listaMovies.OrderByDescending(m => m.LikesCounter).ToList(); break; case "popularity": listaMovies = listaMovies.OrderBy(m => m.LikesCounter).ToList(); break; default: listaMovies = listaMovies.OrderBy(m => m.Title).ToList(); break; } // Filtering paging logic listaMovies = listaMovies.Skip((filterModel.Page - 1) * filter.Limit) .Take(filterModel.Limit); return(listaMovies); }