1+ using Microsoft . AspNetCore . Http . Extensions ;
2+ using System . Security . Claims ;
3+
4+ namespace React . Api ;
5+
6+ public static class TodoEndpointGroup
7+ {
8+ private static readonly List < ToDo > data = new List < ToDo > ( )
9+ {
10+ new ToDo { Id = ToDo . NewId ( ) , Date = DateTimeOffset . UtcNow , Name = "Demo ToDo API" , User = "2 (Bob Smith)" } ,
11+ new ToDo { Id = ToDo . NewId ( ) , Date = DateTimeOffset . UtcNow . AddHours ( 1 ) , Name = "Stop Demo" , User = "2 (Bob Smith)" } ,
12+ new ToDo { Id = ToDo . NewId ( ) , Date = DateTimeOffset . UtcNow . AddHours ( 4 ) , Name = "Have Dinner" , User = "1 (Alice Smith)" } ,
13+ } ;
14+
15+ public static RouteGroupBuilder ToDoGroup ( this RouteGroupBuilder group )
16+ {
17+ // GET
18+ group . MapGet ( "/" , ( ) => data ) ;
19+ group . MapGet ( "/{id}" , ( int id ) =>
20+ {
21+ var item = data . FirstOrDefault ( x => x . Id == id ) ;
22+ } ) ;
23+
24+ // POST
25+ group . MapPost ( "/" , ( ToDo model , ClaimsPrincipal user , HttpContext context ) =>
26+ {
27+ model . Id = ToDo . NewId ( ) ;
28+ model . User = $ "{ user . FindFirst ( "sub" ) ? . Value } ({ user . FindFirst ( "name" ) ? . Value } )";
29+
30+ data . Add ( model ) ;
31+
32+ var url = new Uri ( $ "{ context . Request . GetEncodedUrl ( ) } /{ model . Id } ") ;
33+
34+ return Results . Created ( url , model ) ;
35+ } ) ;
36+
37+ // PUT
38+ group . MapPut ( "/{id}" , ( int id , ToDo model , ClaimsPrincipal User ) =>
39+ {
40+ var item = data . FirstOrDefault ( x => x . Id == id ) ;
41+ if ( item == null ) return Results . NotFound ( ) ;
42+
43+ item . Date = model . Date ;
44+ item . Name = model . Name ;
45+
46+ return Results . NoContent ( ) ;
47+ } ) ;
48+
49+ // DELETE
50+ group . MapDelete ( "/{id}" , ( int id ) =>
51+ {
52+ var item = data . FirstOrDefault ( x => x . Id == id ) ;
53+ if ( item == null ) return Results . NotFound ( ) ;
54+
55+ data . Remove ( item ) ;
56+
57+ return Results . NoContent ( ) ;
58+ } ) ;
59+
60+ return group ;
61+ }
62+ }
63+
64+ public class ToDo
65+ {
66+ static int _nextId = 1 ;
67+ public static int NewId ( )
68+ {
69+ return _nextId ++ ;
70+ }
71+
72+ public int Id { get ; set ; }
73+ public DateTimeOffset Date { get ; set ; }
74+ public string ? Name { get ; set ; }
75+ public string ? User { get ; set ; }
76+ }
0 commit comments