From 9968ccb541ca8254fbc869fcf55102e6fa207343 Mon Sep 17 00:00:00 2001 From: "DESKTOP-T0O5CDB\\DESK-555BD" Date: Sat, 26 Apr 2025 09:11:40 -0600 Subject: [PATCH] add put API --- Controllers/APIController.cs | 84 +++++++++++++++++++++++++++++++++++- 1 file changed, 83 insertions(+), 1 deletion(-) diff --git a/Controllers/APIController.cs b/Controllers/APIController.cs index a4a8c5b..6ba0072 100644 --- a/Controllers/APIController.cs +++ b/Controllers/APIController.cs @@ -1504,6 +1504,7 @@ namespace CarCareTracker.Controllers } } #endregion + #region ReminderRecord [TypeFilter(typeof(CollaboratorFilter))] [HttpGet] [Route("/api/vehicle/reminders")] @@ -1587,7 +1588,7 @@ namespace CarCareTracker.Controllers Mileage = parsedOdometer, Date = parsedDate, Metric = parsedMetric, - Notes = input.Notes, + Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes, Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List() : input.Tags.Split(' ').Distinct().ToList() }; _reminderRecordDataAccess.SaveReminderRecordToVehicle(reminderRecord); @@ -1600,6 +1601,86 @@ namespace CarCareTracker.Controllers return Json(OperationResponse.Failed(ex.Message)); } } + [HttpPut] + [Route("/api/vehicle/reminders/update")] + [Consumes("application/json")] + public IActionResult UpdateReminderRecordJson([FromBody] ReminderExportModel input) => UpdateReminderRecord(input); + [HttpPut] + [Route("/api/vehicle/reminders/update")] + public IActionResult UpdateReminderRecord(ReminderExportModel input) + { + if (string.IsNullOrWhiteSpace(input.Id) || + string.IsNullOrWhiteSpace(input.Description) || + string.IsNullOrWhiteSpace(input.Metric)) + { + Response.StatusCode = 400; + return Json(OperationResponse.Failed("Input object invalid, Id, Description and Metric cannot be empty.")); + } + bool validMetric = Enum.TryParse(input.Metric, out ReminderMetric parsedMetric); + bool validDate = DateTime.TryParse(input.DueDate, out DateTime parsedDate); + bool validOdometer = int.TryParse(input.DueOdometer, out int parsedOdometer); + if (!validMetric) + { + Response.StatusCode = 400; + return Json(OperationResponse.Failed("Input object invalid, values for Metric(Date, Odometer, Both) is invalid.")); + } + //validate metrics + switch (parsedMetric) + { + case ReminderMetric.Both: + //validate due date and odometer + if (!validDate || !validOdometer) + { + return Json(OperationResponse.Failed("Input object invalid, DueDate and DueOdometer must be valid if Metric is Both")); + } + break; + case ReminderMetric.Date: + if (!validDate) + { + return Json(OperationResponse.Failed("Input object invalid, DueDate must be valid if Metric is Date")); + } + break; + case ReminderMetric.Odometer: + if (!validOdometer) + { + return Json(OperationResponse.Failed("Input object invalid, DueOdometer must be valid if Metric is Odometer")); + } + break; + } + try + { + //retrieve existing record + var existingRecord = _reminderRecordDataAccess.GetReminderRecordById(int.Parse(input.Id)); + if (existingRecord != null && existingRecord.Id == int.Parse(input.Id)) + { + //check if user has access to the vehicleId + if (!_userLogic.UserCanEditVehicle(GetUserID(), existingRecord.VehicleId)) + { + Response.StatusCode = 401; + return Json(OperationResponse.Failed("Access Denied, you don't have access to this vehicle.")); + } + existingRecord.Date = parsedDate; + existingRecord.Mileage = parsedOdometer; + existingRecord.Description = input.Description; + existingRecord.Metric = parsedMetric; + existingRecord.Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes; + existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List() : input.Tags.Split(' ').Distinct().ToList(); + _reminderRecordDataAccess.SaveReminderRecordToVehicle(existingRecord); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromReminderRecord(existingRecord, "reminderrecord.update.api", User.Identity.Name)); + } + else + { + Response.StatusCode = 400; + return Json(OperationResponse.Failed("Invalid Record Id")); + } + return Json(OperationResponse.Succeed("Reminder Record Updated")); + } + catch (Exception ex) + { + Response.StatusCode = 500; + return Json(OperationResponse.Failed(ex.Message)); + } + } [HttpGet] [Route("/api/calendar")] public IActionResult Calendar() @@ -1613,6 +1694,7 @@ namespace CarCareTracker.Controllers var calendarContent = StaticHelper.RemindersToCalendar(reminders); return File(calendarContent, "text/calendar"); } + #endregion [HttpPost] [Route("/api/documents/upload")] public IActionResult UploadDocument(List documents)