diff --git a/20230415.3/w230415/Hall.cs b/20230415.3/w230415/Hall.cs
index a36051f..cc06a56 100644
--- a/20230415.3/w230415/Hall.cs
+++ b/20230415.3/w230415/Hall.cs
@@ -3,10 +3,11 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using w230415_classes.Intf;
namespace w230415_classes
{
- public class Hall
+ public class Hall : IHall
{
public string Name { get; set; }
@@ -17,7 +18,7 @@ namespace w230415_classes
/// Read [R]
///
///
- public List GetNotBookedPlaceList()
+ public IEnumerable GetNotBookedPlaceList()
{
List hpl = new List();
foreach (var item in HallPlaceList)
@@ -34,7 +35,7 @@ namespace w230415_classes
///
///
///
- public HallPlace? ReadPlace(int iRow, int iPosition)
+ public IHallPlace? ReadPlace(int iRow, int iPosition)
{
var el = HallPlaceList.FirstOrDefault(hp => hp.SeatPosition == iPosition && hp.SeatRow == iRow);
return el;
diff --git a/20230415.3/w230415/HallPlace.cs b/20230415.3/w230415/HallPlace.cs
index 1005181..9307c26 100644
--- a/20230415.3/w230415/HallPlace.cs
+++ b/20230415.3/w230415/HallPlace.cs
@@ -1,6 +1,8 @@
-namespace w230415_classes
+using w230415_classes.Intf;
+
+namespace w230415_classes
{
- public class HallPlace
+ public class HallPlace : IHallPlace
{
public HallPlace()
{
diff --git a/20230415.3/w230415/Intf/IHall.cs b/20230415.3/w230415/Intf/IHall.cs
new file mode 100644
index 0000000..1b19efd
--- /dev/null
+++ b/20230415.3/w230415/Intf/IHall.cs
@@ -0,0 +1,13 @@
+namespace w230415_classes.Intf
+{
+ public interface IHall
+ {
+ string Name { get; set; }
+
+ bool AddPlace(int iRow, int iPosition);
+ bool BookPlace(int iRow, int iPosition);
+ bool DeletePlace(int iRow, int iPosition);
+ IEnumerable GetNotBookedPlaceList();
+ IHallPlace? ReadPlace(int iRow, int iPosition);
+ }
+}
\ No newline at end of file
diff --git a/20230415.3/w230415/Intf/IHallPlace.cs b/20230415.3/w230415/Intf/IHallPlace.cs
new file mode 100644
index 0000000..c97af25
--- /dev/null
+++ b/20230415.3/w230415/Intf/IHallPlace.cs
@@ -0,0 +1,10 @@
+namespace w230415_classes.Intf
+{
+ public interface IHallPlace
+ {
+ bool FlagBooked { get; set; }
+ int SeatPosition { get; set; }
+ int SeatRow { get; set; }
+ string Uid { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/20230415.3/w230415/w230415.sln b/20230415.3/w230415/w230415.sln
index 3810909..b2ee3d8 100644
--- a/20230415.3/w230415/w230415.sln
+++ b/20230415.3/w230415/w230415.sln
@@ -5,6 +5,10 @@ VisualStudioVersion = 17.2.32616.157
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "w230415_classes", "w230415_classes.csproj", "{3B2A3797-78B5-42F6-9C7E-5F9F20838C3F}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "w230415_console", "..\w230415_console\w230415_console.csproj", "{9A1651B3-A3D4-49ED-9257-419F42F66FF2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "w230415_webapi", "..\w230415_webapi\w230415_webapi.csproj", "{465CAE58-3BB5-4933-8AB8-FE30DDCFB9C4}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -15,6 +19,14 @@ Global
{3B2A3797-78B5-42F6-9C7E-5F9F20838C3F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3B2A3797-78B5-42F6-9C7E-5F9F20838C3F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3B2A3797-78B5-42F6-9C7E-5F9F20838C3F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9A1651B3-A3D4-49ED-9257-419F42F66FF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9A1651B3-A3D4-49ED-9257-419F42F66FF2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9A1651B3-A3D4-49ED-9257-419F42F66FF2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9A1651B3-A3D4-49ED-9257-419F42F66FF2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {465CAE58-3BB5-4933-8AB8-FE30DDCFB9C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {465CAE58-3BB5-4933-8AB8-FE30DDCFB9C4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {465CAE58-3BB5-4933-8AB8-FE30DDCFB9C4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {465CAE58-3BB5-4933-8AB8-FE30DDCFB9C4}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/20230415.3/w230415/w230415_classes.csproj b/20230415.3/w230415/w230415_classes.csproj
index 30d4703..132c02c 100644
--- a/20230415.3/w230415/w230415_classes.csproj
+++ b/20230415.3/w230415/w230415_classes.csproj
@@ -6,8 +6,4 @@
enable
-
-
-
-
diff --git a/20230415.3/w230415_console/Program.cs b/20230415.3/w230415_console/Program.cs
index ae28b44..4408fa3 100644
--- a/20230415.3/w230415_console/Program.cs
+++ b/20230415.3/w230415_console/Program.cs
@@ -1,4 +1,5 @@
using w230415_classes;
+using w230415_classes.Intf;
namespace w230415_console
{
@@ -6,13 +7,13 @@ namespace w230415_console
{
static void Main(string[] args)
{
- CinemaHall ch = new CinemaHall();
+ IHall ch = new CinemaHall();
h_Process(ch);
}
- private static void h_Process(CinemaHall ch)
+ private static void h_Process(IHall ch)
{
- foreach (var item in ch.GetNotBookedPlaceList())
+ foreach (IHallPlace item in ch.GetNotBookedPlaceList())
{
Console.WriteLine($"{item.SeatRow}/{item.SeatPosition}: {item.Uid}");
}
diff --git a/20230415.3/w230415_webapi/Controllers/HallController.cs b/20230415.3/w230415_webapi/Controllers/HallController.cs
new file mode 100644
index 0000000..d8d7e7a
--- /dev/null
+++ b/20230415.3/w230415_webapi/Controllers/HallController.cs
@@ -0,0 +1,78 @@
+using Microsoft.AspNetCore.Mvc;
+using w230415_classes.Intf;
+
+namespace w230415_webapi.Controllers
+{
+ [ApiController]
+ [Route("v1/hall")]
+ public class HallController : ControllerBase
+ {
+ private readonly IHall _hall;
+
+ public HallController(IHall hall)
+ {
+ _hall = hall;
+ }
+
+ [HttpGet(Name = "GetNotBookedPlaces")]
+ public IEnumerable GetNotBooked()
+ {
+ return _hall.GetNotBookedPlaceList();
+ }
+
+ [HttpGet("seat/{iRow}/{iPosition}", Name = "GetPlace")]
+ public IHallPlace GetHallPlace(
+ int iRow,
+ int iPosition)
+ {
+ var place = _hall.ReadPlace(iRow, iPosition);
+ Response.StatusCode = place != null ? 200 : 404;
+ return place;
+ }
+
+ [HttpGet("seat", Name = "GetPlace by query params")]
+ public IHallPlace GetHallPlace2(
+ int iRow,
+ int iPosition)
+ {
+ var place = _hall.ReadPlace(iRow, iPosition);
+ Response.StatusCode = place != null ? 200 : 404;
+ return place;
+ }
+
+ [HttpPost("seat", Name = "Add place by form params")]
+ public void AddHallPlace(
+ [FromForm]
+ int iRow,
+ [FromForm]
+ int iPosition)
+ {
+ bool result = _hall.AddPlace(iRow, iPosition);
+ Response.StatusCode = result ? 200 : 500;
+ }
+
+
+
+ [HttpDelete("seat", Name = "Remove place by form params")]
+ public void RemoveHallPlace(
+ [FromHeader]
+ int iRow,
+ [FromHeader]
+ int iPosition)
+ {
+ bool result = _hall.DeletePlace(iRow, iPosition);
+ Response.StatusCode = result ? 200 : 500;
+ }
+
+ [HttpPatch("seat/booking/{iRow}/{iPosition}", Name = "Set booking status by params")]
+ public void SetBooking(
+ int iRow,
+ int iPosition)
+ {
+ bool result = _hall.BookPlace(iRow, iPosition);
+ Response.StatusCode = result ? 200 : 500;
+ }
+
+
+ }
+}
\ No newline at end of file
diff --git a/20230415.3/w230415_webapi/Program.cs b/20230415.3/w230415_webapi/Program.cs
new file mode 100644
index 0000000..84218ff
--- /dev/null
+++ b/20230415.3/w230415_webapi/Program.cs
@@ -0,0 +1,34 @@
+using w230415_classes;
+using w230415_classes.Intf;
+
+namespace w230415_webapi
+{
+ public class Program
+ {
+ public static void Main(string[] args)
+ {
+ var builder = WebApplication.CreateBuilder(args);
+
+ // Add services to the container.
+ var pHall = new CinemaHall();
+ builder.Services.AddSingleton(pHall);
+ builder.Services.AddControllers();
+ // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
+ builder.Services.AddEndpointsApiExplorer();
+ builder.Services.AddSwaggerGen();
+
+ var app = builder.Build();
+
+ // Configure the HTTP request pipeline.
+ if (app.Environment.IsDevelopment())
+ {
+ app.UseSwagger();
+ app.UseSwaggerUI();
+ }
+
+ app.MapControllers();
+
+ app.Run();
+ }
+ }
+}
\ No newline at end of file
diff --git a/20230415.3/w230415_webapi/Properties/launchSettings.json b/20230415.3/w230415_webapi/Properties/launchSettings.json
new file mode 100644
index 0000000..52dd947
--- /dev/null
+++ b/20230415.3/w230415_webapi/Properties/launchSettings.json
@@ -0,0 +1,31 @@
+{
+ "$schema": "https://json.schemastore.org/launchsettings.json",
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:21569",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "w230415_webapi": {
+ "commandName": "Project",
+ "dotnetRunMessages": true,
+ "launchBrowser": true,
+ "launchUrl": "swagger",
+ "applicationUrl": "http://localhost:5095",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "launchUrl": "swagger",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ }
+ }
+}
diff --git a/20230415.3/w230415_webapi/appsettings.Development.json b/20230415.3/w230415_webapi/appsettings.Development.json
new file mode 100644
index 0000000..0c208ae
--- /dev/null
+++ b/20230415.3/w230415_webapi/appsettings.Development.json
@@ -0,0 +1,8 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ }
+}
diff --git a/20230415.3/w230415_webapi/appsettings.json b/20230415.3/w230415_webapi/appsettings.json
new file mode 100644
index 0000000..10f68b8
--- /dev/null
+++ b/20230415.3/w230415_webapi/appsettings.json
@@ -0,0 +1,9 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft.AspNetCore": "Warning"
+ }
+ },
+ "AllowedHosts": "*"
+}
diff --git a/20230415.3/w230415_webapi/w230415_webapi.csproj b/20230415.3/w230415_webapi/w230415_webapi.csproj
new file mode 100644
index 0000000..02a78eb
--- /dev/null
+++ b/20230415.3/w230415_webapi/w230415_webapi.csproj
@@ -0,0 +1,17 @@
+
+
+
+ net6.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
+