2023-05-18 23:11:30 +04:00
using HotelBusinessLogic.MailWorker ;
using HotelContracts.BindingModels ;
2023-04-06 17:58:51 +04:00
using HotelContracts.BusinessLogicsContracts ;
using HotelContracts.SearchModels ;
2023-04-06 18:27:12 +04:00
using HotelContracts.StoragesContracts ;
2023-04-06 17:58:51 +04:00
using HotelContracts.ViewModels ;
2023-05-16 17:41:58 +04:00
using HotelDataModels.Models ;
2023-04-06 18:27:12 +04:00
using Microsoft.Extensions.Logging ;
2023-05-16 17:41:58 +04:00
using System.IO.Packaging ;
2023-04-06 17:58:51 +04:00
namespace HotelBusinessLogic.BusinessLogics
{
public class ConferenceLogic : IConferenceLogic
{
2023-04-06 18:27:12 +04:00
private readonly ILogger _logger ;
private readonly IConferenceStorage _conferenceStorage ;
2023-05-18 23:11:30 +04:00
private readonly AbstractMailWorker _mailWorker ;
private readonly IOrganiserLogic _organiserLogic ;
2023-04-06 18:27:12 +04:00
2023-05-18 23:11:30 +04:00
public ConferenceLogic ( ILogger < ConferenceLogic > logger , IConferenceStorage conferenceStorage , IOrganiserLogic organiserLogic , AbstractMailWorker mailWorker )
2023-04-06 18:27:12 +04:00
{
_logger = logger ;
_conferenceStorage = conferenceStorage ;
2023-05-18 23:11:30 +04:00
_organiserLogic = organiserLogic ;
_mailWorker = mailWorker ;
2023-04-06 18:27:12 +04:00
}
2023-04-06 17:58:51 +04:00
public bool Create ( ConferenceBindingModel model )
{
2023-04-06 18:27:12 +04:00
CheckModel ( model ) ;
2023-05-16 17:41:58 +04:00
model . ConferenceMembers = new ( ) ;
2023-04-06 18:27:12 +04:00
2023-05-18 23:11:30 +04:00
var result = _conferenceStorage . Insert ( model ) ;
if ( result = = null )
2023-04-06 18:27:12 +04:00
{
_logger . LogWarning ( "Insert operation failed" ) ;
return false ;
}
2023-05-18 23:11:30 +04:00
SendConferenceMessage ( result . OrganiserId , $"Гостиница \" Р а з в и т и е \ ", Конференция №{result.Id}" , $"Конференция №{result.Id} под названием {result.ConferenceName} и датой начала {result.StartDate} добавлена" ) ;
2023-04-06 18:27:12 +04:00
return true ;
2023-04-06 17:58:51 +04:00
}
public bool Delete ( ConferenceBindingModel model )
{
2023-04-06 18:27:12 +04:00
CheckModel ( model , false ) ;
_logger . LogInformation ( "Delete. Id:{Id}" , model . Id ) ;
2023-05-18 23:11:30 +04:00
var result = _conferenceStorage . Delete ( model ) ;
if ( result = = null )
2023-04-06 18:27:12 +04:00
{
_logger . LogWarning ( "Delete operation failed" ) ;
return false ;
}
2023-05-18 23:11:30 +04:00
SendConferenceMessage ( result . OrganiserId , $"Гостиница \" Р а з в и т и е \ ", Конференция №{result.Id}" , $"Конференция №{result.Id} под названием {result.ConferenceName} и датой начала {result.StartDate} удалена" ) ;
2023-04-06 18:27:12 +04:00
return true ;
2023-04-06 17:58:51 +04:00
}
public ConferenceViewModel ? ReadElement ( ConferenceSearchModel model )
{
2023-04-06 18:27:12 +04:00
if ( model = = null )
{
throw new ArgumentNullException ( nameof ( model ) ) ;
}
_logger . LogInformation ( "ReadElement. ConferenceName:{ConferenceName}.Id:{Id}" , model . ConferenceName , model . Id ) ;
var element = _conferenceStorage . GetElement ( model ) ;
if ( element = = null )
{
_logger . LogWarning ( "ReadElement element not found" ) ;
return null ;
}
_logger . LogInformation ( "ReadElement find. Id:{Id}" , element . Id ) ;
return element ;
2023-04-06 17:58:51 +04:00
}
public List < ConferenceViewModel > ? ReadList ( ConferenceSearchModel ? model )
{
2023-04-06 18:27:12 +04:00
_logger . LogInformation ( "ReadList. ConferenceName:{ConferenceName}.Id:{ Id}" , model ? . ConferenceName , model ? . Id ) ;
var list = model = = null ? _conferenceStorage . GetFullList ( ) : _conferenceStorage . GetFilteredList ( model ) ;
if ( list = = null )
{
_logger . LogWarning ( "ReadList return null list" ) ;
return null ;
}
_logger . LogInformation ( "ReadList. Count:{Count}" , list . Count ) ;
return list ;
2023-04-06 17:58:51 +04:00
}
2023-05-16 17:41:58 +04:00
public bool AddMemberToConference ( ConferenceSearchModel model , IMemberModel member )
{
if ( model = = null )
{
throw new ArgumentNullException ( nameof ( model ) ) ;
}
_logger . LogInformation ( "AddMemberToConference. ConferenceName:{ConferenceName}.Id:{ Id}" , model . ConferenceName , model . Id ) ;
var element = _conferenceStorage . GetElement ( model ) ;
if ( element = = null )
{
_logger . LogWarning ( "AddMemberToConference element not found" ) ;
return false ;
}
_logger . LogInformation ( "AddMemberToConference find. Id:{Id}" , element . Id ) ;
element . ConferenceMembers [ member . Id ] = member ;
_conferenceStorage . Update ( new ( )
{
Id = element . Id ,
ConferenceName = element . ConferenceName ,
StartDate = element . StartDate ,
OrganiserId = element . OrganiserId ,
ConferenceMembers = element . ConferenceMembers ,
} ) ;
return true ;
}
2023-04-06 17:58:51 +04:00
public bool Update ( ConferenceBindingModel model )
{
2023-04-06 18:27:12 +04:00
CheckModel ( model ) ;
if ( _conferenceStorage . Update ( model ) = = null )
{
_logger . LogWarning ( "Update operation failed" ) ;
return false ;
}
return true ;
}
private void CheckModel ( ConferenceBindingModel model , bool withParams = true )
{
if ( model = = null )
{
throw new ArgumentNullException ( nameof ( model ) ) ;
}
if ( ! withParams )
{
return ;
}
if ( string . IsNullOrEmpty ( model . ConferenceName ) )
{
throw new ArgumentNullException ( "Нет названия конференции" , nameof ( model . ConferenceName ) ) ;
}
_logger . LogInformation ( "Conference. ConferenceName:{ConferenceName}.StartDate:{ StartDate}. Id: { Id}" , model . ConferenceName , model . StartDate , model . Id ) ;
2023-04-06 17:58:51 +04:00
}
2023-05-18 23:11:30 +04:00
private bool SendConferenceMessage ( int organiserId , string subject , string text )
{
var organiser = _organiserLogic . ReadElement ( new ( ) { Id = organiserId } ) ;
if ( organiser = = null )
{
return false ;
}
_mailWorker . MailSendAsync ( new ( )
{
MailAddress = organiser . OrganiserEmail ,
Subject = subject ,
Text = text
} ) ;
return true ;
}
2023-04-06 17:58:51 +04:00
}
}