Skip to content

Commit ebe0d27

Browse files
Exercise endpoint can get, delete, update and create correctly
1 parent e56e655 commit ebe0d27

File tree

3 files changed

+101
-1
lines changed

3 files changed

+101
-1
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using exercise.wwwapi.Models;
2+
3+
namespace exercise.wwwapi.DTOs.Exercises
4+
{
5+
public class UpdateCreateExerciseDTO
6+
{
7+
public string Name { get; set; }
8+
public string GitHubLink { get; set; }
9+
public string Description { get; set; }
10+
11+
}
12+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace exercise.wwwapi.DTOs
2+
{
3+
public class GetUserProfileDTO
4+
{
5+
}
6+
}

exercise.wwwapi/Endpoints/ExerciseEndpoints.cs

Lines changed: 83 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)