public async Task ModifyMeetDay(int scheduleId, MeetDayModificationRequest request) { if (request.RescheduleMeetDay) { var savedSchedule = await GetSchedule(scheduleId); if (request.NewMeetDate.CompareTo(savedSchedule.EndDate) > 0) { throw new ValidationException($"The New Meet Date cannot fall after the Schedules End Date of {savedSchedule.EndDate.ToShortDateString()}"); } using (var connection = _iocDbConnectionFactory.GetReadOnlyConnection()) { var rescheduleMeetDayCheckSql = @" SELECT COUNT(*) FROM [dbo].[Attendance] WHERE [ProgramScheduleId] = @ScheduleId AND [MeetDay] = @NewMeetDate; "; var hasMeetDayOnRescheduledDate = await connection.QueryFirstOrDefaultAsync <int>(rescheduleMeetDayCheckSql, new { scheduleId, request.NewMeetDate }) > 0; if (hasMeetDayOnRescheduledDate) { throw new Exception($"The Program already has a scheduled meet day on {request.NewMeetDate.ToShortDateString()}."); } } } var deleteSql = @" DELETE FROM [dbo].[Attendance] WHERE [ProgramScheduleId] = @ScheduleId AND MeetDay = @MeetDay; "; var modifySql = @" UPDATE [dbo].[Attendance] SET [MeetDay] = @NewMeetDay WHERE [ProgramScheduleId] = @ScheduleId AND [MeetDay] = @MeetDay; "; using (var connection = _iocDbConnectionFactory.GetReadWriteConnection()) { var affectedRows = await connection.ExecuteAsync( request.CancelMeetDay?deleteSql : modifySql, new { ScheduleId = scheduleId, MeetDay = request.MeetDate, NewMeetday = request.NewMeetDate }); if (affectedRows == 0) { throw new Exception("An unknown error occured."); } } }
public async Task <ActionResult> ModifyMeetDay([FromRoute] int scheduleId, [FromBody] MeetDayModificationRequest request) { await _scheduleService.ModifyMeetDay(scheduleId, request); return(Ok(true)); }