Extract service code
This commit is contained in:
parent
203e3adde0
commit
f8508a5da4
3 changed files with 65 additions and 37 deletions
|
@ -26,57 +26,30 @@ if (app.Environment.IsDevelopment())
|
|||
app.UseCors();
|
||||
|
||||
var repo = new TodoRepo();
|
||||
var service = new TodoService(BASE_URL, repo);
|
||||
|
||||
app.MapGet("/", () =>
|
||||
{
|
||||
return repo.All().Select(x => MapTodo(x));
|
||||
})
|
||||
app.MapGet("/", service.All)
|
||||
.WithName("GetTodos")
|
||||
.WithOpenApi();
|
||||
|
||||
app.MapGet("/{id}", (Guid id) =>
|
||||
{
|
||||
return MapTodo(repo.Find(id));
|
||||
})
|
||||
app.MapGet("/{id}", service.Find)
|
||||
.WithName("GetTodo")
|
||||
.WithOpenApi();
|
||||
|
||||
app.MapPost("/", (Todo todo) =>
|
||||
{
|
||||
return MapTodo(repo.Add(todo));
|
||||
})
|
||||
app.MapPost("/", service.Add)
|
||||
.WithName("CreateTodo")
|
||||
.WithOpenApi();
|
||||
|
||||
app.MapDelete("/", () => {
|
||||
repo.Clear();
|
||||
})
|
||||
app.MapDelete("/", service.Clear)
|
||||
.WithName("DeleteTodos")
|
||||
.WithOpenApi();
|
||||
|
||||
app.MapPatch("/{id}", (Guid id, ApiTodo todo) =>
|
||||
{
|
||||
return MapTodo(repo.Update(id, todo.Title, todo.Order, todo.Completed));
|
||||
})
|
||||
app.MapPatch("/{id}", service.Update)
|
||||
.WithName("UpdateTodo")
|
||||
.WithOpenApi();
|
||||
|
||||
app.MapDelete("/{id}", (Guid id) => {
|
||||
repo.Delete(id);
|
||||
})
|
||||
app.MapDelete("/{id}", service.Delete)
|
||||
.WithName("DeleteTodo")
|
||||
.WithOpenApi();
|
||||
|
||||
app.Run(BASE_URL);
|
||||
|
||||
ApiTodo MapTodo(Todo todo) {
|
||||
return new(
|
||||
todo.Order,
|
||||
todo.Title,
|
||||
todo.Completed,
|
||||
$"{BASE_URL}/{todo.Id}"
|
||||
);
|
||||
}
|
||||
|
||||
public record ApiTodo(int? Order, string? Title, bool? Completed, string Url);
|
||||
|
||||
|
|
|
@ -4,9 +4,8 @@ public class TodoRepo {
|
|||
private List<Todo> todos = new();
|
||||
|
||||
public Todo Add(Todo todo) {
|
||||
var newTodo = todo with { Id = Guid.NewGuid() };
|
||||
todos.Add(newTodo);
|
||||
return newTodo;
|
||||
todos.Add(todo);
|
||||
return todo;
|
||||
}
|
||||
|
||||
public IEnumerable<Todo> All() {
|
||||
|
|
56
TodoMinimal.WebApi/TodoService.cs
Normal file
56
TodoMinimal.WebApi/TodoService.cs
Normal file
|
@ -0,0 +1,56 @@
|
|||
using System.Text;
|
||||
|
||||
public record TodoDTO(int? Order, string? Title, bool? Completed, string Url);
|
||||
|
||||
public class TodoService {
|
||||
private string baseUrl;
|
||||
private TodoRepo repo;
|
||||
public TodoService(string baseUrl, TodoRepo repo) {
|
||||
this.baseUrl = baseUrl;
|
||||
this.repo = repo;
|
||||
}
|
||||
|
||||
public IEnumerable<TodoDTO> All() {
|
||||
return repo.All().Select(MapTodo);
|
||||
}
|
||||
|
||||
public TodoDTO Find(Guid id) {
|
||||
return MapTodo(
|
||||
repo.Find(id)
|
||||
);
|
||||
}
|
||||
|
||||
public TodoDTO Add(TodoDTO todo) {
|
||||
return MapTodo(
|
||||
repo.Add(new(
|
||||
Guid.NewGuid(),
|
||||
todo.Order ?? 0,
|
||||
todo.Title ?? "default",
|
||||
todo.Completed ?? false
|
||||
))
|
||||
);
|
||||
}
|
||||
|
||||
public void Clear() {
|
||||
repo.Clear();
|
||||
}
|
||||
|
||||
public TodoDTO Update(Guid id, TodoDTO todo) {
|
||||
return MapTodo(
|
||||
repo.Update(id, todo.Title, todo.Order, todo.Completed)
|
||||
);
|
||||
}
|
||||
|
||||
public void Delete(Guid id) {
|
||||
repo.Delete(id);
|
||||
}
|
||||
|
||||
private TodoDTO MapTodo(Todo todo) {
|
||||
return new(
|
||||
todo.Order,
|
||||
todo.Title,
|
||||
todo.Completed,
|
||||
$"{baseUrl}/{todo.Id}"
|
||||
);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue