using HotelContracts.BindingModels; using HotelContracts.BusinessLogicsContracts; using HotelContracts.SearchModels; using HotelContracts.ViewModels; using HotelDataBaseImplement; using Microsoft.AspNetCore.Mvc; namespace HotelRestApi.Controllers { [Route("api/[controller]/[action]")] [ApiController] public class MealPlanController : Controller { private readonly ILogger _logger; private readonly IMealPlanLogic _mealPlan; public MealPlanController(ILogger logger, IMealPlanLogic mealPlan) { _logger = logger; _mealPlan = mealPlan; } [HttpGet] public List? GetMealPlanList(int organiserId) { try { return _mealPlan.ReadList(new MealPlanSearchModel { OrganiserId = organiserId, }); } catch (Exception ex) { _logger.LogError(ex, "Ошибка получения списка планов питания"); throw; } } [HttpGet] public Tuple>, List>>? GetMealPlan(int mealPlanId) { try { using var context = new HotelDataBase(); var elem = _mealPlan.ReadElement(new MealPlanSearchModel { Id = mealPlanId }); if (elem == null) { return null; } var members = elem.MealPlanMembers.Select(x => Tuple.Create($"{x.Value.MemberSurname} {x.Value.MemberName} {x.Value.MemberPatronymic}", x.Value.MemberPhoneNumber)).ToList(); return Tuple.Create(elem, members, context.Rooms.Where(x => x.MealPlanId == elem.Id).Select(x => Tuple.Create(x.RoomName, x.RoomFrame)).ToList()); } catch (Exception ex) { _logger.LogError(ex, "Ошибка получения плана питания по id={Id}", mealPlanId); throw; } } [HttpPost] public void CreateMealPlan(MealPlanBindingModel model) { try { _mealPlan.Create(model); } catch (Exception ex) { _logger.LogError(ex, "Ошибка создания плана питания"); throw; } } [HttpPost] public void UpdateMealPlan(MealPlanBindingModel model) { try { model.MealPlanMembers = null!; _mealPlan.Update(model); } catch (Exception ex) { _logger.LogError(ex, "Ошибка обновления данных"); throw; } } [HttpPost] public void DeleteMealPlan(MealPlanBindingModel model) { try { _mealPlan.Delete(model); } catch (Exception ex) { _logger.LogError(ex, "Ошибка удаления плана питания"); throw; } } [HttpPost] public void AddMemberToMealPlan(Tuple model) { try { _mealPlan.AddMemberToMealPlan(model.Item1, model.Item2); } catch (Exception ex) { _logger.LogError(ex, "Ошибка добавления участника в план питания."); throw; } } } }