public async Task <HttpResponseMessage> Get(int id = -1)
        {
            if (id != -1)
            {
                MenuItem res = await _db.MenuItems.Where(b => b.Id == id && !b.Deleted).FirstOrDefaultAsync();

                if (res == null)
                {
                    return(Request.CreateErrorResponse(HttpStatusCode.NoContent, "No Menu Item Found With ID"));
                }

                LibBookingService.Dtos.MenuItem menuItem = CreateMenuItemFromDbMenuItem(res);

                return(Request.CreateResponse(HttpStatusCode.OK, menuItem));
            }
            else
            {
                IEnumerable <MenuItem> res = await _db.MenuItems.Where(b => !b.Deleted).ToListAsync();

                IEnumerable <LibBookingService.Dtos.MenuItem> menuItems = res.Select(b => CreateMenuItemFromDbMenuItem(b)).OrderBy(b => b.Name);

                return(menuItems.Any() ?
                       Request.CreateResponse(HttpStatusCode.OK, menuItems) :
                       Request.CreateErrorResponse(HttpStatusCode.NoContent, "No Menu Items"));
            }
        }
        public async Task <HttpResponseMessage> Post(LibBookingService.Dtos.MenuItem menuItem)
        {
            try
            {
                MenuItem newMenuItem = _db.MenuItems.Add(new MenuItem
                {
                    Name        = menuItem.Name,
                    Description = menuItem.Description,
                    Price       = Convert.ToDecimal(menuItem.Price)
                });
                await _db.SaveChangesAsync();

                if (menuItem.DietInfo != null)
                {
                    foreach (LibBookingService.Dtos.DietInfo di in menuItem.DietInfo)
                    {
                        _db.MenuItemDietInfoes.Add(new MenuItemDietInfo
                        {
                            MenuItem_id = newMenuItem.Id,
                            DietInfo_id = di.Id
                        });
                        await _db.SaveChangesAsync();
                    }
                }

                if (menuItem.Types != null)
                {
                    foreach (LibBookingService.Dtos.MenuItemType t in menuItem.Types)
                    {
                        _db.MenuItemTypes.Add(new MenuItemType
                        {
                            MenuItem_id = newMenuItem.Id,
                            Type_id     = t.Id
                        });
                        await _db.SaveChangesAsync();
                    }
                }

                return(Request.CreateResponse(HttpStatusCode.OK, CreateMenuItemFromDbMenuItem(newMenuItem)));
            }
            catch (Exception ex)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Failed"));
            }
        }
        public async Task <HttpResponseMessage> Update(int id, LibBookingService.Dtos.MenuItem menuItem)
        {
            try
            {
                MenuItem mi = await _db.MenuItems.Where(m => m.Id == id).FirstOrDefaultAsync();

                mi.Name        = menuItem.Name;
                mi.Description = menuItem.Description;
                mi.Price       = Convert.ToDecimal(menuItem.Price);

                _db.SetModified(mi);
                await _db.SaveChangesAsync();

                LibBookingService.Dtos.MenuItem res = CreateMenuItemFromDbMenuItem(mi);

                return(Request.CreateResponse(HttpStatusCode.OK, res));
            }
            catch (Exception ex)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Failed"));
            }
        }