feat: add endpoint for schedule
This commit is contained in:
		| @@ -0,0 +1,29 @@ | ||||
| using Mirea.Api.Dto.Common; | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.ComponentModel.DataAnnotations; | ||||
|  | ||||
| namespace Mirea.Api.Dto.Requests.Configuration; | ||||
|  | ||||
| /// <summary> | ||||
| /// Represents a request to configure the schedule settings. | ||||
| /// </summary> | ||||
| public class ScheduleConfigurationRequest | ||||
| { | ||||
|     /// <summary> | ||||
|     /// Gets or sets the cron expression for updating the schedule. | ||||
|     /// </summary> | ||||
|     public string? CronUpdateSchedule { get; set; } | ||||
|  | ||||
|     /// <summary> | ||||
|     /// Gets or sets the start date of the term. | ||||
|     /// </summary> | ||||
|     [Required] | ||||
|     public DateOnly StartTerm { get; set; } | ||||
|  | ||||
|     /// <summary> | ||||
|     /// Gets or sets the pair period times, keyed by pair number. | ||||
|     /// </summary> | ||||
|     [Required] | ||||
|     public required IDictionary<int, PairPeriodTime> PairPeriod { get; set; } | ||||
| } | ||||
| @@ -1,5 +1,4 @@ | ||||
| using System; | ||||
| using System.Security.Cryptography; | ||||
| using Cronos; | ||||
| using Microsoft.AspNetCore.Http; | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Microsoft.Data.Sqlite; | ||||
| @@ -17,6 +16,10 @@ using Npgsql; | ||||
| using StackExchange.Redis; | ||||
| using System; | ||||
| using System.Data; | ||||
| using System.IO; | ||||
| using System.Runtime.InteropServices; | ||||
| using System.Security.Cryptography; | ||||
| using System.Text.Json; | ||||
|  | ||||
| namespace Mirea.Api.Endpoint.Controllers.Configuration; | ||||
|  | ||||
| @@ -240,6 +243,27 @@ public class SetupController(ISetupToken setupToken, IMaintenanceModeNotConfigur | ||||
|  | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     [HttpPost("SetSchedule")] | ||||
|     [TokenAuthentication] | ||||
|     [BadRequestResponse] | ||||
|     public ActionResult<bool> SetSchedule([FromBody] ScheduleConfigurationRequest request) | ||||
|     { | ||||
|         var general = GeneralConfig; | ||||
|         general.ScheduleSettings = new ScheduleSettings | ||||
|         { | ||||
|             // every 6 hours | ||||
|             CronUpdateSchedule = request.CronUpdateSchedule ?? "0 */6 * * *", | ||||
|             StartTerm = request.StartTerm, | ||||
|             PairPeriod = request.PairPeriod.ConvertFromDto() | ||||
|         }; | ||||
|  | ||||
|         if (!CronExpression.TryParse(general.ScheduleSettings.CronUpdateSchedule, CronFormat.Standard, out _)) | ||||
|             throw new ControllerArgumentException("The Cron task could not be parsed. Check the format of the entered data."); | ||||
|  | ||||
|         GeneralConfig = general; | ||||
|  | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user