diff --git a/Controllers/APIController.cs b/Controllers/APIController.cs index 0e01379..2499f81 100644 --- a/Controllers/APIController.cs +++ b/Controllers/APIController.cs @@ -220,7 +220,7 @@ namespace CarCareTracker.Controllers }; _odometerLogic.AutoInsertOdometerRecord(odometerRecord); } - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), vehicleId, User.Identity.Name, $"Added Service Record via API - Description: {serviceRecord.Description}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromGenericRecord(serviceRecord, "servicerecord.add.api", User.Identity.Name)); return Json(OperationResponse.Succeed("Service Record Added")); } catch (Exception ex) @@ -266,7 +266,7 @@ namespace CarCareTracker.Controllers existingRecord.ExtraFields = input.ExtraFields; existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List() : input.Tags.Split(' ').Distinct().ToList(); _serviceRecordDataAccess.SaveServiceRecordToVehicle(existingRecord); - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), existingRecord.VehicleId, User.Identity.Name, $"Updated Service Record via API - Description: {existingRecord.Description}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromGenericRecord(existingRecord, "servicerecord.update.api", User.Identity.Name)); } else { Response.StatusCode = 400; @@ -352,7 +352,8 @@ namespace CarCareTracker.Controllers }; _odometerLogic.AutoInsertOdometerRecord(odometerRecord); } - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), vehicleId, User.Identity.Name, $"Added Repair Record via API - Description: {repairRecord.Description}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromGenericRecord(repairRecord, "repairrecord.add.api", User.Identity.Name)); + return Json(OperationResponse.Succeed("Repair Record Added")); } catch (Exception ex) @@ -398,7 +399,7 @@ namespace CarCareTracker.Controllers existingRecord.ExtraFields = input.ExtraFields; existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List() : input.Tags.Split(' ').Distinct().ToList(); _collisionRecordDataAccess.SaveCollisionRecordToVehicle(existingRecord); - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), existingRecord.VehicleId, User.Identity.Name, $"Updated Repair Record via API - Description: {existingRecord.Description}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromGenericRecord(existingRecord, "repairrecord.update.api", User.Identity.Name)); } else { @@ -485,7 +486,7 @@ namespace CarCareTracker.Controllers }; _odometerLogic.AutoInsertOdometerRecord(odometerRecord); } - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), vehicleId, User.Identity.Name, $"Added Upgrade Record via API - Description: {upgradeRecord.Description}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromGenericRecord(upgradeRecord, "upgraderecord.add.api", User.Identity.Name)); return Json(OperationResponse.Succeed("Upgrade Record Added")); } catch (Exception ex) @@ -531,7 +532,7 @@ namespace CarCareTracker.Controllers existingRecord.ExtraFields = input.ExtraFields; existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List() : input.Tags.Split(' ').Distinct().ToList(); _upgradeRecordDataAccess.SaveUpgradeRecordToVehicle(existingRecord); - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), existingRecord.VehicleId, User.Identity.Name, $"Updated Upgrade Record via API - Description: {existingRecord.Description}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromGenericRecord(existingRecord, "upgraderecord.update.api", User.Identity.Name)); } else { @@ -640,7 +641,7 @@ namespace CarCareTracker.Controllers }; _taxRecordDataAccess.SaveTaxRecordToVehicle(taxRecord); _vehicleLogic.UpdateRecurringTaxes(vehicleId); - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), vehicleId, User.Identity.Name, $"Added Tax Record via API - Description: {taxRecord.Description}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromTaxRecord(taxRecord, "taxrecord.add.api", User.Identity.Name)); return Json(OperationResponse.Succeed("Tax Record Added")); } catch (Exception ex) @@ -684,7 +685,7 @@ namespace CarCareTracker.Controllers existingRecord.ExtraFields = input.ExtraFields; existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List() : input.Tags.Split(' ').Distinct().ToList(); _taxRecordDataAccess.SaveTaxRecordToVehicle(existingRecord); - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), existingRecord.VehicleId, User.Identity.Name, $"Updated Tax Record via API - Description: {existingRecord.Description}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromTaxRecord(existingRecord, "taxrecord.update.api", User.Identity.Name)); } else { @@ -776,7 +777,7 @@ namespace CarCareTracker.Controllers Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List() : input.Tags.Split(' ').Distinct().ToList() }; _odometerRecordDataAccess.SaveOdometerRecordToVehicle(odometerRecord); - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), vehicleId, User.Identity.Name, $"Added Odometer Record via API - Mileage: {odometerRecord.Mileage.ToString()}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromOdometerRecord(odometerRecord, "odometerrecord.add.api", User.Identity.Name)); return Json(OperationResponse.Succeed("Odometer Record Added")); } catch (Exception ex) { @@ -819,7 +820,7 @@ namespace CarCareTracker.Controllers existingRecord.ExtraFields = input.ExtraFields; existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List() : input.Tags.Split(' ').Distinct().ToList(); _odometerRecordDataAccess.SaveOdometerRecordToVehicle(existingRecord); - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), existingRecord.VehicleId, User.Identity.Name, $"Updated Odometer Record via API - Mileage: {existingRecord.Mileage.ToString()}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromOdometerRecord(existingRecord, "odometerrecord.update.api", User.Identity.Name)); } else { @@ -923,7 +924,7 @@ namespace CarCareTracker.Controllers }; _odometerLogic.AutoInsertOdometerRecord(odometerRecord); } - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), vehicleId, User.Identity.Name, $"Added Gas record via API - Mileage: {gasRecord.Mileage.ToString()}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromGasRecord(gasRecord, "gasrecord.add.api", User.Identity.Name)); return Json(OperationResponse.Succeed("Gas Record Added")); } catch (Exception ex) @@ -973,7 +974,7 @@ namespace CarCareTracker.Controllers existingRecord.ExtraFields = input.ExtraFields; existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List() : input.Tags.Split(' ').Distinct().ToList(); _gasRecordDataAccess.SaveGasRecordToVehicle(existingRecord); - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), existingRecord.VehicleId, User.Identity.Name, $"Updated Gas Record via API - Mileage: {existingRecord.Mileage.ToString()}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromGasRecord(existingRecord, "gasrecord.update.api", User.Identity.Name)); } else { diff --git a/Controllers/Vehicle/GasController.cs b/Controllers/Vehicle/GasController.cs index a379602..4380202 100644 --- a/Controllers/Vehicle/GasController.cs +++ b/Controllers/Vehicle/GasController.cs @@ -54,7 +54,7 @@ namespace CarCareTracker.Controllers var result = _gasRecordDataAccess.SaveGasRecordToVehicle(gasRecord.ToGasRecord()); if (result) { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), gasRecord.VehicleId, User.Identity.Name, $"{(gasRecord.Id == default ? "Created" : "Edited")} Gas Record - Mileage: {gasRecord.Mileage.ToString()}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromGasRecord(gasRecord.ToGasRecord(), gasRecord.Id == default ? "gasrecord.add" : "gasrecord.update", User.Identity.Name)); } return Json(result); } @@ -111,16 +111,16 @@ namespace CarCareTracker.Controllers return false; } var result = _gasRecordDataAccess.DeleteGasRecordById(existingRecord.Id); + if (result) + { + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromGasRecord(existingRecord, "gasrecord.delete", User.Identity.Name)); + } return result; } [HttpPost] public IActionResult DeleteGasRecordById(int gasRecordId) { var result = DeleteGasRecordWithChecks(gasRecordId); - if (result) - { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Deleted Gas Record - Id: {gasRecordId}"); - } return Json(result); } [HttpPost] diff --git a/Controllers/Vehicle/NoteController.cs b/Controllers/Vehicle/NoteController.cs index b84ed7b..f1552cd 100644 --- a/Controllers/Vehicle/NoteController.cs +++ b/Controllers/Vehicle/NoteController.cs @@ -35,7 +35,7 @@ namespace CarCareTracker.Controllers var result = _noteDataAccess.SaveNoteToVehicle(note); if (result) { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), note.VehicleId, User.Identity.Name, $"{(note.Id == default ? "Created" : "Edited")} Note - Description: {note.Description}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromNoteRecord(note, note.Id == default ? "noterecord.add" : "noterecord.update", User.Identity.Name)); } return Json(result); } @@ -64,16 +64,16 @@ namespace CarCareTracker.Controllers return false; } var result = _noteDataAccess.DeleteNoteById(existingRecord.Id); + if (result) + { + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromNoteRecord(existingRecord, "noterecord.delete", User.Identity.Name)); + } return result; } [HttpPost] public IActionResult DeleteNoteById(int noteId) { var result = DeleteNoteWithChecks(noteId); - if (result) - { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Deleted Note - Id: {noteId}"); - } return Json(result); } [HttpPost] diff --git a/Controllers/Vehicle/OdometerController.cs b/Controllers/Vehicle/OdometerController.cs index f291b6a..cb645c8 100644 --- a/Controllers/Vehicle/OdometerController.cs +++ b/Controllers/Vehicle/OdometerController.cs @@ -49,7 +49,7 @@ namespace CarCareTracker.Controllers var result = _odometerRecordDataAccess.SaveOdometerRecordToVehicle(odometerRecord.ToOdometerRecord()); if (result) { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), odometerRecord.VehicleId, User.Identity.Name, $"{(odometerRecord.Id == default ? "Created" : "Edited")} Odometer Record - Mileage: {odometerRecord.Mileage.ToString()}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromOdometerRecord(odometerRecord.ToOdometerRecord(), odometerRecord.Id == default ? "odometerrecord.add" : "odometerrecord.update", User.Identity.Name)); } return Json(result); } @@ -160,16 +160,16 @@ namespace CarCareTracker.Controllers return false; } var result = _odometerRecordDataAccess.DeleteOdometerRecordById(existingRecord.Id); + if (result) + { + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromOdometerRecord(existingRecord, "odometerrecord.delete", User.Identity.Name)); + } return result; } [HttpPost] public IActionResult DeleteOdometerRecordById(int odometerRecordId) { var result = DeleteOdometerRecordWithChecks(odometerRecordId); - if (result) - { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Deleted Odometer Record - Id: {odometerRecordId}"); - } return Json(result); } } diff --git a/Controllers/Vehicle/PlanController.cs b/Controllers/Vehicle/PlanController.cs index adb9085..e161bf7 100644 --- a/Controllers/Vehicle/PlanController.cs +++ b/Controllers/Vehicle/PlanController.cs @@ -45,7 +45,7 @@ namespace CarCareTracker.Controllers var result = _planRecordDataAccess.SavePlanRecordToVehicle(planRecord.ToPlanRecord()); if (result) { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), planRecord.VehicleId, User.Identity.Name, $"{(planRecord.Id == default ? "Created" : "Edited")} Plan Record - Description: {planRecord.Description}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromPlanRecord(planRecord.ToPlanRecord(), planRecord.Id == default ? "planrecord.add" : "planrecord.update", User.Identity.Name)); } return Json(result); } @@ -316,7 +316,7 @@ namespace CarCareTracker.Controllers var result = _planRecordDataAccess.DeletePlanRecordById(existingRecord.Id); if (result) { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Deleted Plan Record - Id: {planRecordId}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromPlanRecord(existingRecord, "planrecord.delete", User.Identity.Name)); } return Json(result); } diff --git a/Controllers/Vehicle/ReminderController.cs b/Controllers/Vehicle/ReminderController.cs index 6a316de..cb9721c 100644 --- a/Controllers/Vehicle/ReminderController.cs +++ b/Controllers/Vehicle/ReminderController.cs @@ -114,7 +114,7 @@ namespace CarCareTracker.Controllers var result = _reminderRecordDataAccess.SaveReminderRecordToVehicle(reminderRecord.ToReminderRecord()); if (result) { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), reminderRecord.VehicleId, User.Identity.Name, $"{(reminderRecord.Id == default ? "Created" : "Edited")} Reminder - Description: {reminderRecord.Description}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromReminderRecord(reminderRecord.ToReminderRecord(), reminderRecord.Id == default ? "reminderrecord.add" : "reminderrecord.update", User.Identity.Name)); } return Json(result); } @@ -169,16 +169,16 @@ namespace CarCareTracker.Controllers return false; } var result = _reminderRecordDataAccess.DeleteReminderRecordById(existingRecord.Id); + if (result) + { + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromReminderRecord(existingRecord, "reminderrecord.delete", User.Identity.Name)); + } return result; } [HttpPost] public IActionResult DeleteReminderRecordById(int reminderRecordId) { var result = DeleteReminderRecordWithChecks(reminderRecordId); - if (result) - { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Deleted Reminder - Id: {reminderRecordId}"); - } return Json(result); } } diff --git a/Controllers/Vehicle/RepairController.cs b/Controllers/Vehicle/RepairController.cs index eaea6e9..0d74123 100644 --- a/Controllers/Vehicle/RepairController.cs +++ b/Controllers/Vehicle/RepairController.cs @@ -66,7 +66,7 @@ namespace CarCareTracker.Controllers var result = _collisionRecordDataAccess.SaveCollisionRecordToVehicle(collisionRecord.ToCollisionRecord()); if (result) { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), collisionRecord.VehicleId, User.Identity.Name, $"{(collisionRecord.Id == default ? "Created" : "Edited")} Repair Record - Description: {collisionRecord.Description}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromGenericRecord(collisionRecord.ToCollisionRecord(), collisionRecord.Id == default ? "repairrecord.add" : "repairrecord.update", User.Identity.Name)); } return Json(result); } @@ -115,16 +115,16 @@ namespace CarCareTracker.Controllers RestoreSupplyRecordsByUsage(existingRecord.RequisitionHistory, existingRecord.Description); } var result = _collisionRecordDataAccess.DeleteCollisionRecordById(existingRecord.Id); + if (result) + { + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromGenericRecord(existingRecord, "repairrecord.delete", User.Identity.Name)); + } return result; } [HttpPost] public IActionResult DeleteCollisionRecordById(int collisionRecordId) { var result = DeleteCollisionRecordWithChecks(collisionRecordId); - if (result) - { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Deleted Repair Record - Id: {collisionRecordId}"); - } return Json(result); } } diff --git a/Controllers/Vehicle/ServiceController.cs b/Controllers/Vehicle/ServiceController.cs index 50f9e19..3cdafd8 100644 --- a/Controllers/Vehicle/ServiceController.cs +++ b/Controllers/Vehicle/ServiceController.cs @@ -66,7 +66,7 @@ namespace CarCareTracker.Controllers var result = _serviceRecordDataAccess.SaveServiceRecordToVehicle(serviceRecord.ToServiceRecord()); if (result) { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), serviceRecord.VehicleId, User.Identity.Name, $"{(serviceRecord.Id == default ? "Created" : "Edited")} Service Record - Description: {serviceRecord.Description}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromGenericRecord(serviceRecord.ToServiceRecord(), serviceRecord.Id == default ? "servicerecord.add" : "servicerecord.update", User.Identity.Name)); } return Json(result); } @@ -115,16 +115,16 @@ namespace CarCareTracker.Controllers RestoreSupplyRecordsByUsage(existingRecord.RequisitionHistory, existingRecord.Description); } var result = _serviceRecordDataAccess.DeleteServiceRecordById(existingRecord.Id); + if (result) + { + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromGenericRecord(existingRecord, "servicerecord.delete", User.Identity.Name)); + } return result; } [HttpPost] public IActionResult DeleteServiceRecordById(int serviceRecordId) { var result = DeleteServiceRecordWithChecks(serviceRecordId); - if (result) - { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Deleted Service Record - Id: {serviceRecordId}"); - } return Json(result); } } diff --git a/Controllers/Vehicle/SupplyController.cs b/Controllers/Vehicle/SupplyController.cs index 70e12c3..0162450 100644 --- a/Controllers/Vehicle/SupplyController.cs +++ b/Controllers/Vehicle/SupplyController.cs @@ -187,7 +187,7 @@ namespace CarCareTracker.Controllers var result = _supplyRecordDataAccess.SaveSupplyRecordToVehicle(supplyRecord.ToSupplyRecord()); if (result) { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), supplyRecord.VehicleId, User.Identity.Name, $"{(supplyRecord.Id == default ? "Created" : "Edited")} Supply Record - Description: {supplyRecord.Description}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromSupplyRecord(supplyRecord.ToSupplyRecord(), supplyRecord.Id == default ? "supplyrecord.add" : "supplyrecord.update", User.Identity.Name)); } return Json(result); } @@ -236,16 +236,16 @@ namespace CarCareTracker.Controllers } } var result = _supplyRecordDataAccess.DeleteSupplyRecordById(existingRecord.Id); + if (result) + { + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromSupplyRecord(existingRecord, "supplyrecord.delete", User.Identity.Name)); + } return result; } [HttpPost] public IActionResult DeleteSupplyRecordById(int supplyRecordId) { var result = DeleteSupplyRecordWithChecks(supplyRecordId); - if (result) - { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Deleted Supply Record - Id: {supplyRecordId}"); - } return Json(result); } } diff --git a/Controllers/Vehicle/TaxController.cs b/Controllers/Vehicle/TaxController.cs index 35d1355..e0fbb38 100644 --- a/Controllers/Vehicle/TaxController.cs +++ b/Controllers/Vehicle/TaxController.cs @@ -60,7 +60,7 @@ namespace CarCareTracker.Controllers _vehicleLogic.UpdateRecurringTaxes(taxRecord.VehicleId); if (result) { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), taxRecord.VehicleId, User.Identity.Name, $"{(taxRecord.Id == default ? "Created" : "Edited")} Tax Record - Description: {taxRecord.Description}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromTaxRecord(taxRecord.ToTaxRecord(), taxRecord.Id == default ? "taxrecord.add" : "taxrecord.update", User.Identity.Name)); } return Json(result); } @@ -105,16 +105,16 @@ namespace CarCareTracker.Controllers return false; } var result = _taxRecordDataAccess.DeleteTaxRecordById(existingRecord.Id); + if (result) + { + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromTaxRecord(existingRecord, "taxrecord.delete", User.Identity.Name)); + } return result; } [HttpPost] public IActionResult DeleteTaxRecordById(int taxRecordId) { var result = DeleteTaxRecordWithChecks(taxRecordId); - if (result) - { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Deleted Tax Record - Id: {taxRecordId}"); - } return Json(result); } } diff --git a/Controllers/Vehicle/UpgradeController.cs b/Controllers/Vehicle/UpgradeController.cs index 934722b..264e75b 100644 --- a/Controllers/Vehicle/UpgradeController.cs +++ b/Controllers/Vehicle/UpgradeController.cs @@ -66,7 +66,7 @@ namespace CarCareTracker.Controllers var result = _upgradeRecordDataAccess.SaveUpgradeRecordToVehicle(upgradeRecord.ToUpgradeRecord()); if (result) { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), upgradeRecord.VehicleId, User.Identity.Name, $"{(upgradeRecord.Id == default ? "Created" : "Edited")} Upgrade Record - Description: {upgradeRecord.Description}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromGenericRecord(upgradeRecord.ToUpgradeRecord(), upgradeRecord.Id == default ? "upgraderecord.add" : "upgraderecord.update", User.Identity.Name)); } return Json(result); } @@ -115,16 +115,16 @@ namespace CarCareTracker.Controllers RestoreSupplyRecordsByUsage(existingRecord.RequisitionHistory, existingRecord.Description); } var result = _upgradeRecordDataAccess.DeleteUpgradeRecordById(existingRecord.Id); + if (result) + { + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromGenericRecord(existingRecord, "upgraderecord.delete", User.Identity.Name)); + } return result; } [HttpPost] public IActionResult DeleteUpgradeRecordById(int upgradeRecordId) { var result = DeleteUpgradeRecordWithChecks(upgradeRecordId); - if (result) - { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Deleted Upgrade Record - Id: {upgradeRecordId}"); - } return Json(result); } } diff --git a/Controllers/VehicleController.cs b/Controllers/VehicleController.cs index 11eb075..9fa0893 100644 --- a/Controllers/VehicleController.cs +++ b/Controllers/VehicleController.cs @@ -130,10 +130,10 @@ namespace CarCareTracker.Controllers if (isNewAddition) { _userLogic.AddUserAccessToVehicle(GetUserID(), vehicleInput.Id); - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), vehicleInput.Id, User.Identity.Name, $"Added Vehicle - Description: {vehicleInput.Year} {vehicleInput.Make} {vehicleInput.Model}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.Generic($"{vehicleInput.Year} {vehicleInput.Make} {vehicleInput.Model}", "vehicle.add", User.Identity.Name, vehicleInput.Id.ToString())); } else { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), vehicleInput.Id, User.Identity.Name, $"Edited Vehicle - Description: {vehicleInput.Year} {vehicleInput.Make} {vehicleInput.Model}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.Generic($"{vehicleInput.Year} {vehicleInput.Make} {vehicleInput.Model}", "vehicle.update", User.Identity.Name, vehicleInput.Id.ToString())); } return Json(result); } @@ -163,7 +163,7 @@ namespace CarCareTracker.Controllers _dataAccess.DeleteVehicle(vehicleId); if (result) { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), vehicleId, User.Identity.Name, "Deleted Vehicle"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.Generic(string.Empty, "vehicle.delete", User.Identity.Name, vehicleId.ToString())); } return Json(result); } @@ -388,7 +388,7 @@ namespace CarCareTracker.Controllers } if (result) { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Moved multiple {source.ToString()} to {destination.ToString()} - Ids: {string.Join(",", recordIds)}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.Generic($"Moved multiple {source.ToString()} to {destination.ToString()} - Ids: {string.Join(",", recordIds)}", "bulk.move", User.Identity.Name, string.Empty)); } return Json(result); } @@ -430,7 +430,7 @@ namespace CarCareTracker.Controllers } if (result) { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Deleted multiple {importMode.ToString()} - Ids: {string.Join(",", recordIds)}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.Generic($"Deleted multiple {importMode.ToString()} - Ids: {string.Join(", ", recordIds)}", "bulk.delete", User.Identity.Name, string.Empty)); } return Json(result); } @@ -489,7 +489,7 @@ namespace CarCareTracker.Controllers } if (result) { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Adjusted odometer for multiple {importMode.ToString()} - Ids: {string.Join(",", recordIds)}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.Generic($"Adjusted odometer for multiple {importMode.ToString()} - Ids: {string.Join(",", recordIds)}", "bulk.odometer.adjust", User.Identity.Name, string.Empty)); } return Json(result); } @@ -581,7 +581,7 @@ namespace CarCareTracker.Controllers } if (result) { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Duplicated multiple {importMode.ToString()} - Ids: {string.Join(",", recordIds)}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.Generic($"Duplicated multiple {importMode.ToString()} - Ids: {string.Join(",", recordIds)}", "bulk.duplicate", User.Identity.Name, string.Empty)); } return Json(result); } @@ -716,7 +716,7 @@ namespace CarCareTracker.Controllers } if (result) { - StaticHelper.NotifyAsync(_config.GetWebHookUrl(), 0, User.Identity.Name, $"Duplicated multiple {importMode.ToString()} - Ids: {string.Join(",", recordIds)} - to Vehicle Ids: {string.Join(",", vehicleIds)}"); + StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.Generic($"Duplicated multiple {importMode.ToString()} - Ids: {string.Join(",", recordIds)} - to Vehicle Ids: {string.Join(",", vehicleIds)}", "bulk.duplicate.to.vehicles", User.Identity.Name, string.Join(",", vehicleIds))); } return Json(result); } diff --git a/Helper/StaticHelper.cs b/Helper/StaticHelper.cs index 819253c..d2f9e65 100644 --- a/Helper/StaticHelper.cs +++ b/Helper/StaticHelper.cs @@ -320,20 +320,14 @@ namespace CarCareTracker.Helper Console.WriteLine("No Locale or Culture Configured for LubeLogger, Check Environment Variables"); } } - public static async void NotifyAsync(string webhookURL, int vehicleId, string username, string action) + public static async void NotifyAsync(string webhookURL, WebHookPayload webHookPayload) { if (string.IsNullOrWhiteSpace(webhookURL)) { return; } var httpClient = new HttpClient(); - var httpParams = new Dictionary - { - { "vehicleId", vehicleId.ToString() }, - { "username", username }, - { "action", action }, - }; - httpClient.PostAsJsonAsync(webhookURL, httpParams); + httpClient.PostAsJsonAsync(webhookURL, webHookPayload); } public static string GetImportModeIcon(ImportMode importMode) { diff --git a/Models/Shared/WebHookPayload.cs b/Models/Shared/WebHookPayload.cs new file mode 100644 index 0000000..f49b896 --- /dev/null +++ b/Models/Shared/WebHookPayload.cs @@ -0,0 +1,209 @@ +namespace CarCareTracker.Models +{ + /// + /// WebHookPayload Object + /// + public class WebHookPayloadBase + { + public string Type { get; set; } = ""; + public string Timestamp + { + get { return DateTime.UtcNow.ToString("O"); } + } + public Dictionary Data { get; set; } = new Dictionary(); + /// + /// Legacy attributes below + /// + public string VehicleId { get; set; } = ""; + public string Username { get; set; } = ""; + public string Action { get; set; } = ""; + } + public class WebHookPayload: WebHookPayloadBase + { + private static string GetFriendlyActionType(string actionType) + { + var actionTypeParts = actionType.Split('.'); + if (actionTypeParts.Length == 2) + { + var recordType = actionTypeParts[0]; + var recordAction = actionTypeParts[1]; + if (recordAction == "add") + { + recordAction = "ADDED"; + } else + { + recordAction = $"{recordAction.ToUpper()}D"; + } + return $"{recordAction} {recordType.ToUpper()}"; + } else if (actionTypeParts.Length == 3) + { + var recordType = actionTypeParts[0]; + var recordAction = actionTypeParts[1]; + var thirdPart = actionTypeParts[2]; + if (recordAction == "delete") + { + recordAction = "DELETED"; + } + else + { + recordAction = $"{recordAction.ToUpper()}ED"; + } + if (thirdPart == "api") + { + return $"{recordAction} {recordType.ToUpper()} via API"; + } else + { + return $"{recordAction} {recordType.ToUpper()}"; + } + } + return actionType; + } + public static WebHookPayload FromGenericRecord(GenericRecord genericRecord, string actionType, string userName) + { + Dictionary payloadDictionary = new Dictionary(); + payloadDictionary.Add("user", userName); + payloadDictionary.Add("description", genericRecord.Description); + payloadDictionary.Add("odometer", genericRecord.Mileage.ToString()); + payloadDictionary.Add("vehicleId", genericRecord.VehicleId.ToString()); + payloadDictionary.Add("cost", genericRecord.Cost.ToString("F2")); + return new WebHookPayload + { + Type = actionType, + Data = payloadDictionary, + VehicleId = genericRecord.VehicleId.ToString(), + Username = userName, + Action = $"{userName} {GetFriendlyActionType(actionType)} Description: {genericRecord.Description}" + }; + } + public static WebHookPayload FromGasRecord(GasRecord gasRecord, string actionType, string userName) + { + Dictionary payloadDictionary = new Dictionary(); + payloadDictionary.Add("user", userName); + payloadDictionary.Add("odometer", gasRecord.Mileage.ToString()); + payloadDictionary.Add("fuelconsumed", gasRecord.Gallons.ToString()); + payloadDictionary.Add("vehicleId", gasRecord.VehicleId.ToString()); + payloadDictionary.Add("cost", gasRecord.Cost.ToString("F2")); + return new WebHookPayload + { + Type = actionType, + Data = payloadDictionary, + VehicleId = gasRecord.VehicleId.ToString(), + Username = userName, + Action = $"{userName} {GetFriendlyActionType(actionType)} Odometer: {gasRecord.Mileage}" + }; + } + public static WebHookPayload FromOdometerRecord(OdometerRecord odometerRecord, string actionType, string userName) + { + Dictionary payloadDictionary = new Dictionary(); + payloadDictionary.Add("user", userName); + payloadDictionary.Add("initialodometer", odometerRecord.InitialMileage.ToString()); + payloadDictionary.Add("odometer", odometerRecord.Mileage.ToString()); + payloadDictionary.Add("vehicleId", odometerRecord.VehicleId.ToString()); + return new WebHookPayload + { + Type = actionType, + Data = payloadDictionary, + VehicleId = odometerRecord.VehicleId.ToString(), + Username = userName, + Action = $"{userName} {GetFriendlyActionType(actionType)} Odometer: {odometerRecord.Mileage}" + }; + } + public static WebHookPayload FromTaxRecord(TaxRecord taxRecord, string actionType, string userName) + { + Dictionary payloadDictionary = new Dictionary(); + payloadDictionary.Add("user", userName); + payloadDictionary.Add("description", taxRecord.Description); + payloadDictionary.Add("vehicleId", taxRecord.VehicleId.ToString()); + payloadDictionary.Add("cost", taxRecord.Cost.ToString("F2")); + return new WebHookPayload + { + Type = actionType, + Data = payloadDictionary, + VehicleId = taxRecord.VehicleId.ToString(), + Username = userName, + Action = $"{userName} {GetFriendlyActionType(actionType)} Description: {taxRecord.Description}" + }; + } + public static WebHookPayload FromPlanRecord(PlanRecord planRecord, string actionType, string userName) + { + Dictionary payloadDictionary = new Dictionary(); + payloadDictionary.Add("user", userName); + payloadDictionary.Add("description", planRecord.Description); + payloadDictionary.Add("vehicleId", planRecord.VehicleId.ToString()); + payloadDictionary.Add("cost", planRecord.Cost.ToString("F2")); + return new WebHookPayload + { + Type = actionType, + Data = payloadDictionary, + VehicleId = planRecord.VehicleId.ToString(), + Username = userName, + Action = $"{userName} {GetFriendlyActionType(actionType)} Description: {planRecord.Description}" + }; + } + public static WebHookPayload FromReminderRecord(ReminderRecord reminderRecord, string actionType, string userName) + { + Dictionary payloadDictionary = new Dictionary(); + payloadDictionary.Add("user", userName); + payloadDictionary.Add("description", reminderRecord.Description); + payloadDictionary.Add("vehicleId", reminderRecord.VehicleId.ToString()); + payloadDictionary.Add("metric", reminderRecord.Metric.ToString()); + return new WebHookPayload + { + Type = actionType, + Data = payloadDictionary, + VehicleId = reminderRecord.VehicleId.ToString(), + Username = userName, + Action = $"{userName} {GetFriendlyActionType(actionType)} Description: {reminderRecord.Description}" + }; + } + public static WebHookPayload FromSupplyRecord(SupplyRecord supplyRecord, string actionType, string userName) + { + Dictionary payloadDictionary = new Dictionary(); + payloadDictionary.Add("user", userName); + payloadDictionary.Add("description", supplyRecord.Description); + payloadDictionary.Add("vehicleId", supplyRecord.VehicleId.ToString()); + payloadDictionary.Add("cost", supplyRecord.Cost.ToString("F2")); + payloadDictionary.Add("quantity", supplyRecord.Quantity.ToString("F2")); + return new WebHookPayload + { + Type = actionType, + Data = payloadDictionary, + VehicleId = supplyRecord.VehicleId.ToString(), + Username = userName, + Action = $"{userName} {GetFriendlyActionType(actionType)} Description: {supplyRecord.Description}" + }; + } + public static WebHookPayload FromNoteRecord(Note noteRecord, string actionType, string userName) + { + Dictionary payloadDictionary = new Dictionary(); + payloadDictionary.Add("user", userName); + payloadDictionary.Add("description", noteRecord.Description); + payloadDictionary.Add("vehicleId", noteRecord.VehicleId.ToString()); + return new WebHookPayload + { + Type = actionType, + Data = payloadDictionary, + VehicleId = noteRecord.VehicleId.ToString(), + Username = userName, + Action = $"{userName} {GetFriendlyActionType(actionType)} Description: {noteRecord.Description}" + }; + } + public static WebHookPayload Generic(string payload, string actionType, string userName, string vehicleId) + { + Dictionary payloadDictionary = new Dictionary(); + payloadDictionary.Add("user", userName); + if (!string.IsNullOrWhiteSpace(payload)) + { + payloadDictionary.Add("description", payload); + } + return new WebHookPayload + { + Type = actionType, + Data = payloadDictionary, + VehicleId = string.IsNullOrWhiteSpace(vehicleId) ? "N/A" : "", + Username = userName, + Action = string.IsNullOrWhiteSpace(payload) ? GetFriendlyActionType(actionType) : "" + }; + } + } +}