@@ -34,10 +34,13 @@ public static void ConfigureExerciseEndpoints(this WebApplication app)
3434 var exercises = app . MapGroup ( "exercises" ) ;
3535 exercises . MapGet ( "/" , GetExercises ) . WithSummary ( "Returns all exercises" ) ;
3636 exercises . MapGet ( "/{id}" , GetExerciseById ) . WithSummary ( "Returns exercise with provided id" ) ;
37+ exercises . MapDelete ( "/{id}" , DeleteExerciseById ) . WithSummary ( "Deletes exercise with provided id" ) ;
38+ exercises . MapPut ( "/{id}" , UpdateExerciseById ) . WithSummary ( "Update exercise with provided id" ) ;
3739
3840 var units = app . MapGroup ( "units" ) ;
3941 units . MapGet ( "/" , GetUnits ) . WithSummary ( "Returns all units" ) ;
4042 units . MapGet ( "/{id}" , GetUnitById ) . WithSummary ( "Returns unit with provided id" ) ;
43+ units . MapPost ( "/{id}" , CreateExerciseInUnit ) . WithSummary ( "Create an exercise in the given unit" ) ;
4144
4245 var modules = app . MapGroup ( "modules" ) ;
4346 modules . MapGet ( "/" , GetModules ) . WithSummary ( "Returns all modules" ) ;
@@ -90,6 +93,85 @@ private static async Task<IResult> GetExercises(IRepository<Exercise> exerciseRe
9093 private static async Task < IResult > GetExerciseById ( IRepository < Exercise > exerciseRepository , int id )
9194 {
9295 var response = await exerciseRepository . GetByIdWithIncludes ( null , id ) ;
93- return TypedResults . Ok ( response ) ;
96+ var result = new Exercise_noUnit ( response ) ;
97+ return TypedResults . Ok ( result ) ;
98+ }
99+
100+ [ ProducesResponseType ( StatusCodes . Status200OK ) ]
101+ [ ProducesResponseType ( StatusCodes . Status401Unauthorized ) ]
102+ [ ProducesResponseType ( StatusCodes . Status404NotFound ) ]
103+ private static async Task < IResult > DeleteExerciseById ( IRepository < Exercise > exerciseRepository , ClaimsPrincipal claimsPrincipal , int id )
104+ {
105+ var authorized = claimsPrincipal . IsInRole ( "Teacher" ) ;
106+ if ( ! authorized )
107+ {
108+ return Results . Unauthorized ( ) ;
109+ }
110+
111+ var response = await exerciseRepository . GetByIdWithIncludes ( null , id ) ;
112+ if ( response == null )
113+ {
114+ return TypedResults . NotFound ( ) ;
115+ }
116+
117+ var result = new Exercise_noUnit ( response ) ;
118+ return TypedResults . Ok ( result ) ;
119+ }
120+
121+ private static async Task < IResult > UpdateExerciseById ( IRepository < Exercise > exerciseRepository , ClaimsPrincipal claimsPrincipal , int id , UpdateCreateExerciseDTO exerciseDTO )
122+ {
123+ var authorized = claimsPrincipal . IsInRole ( "Teacher" ) ;
124+ if ( ! authorized )
125+ {
126+ return Results . Unauthorized ( ) ;
127+ }
128+
129+ var response = await exerciseRepository . GetByIdWithIncludes ( null , id ) ;
130+ if ( response == null )
131+ {
132+ return TypedResults . NotFound ( ) ;
133+ }
134+
135+ response . Name = exerciseDTO . Name ;
136+ response . Description = exerciseDTO . Description ;
137+ response . GitHubLink = exerciseDTO . GitHubLink ;
138+
139+ exerciseRepository . Update ( response ) ;
140+ await exerciseRepository . SaveAsync ( ) ;
141+
142+ var result = new Exercise_noUnit ( response ) ;
143+ return TypedResults . Ok ( result ) ;
144+
94145 }
146+
147+ private static async Task < IResult > CreateExerciseInUnit (
148+ IRepository < Exercise > exerciseRepository ,
149+ IRepository < Unit > unitRepository ,
150+ ClaimsPrincipal claimsPrincipal ,
151+ int id ,
152+ UpdateCreateExerciseDTO exerciseDTO )
153+ {
154+ var authorized = claimsPrincipal . IsInRole ( "Teacher" ) ;
155+ if ( ! authorized )
156+ {
157+ return Results . Unauthorized ( ) ;
158+ }
159+
160+ var unit = await unitRepository . GetByIdWithIncludes ( null , id ) ;
161+ if ( unit == null )
162+ {
163+ return TypedResults . NotFound ( ) ;
164+ }
165+
166+ var newExercise = new Exercise { UnitId = id , Name = exerciseDTO . Name , GitHubLink = exerciseDTO . GitHubLink , Description = exerciseDTO . Description , Unit = unit } ;
167+ exerciseRepository . Insert ( newExercise ) ;
168+ await exerciseRepository . SaveAsync ( ) ;
169+
170+ var result = new Exercise_noUnit ( newExercise ) ;
171+ return TypedResults . Ok ( result ) ;
172+ }
173+
174+
175+
176+
95177}
0 commit comments