Extract service code

This commit is contained in:
CheddarCrisp 2024-02-12 14:12:30 -05:00
parent 203e3adde0
commit f8508a5da4
3 changed files with 65 additions and 37 deletions

View file

@ -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);

View file

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

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