mirror of
https://github.com/hargata/lubelog.git
synced 2025-12-10 00:46:08 -06:00
Added PUT API Methods
This commit is contained in:
parent
8e644093f9
commit
5792b84880
@ -143,6 +143,7 @@ namespace CarCareTracker.Controllers
|
|||||||
return Json(convertedOdometer);
|
return Json(convertedOdometer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#region ServiceRecord
|
||||||
[TypeFilter(typeof(CollaboratorFilter))]
|
[TypeFilter(typeof(CollaboratorFilter))]
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[Route("/api/vehicle/servicerecords")]
|
[Route("/api/vehicle/servicerecords")]
|
||||||
@ -155,7 +156,7 @@ namespace CarCareTracker.Controllers
|
|||||||
return Json(response);
|
return Json(response);
|
||||||
}
|
}
|
||||||
var vehicleRecords = _serviceRecordDataAccess.GetServiceRecordsByVehicleId(vehicleId);
|
var vehicleRecords = _serviceRecordDataAccess.GetServiceRecordsByVehicleId(vehicleId);
|
||||||
var result = vehicleRecords.Select(x => new GenericRecordExportModel { Date = x.Date.ToShortDateString(), Description = x.Description, Cost = x.Cost.ToString(), Notes = x.Notes, Odometer = x.Mileage.ToString(), ExtraFields = x.ExtraFields });
|
var result = vehicleRecords.Select(x => new GenericRecordExportModel { Id = x.Id.ToString(), Date = x.Date.ToShortDateString(), Description = x.Description, Cost = x.Cost.ToString(), Notes = x.Notes, Odometer = x.Mileage.ToString(), ExtraFields = x.ExtraFields });
|
||||||
return Json(result);
|
return Json(result);
|
||||||
}
|
}
|
||||||
[TypeFilter(typeof(CollaboratorFilter))]
|
[TypeFilter(typeof(CollaboratorFilter))]
|
||||||
@ -210,6 +211,55 @@ namespace CarCareTracker.Controllers
|
|||||||
return Json(OperationResponse.Failed(ex.Message));
|
return Json(OperationResponse.Failed(ex.Message));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
[HttpPut]
|
||||||
|
[Route("/api/vehicle/servicerecords/update")]
|
||||||
|
public IActionResult UpdateServiceRecord(GenericRecordExportModel input)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(input.Id) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Date) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Description) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Odometer) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Cost))
|
||||||
|
{
|
||||||
|
Response.StatusCode = 400;
|
||||||
|
return Json(OperationResponse.Failed("Input object invalid, Id, Date, Description, Odometer, and Cost cannot be empty."));
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//retrieve existing record
|
||||||
|
var existingRecord = _serviceRecordDataAccess.GetServiceRecordById(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 = DateTime.Parse(input.Date);
|
||||||
|
existingRecord.Mileage = int.Parse(input.Odometer);
|
||||||
|
existingRecord.Description = input.Description;
|
||||||
|
existingRecord.Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes;
|
||||||
|
existingRecord.Cost = decimal.Parse(input.Cost);
|
||||||
|
existingRecord.ExtraFields = input.ExtraFields;
|
||||||
|
existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : 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}");
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
Response.StatusCode = 400;
|
||||||
|
return Json(OperationResponse.Failed("Invalid Record Id"));
|
||||||
|
}
|
||||||
|
return Json(OperationResponse.Succeed("Service Record Updated"));
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Response.StatusCode = 500;
|
||||||
|
return Json(OperationResponse.Failed(ex.Message));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
#region RepairRecord
|
||||||
[TypeFilter(typeof(CollaboratorFilter))]
|
[TypeFilter(typeof(CollaboratorFilter))]
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[Route("/api/vehicle/repairrecords")]
|
[Route("/api/vehicle/repairrecords")]
|
||||||
@ -222,7 +272,7 @@ namespace CarCareTracker.Controllers
|
|||||||
return Json(response);
|
return Json(response);
|
||||||
}
|
}
|
||||||
var vehicleRecords = _collisionRecordDataAccess.GetCollisionRecordsByVehicleId(vehicleId);
|
var vehicleRecords = _collisionRecordDataAccess.GetCollisionRecordsByVehicleId(vehicleId);
|
||||||
var result = vehicleRecords.Select(x => new GenericRecordExportModel { Date = x.Date.ToShortDateString(), Description = x.Description, Cost = x.Cost.ToString(), Notes = x.Notes, Odometer = x.Mileage.ToString(), ExtraFields = x.ExtraFields });
|
var result = vehicleRecords.Select(x => new GenericRecordExportModel { Id = x.Id.ToString(), Date = x.Date.ToShortDateString(), Description = x.Description, Cost = x.Cost.ToString(), Notes = x.Notes, Odometer = x.Mileage.ToString(), ExtraFields = x.ExtraFields });
|
||||||
return Json(result);
|
return Json(result);
|
||||||
}
|
}
|
||||||
[TypeFilter(typeof(CollaboratorFilter))]
|
[TypeFilter(typeof(CollaboratorFilter))]
|
||||||
@ -277,6 +327,56 @@ namespace CarCareTracker.Controllers
|
|||||||
return Json(OperationResponse.Failed(ex.Message));
|
return Json(OperationResponse.Failed(ex.Message));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
[HttpPut]
|
||||||
|
[Route("/api/vehicle/repairrecords/update")]
|
||||||
|
public IActionResult UpdateRepairRecord(GenericRecordExportModel input)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(input.Id) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Date) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Description) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Odometer) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Cost))
|
||||||
|
{
|
||||||
|
Response.StatusCode = 400;
|
||||||
|
return Json(OperationResponse.Failed("Input object invalid, Id, Date, Description, Odometer, and Cost cannot be empty."));
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//retrieve existing record
|
||||||
|
var existingRecord = _collisionRecordDataAccess.GetCollisionRecordById(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 = DateTime.Parse(input.Date);
|
||||||
|
existingRecord.Mileage = int.Parse(input.Odometer);
|
||||||
|
existingRecord.Description = input.Description;
|
||||||
|
existingRecord.Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes;
|
||||||
|
existingRecord.Cost = decimal.Parse(input.Cost);
|
||||||
|
existingRecord.ExtraFields = input.ExtraFields;
|
||||||
|
existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : 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}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Response.StatusCode = 400;
|
||||||
|
return Json(OperationResponse.Failed("Invalid Record Id"));
|
||||||
|
}
|
||||||
|
return Json(OperationResponse.Succeed("Repair Record Updated"));
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Response.StatusCode = 500;
|
||||||
|
return Json(OperationResponse.Failed(ex.Message));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
#region UpgradeRecord
|
||||||
[TypeFilter(typeof(CollaboratorFilter))]
|
[TypeFilter(typeof(CollaboratorFilter))]
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[Route("/api/vehicle/upgraderecords")]
|
[Route("/api/vehicle/upgraderecords")]
|
||||||
@ -289,7 +389,7 @@ namespace CarCareTracker.Controllers
|
|||||||
return Json(response);
|
return Json(response);
|
||||||
}
|
}
|
||||||
var vehicleRecords = _upgradeRecordDataAccess.GetUpgradeRecordsByVehicleId(vehicleId);
|
var vehicleRecords = _upgradeRecordDataAccess.GetUpgradeRecordsByVehicleId(vehicleId);
|
||||||
var result = vehicleRecords.Select(x => new GenericRecordExportModel { Date = x.Date.ToShortDateString(), Description = x.Description, Cost = x.Cost.ToString(), Notes = x.Notes, Odometer = x.Mileage.ToString(), ExtraFields = x.ExtraFields });
|
var result = vehicleRecords.Select(x => new GenericRecordExportModel { Id = x.Id.ToString(), Date = x.Date.ToShortDateString(), Description = x.Description, Cost = x.Cost.ToString(), Notes = x.Notes, Odometer = x.Mileage.ToString(), ExtraFields = x.ExtraFields });
|
||||||
return Json(result);
|
return Json(result);
|
||||||
}
|
}
|
||||||
[TypeFilter(typeof(CollaboratorFilter))]
|
[TypeFilter(typeof(CollaboratorFilter))]
|
||||||
@ -344,6 +444,56 @@ namespace CarCareTracker.Controllers
|
|||||||
return Json(OperationResponse.Failed(ex.Message));
|
return Json(OperationResponse.Failed(ex.Message));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
[HttpPut]
|
||||||
|
[Route("/api/vehicle/upgraderecords/update")]
|
||||||
|
public IActionResult UpdateUpgradeRecord(GenericRecordExportModel input)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(input.Id) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Date) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Description) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Odometer) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Cost))
|
||||||
|
{
|
||||||
|
Response.StatusCode = 400;
|
||||||
|
return Json(OperationResponse.Failed("Input object invalid, Id, Date, Description, Odometer, and Cost cannot be empty."));
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//retrieve existing record
|
||||||
|
var existingRecord = _upgradeRecordDataAccess.GetUpgradeRecordById(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 = DateTime.Parse(input.Date);
|
||||||
|
existingRecord.Mileage = int.Parse(input.Odometer);
|
||||||
|
existingRecord.Description = input.Description;
|
||||||
|
existingRecord.Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes;
|
||||||
|
existingRecord.Cost = decimal.Parse(input.Cost);
|
||||||
|
existingRecord.ExtraFields = input.ExtraFields;
|
||||||
|
existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : 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}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Response.StatusCode = 400;
|
||||||
|
return Json(OperationResponse.Failed("Invalid Record Id"));
|
||||||
|
}
|
||||||
|
return Json(OperationResponse.Succeed("Upgrade Record Updated"));
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Response.StatusCode = 500;
|
||||||
|
return Json(OperationResponse.Failed(ex.Message));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
#region TaxRecord
|
||||||
[TypeFilter(typeof(CollaboratorFilter))]
|
[TypeFilter(typeof(CollaboratorFilter))]
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[Route("/api/vehicle/taxrecords")]
|
[Route("/api/vehicle/taxrecords")]
|
||||||
@ -355,7 +505,7 @@ namespace CarCareTracker.Controllers
|
|||||||
Response.StatusCode = 400;
|
Response.StatusCode = 400;
|
||||||
return Json(response);
|
return Json(response);
|
||||||
}
|
}
|
||||||
var result = _taxRecordDataAccess.GetTaxRecordsByVehicleId(vehicleId).Select(x => new TaxRecordExportModel { Date = x.Date.ToShortDateString(), Description = x.Description, Cost = x.Cost.ToString(), Notes = x.Notes, ExtraFields = x.ExtraFields });
|
var result = _taxRecordDataAccess.GetTaxRecordsByVehicleId(vehicleId).Select(x => new TaxRecordExportModel { Id = x.Id.ToString(), Date = x.Date.ToShortDateString(), Description = x.Description, Cost = x.Cost.ToString(), Notes = x.Notes, ExtraFields = x.ExtraFields });
|
||||||
return Json(result);
|
return Json(result);
|
||||||
}
|
}
|
||||||
[TypeFilter(typeof(CollaboratorFilter))]
|
[TypeFilter(typeof(CollaboratorFilter))]
|
||||||
@ -398,6 +548,54 @@ namespace CarCareTracker.Controllers
|
|||||||
return Json(OperationResponse.Failed(ex.Message));
|
return Json(OperationResponse.Failed(ex.Message));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
[HttpPut]
|
||||||
|
[Route("/api/vehicle/taxrecords/update")]
|
||||||
|
public IActionResult UpdateTaxRecord(TaxRecordExportModel input)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(input.Id) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Date) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Description) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Cost))
|
||||||
|
{
|
||||||
|
Response.StatusCode = 400;
|
||||||
|
return Json(OperationResponse.Failed("Input object invalid, Id, Date, Description, and Cost cannot be empty."));
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//retrieve existing record
|
||||||
|
var existingRecord = _taxRecordDataAccess.GetTaxRecordById(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 = DateTime.Parse(input.Date);
|
||||||
|
existingRecord.Description = input.Description;
|
||||||
|
existingRecord.Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes;
|
||||||
|
existingRecord.Cost = decimal.Parse(input.Cost);
|
||||||
|
existingRecord.ExtraFields = input.ExtraFields;
|
||||||
|
existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : 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}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Response.StatusCode = 400;
|
||||||
|
return Json(OperationResponse.Failed("Invalid Record Id"));
|
||||||
|
}
|
||||||
|
return Json(OperationResponse.Succeed("Tax Record Updated"));
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Response.StatusCode = 500;
|
||||||
|
return Json(OperationResponse.Failed(ex.Message));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
#region OdometerRecord
|
||||||
[TypeFilter(typeof(CollaboratorFilter))]
|
[TypeFilter(typeof(CollaboratorFilter))]
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[Route("/api/vehicle/odometerrecords/latest")]
|
[Route("/api/vehicle/odometerrecords/latest")]
|
||||||
@ -429,7 +627,7 @@ namespace CarCareTracker.Controllers
|
|||||||
{
|
{
|
||||||
vehicleRecords = _odometerLogic.AutoConvertOdometerRecord(vehicleRecords);
|
vehicleRecords = _odometerLogic.AutoConvertOdometerRecord(vehicleRecords);
|
||||||
}
|
}
|
||||||
var result = vehicleRecords.Select(x => new OdometerRecordExportModel { Date = x.Date.ToShortDateString(), InitialOdometer = x.InitialMileage.ToString(), Odometer = x.Mileage.ToString(), Notes = x.Notes, ExtraFields = x.ExtraFields });
|
var result = vehicleRecords.Select(x => new OdometerRecordExportModel { Id = x.Id.ToString(), Date = x.Date.ToShortDateString(), InitialOdometer = x.InitialMileage.ToString(), Odometer = x.Mileage.ToString(), Notes = x.Notes, ExtraFields = x.ExtraFields });
|
||||||
return Json(result);
|
return Json(result);
|
||||||
}
|
}
|
||||||
[TypeFilter(typeof(CollaboratorFilter))]
|
[TypeFilter(typeof(CollaboratorFilter))]
|
||||||
@ -446,7 +644,7 @@ namespace CarCareTracker.Controllers
|
|||||||
string.IsNullOrWhiteSpace(input.Odometer))
|
string.IsNullOrWhiteSpace(input.Odometer))
|
||||||
{
|
{
|
||||||
Response.StatusCode = 400;
|
Response.StatusCode = 400;
|
||||||
return Json(OperationResponse.Failed("Input object invalid, Date and Odometer cannot be empty."));
|
return Json(OperationResponse.Failed("Input object invalid, Date, and Odometer cannot be empty."));
|
||||||
}
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@ -469,6 +667,54 @@ namespace CarCareTracker.Controllers
|
|||||||
return Json(OperationResponse.Failed(ex.Message));
|
return Json(OperationResponse.Failed(ex.Message));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
[HttpPut]
|
||||||
|
[Route("/api/vehicle/odometerrecords/update")]
|
||||||
|
public IActionResult UpdateOdometerRecord(OdometerRecordExportModel input)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(input.Id) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Date) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.InitialOdometer) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Odometer))
|
||||||
|
{
|
||||||
|
Response.StatusCode = 400;
|
||||||
|
return Json(OperationResponse.Failed("Input object invalid, Id, Date, Initial Odometer, and Odometer cannot be empty."));
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//retrieve existing record
|
||||||
|
var existingRecord = _odometerRecordDataAccess.GetOdometerRecordById(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 = DateTime.Parse(input.Date);
|
||||||
|
existingRecord.Mileage = int.Parse(input.Odometer);
|
||||||
|
existingRecord.InitialMileage = int.Parse(input.InitialOdometer);
|
||||||
|
existingRecord.Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes;
|
||||||
|
existingRecord.ExtraFields = input.ExtraFields;
|
||||||
|
existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : 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()}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Response.StatusCode = 400;
|
||||||
|
return Json(OperationResponse.Failed("Invalid Record Id"));
|
||||||
|
}
|
||||||
|
return Json(OperationResponse.Succeed("Odometer Record Updated"));
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Response.StatusCode = 500;
|
||||||
|
return Json(OperationResponse.Failed(ex.Message));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
#region GasRecord
|
||||||
[TypeFilter(typeof(CollaboratorFilter))]
|
[TypeFilter(typeof(CollaboratorFilter))]
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[Route("/api/vehicle/gasrecords")]
|
[Route("/api/vehicle/gasrecords")]
|
||||||
@ -483,6 +729,7 @@ namespace CarCareTracker.Controllers
|
|||||||
var vehicleRecords = _gasRecordDataAccess.GetGasRecordsByVehicleId(vehicleId);
|
var vehicleRecords = _gasRecordDataAccess.GetGasRecordsByVehicleId(vehicleId);
|
||||||
var result = _gasHelper.GetGasRecordViewModels(vehicleRecords, useMPG, useUKMPG)
|
var result = _gasHelper.GetGasRecordViewModels(vehicleRecords, useMPG, useUKMPG)
|
||||||
.Select(x => new GasRecordExportModel {
|
.Select(x => new GasRecordExportModel {
|
||||||
|
Id = x.Id.ToString(),
|
||||||
Date = x.Date,
|
Date = x.Date,
|
||||||
Odometer = x.Mileage.ToString(),
|
Odometer = x.Mileage.ToString(),
|
||||||
Cost = x.Cost.ToString(),
|
Cost = x.Cost.ToString(),
|
||||||
@ -552,6 +799,59 @@ namespace CarCareTracker.Controllers
|
|||||||
return Json(OperationResponse.Failed(ex.Message));
|
return Json(OperationResponse.Failed(ex.Message));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
[HttpPut]
|
||||||
|
[Route("/api/vehicle/gasrecords/update")]
|
||||||
|
public IActionResult UpdateGasRecord(GasRecordExportModel input)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(input.Id) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Date) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Odometer) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.FuelConsumed) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Cost) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.IsFillToFull) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.MissedFuelUp))
|
||||||
|
{
|
||||||
|
Response.StatusCode = 400;
|
||||||
|
return Json(OperationResponse.Failed("Input object invalid, Id, Date, Odometer, FuelConsumed, IsFillToFull, MissedFuelUp, and Cost cannot be empty."));
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//retrieve existing record
|
||||||
|
var existingRecord = _gasRecordDataAccess.GetGasRecordById(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 = DateTime.Parse(input.Date);
|
||||||
|
existingRecord.Mileage = int.Parse(input.Odometer);
|
||||||
|
existingRecord.Gallons = decimal.Parse(input.FuelConsumed);
|
||||||
|
existingRecord.IsFillToFull = bool.Parse(input.IsFillToFull);
|
||||||
|
existingRecord.MissedFuelUp = bool.Parse(input.MissedFuelUp);
|
||||||
|
existingRecord.Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes;
|
||||||
|
existingRecord.Cost = decimal.Parse(input.Cost);
|
||||||
|
existingRecord.ExtraFields = input.ExtraFields;
|
||||||
|
existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : 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()}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Response.StatusCode = 400;
|
||||||
|
return Json(OperationResponse.Failed("Invalid Record Id"));
|
||||||
|
}
|
||||||
|
return Json(OperationResponse.Succeed("Gas Record Updated"));
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Response.StatusCode = 500;
|
||||||
|
return Json(OperationResponse.Failed(ex.Message));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
[TypeFilter(typeof(CollaboratorFilter))]
|
[TypeFilter(typeof(CollaboratorFilter))]
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[Route("/api/vehicle/reminders")]
|
[Route("/api/vehicle/reminders")]
|
||||||
|
|||||||
@ -45,6 +45,7 @@
|
|||||||
}
|
}
|
||||||
public class GenericRecordExportModel
|
public class GenericRecordExportModel
|
||||||
{
|
{
|
||||||
|
public string Id { get; set; }
|
||||||
public string Date { get; set; }
|
public string Date { get; set; }
|
||||||
public string Odometer { get; set; }
|
public string Odometer { get; set; }
|
||||||
public string Description { get; set; }
|
public string Description { get; set; }
|
||||||
@ -55,6 +56,7 @@
|
|||||||
}
|
}
|
||||||
public class OdometerRecordExportModel
|
public class OdometerRecordExportModel
|
||||||
{
|
{
|
||||||
|
public string Id { get; set; }
|
||||||
public string Date { get; set; }
|
public string Date { get; set; }
|
||||||
public string InitialOdometer { get; set; }
|
public string InitialOdometer { get; set; }
|
||||||
public string Odometer { get; set; }
|
public string Odometer { get; set; }
|
||||||
@ -64,6 +66,7 @@
|
|||||||
}
|
}
|
||||||
public class TaxRecordExportModel
|
public class TaxRecordExportModel
|
||||||
{
|
{
|
||||||
|
public string Id { get; set; }
|
||||||
public string Date { get; set; }
|
public string Date { get; set; }
|
||||||
public string Description { get; set; }
|
public string Description { get; set; }
|
||||||
public string Notes { get; set; }
|
public string Notes { get; set; }
|
||||||
@ -73,6 +76,7 @@
|
|||||||
}
|
}
|
||||||
public class GasRecordExportModel
|
public class GasRecordExportModel
|
||||||
{
|
{
|
||||||
|
public string Id { get; set; }
|
||||||
public string Date { get; set; }
|
public string Date { get; set; }
|
||||||
public string Odometer { get; set; }
|
public string Odometer { get; set; }
|
||||||
public string FuelConsumed { get; set; }
|
public string FuelConsumed { get; set; }
|
||||||
|
|||||||
@ -28,7 +28,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row api-method">
|
<div class="row api-method">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
GET
|
<span class="badge bg-success">GET</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5 copyable">
|
<div class="col-5 copyable">
|
||||||
<code>/api/vehicles</code>
|
<code>/api/vehicles</code>
|
||||||
@ -42,7 +42,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row api-method">
|
<div class="row api-method">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
GET
|
<span class="badge bg-success">GET</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5 copyable">
|
<div class="col-5 copyable">
|
||||||
<code>/api/vehicle/info</code>
|
<code>/api/vehicle/info</code>
|
||||||
@ -56,7 +56,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row api-method">
|
<div class="row api-method">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
GET
|
<span class="badge bg-success">GET</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5 copyable">
|
<div class="col-5 copyable">
|
||||||
<code>/api/vehicle/adjustedodometer</code>
|
<code>/api/vehicle/adjustedodometer</code>
|
||||||
@ -72,7 +72,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row api-method">
|
<div class="row api-method">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
GET
|
<span class="badge bg-success">GET</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5 copyable">
|
<div class="col-5 copyable">
|
||||||
<code>/api/vehicle/odometerrecords</code>
|
<code>/api/vehicle/odometerrecords</code>
|
||||||
@ -86,7 +86,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row api-method">
|
<div class="row api-method">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
GET
|
<span class="badge bg-success">GET</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5 copyable">
|
<div class="col-5 copyable">
|
||||||
<code>/api/vehicle/odometerrecords/latest</code>
|
<code>/api/vehicle/odometerrecords/latest</code>
|
||||||
@ -100,7 +100,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row api-method">
|
<div class="row api-method">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
POST
|
<span class="badge bg-primary">POST</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5 copyable">
|
<div class="col-5 copyable">
|
||||||
<code>/api/vehicle/odometerrecords/add</code>
|
<code>/api/vehicle/odometerrecords/add</code>
|
||||||
@ -123,7 +123,30 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row api-method">
|
<div class="row api-method">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
GET
|
<span class="badge text-bg-warning">PUT</span>
|
||||||
|
</div>
|
||||||
|
<div class="col-5 copyable">
|
||||||
|
<code>/api/vehicle/odometerrecords/update</code>
|
||||||
|
</div>
|
||||||
|
<div class="col-3">
|
||||||
|
Updates Odometer Record
|
||||||
|
</div>
|
||||||
|
<div class="col-3">
|
||||||
|
Id - Id of Odometer Record
|
||||||
|
<br />
|
||||||
|
Body(form-data): {<br />
|
||||||
|
date - Date to be entered<br />
|
||||||
|
initialOdometer - Initial Odometer reading<br />
|
||||||
|
odometer - Odometer reading<br />
|
||||||
|
notes - notes(optional)<br />
|
||||||
|
tags - tags separated by space(optional)<br />
|
||||||
|
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row api-method">
|
||||||
|
<div class="col-1">
|
||||||
|
<span class="badge bg-success">GET</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5 copyable">
|
<div class="col-5 copyable">
|
||||||
<code>/api/vehicle/servicerecords</code>
|
<code>/api/vehicle/servicerecords</code>
|
||||||
@ -137,7 +160,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row api-method">
|
<div class="row api-method">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
POST
|
<span class="badge bg-primary">POST</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5 copyable">
|
<div class="col-5 copyable">
|
||||||
<code>/api/vehicle/servicerecords/add</code>
|
<code>/api/vehicle/servicerecords/add</code>
|
||||||
@ -161,7 +184,31 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row api-method">
|
<div class="row api-method">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
GET
|
<span class="badge text-bg-warning">PUT</span>
|
||||||
|
</div>
|
||||||
|
<div class="col-5 copyable">
|
||||||
|
<code>/api/vehicle/servicerecords/update</code>
|
||||||
|
</div>
|
||||||
|
<div class="col-3">
|
||||||
|
Updates Service Record
|
||||||
|
</div>
|
||||||
|
<div class="col-3">
|
||||||
|
Id - Id of Service Record
|
||||||
|
<br />
|
||||||
|
Body(form-data): {<br />
|
||||||
|
date - Date to be entered<br />
|
||||||
|
odometer - Odometer reading<br />
|
||||||
|
description - Description<br />
|
||||||
|
cost - Cost<br />
|
||||||
|
notes - notes(optional)<br />
|
||||||
|
tags - tags separated by space(optional)<br />
|
||||||
|
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row api-method">
|
||||||
|
<div class="col-1">
|
||||||
|
<span class="badge bg-success">GET</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5 copyable">
|
<div class="col-5 copyable">
|
||||||
<code>/api/vehicle/repairrecords</code>
|
<code>/api/vehicle/repairrecords</code>
|
||||||
@ -175,7 +222,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row api-method">
|
<div class="row api-method">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
POST
|
<span class="badge bg-primary">POST</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5 copyable">
|
<div class="col-5 copyable">
|
||||||
<code>/api/vehicle/repairrecords/add</code>
|
<code>/api/vehicle/repairrecords/add</code>
|
||||||
@ -199,7 +246,31 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row api-method">
|
<div class="row api-method">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
GET
|
<span class="badge text-bg-warning">PUT</span>
|
||||||
|
</div>
|
||||||
|
<div class="col-5 copyable">
|
||||||
|
<code>/api/vehicle/repairrecords/update</code>
|
||||||
|
</div>
|
||||||
|
<div class="col-3">
|
||||||
|
Updates Repair Record
|
||||||
|
</div>
|
||||||
|
<div class="col-3">
|
||||||
|
Id - Id of Repair Record
|
||||||
|
<br />
|
||||||
|
Body(form-data): {<br />
|
||||||
|
date - Date to be entered<br />
|
||||||
|
odometer - Odometer reading<br />
|
||||||
|
description - Description<br />
|
||||||
|
cost - Cost<br />
|
||||||
|
notes - notes(optional)<br />
|
||||||
|
tags - tags separated by space(optional)<br />
|
||||||
|
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row api-method">
|
||||||
|
<div class="col-1">
|
||||||
|
<span class="badge bg-success">GET</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5 copyable">
|
<div class="col-5 copyable">
|
||||||
<code>/api/vehicle/upgraderecords</code>
|
<code>/api/vehicle/upgraderecords</code>
|
||||||
@ -213,7 +284,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row api-method">
|
<div class="row api-method">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
POST
|
<span class="badge bg-primary">POST</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5 copyable">
|
<div class="col-5 copyable">
|
||||||
<code>/api/vehicle/upgraderecords/add</code>
|
<code>/api/vehicle/upgraderecords/add</code>
|
||||||
@ -237,7 +308,31 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row api-method">
|
<div class="row api-method">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
GET
|
<span class="badge text-bg-warning">PUT</span>
|
||||||
|
</div>
|
||||||
|
<div class="col-5 copyable">
|
||||||
|
<code>/api/vehicle/upgraderecords/update</code>
|
||||||
|
</div>
|
||||||
|
<div class="col-3">
|
||||||
|
Updates Upgrade Record
|
||||||
|
</div>
|
||||||
|
<div class="col-3">
|
||||||
|
Id - Id of Upgrade Record
|
||||||
|
<br />
|
||||||
|
Body(form-data): {<br />
|
||||||
|
date - Date to be entered<br />
|
||||||
|
odometer - Odometer reading<br />
|
||||||
|
description - Description<br />
|
||||||
|
cost - Cost<br />
|
||||||
|
notes - notes(optional)<br />
|
||||||
|
tags - tags separated by space(optional)<br />
|
||||||
|
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row api-method">
|
||||||
|
<div class="col-1">
|
||||||
|
<span class="badge bg-success">GET</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5 copyable">
|
<div class="col-5 copyable">
|
||||||
<code>/api/vehicle/taxrecords</code>
|
<code>/api/vehicle/taxrecords</code>
|
||||||
@ -251,7 +346,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row api-method">
|
<div class="row api-method">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
POST
|
<span class="badge bg-primary">POST</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5 copyable">
|
<div class="col-5 copyable">
|
||||||
<code>/api/vehicle/taxrecords/add</code>
|
<code>/api/vehicle/taxrecords/add</code>
|
||||||
@ -274,7 +369,30 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row api-method">
|
<div class="row api-method">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
GET
|
<span class="badge text-bg-warning">PUT</span>
|
||||||
|
</div>
|
||||||
|
<div class="col-5 copyable">
|
||||||
|
<code>/api/vehicle/taxrecords/update</code>
|
||||||
|
</div>
|
||||||
|
<div class="col-3">
|
||||||
|
Updates Tax Record
|
||||||
|
</div>
|
||||||
|
<div class="col-3">
|
||||||
|
Id - Id of Tax Record
|
||||||
|
<br />
|
||||||
|
Body(form-data): {<br />
|
||||||
|
date - Date to be entered<br />
|
||||||
|
description - Description<br />
|
||||||
|
cost - Cost<br />
|
||||||
|
notes - notes(optional)<br />
|
||||||
|
tags - tags separated by space(optional)<br />
|
||||||
|
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row api-method">
|
||||||
|
<div class="col-1">
|
||||||
|
<span class="badge bg-success">GET</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5 copyable">
|
<div class="col-5 copyable">
|
||||||
<code>/api/vehicle/gasrecords</code>
|
<code>/api/vehicle/gasrecords</code>
|
||||||
@ -292,7 +410,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row api-method">
|
<div class="row api-method">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
POST
|
<span class="badge bg-primary">POST</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5 copyable">
|
<div class="col-5 copyable">
|
||||||
<code>/api/vehicle/gasrecords/add</code>
|
<code>/api/vehicle/gasrecords/add</code>
|
||||||
@ -318,7 +436,33 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row api-method">
|
<div class="row api-method">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
GET
|
<span class="badge text-bg-warning">PUT</span>
|
||||||
|
</div>
|
||||||
|
<div class="col-5 copyable">
|
||||||
|
<code>/api/vehicle/gasrecords/update</code>
|
||||||
|
</div>
|
||||||
|
<div class="col-3">
|
||||||
|
Updates Gas Record
|
||||||
|
</div>
|
||||||
|
<div class="col-3">
|
||||||
|
Id - Id of Gas Record
|
||||||
|
<br />
|
||||||
|
Body(form-data): {<br />
|
||||||
|
date - Date to be entered<br />
|
||||||
|
odometer - Odometer reading<br />
|
||||||
|
fuelConsumed - Fuel Consumed<br />
|
||||||
|
cost - Cost<br />
|
||||||
|
isFillToFull(bool) - Filled To Full<br />
|
||||||
|
missedFuelUp(bool) - Missed Fuel Up<br />
|
||||||
|
notes - notes(optional)<br />
|
||||||
|
tags - tags separated by space(optional)<br />
|
||||||
|
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row api-method">
|
||||||
|
<div class="col-1">
|
||||||
|
<span class="badge bg-success">GET</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5 copyable">
|
<div class="col-5 copyable">
|
||||||
<code>/api/vehicle/reminders</code>
|
<code>/api/vehicle/reminders</code>
|
||||||
@ -334,7 +478,7 @@
|
|||||||
{
|
{
|
||||||
<div class="row api-method">
|
<div class="row api-method">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
GET
|
<span class="badge bg-success">GET</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5 copyable">
|
<div class="col-5 copyable">
|
||||||
<code>/api/vehicle/reminders/send</code>
|
<code>/api/vehicle/reminders/send</code>
|
||||||
@ -349,7 +493,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row api-method">
|
<div class="row api-method">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
GET
|
<span class="badge bg-success">GET</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5 copyable">
|
<div class="col-5 copyable">
|
||||||
<code>/api/makebackup</code>
|
<code>/api/makebackup</code>
|
||||||
@ -363,7 +507,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row api-method">
|
<div class="row api-method">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
GET
|
<span class="badge bg-success">GET</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-5 copyable">
|
<div class="col-5 copyable">
|
||||||
<code>/api/cleanup</code>
|
<code>/api/cleanup</code>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user