173 lines
4.7 KiB
C#
173 lines
4.7 KiB
C#
|
||
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("/Employees/", () =>
|
||
{
|
||
var result = Storage.Employees.Select(r => new worker_2.Models.Employee.GetList.EmployeeResult()
|
||
{
|
||
CompanyId = r.CompanyId,
|
||
FullName = r.FullName,
|
||
BirthDate = r.BirthDate,
|
||
EmployeeId = r.EmployeeId,
|
||
Position = r.Position,
|
||
}).ToArray();
|
||
|
||
return Results.Ok(result);
|
||
})
|
||
.WithName("List")
|
||
.WithOpenApi();
|
||
|
||
app.MapGet("/Employees/{employeeId}", (Guid employeeId) =>
|
||
{
|
||
var employee = Storage.Employees.FirstOrDefault(r => r.EmployeeId == employeeId);
|
||
if (employee is null)
|
||
{
|
||
return Results.NotFound($"Не найден работник {employeeId}");
|
||
}
|
||
|
||
return Results.Json(new worker_2.Models.Employee.Get.EmployeeResult()
|
||
{
|
||
CompanyId = employee.CompanyId,
|
||
FullName = employee.FullName,
|
||
BirthDate = employee.BirthDate,
|
||
EmployeeId = employee.EmployeeId,
|
||
Position = employee.Position,
|
||
});
|
||
})
|
||
.WithName("Get")
|
||
.WithOpenApi();
|
||
|
||
app.MapPost("/Employees/", ([FromBody] worker_2.Models.Employee.Create.EmployeeForm request) =>
|
||
{
|
||
if (Storage.Companies.FirstOrDefault(x => x.CompanyId == request.CompanyId) is null)
|
||
{
|
||
return Results.NotFound($"Не найдена компания {request.CompanyId}");
|
||
}
|
||
Guid employeeId = Guid.NewGuid();
|
||
Storage.Employees.Add(new EmployeeDal()
|
||
{
|
||
EmployeeId = employeeId,
|
||
BirthDate = request.BirthDate,
|
||
CompanyId = request.CompanyId,
|
||
FullName = request.FullName,
|
||
Position = request.Position,
|
||
});
|
||
|
||
return Results.Ok(employeeId);
|
||
})
|
||
.WithName("Create")
|
||
.WithOpenApi();
|
||
|
||
app.MapPatch("/Employees/{employeeId}", (Guid employeeId, [FromBody] worker_2.Models.Employee.Create.EmployeeForm request) =>
|
||
{
|
||
var employee = Storage.Employees.FirstOrDefault(r => r.EmployeeId == employeeId);
|
||
if (employee is null)
|
||
{
|
||
return Results.NotFound($"Не найден работник {employeeId}");
|
||
}
|
||
|
||
if(Storage.Companies.FirstOrDefault(x => x.CompanyId == request.CompanyId) is null)
|
||
{
|
||
return Results.NotFound($"Не найдена компания {request.CompanyId}");
|
||
}
|
||
|
||
if (!string.IsNullOrEmpty(request.FullName))
|
||
{
|
||
employee.FullName = request.FullName;
|
||
}
|
||
|
||
if (!string.IsNullOrEmpty(request.Position))
|
||
{
|
||
employee.Position = request.Position;
|
||
}
|
||
|
||
if (request.BirthDate.HasValue)
|
||
{
|
||
employee.BirthDate = request.BirthDate.Value;
|
||
}
|
||
return Results.Ok(employee);
|
||
})
|
||
.WithName("Update")
|
||
.WithOpenApi();
|
||
|
||
app.MapDelete("/Employees/{employeeId}", (Guid employeeId) =>
|
||
{
|
||
var employee = Storage.Employees.FirstOrDefault(r => r.EmployeeId == employeeId);
|
||
if (employee is null)
|
||
{
|
||
return Results.NotFound($"Не найден работник {employeeId}");
|
||
}
|
||
|
||
Storage.Employees.Remove(employee);
|
||
return Results.Ok(employeeId);
|
||
})
|
||
.WithName("Delete")
|
||
.WithOpenApi();
|
||
|
||
app.Run();
|
||
|
||
|
||
public class EmployeeDal
|
||
{
|
||
public Guid EmployeeId { get; set; }
|
||
|
||
public DateTime? BirthDate { get; set; }
|
||
|
||
public Guid CompanyId { get; set; }
|
||
|
||
public string FullName { get; set; }
|
||
|
||
public string Position { get; set; }
|
||
}
|
||
|
||
public class CompanyDal
|
||
{
|
||
public Guid CompanyId { get; set; }
|
||
|
||
public string Name { get; set; }
|
||
|
||
public string FieldOfActivity { get; set; }
|
||
|
||
public string Location { get; set; }
|
||
}
|
||
|
||
public class Storage
|
||
{
|
||
private static Random rand = new Random();
|
||
|
||
public static CompanyDal[] Companies { get; set; }
|
||
|
||
public static List<EmployeeDal> Employees { get; set; }
|
||
|
||
static Storage()
|
||
{
|
||
var client = new HttpClient();
|
||
string reqUrl = $"http://worker-1:8080/Companies/";
|
||
Companies = client.GetFromJsonAsync<CompanyDal[]>(reqUrl).Result;//для простоты блокируем
|
||
|
||
Employees = new List<EmployeeDal>()
|
||
{
|
||
new EmployeeDal() { EmployeeId = Guid.NewGuid(), BirthDate = DateTime.Today.AddDays(-100), CompanyId = Companies[rand.Next(Companies.Length)].CompanyId, FullName = "Миронов Евгений Олегович", Position = "Ведущий разработчик" },
|
||
new EmployeeDal() { EmployeeId = Guid.NewGuid(), BirthDate = DateTime.Today.AddDays(-150), CompanyId = Companies[rand.Next(Companies.Length)].CompanyId, FullName = "Сидоров Петр Иванович", Position = "Уборщик" }
|
||
};
|
||
}
|
||
}
|
||
|