- commit
- f8508a5
- parent
- 203e3ad
- author
- CheddarCrisp
- date
- 2024-02-12 20:12:30 +0100 CET
Extract service code
3 files changed,
+65,
-37
+7,
-34
1@@ -26,57 +26,30 @@ if (app.Environment.IsDevelopment())
2 app.UseCors();
3
4 var repo = new TodoRepo();
5+var service = new TodoService(BASE_URL, repo);
6
7-app.MapGet("/", () =>
8-{
9- return repo.All().Select(x => MapTodo(x));
10-})
11+app.MapGet("/", service.All)
12 .WithName("GetTodos")
13 .WithOpenApi();
14
15-app.MapGet("/{id}", (Guid id) =>
16-{
17- return MapTodo(repo.Find(id));
18-})
19+app.MapGet("/{id}", service.Find)
20 .WithName("GetTodo")
21 .WithOpenApi();
22
23-app.MapPost("/", (Todo todo) =>
24-{
25- return MapTodo(repo.Add(todo));
26-})
27+app.MapPost("/", service.Add)
28 .WithName("CreateTodo")
29 .WithOpenApi();
30
31-app.MapDelete("/", () => {
32- repo.Clear();
33-})
34+app.MapDelete("/", service.Clear)
35 .WithName("DeleteTodos")
36 .WithOpenApi();
37
38-app.MapPatch("/{id}", (Guid id, ApiTodo todo) =>
39-{
40- return MapTodo(repo.Update(id, todo.Title, todo.Order, todo.Completed));
41-})
42+app.MapPatch("/{id}", service.Update)
43 .WithName("UpdateTodo")
44 .WithOpenApi();
45
46-app.MapDelete("/{id}", (Guid id) => {
47- repo.Delete(id);
48-})
49+app.MapDelete("/{id}", service.Delete)
50 .WithName("DeleteTodo")
51 .WithOpenApi();
52
53 app.Run(BASE_URL);
54-
55-ApiTodo MapTodo(Todo todo) {
56- return new(
57- todo.Order,
58- todo.Title,
59- todo.Completed,
60- $"{BASE_URL}/{todo.Id}"
61- );
62-}
63-
64-public record ApiTodo(int? Order, string? Title, bool? Completed, string Url);
65-
+2,
-3
1@@ -4,9 +4,8 @@ public class TodoRepo {
2 private List<Todo> todos = new();
3
4 public Todo Add(Todo todo) {
5- var newTodo = todo with { Id = Guid.NewGuid() };
6- todos.Add(newTodo);
7- return newTodo;
8+ todos.Add(todo);
9+ return todo;
10 }
11
12 public IEnumerable<Todo> All() {
+56,
-0
1@@ -0,0 +1,56 @@
2+using System.Text;
3+
4+public record TodoDTO(int? Order, string? Title, bool? Completed, string Url);
5+
6+public class TodoService {
7+ private string baseUrl;
8+ private TodoRepo repo;
9+ public TodoService(string baseUrl, TodoRepo repo) {
10+ this.baseUrl = baseUrl;
11+ this.repo = repo;
12+ }
13+
14+ public IEnumerable<TodoDTO> All() {
15+ return repo.All().Select(MapTodo);
16+ }
17+
18+ public TodoDTO Find(Guid id) {
19+ return MapTodo(
20+ repo.Find(id)
21+ );
22+ }
23+
24+ public TodoDTO Add(TodoDTO todo) {
25+ return MapTodo(
26+ repo.Add(new(
27+ Guid.NewGuid(),
28+ todo.Order ?? 0,
29+ todo.Title ?? "default",
30+ todo.Completed ?? false
31+ ))
32+ );
33+ }
34+
35+ public void Clear() {
36+ repo.Clear();
37+ }
38+
39+ public TodoDTO Update(Guid id, TodoDTO todo) {
40+ return MapTodo(
41+ repo.Update(id, todo.Title, todo.Order, todo.Completed)
42+ );
43+ }
44+
45+ public void Delete(Guid id) {
46+ repo.Delete(id);
47+ }
48+
49+ private TodoDTO MapTodo(Todo todo) {
50+ return new(
51+ todo.Order,
52+ todo.Title,
53+ todo.Completed,
54+ $"{baseUrl}/{todo.Id}"
55+ );
56+ }
57+}