From c539f44fd519d34f229e51c8e409ce3a50d349bb Mon Sep 17 00:00:00 2001 From: Frank Elsinga Date: Mon, 16 Oct 2023 00:01:22 +0200 Subject: [PATCH] refactored towards if-error conditions and less .Model(...) usage --- client/local/client.go | 11 +- server/backend/cafeteria.go | 108 ++++------- .../cron/average_rating_computation.go | 39 ++-- server/backend/cron/dish_name_download.go | 175 ++++++++---------- server/backend/cron/movies.go | 2 +- .../ios_notifications/scheduling/service.go | 19 +- server/backend/migration/20231003000000.go | 5 +- 7 files changed, 144 insertions(+), 215 deletions(-) diff --git a/client/local/client.go b/client/local/client.go index 77c73453..88df04ca 100644 --- a/client/local/client.go +++ b/client/local/client.go @@ -285,17 +285,14 @@ func storeImage(path string, i []byte) (string, error) { } } - out, errFile := os.Create(imgPath) - if errFile != nil { - log.WithError(errFile).Error("Unable to create the new testfile") + out, err := os.Create(imgPath) + if err != nil { + log.WithError(err).Error("Unable to create the new testfile") } defer func(out *os.File) { if err := out.Close(); err != nil { log.WithError(err).Error("File was not closed successfully") } }(out) - var opts jpeg.Options - opts.Quality = 100 - errFile = jpeg.Encode(out, img, &opts) - return imgPath, errFile + return imgPath, jpeg.Encode(out, img, &jpeg.Options{Quality: 100}) } diff --git a/server/backend/cafeteria.go b/server/backend/cafeteria.go index 3fa7a355..6f3e57c7 100644 --- a/server/backend/cafeteria.go +++ b/server/backend/cafeteria.go @@ -45,15 +45,12 @@ func (s *CampusServer) GetCafeteriaRatings(ctx context.Context, input *pb.ListCa var result model.CafeteriaRatingAverage //get the average rating for this specific cafeteria tx := s.db.WithContext(ctx) cafeteriaId := getIDForCafeteriaName(input.CanteenId, tx) - res := tx.Model(&model.CafeteriaRatingAverage{}). - Where("cafeteriaId = ?", cafeteriaId). - First(&result) + res := tx.First(&result, "cafeteriaId = ?", cafeteriaId) if res.Error != nil { log.WithError(res.Error).Error("Error while querying the cafeteria with Id ", cafeteriaId) return nil, status.Error(codes.Internal, "This cafeteria has not yet been rated.") } - if res.RowsAffected > 0 { ratings := queryLastCafeteriaRatingsWithLimit(input, cafeteriaId, tx) cafeteriaTags := queryTags(cafeteriaId, -1, CAFETERIA, tx) @@ -102,17 +99,14 @@ func queryLastCafeteriaRatingsWithLimit(input *pb.ListCanteenRatingsRequest, caf } else { to = input.To.AsTime() } - err = tx.Model(&model.CafeteriaRating{}). - Where("cafeteriaID = ? AND timestamp < ? AND timestamp > ?", cafeteriaID, to, from). + err = tx. Order("timestamp desc, cafeteriaRating desc"). Limit(limit). - Find(&ratings).Error + Find(&ratings, "cafeteriaID = ? AND timestamp < ? AND timestamp > ?", cafeteriaID, to, from).Error } else { - err = tx.Model(&model.CafeteriaRating{}). - Where("cafeteriaID = ?", cafeteriaID). - Order("timestamp desc, cafeteriaRating desc"). + err = tx.Order("timestamp desc, cafeteriaRating desc"). Limit(limit). - Find(&ratings).Error + Find(&ratings, "cafeteriaID = ?", cafeteriaID).Error } if err != nil { @@ -152,17 +146,15 @@ func (s *CampusServer) GetDishRatings(ctx context.Context, input *pb.GetDishRati cafeteriaID := getIDForCafeteriaName(input.CanteenId, tx) dishID := getIDForDishName(input.Dish, cafeteriaID, tx) - err := tx.Model(&model.DishRatingAverage{}). - Where("cafeteriaID = ? AND dishID = ?", cafeteriaID, dishID). - First(&result) + res := tx.First(&result, "cafeteriaID = ? AND dishID = ?", cafeteriaID, dishID) - if err.Error != nil { + if res.Error != nil { fields := log.Fields{"dishID": dishID, "cafeteriaID": cafeteriaID} - log.WithError(err.Error).WithFields(fields).Error("Error while querying the average ratings") + log.WithError(res.Error).WithFields(fields).Error("Error while querying the average ratings") return nil, status.Error(codes.Internal, "This dish has not yet been rated.") } - if err.RowsAffected > 0 { + if res.RowsAffected > 0 { ratings := queryLastDishRatingsWithLimit(input, cafeteriaID, dishID, tx) dishTags := queryTags(cafeteriaID, dishID, DISH, tx) nameTags := queryTags(cafeteriaID, dishID, NAME, tx) @@ -212,17 +204,13 @@ func queryLastDishRatingsWithLimit(input *pb.GetDishRatingsRequest, cafeteriaID to = input.To.AsTime() } - err = tx.Model(&model.DishRating{}). - Where("cafeteriaID = ? AND dishID = ? AND timestamp < ? AND timestamp > ?", cafeteriaID, dishID, to, from). - Order("timestamp desc, dishRating desc"). + err = tx.Order("timestamp desc, dishRating desc"). Limit(limit). - Find(&ratings).Error + Find(&ratings, "cafeteriaID = ? AND dishID = ? AND timestamp < ? AND timestamp > ?", cafeteriaID, dishID, to, from).Error } else { - err = tx.Model(&model.DishRating{}). - Where("cafeteriaID = ? AND dishID = ?", cafeteriaID, dishID). - Order("timestamp desc, dishRating desc"). + err = tx.Order("timestamp desc, dishRating desc"). Limit(limit). - Find(&ratings).Error + Find(&ratings, "cafeteriaID = ? AND dishID = ?", cafeteriaID, dishID).Error } if err != nil { @@ -374,7 +362,7 @@ func (s *CampusServer) CreateCanteenRating(ctx context.Context, input *pb.Create Timestamp: time.Now(), Image: resPath, } - if err := tx.Model(&model.CafeteriaRating{}).Create(&rating).Error; err != nil { + if err := tx.Create(&rating).Error; err != nil { log.WithError(err).Error("Error occurred while creating the new cafeteria rating.") return nil, status.Error(codes.InvalidArgument, "Error while creating new cafeteria rating. Rating has not been saved.") @@ -386,15 +374,13 @@ func (s *CampusServer) CreateCanteenRating(ctx context.Context, input *pb.Create } func imageWrapper(image []byte, path string, id int64) string { - var resPath = "" - if len(image) > 0 { - var resError error - path := fmt.Sprintf("%s%s%s%d%s", "/Storage/rating/", path, "/", id, "/") - resPath, resError = storeImage(path, image) - - if resError != nil { - log.WithError(resError).Error("Error occurred while storing the image.") - } + if len(image) == 0 { + return "" + } + path = fmt.Sprintf("/Storage/rating/%s/%d/", path, id) + resPath, err := storeImage(path, image) + if err != nil { + log.WithError(err).Error("Error occurred while storing the image.") } return resPath } @@ -413,20 +399,18 @@ func storeImage(path string, i []byte) (string, error) { img, _, _ := image.Decode(bytes.NewReader(i)) resizedImage := imaging.Resize(img, 1280, 0, imaging.Lanczos) - var opts jpeg.Options + quality := 100 // if image small enough use it directly maxImageSize := 524288 // 0.55MB if len(i) > maxImageSize { - opts.Quality = (maxImageSize / len(i)) * 100 - } else { - opts.Quality = 100 // if image small enough use it directly + quality = (maxImageSize / len(i)) * 100 } var imgPath = fmt.Sprintf("%s%x.jpeg", path, md5.Sum(i)) - out, errFile := os.Create(imgPath) - if errFile != nil { - log.WithError(errFile).Error("Error while creating a new file on the path: ", path) - return imgPath, errFile + out, err := os.Create(imgPath) + if err != nil { + log.WithError(err).Error("Error while creating a new file on the path: ", path) + return imgPath, err } defer func(out *os.File) { if err := out.Close(); err != nil { @@ -434,8 +418,7 @@ func storeImage(path string, i []byte) (string, error) { } }(out) - errFile = jpeg.Encode(out, resizedImage, &opts) - return imgPath, errFile + return imgPath, jpeg.Encode(out, resizedImage, &jpeg.Options{Quality: quality}) } // CreateDishRating RPC Endpoint @@ -451,32 +434,28 @@ func (s *CampusServer) CreateDishRating(ctx context.Context, input *pb.CreateDis return nil, errorRes } - var dish *model.Dish - errDish := tx.Model(&model.Dish{}). //Dish must exist in the given mensa - Where("name LIKE ? AND cafeteriaID = ?", input.Dish, cafeteriaID). - First(&dish).Error - if errDish != nil || dish == nil { - log.WithError(errDish).Error("Error while creating a new dish rating.") + var dishInMensa *model.Dish + if err := tx.First(&dishInMensa, "name LIKE ? AND cafeteriaID = ?", input.Dish, cafeteriaID).Error; err != nil || dishInMensa == nil { + log.WithError(err).Error("Error while creating a new dishInMensa rating.") return nil, status.Error(codes.InvalidArgument, "Dish is not offered in this week in this canteen. Rating has not been saved.") } - resPath := imageWrapper(input.Image, "dishes", dish.Dish) + resPath := imageWrapper(input.Image, "dishes", dishInMensa.Dish) rating := model.DishRating{ Comment: input.Comment, CafeteriaID: cafeteriaID, - DishID: dish.Dish, + DishID: dishInMensa.Dish, Points: input.Points, Timestamp: time.Now(), Image: resPath, } - - if err := tx.Model(&model.DishRating{}).Create(&rating).Error; err != nil { - log.WithError(err).Error("while creating a new dish rating.") + if err := tx.Create(&rating).Error; err != nil { + log.WithError(err).Error("while creating a new dishInMensa rating.") return nil, status.Error(codes.Internal, "Error while creating the new rating in the database. Rating has not been saved.") } - assignDishNameTag(rating, dish.Dish, tx) + assignDishNameTag(rating, dishInMensa.Dish, tx) if err := storeRatingTags(rating.DishRating, input.RatingTags, DISH, tx); err != nil { return &pb.CreateDishRatingReply{}, err @@ -496,12 +475,11 @@ func assignDishNameTag(rating model.DishRating, dishID int64, tx *gorm.DB) { log.WithError(err).Error("while loading the dishID for the given name.") } else { for _, tagID := range result { - err := tx.Model(&model.DishNameTag{}).Create(&model.DishNameTag{ + if err := tx.Create(&model.DishNameTag{ CorrespondingRating: rating.DishRating, Points: rating.Points, TagNameID: tagID, - }).Error - if err != nil { + }).Error; err != nil { log.WithError(err).Error("while creating a new dish name rating.") } } @@ -512,7 +490,7 @@ func assignDishNameTag(rating model.DishRating, dishID int64, tx *gorm.DB) { // Additionally, queries the cafeteria ID, since it checks whether the cafeteria actually exists. func inputSanitizationForNewRatingElements(rating int32, comment string, cafeteriaName string, tx *gorm.DB) (int64, error) { if rating > 5 || rating < 0 { - return -1, status.Error(codes.InvalidArgument, "Rating must be a positive number not larger than 10. Rating has not been saved.") + return -1, status.Error(codes.InvalidArgument, "Rating must be a positive number not larger than 5. Rating has not been saved.") } if len(comment) > 256 { @@ -524,10 +502,7 @@ func inputSanitizationForNewRatingElements(rating int32, comment string, cafeter } var result *model.Cafeteria - res := tx.Model(&model.Cafeteria{}). - Where("name LIKE ?", cafeteriaName). - First(&result) - if errors.Is(res.Error, gorm.ErrRecordNotFound) || res.RowsAffected == 0 { + if res := tx.First(&result, "name LIKE ?", cafeteriaName); errors.Is(res.Error, gorm.ErrRecordNotFound) || res.RowsAffected == 0 { log.WithError(res.Error).Error("Error while querying the cafeteria id by name: ", cafeteriaName) return -1, status.Error(codes.InvalidArgument, "Cafeteria does not exist. Rating has not been saved.") } @@ -687,8 +662,7 @@ func (s *CampusServer) GetAvailableCafeteriaTags(ctx context.Context, _ *pb.List func (s *CampusServer) GetCafeterias(ctx context.Context, _ *pb.ListCanteensRequest) (*pb.ListCanteensReply, error) { var result []*pb.Canteen var requestStatus error = nil - err := s.db.WithContext(ctx).Model(&model.Cafeteria{}).Select("cafeteria as id,address,latitude,longitude").Scan(&result).Error - if err != nil { + if err := s.db.WithContext(ctx).Model(&model.Cafeteria{}).Select("cafeteria as id,address,latitude,longitude").Scan(&result).Error; err != nil { log.WithError(err).Error("while loading Cafeterias from database.") requestStatus = status.Error(codes.Internal, "Cafeterias could not be loaded from the database.") } diff --git a/server/backend/cron/average_rating_computation.go b/server/backend/cron/average_rating_computation.go index 24bd0a6c..8421e0ba 100644 --- a/server/backend/cron/average_rating_computation.go +++ b/server/backend/cron/average_rating_computation.go @@ -28,12 +28,10 @@ func computeAverageNameTags(c *CronService) { if err != nil { log.WithError(err).Error("while precomputing average name tags.") } else if len(results) > 0 { - errDelete := c.db.Where("1=1").Delete(&model.DishNameTagAverage{}).Error // Does not work with "true" - if errDelete != nil { - log.WithError(errDelete).Error("Error while deleting old averages in the table.") + if err := c.db.Where("1=1").Delete(&model.DishNameTagAverage{}).Error; err != nil { + log.WithError(err).Error("Error while deleting old averages in the table.") } - err := c.db.Model(&model.DishNameTagAverage{}).Create(&results).Error - if err != nil { + if err := c.db.Create(&results).Error; err != nil { log.WithError(err).Error("while creating a new average name tag rating in the database.") } } @@ -49,13 +47,11 @@ func computeAverageForDishesInCafeteriasTags(c *CronService) { if err != nil { log.WithError(err).Error("while precomputing average dish tags.") } else if len(results) > 0 { - errDelete := c.db.Where("1=1").Delete(&model.DishRatingTagAverage{}).Error - if errDelete != nil { - log.WithError(errDelete).Error("Error while deleting old averages in the table.") + if err := c.db.Where("1=1").Delete(&model.DishRatingTagAverage{}).Error; err != nil { + log.WithError(err).Error("Error while deleting old averages in the table.") } - err := c.db.Model(&model.DishRatingTagAverage{}).Create(&results).Error - if err != nil { + if err := c.db.Create(&results).Error; err != nil { log.WithError(err).Error("while creating a new average dish tag rating in the database.") } @@ -72,13 +68,11 @@ func computeAverageCafeteriaTags(c *CronService) { if err != nil { log.WithError(err).Error("while precomputing average cafeteria tags.") } else if len(results) > 0 { - errDelete := c.db.Where("1=1").Delete(&model.CafeteriaRatingTagsAverage{}).Error - if errDelete != nil { - log.WithError(errDelete).Error("Error while deleting old averages in the table.") + if err := c.db.Where("1=1").Delete(&model.CafeteriaRatingTagsAverage{}).Error; err != nil { + log.WithError(err).Error("Error while deleting old averages in the table.") } - err := c.db.Model(&model.CafeteriaRatingTagsAverage{}).Create(&results).Error - if err != nil { + if err := c.db.Create(&results).Error; err != nil { log.WithError(err).Error("while creating a new average cafeteria tag rating in the database.") } } @@ -93,12 +87,10 @@ func computeAverageForDishesInCafeterias(c *CronService) { if err != nil { log.WithError(err).Error("while precomputing average dish ratings.") } else if len(results) > 0 { - errDelete := c.db.Where("1=1").Delete(&model.DishRatingAverage{}).Error - if errDelete != nil { - log.WithError(errDelete).Error("Error while deleting old averages in the table.") + if err := c.db.Where("1=1").Delete(&model.DishRatingAverage{}).Error; err != nil { + log.WithError(err).Error("Error while deleting old averages in the table.") } - err := c.db.Model(&model.DishRatingAverage{}).Create(&results).Error - if err != nil { + if err := c.db.Create(&results).Error; err != nil { log.WithError(err).Error("while creating a new average dish rating in the database.") } } @@ -113,12 +105,11 @@ func computeAverageForCafeteria(c *CronService) { if err != nil { log.WithError(err).Error("while precomputing average cafeteria ratings.") } else if len(results) > 0 { - errDelete := c.db.Where("1=1").Delete(&model.CafeteriaRatingAverage{}).Error - if errDelete != nil { - log.WithError(errDelete).Error("Error while deleting old averages in the table.") + if err := c.db.Where("1=1").Delete(&model.CafeteriaRatingAverage{}).Error; err != nil { + log.WithError(err).Error("Error while deleting old averages in the table.") } - err := c.db.Model(&model.CafeteriaRatingAverage{}).Create(&results).Error + err := c.db.Create(&results).Error if err != nil { log.WithError(err).Error("while creating a new average cafeteria rating in the database.") } diff --git a/server/backend/cron/dish_name_download.go b/server/backend/cron/dish_name_download.go index b0f0e117..e02e0e28 100644 --- a/server/backend/cron/dish_name_download.go +++ b/server/backend/cron/dish_name_download.go @@ -12,31 +12,31 @@ import ( "gorm.io/gorm" ) -type cafeteriaName struct { - Name string `json:"enum_name"` - Location location `json:"location"` +type CafeteriaName struct { + Name string `json:"enum_name"` + Location CanteenLocation `json:"location"` } -type cafeteriaWithID struct { +type CafeteriaWithID struct { Name string `json:"name"` Cafeteria int64 `json:"cafeteria"` } -type location struct { +type CanteenLocation struct { Longitude float32 `json:"longitude"` Latitude float32 `json:"latitude"` Address string `json:"address"` } -type days struct { - Days []date `json:"days"` +type CanteenDays struct { + Days []CanteenDate `json:"days"` } -type date struct { - Dates []dish `json:"dishes"` +type CanteenDate struct { + Dates []CanteenDish `json:"dishes"` } -type dish struct { +type CanteenDish struct { Name string `json:"name"` DishType string `json:"dish_type"` } @@ -44,27 +44,24 @@ type dish struct { // fileDownloadCron // Downloads all files that are not marked as finished in the database. func (c *CronService) dishNameDownloadCron() error { - downloadCanteenNames(c) downloadDailyDishes(c) - return nil } func downloadDailyDishes(c *CronService) { - var result []cafeteriaWithID - errQueryCafeterias := c.db.Model(&model.Cafeteria{}).Select("name,cafeteria").Scan(&result).Error - if errQueryCafeterias != nil { - log.WithError(errQueryCafeterias).Error("Error while querying all cafeteria names from the database.") + var result []CafeteriaWithID + if err := c.db.Model(&model.Cafeteria{}).Select("name,cafeteria").Scan(&result).Error; err != nil { + log.WithError(err).Error("Error while querying all cafeteria names from the database.") } year, week := time.Now().UTC().ISOWeek() var weekliesWereAdded int64 - errExistsQuery := c.db.Model(&model.DishesOfTheWeek{}). + + if err := c.db.Model(&model.DishesOfTheWeek{}). Where("year = ? AND week = ?", year, week). - Count(&weekliesWereAdded).Error - if errExistsQuery != nil { - log.WithError(errExistsQuery).Error("Error while checking whether the meals of the current week have already been added to the weekly table.") + Count(&weekliesWereAdded).Error; err != nil { + log.WithError(err).Error("Error while checking whether the meals of the current week have already been added to the weekly table.") } for _, v := range result { @@ -75,6 +72,7 @@ func downloadDailyDishes(c *CronService) { var resp, err = http.Get(req) if err != nil { log.WithError(err).Error("Error fetching menu.") + continue } if resp.StatusCode != 200 { fields := log.Fields{ @@ -82,49 +80,45 @@ func downloadDailyDishes(c *CronService) { "StatusCode": resp.StatusCode, } log.WithError(err).WithFields(fields).Error("Menu does not exist") - } else { - var dishes days - errJson := json.NewDecoder(resp.Body).Decode(&dishes) - if errJson != nil { - log.WithError(err).Error("Error in Parsing") - } + continue + } + var dishes CanteenDays + if err := json.NewDecoder(resp.Body).Decode(&dishes); err != nil { + log.WithError(err).Error("Error in Parsing") + } - for weekDayIndex := 0; weekDayIndex < len(dishes.Days); weekDayIndex++ { - for u := 0; u < len(dishes.Days[weekDayIndex].Dates); u++ { - dish := model.Dish{ - Name: dishes.Days[weekDayIndex].Dates[u].Name, - Type: dishes.Days[weekDayIndex].Dates[u].DishType, - CafeteriaID: v.Cafeteria, - } + for weekDayIndex, day := range dishes.Days { + for _, date := range day.Dates { + dish := model.Dish{ + Name: date.Name, + Type: date.DishType, + CafeteriaID: v.Cafeteria, + } - var count int64 - var dishId int64 - errCount := c.db.Model(&model.Dish{}). - Where("name = ? AND cafeteriaID = ?", dish.Name, dish.CafeteriaID). - Select("dish").First(&dishId). - Count(&count).Error - if errCount != nil { - log.WithError(errCount).Error("Error while checking whether this is already in database") - } - if count == 0 { - errCreate := c.db.Model(&model.Dish{}).Create(&dish).Error - if errCreate != nil { - log.WithError(errCreate).Error("Error while creating new dish entry with name {}. dish won't be saved", dish.Name) - } - addDishTagsToMapping(dish.Dish, dish.Name, c.db) - dishId = dish.Dish + var count int64 + var dishId int64 + if err := c.db.Model(&model.Dish{}). + Where("name = ? AND cafeteriaID = ?", dish.Name, dish.CafeteriaID). + Select("CanteenDish").First(&dishId). + Count(&count).Error; err != nil { + log.WithError(err).Error("Error while checking whether this is already in database") + } + if count == 0 { + if err := c.db.Create(&dish).Error; err != nil { + log.WithError(err).Error("Error while creating new CanteenDish entry with name {}. CanteenDish won't be saved", dish.Name) } - if weekliesWereAdded == 0 { - errCreate := c.db.Model(&model.DishesOfTheWeek{}). - Create(&model.DishesOfTheWeek{ - DishID: dishId, - Year: int32(year), - Week: int32(week), - Day: int32(weekDayIndex), - }).Error - if errCreate != nil { - log.WithError(errCreate).Error("Error while inserting dish for this weeks weekly dishes", dish.Name) - } + addDishTagsToMapping(dish.Dish, dish.Name, c.db) + dishId = dish.Dish + } + if weekliesWereAdded == 0 { + errCreate := c.db.Create(&model.DishesOfTheWeek{ + DishID: dishId, + Year: int32(year), + Week: int32(week), + Day: int32(weekDayIndex), + }).Error + if errCreate != nil { + log.WithError(errCreate).Error("Error while inserting CanteenDish for this weeks weekly dishes", dish.Name) } } } @@ -137,70 +131,56 @@ func downloadCanteenNames(c *CronService) { if err != nil { log.WithError(err).Error("Error fetching cafeteria list from eat-api.") } - var cafeteriaNames []cafeteriaName - errjson := json.NewDecoder(resp.Body).Decode(&cafeteriaNames) - - if errjson != nil { - log.WithError(errjson).Error("Error while unmarshalling json data.") + var cafeteriaNames []CafeteriaName + if err := json.NewDecoder(resp.Body).Decode(&cafeteriaNames); err != nil { + log.WithError(err).Error("Error while unmarshalling json data.") } - for i := 0; i < len(cafeteriaNames); i++ { - + for _, cafeteriaName := range cafeteriaNames { mensa := model.Cafeteria{ - Name: cafeteriaNames[i].Name, - Address: cafeteriaNames[i].Location.Address, - Latitude: cafeteriaNames[i].Location.Latitude, - Longitude: cafeteriaNames[i].Location.Longitude, + Name: cafeteriaName.Name, + Address: cafeteriaName.Location.Address, + Latitude: cafeteriaName.Location.Latitude, + Longitude: cafeteriaName.Location.Longitude, } var cafeteriaResult model.Cafeteria - resExists := c.db.Model(&model.Cafeteria{}). - Where("name = ?", cafeteriaNames[i].Name). - First(&cafeteriaResult) - - if resExists.Error != nil { - errCreate := c.db.Model(&model.Cafeteria{}).Create(&mensa).Error - if errCreate != nil { - log.WithError(errCreate).Error("Error while creating the db entry for the cafeteria ", cafeteriaNames[i].Name) + if err := c.db.First(&cafeteriaResult, "name = ?", cafeteriaName.Name).Error; err != nil { + if err := c.db.Create(&mensa).Error; err != nil { + log.WithError(err).Error("Error while creating the db entry for the cafeteria ", cafeteriaName.Name) } } else { - errUpdate := c.db.Model(&model.Cafeteria{}). - Where("name = ?", cafeteriaNames[i].Name). - Updates(&mensa).Error - if errUpdate != nil { - log.WithError(errUpdate).Error("Error while updating the db entry for the cafeteria {}.", cafeteriaNames[i].Name) + if err := c.db.Where("name = ?", cafeteriaName.Name).Updates(&mensa).Error; err != nil { + log.WithError(err).Error("Error while updating the db entry for the cafeteria {}.", cafeteriaName.Name) } } } } // addDishTagsToMapping -// Checks whether the dish name includes one of the expressions for the excluded tags as well as the included tags. +// Checks whether the CanteenDish name includes one of the expressions for the excluded tags as well as the included tags. // The corresponding tags for all identified DishNames will be saved in the table DishNameTags. func addDishTagsToMapping(dishID int64, dishName string, db *gorm.DB) { lowercaseDish := strings.ToLower(dishName) var includedTags []int64 - errIncluded := db.Model(&model.DishNameTagOptionIncluded{}). + if err := db.Model(&model.DishNameTagOptionIncluded{}). Where("? LIKE CONCAT('%', expression ,'%')", lowercaseDish). Select("nameTagID"). - Scan(&includedTags).Error - if errIncluded != nil { - log.WithError(errIncluded).Error("Error while querying all included expressions for the dish: ", lowercaseDish) + Scan(&includedTags).Error; err != nil { + log.WithError(err).Error("Error while querying all included expressions for the CanteenDish: ", lowercaseDish) } var excludedTags []int64 - err := db.Model(&model.DishNameTagOptionExcluded{}). + if err := db.Model(&model.DishNameTagOptionExcluded{}). Where("? LIKE CONCAT('%', expression ,'%')", lowercaseDish). Select("nameTagID"). - Scan(&excludedTags).Error - if err != nil { - log.WithError(err).Error("Error while querying all excluded expressions for the dish: ", lowercaseDish) + Scan(&excludedTags).Error; err != nil { + log.WithError(err).Error("Error while querying all excluded expressions for the CanteenDish: ", lowercaseDish) } //set all entries in included to -1 if the excluded tag was recognised for this tag rating. if len(excludedTags) > 0 { for _, a := range excludedTags { - i := contains(includedTags, a) - if i != -1 { + if i := contains(includedTags, a); i != -1 { includedTags[i] = -1 } } @@ -208,11 +188,10 @@ func addDishTagsToMapping(dishID int64, dishName string, db *gorm.DB) { for _, nametagID := range includedTags { if nametagID != -1 { - err := db.Model(&model.DishToDishNameTag{}).Create(&model.DishToDishNameTag{ + if err := db.Create(&model.DishToDishNameTag{ DishID: dishID, NameTagID: nametagID, - }).Error - if err != nil { + }).Error; err != nil { fields := log.Fields{"dishID": dishID, "nametagID": nametagID} log.WithError(err).WithFields(fields).Error("creating a new entry") } diff --git a/server/backend/cron/movies.go b/server/backend/cron/movies.go index 9c89ced7..1d2a85e4 100644 --- a/server/backend/cron/movies.go +++ b/server/backend/cron/movies.go @@ -49,7 +49,7 @@ func (c *CronService) movieCron() error { for _, item := range channel.Items { logFields := log.Fields{"link": item.Link, "title": item.Title, "date": item.PubDate, "location": item.Location, "url": item.Enclosure.Url} var exists bool - if err := c.db.Model(model.Kino{}).Select("count(*) > 0").Where("link = ?", item.Link).Find(&exists).Error; err != nil { + if err := c.db.Model(model.Kino{}).Select("count(*) > 0").Find(&exists, "link = ?", item.Link).Error; err != nil { log.WithError(err).WithFields(logFields).Error("Cound lot check if movie already exists") continue } diff --git a/server/backend/ios_notifications/scheduling/service.go b/server/backend/ios_notifications/scheduling/service.go index 00cc7d79..4c7aa2cb 100644 --- a/server/backend/ios_notifications/scheduling/service.go +++ b/server/backend/ios_notifications/scheduling/service.go @@ -65,15 +65,12 @@ func (service *Service) HandleScheduledCron() error { } func (service *Service) handleDevices(devices []model.IOSDeviceLastUpdated) { - routinesCount := routineCount(devices) - + routinesCount := min(len(devices), MaxRoutineCount) chunkSize := len(devices) / routinesCount - - perfectChunkable := (len(devices) % routinesCount) == 0 + perfectlyChunkable := (len(devices) % routinesCount) == 0 chunksArrSize := routinesCount - - if !perfectChunkable { + if !perfectlyChunkable { chunksArrSize = routinesCount + 1 } @@ -83,7 +80,7 @@ func (service *Service) handleDevices(devices []model.IOSDeviceLastUpdated) { chunks[i] = devices[i*chunkSize : (i+1)*chunkSize] } - if !perfectChunkable { + if !perfectlyChunkable { chunks[routinesCount] = devices[routinesCount*chunkSize:] } @@ -112,14 +109,6 @@ func (service *Service) handleDevicesChunk(devices []model.IOSDeviceLastUpdated) } } -func routineCount(devices []model.IOSDeviceLastUpdated) int { - if len(devices) < MaxRoutineCount { - return len(devices) - } - - return MaxRoutineCount -} - func (service *Service) LogScheduledUpdate(deviceID string) error { scheduleLog := model.IOSScheduledUpdateLog{ DeviceID: deviceID, diff --git a/server/backend/migration/20231003000000.go b/server/backend/migration/20231003000000.go index 7db90e5f..b15eea95 100644 --- a/server/backend/migration/20231003000000.go +++ b/server/backend/migration/20231003000000.go @@ -136,9 +136,8 @@ func setNameTagOptions(db *gorm.DB) { } var tagsNames multiLanguageNameTags - errjson := json.Unmarshal(file, &tagsNames) - if errjson != nil { - log.WithError(errjson).Error("Error parsing nameTagList to json.") + if err := json.Unmarshal(file, &tagsNames); err != nil { + log.WithError(err).Error("Error parsing nameTagList to json.") } for _, v := range tagsNames.MultiLanguageNameTags { parent := DishNameTagOption{