Fix task and shift self-assignment features
This commit is contained in:
@@ -42,20 +42,24 @@ public static class ShiftEndpoints
|
||||
|
||||
private static async Task<Ok<ShiftListDto>> GetShifts(
|
||||
ShiftService shiftService,
|
||||
HttpContext httpContext,
|
||||
[FromQuery] DateTimeOffset? from = null,
|
||||
[FromQuery] DateTimeOffset? to = null,
|
||||
[FromQuery] int page = 1,
|
||||
[FromQuery] int pageSize = 20)
|
||||
{
|
||||
var result = await shiftService.GetShiftsAsync(from, to, page, pageSize);
|
||||
var externalUserId = httpContext.User.FindFirst("sub")?.Value;
|
||||
var result = await shiftService.GetShiftsAsync(from, to, page, pageSize, externalUserId);
|
||||
return TypedResults.Ok(result);
|
||||
}
|
||||
|
||||
private static async Task<Results<Ok<ShiftDetailDto>, NotFound>> GetShift(
|
||||
Guid id,
|
||||
ShiftService shiftService)
|
||||
ShiftService shiftService,
|
||||
HttpContext httpContext)
|
||||
{
|
||||
var result = await shiftService.GetShiftByIdAsync(id);
|
||||
var externalUserId = httpContext.User.FindFirst("sub")?.Value;
|
||||
var result = await shiftService.GetShiftByIdAsync(id, externalUserId);
|
||||
|
||||
if (result == null)
|
||||
return TypedResults.NotFound();
|
||||
@@ -85,9 +89,11 @@ public static class ShiftEndpoints
|
||||
private static async Task<Results<Ok<ShiftDetailDto>, NotFound, Conflict<string>>> UpdateShift(
|
||||
Guid id,
|
||||
UpdateShiftRequest request,
|
||||
ShiftService shiftService)
|
||||
ShiftService shiftService,
|
||||
HttpContext httpContext)
|
||||
{
|
||||
var (shift, error, isConflict) = await shiftService.UpdateShiftAsync(id, request);
|
||||
var externalUserId = httpContext.User.FindFirst("sub")?.Value;
|
||||
var (shift, error, isConflict) = await shiftService.UpdateShiftAsync(id, request, externalUserId);
|
||||
|
||||
if (error != null)
|
||||
{
|
||||
|
||||
@@ -30,23 +30,35 @@ public static class TaskEndpoints
|
||||
group.MapDelete("{id:guid}", DeleteTask)
|
||||
.RequireAuthorization("RequireAdmin")
|
||||
.WithName("DeleteTask");
|
||||
|
||||
group.MapPost("{id:guid}/assign", AssignTaskToMe)
|
||||
.RequireAuthorization("RequireMember")
|
||||
.WithName("AssignTaskToMe");
|
||||
|
||||
group.MapDelete("{id:guid}/assign", UnassignTaskFromMe)
|
||||
.RequireAuthorization("RequireMember")
|
||||
.WithName("UnassignTaskFromMe");
|
||||
}
|
||||
|
||||
private static async Task<Ok<TaskListDto>> GetTasks(
|
||||
TaskService taskService,
|
||||
HttpContext httpContext,
|
||||
[FromQuery] string? status = null,
|
||||
[FromQuery] int page = 1,
|
||||
[FromQuery] int pageSize = 20)
|
||||
{
|
||||
var result = await taskService.GetTasksAsync(status, page, pageSize);
|
||||
var externalUserId = httpContext.User.FindFirst("sub")?.Value;
|
||||
var result = await taskService.GetTasksAsync(status, page, pageSize, externalUserId);
|
||||
return TypedResults.Ok(result);
|
||||
}
|
||||
|
||||
private static async Task<Results<Ok<TaskDetailDto>, NotFound>> GetTask(
|
||||
Guid id,
|
||||
TaskService taskService)
|
||||
TaskService taskService,
|
||||
HttpContext httpContext)
|
||||
{
|
||||
var result = await taskService.GetTaskByIdAsync(id);
|
||||
var externalUserId = httpContext.User.FindFirst("sub")?.Value;
|
||||
var result = await taskService.GetTaskByIdAsync(id, externalUserId);
|
||||
|
||||
if (result == null)
|
||||
return TypedResults.NotFound();
|
||||
@@ -76,9 +88,11 @@ public static class TaskEndpoints
|
||||
private static async Task<Results<Ok<TaskDetailDto>, NotFound, UnprocessableEntity<string>, Conflict<string>>> UpdateTask(
|
||||
Guid id,
|
||||
UpdateTaskRequest request,
|
||||
TaskService taskService)
|
||||
TaskService taskService,
|
||||
HttpContext httpContext)
|
||||
{
|
||||
var (task, error, isConflict) = await taskService.UpdateTaskAsync(id, request);
|
||||
var externalUserId = httpContext.User.FindFirst("sub")?.Value;
|
||||
var (task, error, isConflict) = await taskService.UpdateTaskAsync(id, request, externalUserId);
|
||||
|
||||
if (error != null)
|
||||
{
|
||||
@@ -105,4 +119,42 @@ public static class TaskEndpoints
|
||||
|
||||
return TypedResults.NoContent();
|
||||
}
|
||||
|
||||
private static async Task<Results<Ok, BadRequest<string>, NotFound>> AssignTaskToMe(
|
||||
Guid id,
|
||||
TaskService taskService,
|
||||
HttpContext httpContext)
|
||||
{
|
||||
var externalUserId = httpContext.User.FindFirst("sub")?.Value;
|
||||
if (externalUserId == null) return TypedResults.BadRequest("Invalid user");
|
||||
|
||||
var (success, error) = await taskService.AssignToMeAsync(id, externalUserId);
|
||||
|
||||
if (!success)
|
||||
{
|
||||
if (error == "Task not found") return TypedResults.NotFound();
|
||||
return TypedResults.BadRequest(error ?? "Failed to assign task");
|
||||
}
|
||||
|
||||
return TypedResults.Ok();
|
||||
}
|
||||
|
||||
private static async Task<Results<Ok, BadRequest<string>, NotFound>> UnassignTaskFromMe(
|
||||
Guid id,
|
||||
TaskService taskService,
|
||||
HttpContext httpContext)
|
||||
{
|
||||
var externalUserId = httpContext.User.FindFirst("sub")?.Value;
|
||||
if (externalUserId == null) return TypedResults.BadRequest("Invalid user");
|
||||
|
||||
var (success, error) = await taskService.UnassignFromMeAsync(id, externalUserId);
|
||||
|
||||
if (!success)
|
||||
{
|
||||
if (error == "Task not found") return TypedResults.NotFound();
|
||||
return TypedResults.BadRequest(error ?? "Failed to unassign task");
|
||||
}
|
||||
|
||||
return TypedResults.Ok();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user