diff --git a/Hotel/HotelRestApi/Controllers/ConferenceController.cs b/Hotel/HotelRestApi/Controllers/ConferenceController.cs new file mode 100644 index 0000000..15cf03c --- /dev/null +++ b/Hotel/HotelRestApi/Controllers/ConferenceController.cs @@ -0,0 +1,131 @@ +using HotelContracts.BindingModels; +using HotelContracts.BusinessLogicsContracts; +using HotelContracts.SearchModels; +using HotelContracts.ViewModels; +using Microsoft.AspNetCore.Mvc; + +namespace HotelRestApi.Controllers +{ + [Route("api/[controller]/[action]")] + [ApiController] + public class ConferenceController : Controller + { + private readonly ILogger _logger; + private readonly IConferenceLogic _conference; + + public ConferenceController(ILogger logger, IConferenceLogic conference) + { + _logger = logger; + _conference = conference; + } + + [HttpGet] + public List? GetConferenceList(int organiserId) + { + try + { + return _conference.ReadList(new ConferenceSearchModel + { + OrganiserId = organiserId, + }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка получения списка конференций"); + throw; + } + } + + [HttpGet] + public List? GetConferences() + { + try + { + return _conference.ReadList(null); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка получения списка конференций"); + throw; + } + } + + [HttpGet] + public Tuple>>? GetConference(int conferenceId) + { + try + { + var elem = _conference.ReadElement(new ConferenceSearchModel { Id = conferenceId }); + if (elem == null) + { + return null; + } + var members = elem.ConferenceMembers.Select(x => Tuple.Create($"{x.Value.MemberSurname} {x.Value.MemberName} {x.Value.MemberPatronymic}", x.Value.MemberPhoneNumber)).ToList(); + + return Tuple.Create(elem, members); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка получения конференции по id={Id}", conferenceId); + throw; + } + } + + [HttpPost] + public void CreateConference(ConferenceBindingModel model) + { + try + { + _conference.Create(model); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка создания конференции"); + throw; + } + } + + [HttpPost] + public void UpdateConference(ConferenceBindingModel model) + { + try + { + model.ConferenceMembers = null!; + _conference.Update(model); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка обновления данных"); + throw; + } + } + + [HttpPost] + public void DeleteConference(ConferenceBindingModel model) + { + try + { + _conference.Delete(model); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка удаления конференции"); + throw; + } + } + + [HttpPost] + public void AddMemberToConference(Tuple model) + { + try + { + _conference.AddMemberToConference(model.Item1, model.Item2); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка добавления участника в конференцию."); + throw; + } + } + } +} diff --git a/Hotel/HotelRestApi/Controllers/LunchController.cs b/Hotel/HotelRestApi/Controllers/LunchController.cs index 26a1c41..2bab907 100644 --- a/Hotel/HotelRestApi/Controllers/LunchController.cs +++ b/Hotel/HotelRestApi/Controllers/LunchController.cs @@ -13,7 +13,7 @@ namespace HotelRestApi.Controllers private readonly ILogger _logger; private readonly ILunchLogic _lunch; - public LunchController(ILogger logger, ILunchLogic lunch) + public LunchController(ILogger logger, ILunchLogic lunch) { _logger = logger; _lunch = lunch; diff --git a/Hotel/HotelRestApi/Controllers/MealPlanController.cs b/Hotel/HotelRestApi/Controllers/MealPlanController.cs new file mode 100644 index 0000000..71943cb --- /dev/null +++ b/Hotel/HotelRestApi/Controllers/MealPlanController.cs @@ -0,0 +1,120 @@ +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; + } + } + } +} diff --git a/Hotel/HotelRestApi/Controllers/MemberController.cs b/Hotel/HotelRestApi/Controllers/MemberController.cs new file mode 100644 index 0000000..78790c0 --- /dev/null +++ b/Hotel/HotelRestApi/Controllers/MemberController.cs @@ -0,0 +1,96 @@ +using HotelContracts.BindingModels; +using HotelContracts.BusinessLogicsContracts; +using HotelContracts.SearchModels; +using HotelContracts.ViewModels; +using Microsoft.AspNetCore.Mvc; + +namespace HotelRestApi.Controllers +{ + public class MemberController : Controller + { + private readonly ILogger _logger; + private readonly IMemberLogic _member; + + public MemberController(ILogger logger, IMemberLogic member) + { + _logger = logger; + _member = member; + } + + [HttpGet] + public List? GetMemberList(int organiserId) + { + try + { + return _member.ReadList(new MemberSearchModel + { + OrganiserId = organiserId, + }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка получения списка участников"); + throw; + } + } + + [HttpGet] + public MemberViewModel? GetMember(int memberId) + { + try + { + return _member.ReadElement(new MemberSearchModel + { + Id = memberId + }); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка получения участника по id={Id}", memberId); + throw; + } + } + + [HttpPost] + public void CreateMember(MemberBindingModel model) + { + try + { + _member.Create(model); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка создания участника"); + throw; + } + } + + [HttpPost] + public void UpdateMember(MemberBindingModel model) + { + try + { + _member.Update(model); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка обновления данных"); + throw; + } + } + + [HttpPost] + public void DeleteMember(MemberBindingModel model) + { + try + { + _member.Delete(model); + } + catch (Exception ex) + { + _logger.LogError(ex, "Ошибка удаления участника"); + throw; + } + } + } +} diff --git a/Hotel/HotelRestApi/Controllers/RoomController.cs b/Hotel/HotelRestApi/Controllers/RoomController.cs index 8f9a61a..f34dd86 100644 --- a/Hotel/HotelRestApi/Controllers/RoomController.cs +++ b/Hotel/HotelRestApi/Controllers/RoomController.cs @@ -13,7 +13,7 @@ namespace HotelRestApi.Controllers private readonly ILogger _logger; private readonly IRoomLogic _room; - public RoomController(ILogger logger, IRoomLogic room) + public RoomController(ILogger logger, IRoomLogic room) { _logger = logger; _room = room;