HotelRestApi

This commit is contained in:
Вячеслав Иванов 2024-03-24 14:46:34 +04:00
parent 1a3305de60
commit 2ef71093bd
9 changed files with 347 additions and 1 deletions

View File

@ -11,7 +11,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotelContracts", "HotelCont
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotelDataBaseImplement", "HotelDataBaseImplement\HotelDataBaseImplement.csproj", "{3FAD978F-2155-4D65-963D-616F18ABA37F}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotelDataBaseImplement", "HotelDataBaseImplement\HotelDataBaseImplement.csproj", "{3FAD978F-2155-4D65-963D-616F18ABA37F}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotelBusinessLogic", "HotelBusinessLogic\HotelBusinessLogic.csproj", "{6A77DCB6-60DC-4A2C-B259-578F1B547AF6}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HotelBusinessLogic", "HotelBusinessLogic\HotelBusinessLogic.csproj", "{6A77DCB6-60DC-4A2C-B259-578F1B547AF6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HotelRestApi", "HotelRestApi\HotelRestApi.csproj", "{1FE967C0-64C0-4CEF-9DE4-3E00BA2B347D}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -39,6 +41,10 @@ Global
{6A77DCB6-60DC-4A2C-B259-578F1B547AF6}.Debug|Any CPU.Build.0 = Debug|Any CPU {6A77DCB6-60DC-4A2C-B259-578F1B547AF6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6A77DCB6-60DC-4A2C-B259-578F1B547AF6}.Release|Any CPU.ActiveCfg = Release|Any CPU {6A77DCB6-60DC-4A2C-B259-578F1B547AF6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6A77DCB6-60DC-4A2C-B259-578F1B547AF6}.Release|Any CPU.Build.0 = Release|Any CPU {6A77DCB6-60DC-4A2C-B259-578F1B547AF6}.Release|Any CPU.Build.0 = Release|Any CPU
{1FE967C0-64C0-4CEF-9DE4-3E00BA2B347D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1FE967C0-64C0-4CEF-9DE4-3E00BA2B347D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1FE967C0-64C0-4CEF-9DE4-3E00BA2B347D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1FE967C0-64C0-4CEF-9DE4-3E00BA2B347D}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

View File

@ -0,0 +1,68 @@
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 HeadwaiterController : Controller
{
private readonly ILogger _logger;
private readonly IHeadwaiterLogic _logic;
public HeadwaiterController(IHeadwaiterLogic logic, ILogger<HeadwaiterController> logger)
{
_logger = logger;
_logic = logic;
}
[HttpGet]
public HeadwaiterViewModel? Login(string login, string password)
{
try
{
return _logic.ReadElement(new HeadwaiterSearchModel
{
HeadwaiterEmail = login,
HeadwaiterPassword = password
});
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка входа в систему");
throw;
}
}
[HttpPost]
public void Register(HeadwaiterBindingModel model)
{
try
{
_logic.Create(model);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка регистрации");
throw;
}
}
[HttpPost]
public void UpdateData(HeadwaiterBindingModel model)
{
try
{
_logic.Update(model);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка обновления данных");
throw;
}
}
}
}

View File

@ -0,0 +1,118 @@
using HotelContracts.BindingModels;
using HotelContracts.BusinessLogicsContracts;
using Microsoft.AspNetCore.Mvc;
namespace HotelRestApi.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
public class ReportController : Controller
{
private readonly ILogger _logger;
private readonly IReportOrganiserLogic _reportOrganiserLogic;
private readonly IReportHeadwaiterLogic _reportHeadwaiterLogic;
public ReportController(ILogger<ReportController> logger, IReportOrganiserLogic reportOrganiserLogic, IReportHeadwaiterLogic reportHeadwaiterLogic)
{
_logger = logger;
_reportOrganiserLogic = reportOrganiserLogic;
_reportHeadwaiterLogic = reportHeadwaiterLogic;
}
[HttpPost]
public void CreateOrganiserReportToPdfFile(ReportOrganiserBindingModel model)
{
try
{
_reportOrganiserLogic.SaveMembersToPdfFile(new ReportOrganiserBindingModel
{
DateFrom = model.DateFrom,
DateTo = model.DateTo,
OrganiserId = model.OrganiserId,
FileName = "C:\\Reports\\pdffile.pdf",
});
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка создания отчета");
throw;
}
}
[HttpPost]
public void CreateOrganiserReportToWordFile(ReportOrganiserBindingModel model)
{
try
{
_reportOrganiserLogic.SaveMemberConferenceToWordFile(model);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка создания отчета");
throw;
}
}
[HttpPost]
public void CreateOrganiserReportToExcelFile(ReportOrganiserBindingModel model)
{
try
{
_reportOrganiserLogic.SaveMemberConferenceToExcelFile(model);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка создания отчета");
throw;
}
}
[HttpPost]
public void CreateHeadwaiterReportToWordFile(ReportHeadwaiterBindingModel model)
{
try
{
_reportHeadwaiterLogic.SaveLunchRoomToWordFile(model);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка создания отчета");
throw;
}
}
[HttpPost]
public void CreateHeadwaiterReportToExcelFile(ReportHeadwaiterBindingModel model)
{
try
{
_reportHeadwaiterLogic.SaveLunchRoomToWordFile(model);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка создания отчета");
throw;
}
}
[HttpPost]
public void CreateHeadwaiterReportToPdfFile(ReportHeadwaiterBindingModel model)
{
try
{
_reportHeadwaiterLogic.SaveLunchesToPdfFile(new ReportHeadwaiterBindingModel
{
FileName = "C:\\Reports\\pdffile.pdf",
DateFrom = model.DateFrom,
DateTo = model.DateTo,
HeadwaiterId = model.HeadwaiterId,
});
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка создания отчета");
throw;
}
}
}
}

View File

@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging.Log4Net.AspNetCore" Version="6.1.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\HotelBusinessLogic\HotelBusinessLogic.csproj" />
<ProjectReference Include="..\HotelContracts\HotelContracts.csproj" />
<ProjectReference Include="..\HotelDataBaseImplement\HotelDataBaseImplement.csproj" />
<ProjectReference Include="..\HotelDataModels\HotelDataModels.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,69 @@
using HotelBusinessLogic.BusinessLogics;
using HotelContracts.BusinessLogicsContracts;
using HotelContracts.StoragesContracts;
using HotelDataBaseImplement.Implemets;
using Microsoft.OpenApi.Models;
using HotelBusinessLogic.OfficePackage;
using HotelBusinessLogic.OfficePackage.Implements;
var builder = WebApplication.CreateBuilder(args);
builder.Logging.SetMinimumLevel(LogLevel.Trace);
builder.Logging.AddLog4Net("log4net.config");
// Add services to the container.
builder.Services.AddTransient<IOrganiserStorage, OrganiserStorage>();
builder.Services.AddTransient<IMealPlanStorage, MealPlanStorage>();
builder.Services.AddTransient<IMemberStorage, MemberStorage>();
builder.Services.AddTransient<IConferenceStorage, ConferenceStorage>();
builder.Services.AddTransient<IHeadwaiterStorage, HeadwaiterStorage>();
builder.Services.AddTransient<ILunchStorage, LunchStorage>();
builder.Services.AddTransient<IRoomStorage, RoomStorage>();
builder.Services.AddTransient<IConferenceBookingStorage, ConferenceBookingStorage>();
builder.Services.AddTransient<IOrganiserLogic, OrganiserLogic>();
builder.Services.AddTransient<IMealPlanLogic, MealPlanLogic>();
builder.Services.AddTransient<IMemberLogic, MemberLogic>();
builder.Services.AddTransient<IConferenceLogic, ConferenceLogic>();
builder.Services.AddTransient<IReportOrganiserLogic, ReportLogicOrganiser>();
builder.Services.AddTransient<IHeadwaiterLogic, HeadwaiterLogic>();
builder.Services.AddTransient<ILunchLogic, LunchLogic>();
builder.Services.AddTransient<IRoomLogic, RoomLogic>();
builder.Services.AddTransient<IConferenceBookingLogic, ConferenceBookingLogic>();
builder.Services.AddTransient<IReportHeadwaiterLogic, ReportLogicHeadwaiter>();
builder.Services.AddTransient<AbstractSaveToExcelOrganiser, SaveToExcelOrganiser>();
builder.Services.AddTransient<AbstractSaveToWordOrganiser, SaveToWordOrganiser>();
builder.Services.AddTransient<AbstractSaveToPdfOrganiser, SaveToPdfOrganiser>();
builder.Services.AddTransient<AbstractSaveToExcelHeadwaiter, SaveToExcelHeadwaiter>();
builder.Services.AddTransient<AbstractSaveToWordHeadwaitre, SaveToWordHeadwaiter>();
builder.Services.AddTransient<AbstractSaveToPdfHeadwaiter, SaveToPdfHeadwaiter>();
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Title = "HotelRestApi",
Version = "v1"
});
});
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "HotelRestApi v1"));
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

View File

@ -0,0 +1,31 @@
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:58848",
"sslPort": 44323
}
},
"profiles": {
"HotelRestApi": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "https://localhost:7093;http://localhost:5249",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "swagger",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

View File

@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View File

@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="c:/temp/HotelRestApi.log" />
<appendToFile value="true" />
<maximumFileSize value="100KB" />
<maxSizeRollBackups value="2" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" />
</layout>
</appender>
<root>
<level value="TRACE" />
<appender-ref ref="RollingFile" />
</root>
</log4net>