distributed-computing/tasks/savitskiy-al/lab_3/worker-2/Program.cs
2023-12-15 14:17:16 +04:00

183 lines
4.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Microsoft.AspNetCore.Mvc;
using System.Text;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.MapGet("/Pilots/", async () =>
{
var result = (await Storage.GetInstance()).Pilots.Select(r => new worker_2.Models.Pilots.GetList.PilotResult()
{
AeroplaneId = r.AeroplaneId,
FullName = r.FullName,
BirthDate = r.BirthDate,
Experience = r.Experience,
PilotId = r.PilotId,
}).ToArray();
return Results.Ok(result);
})
.WithName("List")
.WithOpenApi();
app.MapGet("/Pilots/{pilotId}", async (Guid pilotId) =>
{
var pilot = (await Storage.GetInstance()).Pilots.FirstOrDefault(r => r.PilotId == pilotId);
if (pilot is null)
{
return Results.NotFound($"Не найден пилот {pilotId}");
}
return Results.Json(new worker_2.Models.Pilots.Get.PilotResult()
{
AeroplaneId = pilot.AeroplaneId,
FullName = pilot.FullName,
BirthDate = pilot.BirthDate,
Experience = pilot.Experience,
PilotId = pilot.PilotId,
});
})
.WithName("Get")
.WithOpenApi();
app.MapPost("/Pilots/", async ([FromBody] worker_2.Models.Pilots.Create.PilotForm request) =>
{
if ((await Storage.GetInstance()).Airoplanes.FirstOrDefault(x => x.AeroplaneId == request.AeroplaneId) is null)
{
return Results.NotFound($"Не найден самолет {request.AeroplaneId}");
}
Guid pilotId = Guid.NewGuid();
(await Storage.GetInstance()).Pilots.Add(new PilotDal()
{
PilotId = pilotId,
BirthDate = request.BirthDate,
AeroplaneId = request.AeroplaneId,
FullName = request.FullName,
Experience = request.Experience,
});
return Results.Ok(pilotId);
})
.WithName("Create")
.WithOpenApi();
app.MapPatch("/Pilots/{pilotId}", async (Guid pilotId, [FromBody] worker_2.Models.Pilots.Create.PilotForm request) =>
{
var pilot = (await Storage.GetInstance()).Pilots.FirstOrDefault(r => r.PilotId == pilotId);
if (pilot is null)
{
return Results.NotFound($"Не найден пилот {pilotId}");
}
if((await Storage.GetInstance()).Airoplanes.FirstOrDefault(x => x.AeroplaneId == request.AeroplaneId) is null)
{
return Results.NotFound($"Не найдена самолет {request.AeroplaneId}");
}
if (!string.IsNullOrEmpty(request.FullName))
{
pilot.FullName = request.FullName;
}
pilot.AeroplaneId = request.AeroplaneId;
pilot.Experience = request.Experience;
pilot.BirthDate = request.BirthDate;
return Results.Ok(pilot);
})
.WithName("Update")
.WithOpenApi();
app.MapDelete("/Pilots/{pilotId}", async (Guid pilotId) =>
{
var pilot = (await Storage.GetInstance()).Pilots.FirstOrDefault(r => r.PilotId == pilotId);
if (pilot is null)
{
return Results.NotFound($"Не найден пилот {pilotId}");
}
(await Storage.GetInstance()).Pilots.Remove(pilot);
return Results.Ok(pilotId);
})
.WithName("Delete")
.WithOpenApi();
app.Run();
public class PilotDal
{
public Guid PilotId { get; set; }
public string FullName { get; set; }
public Guid AeroplaneId { get; set; }
public DateTime? BirthDate { get; set; }
public int Experience { get; set; }
}
public class AiroplaneDal
{
public Guid AeroplaneId { get; set; }
public string Name { get; set; }
public DateTime ProductionDate { get; set; }
public int Weght { get; set; }
public int Lenght { get; set; }
}
public class Storage
{
private static Random rand = new Random();
public AiroplaneDal[] Airoplanes { get; set; }
public List<PilotDal> Pilots { get; set; }
public static Storage Instance { get; set; }
private Storage() { }
public static async Task<Storage> GetInstance()
{
if(Instance is not null)
{
return Instance;
}
var client = new HttpClient();
string reqUrl = $"https://localhost:7027/Aeroplanes/";
Instance = new Storage();
Instance.Airoplanes = await client.GetFromJsonAsync<AiroplaneDal[]>(reqUrl);
Instance.Pilots = new List<PilotDal>()
{
new PilotDal() { PilotId = Guid.NewGuid(), BirthDate = DateTime.Today.AddDays(-100), AeroplaneId = Instance.Airoplanes[rand.Next(Instance.Airoplanes.Length)].AeroplaneId, FullName = "Савицкий Александр Вячеславович", Experience = 10 },
new PilotDal() { PilotId = Guid.NewGuid(), BirthDate = DateTime.Today.AddDays(-150), AeroplaneId = Instance.Airoplanes[rand.Next(Instance.Airoplanes.Length)].AeroplaneId, FullName = "Гайдулян Максим Петрович", Experience = 15 }
};
return Instance;
}
}