public async Task <IActionResult> ClaimScheduledShiftAssignment(int scheduledShiftAssignmentId) { var now = _clock.UtcNow.UtcDateTime; var assignment = await _shiftRepository.GetScheduledShiftAssignment(scheduledShiftAssignmentId); var shift = await _shiftRepository.GetScheduledShift(assignment.ScheduledShiftId); //if the user is in the patrol and the shift is in the future if (User.PatrolIds().Any(x => x == shift.PatrolId) && now < shift.StartsAt) { await _scheduleService.ClaimShift(scheduledShiftAssignmentId, User.UserId()); //HACK: get the dto but no repo method exists to get a ssadto by id... var assignmentDtos = await _shiftRepository.GetScheduledShiftAssignments(shift.PatrolId, scheduledShiftId : shift.Id); var assignmentDto = assignmentDtos.Single(x => x.Id == assignment.Id); return(Ok(assignmentDto)); } else { return(Forbid()); } }