Added 3rd lab.
This commit is contained in:
parent
20210a36a6
commit
5d6e90ed32
BIN
labs/.DS_Store
vendored
Normal file
BIN
labs/.DS_Store
vendored
Normal file
Binary file not shown.
76
labs/lab_3/example_1.cs
Normal file
76
labs/lab_3/example_1.cs
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
List<TaskEntity> tasks = new()
|
||||||
|
{
|
||||||
|
new TaskEntity() { Uuid= Guid.NewGuid(), Subject = "Сдать третью лабу", IsCompleted = false },
|
||||||
|
};
|
||||||
|
|
||||||
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
var app = builder.Build();
|
||||||
|
|
||||||
|
// Массив сущностей.
|
||||||
|
app.MapGet("/", () =>
|
||||||
|
{
|
||||||
|
return tasks.Select(t => new TaskEntityDto()
|
||||||
|
{
|
||||||
|
Uuid = t.Uuid,
|
||||||
|
Subject = t.Subject,
|
||||||
|
IsCompleted = t.IsCompleted,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Подробности сущности.
|
||||||
|
app.MapGet("/{uuid}", (Guid uuid) =>
|
||||||
|
{
|
||||||
|
var task = tasks.FirstOrDefault(t => t.Uuid == uuid);
|
||||||
|
if (task == null)
|
||||||
|
return Results.NotFound();
|
||||||
|
return Results.Json(new TaskEntityDto()
|
||||||
|
{
|
||||||
|
Uuid = task.Uuid,
|
||||||
|
Subject = task.Subject,
|
||||||
|
IsCompleted = task.IsCompleted,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Создание сущности.
|
||||||
|
app.MapPost("/", () => { throw new NotImplementedException(); });
|
||||||
|
|
||||||
|
// Изменение сущности.
|
||||||
|
app.MapPut("/{uuid}", () => { throw new NotImplementedException(); });
|
||||||
|
|
||||||
|
// Удаление сущности.
|
||||||
|
app.MapPost("/", () => { throw new NotImplementedException(); });
|
||||||
|
|
||||||
|
app.Run();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Сама сущность.
|
||||||
|
/// </summary>
|
||||||
|
public class TaskEntity
|
||||||
|
{
|
||||||
|
public Guid Uuid { get; set; }
|
||||||
|
public string Subject { get; set; } = string.Empty;
|
||||||
|
public bool IsCompleted { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// DTO-класс для описания сущности в API.
|
||||||
|
/// </summary>
|
||||||
|
public class TaskEntityDto : TaskEntity { }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Запрос на создание сущности.
|
||||||
|
/// </summary>
|
||||||
|
public class TaskCreateRequest
|
||||||
|
{
|
||||||
|
public string Subject { get; set; } = string.Empty;
|
||||||
|
public bool IsCompleted { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Запрос на изменение сущности.
|
||||||
|
/// </summary>
|
||||||
|
public class TaskEditRequest
|
||||||
|
{
|
||||||
|
public string Subject { get; set; } = string.Empty;
|
||||||
|
public bool IsCompleted { get; set; }
|
||||||
|
}
|
26
labs/lab_3/example_2.cs
Normal file
26
labs/lab_3/example_2.cs
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
|
builder.Services.AddHttpClient(); // Добавляем библиотеку по работе с HTTP.
|
||||||
|
var app = builder.Build();
|
||||||
|
|
||||||
|
// Да, по заданию надо будет запрашивать метод /{uuid}. Тут запрашивается список.
|
||||||
|
app.MapGet("/", async (IHttpClientFactory httpClientFactory) =>
|
||||||
|
{
|
||||||
|
var remoteHost = "http://localhost:5158"; // Адрес, по которому развёрнут микросервис с задачами. В docker compose тут будет имя service.
|
||||||
|
var client = httpClientFactory.CreateClient();
|
||||||
|
var response = await client.GetFromJsonAsync<List<TaskEntityDto>>(remoteHost);
|
||||||
|
if (response == null)
|
||||||
|
return Results.BadRequest();
|
||||||
|
return Results.Ok($"Соседний микросервис отдал следующие задачи: {string.Join(", ", response.Select(i => i.Subject))}");
|
||||||
|
});
|
||||||
|
|
||||||
|
app.Run();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// DTO-класс для описания сущности из другого микросервиса.
|
||||||
|
/// </summary>
|
||||||
|
public class TaskEntityDto
|
||||||
|
{
|
||||||
|
public Guid Uuid { get; set; }
|
||||||
|
public string Subject { get; set; } = string.Empty;
|
||||||
|
public bool IsCompleted { get; set; }
|
||||||
|
}
|
21
labs/lab_3/example_nginx.conf
Normal file
21
labs/lab_3/example_nginx.conf
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
listen [::]:80;
|
||||||
|
server_name localhost;
|
||||||
|
|
||||||
|
location /test/ {
|
||||||
|
proxy_pass http://test:80/;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
proxy_set_header X-Forwarded-Prefix /test;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /admin/ {
|
||||||
|
proxy_pass http://admin:80/;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
proxy_set_header X-Forwarded-Prefix /admin;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user