Browse Source

webapi server

pull/3/head
Your Name 3 years ago
parent
commit
9b74c6dbb3
  1. 7
      20230415.3/w230415/Hall.cs
  2. 6
      20230415.3/w230415/HallPlace.cs
  3. 13
      20230415.3/w230415/Intf/IHall.cs
  4. 10
      20230415.3/w230415/Intf/IHallPlace.cs
  5. 12
      20230415.3/w230415/w230415.sln
  6. 4
      20230415.3/w230415/w230415_classes.csproj
  7. 7
      20230415.3/w230415_console/Program.cs
  8. 78
      20230415.3/w230415_webapi/Controllers/HallController.cs
  9. 34
      20230415.3/w230415_webapi/Program.cs
  10. 31
      20230415.3/w230415_webapi/Properties/launchSettings.json
  11. 8
      20230415.3/w230415_webapi/appsettings.Development.json
  12. 9
      20230415.3/w230415_webapi/appsettings.json
  13. 17
      20230415.3/w230415_webapi/w230415_webapi.csproj

7
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]
/// </summary>
/// <returns></returns>
public List<HallPlace> GetNotBookedPlaceList()
public IEnumerable<IHallPlace> GetNotBookedPlaceList()
{
List<HallPlace> hpl = new List<HallPlace>();
foreach (var item in HallPlaceList)
@ -34,7 +35,7 @@ namespace w230415_classes
/// <param name="iRow"></param>
/// <param name="iPosition"></param>
/// <returns></returns>
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;

6
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()
{

13
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<IHallPlace> GetNotBookedPlaceList();
IHallPlace? ReadPlace(int iRow, int iPosition);
}
}

10
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; }
}
}

12
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

4
20230415.3/w230415/w230415_classes.csproj

@ -6,8 +6,4 @@
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<Folder Include="Intf\" />
</ItemGroup>
</Project>

7
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}");
}

78
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<IHallPlace> 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;
}
}
}

34
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<IHall>(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();
}
}
}

31
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"
}
}
}
}

8
20230415.3/w230415_webapi/appsettings.Development.json

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

9
20230415.3/w230415_webapi/appsettings.json

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

17
20230415.3/w230415_webapi/w230415_webapi.csproj

@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\w230415\w230415_classes.csproj" />
</ItemGroup>
</Project>
Loading…
Cancel
Save