public async Task <IActionResult> AddDish(CreateDishRequest dish) { var loggedUser = User.GetUserIdFromToken(); var result = await _dishService.CreateDishAsync(loggedUser, dish); var language = await _userService.GetUserLanguageFromUserIdAsync(loggedUser); var mapped = _mapper.Map <DishResponse>(result, opt => { opt.Items["lang"] = language; }); return(Created("", new ApiOkResponse(mapped))); }
public ActionResult Create([FromRoute] int restaurantId, [FromBody] CreateDishRequest request) { int id = _dishService.CreateDish(restaurantId, request); return(Created($"api/v1/restaurant/{restaurantId}/dish/{id}", null)); }
public async Task <Dish> CreateDishAsync(int loggedUser, CreateDishRequest dish) { // validate admin user var user = await _uow.UserRepository.FindByAsync(u => u.Id == loggedUser && u.Role == RoleEnum.ADMIN); if (user.Count == 0) { throw new NotAllowedException(ExceptionConstants.NOT_ALLOWED); } // validate dish name var existDishName = await _uow.DishRepository.FindByAsync(p => p.Name.ToLower() == dish.Name.ToLower()); if (existDishName.Count > 0) { throw new InvalidDataException(ExceptionConstants.INVALID_DATA, "Dish name"); } var dbDish = new Dish(); dbDish.Calories = dish.Calories; dbDish.Carbohydrates = dish.Carbohydrates; dbDish.Fat = dish.Fat; dbDish.Fiber = dish.Fiber; dbDish.Name = dish.Name; dbDish.Proteins = dish.Proteins; dbDish.Cholesterol = dish.Cholesterol; dbDish.Calcium = dish.Calcium; dbDish.Phosphorus = dish.Phosphorus; dbDish.Iron = dish.Iron; dbDish.Potassium = dish.Potassium; dbDish.Sodium = dish.Sodium; dbDish.Zinc = dish.Zinc; dbDish.VitaminA = dish.VitaminA; dbDish.VitaminC = dish.VitaminC; dbDish.VitaminB6 = dish.VitaminB6; dbDish.VitaminB12 = dish.VitaminB12; dbDish.VitaminD = dish.VitaminD; dbDish.VitaminE = dish.VitaminE; dbDish.VitaminK = dish.VitaminK; dbDish.VitaminB1Thiamin = dish.VitaminB1Thiamin; dbDish.VitaminB2Riboflavin = dish.VitaminB2Riboflavin; dbDish.VitaminB3Niacin = dish.VitaminB3Niacin; dbDish.VitaminB9Folate = dish.VitaminB9Folate; dbDish.NetWeight = dish.NetWeight; dbDish.Volume = dish.Volume; dbDish.SaturatedFat = dish.SaturatedFat; dbDish.PolyUnsaturatedFat = dish.PolyUnsaturatedFat; dbDish.MonoUnsaturatedFat = dish.MonoUnsaturatedFat; dbDish.Alcohol = dish.Alcohol; if (dish.Classification == 0) { dbDish.IsProteic = true; } else if (dish.Classification == 1) { dbDish.IsCaloric = true; } else { dbDish.IsFruitAndVegetables = true; } // avatar if (dish.Image != null) { string guid = Guid.NewGuid().ToString(); await _fileService.UploadFileAsync(dish.Image, guid); dbDish.Image = guid; dbDish.ImageMimeType = dish.Image.ContentType; } //existing tags foreach (var id in dish.TagsIds) { var t = await _uow.TagRepository.GetAsync(id); if (t != null) { var dt = new DishTag { Dish = dbDish, TagId = t.Id, TaggedAt = DateTime.UtcNow }; await _uow.DishTagRepository.AddAsync(dt); } } //new tags foreach (var name in dish.NewTags) { var ta = new Tag { Name = name }; await _uow.TagRepository.AddAsync(ta); var dt = new DishTag { Dish = dbDish, Tag = ta, TaggedAt = DateTime.UtcNow }; await _uow.DishTagRepository.AddAsync(dt); } await _uow.DishRepository.AddAsync(dbDish); await _uow.CommitAsync(); //expire cache QueryCacheManager.ExpireTag(_config.GetSection("AWS")["CachePrefix"] + CacheEntries.ALL_DISHES); return(dbDish); }