/// <summary> /// Replaces a new Menu /// </summary> /// <param name="newMenu">The Menu to be inserted</param> /// <returns>Returns a result containing the created resource id</returns> public async Task <Result> ReplaceFullMenu(int venueId, UpdatedMenu newMenu) { try { using var con = new Npgsql.NpgsqlConnection(settings.Connection.DatabaseConnectionString); await con.ExecuteAsync( @"UPDATE ""Menu"" SET menuDescription = @MenuDescription, menuName = @MenuName, menuImage = @MenuImage where menuid = @MenuId and venueid = @venueid", new { newMenu.MenuDescription, newMenu.MenuName, newMenu.MenuImage, newMenu.MenuId, VenueId = venueId } ).ConfigureAwait(false); await con.ExecuteAsync(@"DELETE FROM ""MenuItem"" WHERE menuId = @MenuId", new { newMenu.MenuId }).ConfigureAwait(false); await con.ExecuteAsync( @"INSERT INTO ""MenuItem""( venueid, menuid, productid ) VALUES ( @VenueId, @MenuId, @ProductId ) RETURNING menuId", newMenu.Products.Select(p => new { venueId, newMenu.MenuId, ProductId = p }).ToList() ).ConfigureAwait(false); return(Result.Ok()); } catch (Exception ex) { return(Result.Fail(ex.ToString())); } }
public async Task <IActionResult> ReplaceMenu([FromRoute(Name = "venueId")] int venueId, [FromBody] UpdatedMenu updatedMenu) { if (updatedMenu.MenuDescription == null || updatedMenu.MenuName == null || updatedMenu.Products == null) { return(BadRequest()); } return(await menus.ReplaceFullMenu(venueId, updatedMenu) .OnBoth(m => m.IsFailure ? StatusCode(500) : StatusCode(200)) .ConfigureAwait(false)); }