From 9b74c6dbb30f2253bf3137f194817925d4ac36fb Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 15 Apr 2023 13:53:20 +0700 Subject: [PATCH] webapi server --- 20230415.3/w230415/Hall.cs | 7 +- 20230415.3/w230415/HallPlace.cs | 6 +- 20230415.3/w230415/Intf/IHall.cs | 13 ++++ 20230415.3/w230415/Intf/IHallPlace.cs | 10 +++ 20230415.3/w230415/w230415.sln | 12 +++ 20230415.3/w230415/w230415_classes.csproj | 4 - 20230415.3/w230415_console/Program.cs | 7 +- .../Controllers/HallController.cs | 78 +++++++++++++++++++ 20230415.3/w230415_webapi/Program.cs | 34 ++++++++ .../Properties/launchSettings.json | 31 ++++++++ .../appsettings.Development.json | 8 ++ 20230415.3/w230415_webapi/appsettings.json | 9 +++ .../w230415_webapi/w230415_webapi.csproj | 17 ++++ 13 files changed, 224 insertions(+), 12 deletions(-) create mode 100644 20230415.3/w230415/Intf/IHall.cs create mode 100644 20230415.3/w230415/Intf/IHallPlace.cs create mode 100644 20230415.3/w230415_webapi/Controllers/HallController.cs create mode 100644 20230415.3/w230415_webapi/Program.cs create mode 100644 20230415.3/w230415_webapi/Properties/launchSettings.json create mode 100644 20230415.3/w230415_webapi/appsettings.Development.json create mode 100644 20230415.3/w230415_webapi/appsettings.json create mode 100644 20230415.3/w230415_webapi/w230415_webapi.csproj 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 + + + + + + + + + + +