add put and delete api endpoints.
This commit is contained in:
@@ -275,6 +275,107 @@ namespace CarCareTracker.Controllers
|
|||||||
return Json(OperationResponse.Failed(ex.Message));
|
return Json(OperationResponse.Failed(ex.Message));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
[HttpDelete]
|
||||||
|
[Route("/api/vehicle/planrecords/delete")]
|
||||||
|
public IActionResult DeletePlanRecord(int id)
|
||||||
|
{
|
||||||
|
var existingRecord = _planRecordDataAccess.GetPlanRecordById(id);
|
||||||
|
if (existingRecord == null || existingRecord.Id == default)
|
||||||
|
{
|
||||||
|
Response.StatusCode = 400;
|
||||||
|
return Json(OperationResponse.Failed("Invalid Record Id"));
|
||||||
|
}
|
||||||
|
//security check.
|
||||||
|
if (!_userLogic.UserCanEditVehicle(GetUserID(), existingRecord.VehicleId))
|
||||||
|
{
|
||||||
|
Response.StatusCode = 401;
|
||||||
|
return Json(OperationResponse.Failed("Access Denied, you don't have access to this vehicle."));
|
||||||
|
}
|
||||||
|
//restore any requisitioned supplies.
|
||||||
|
if (existingRecord.RequisitionHistory.Any())
|
||||||
|
{
|
||||||
|
_vehicleLogic.RestoreSupplyRecordsByUsage(existingRecord.RequisitionHistory, existingRecord.Description);
|
||||||
|
}
|
||||||
|
var result = _planRecordDataAccess.DeletePlanRecordById(existingRecord.Id);
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromPlanRecord(existingRecord, "planrecord.delete.api", User.Identity.Name));
|
||||||
|
}
|
||||||
|
return Json(OperationResponse.Conditional(result, "Plan Record Deleted"));
|
||||||
|
}
|
||||||
|
[HttpPut]
|
||||||
|
[Route("/api/vehicle/planrecords/update")]
|
||||||
|
[Consumes("application/json")]
|
||||||
|
public IActionResult UpdatePlanRecordJson([FromBody] PlanRecordExportModel input) => UpdatePlanRecord(input);
|
||||||
|
[HttpPut]
|
||||||
|
[Route("/api/vehicle/planrecords/update")]
|
||||||
|
public IActionResult UpdatePlanRecord(PlanRecordExportModel input)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(input.Id) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Description) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Cost) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Type) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Priority) ||
|
||||||
|
string.IsNullOrWhiteSpace(input.Progress))
|
||||||
|
{
|
||||||
|
Response.StatusCode = 400;
|
||||||
|
return Json(OperationResponse.Failed("Input object invalid, Id, Description, Cost, Type, Priority, and Progress cannot be empty."));
|
||||||
|
}
|
||||||
|
bool validType = Enum.TryParse(input.Type, out ImportMode parsedType);
|
||||||
|
bool validPriority = Enum.TryParse(input.Priority, out PlanPriority parsedPriority);
|
||||||
|
bool validProgress = Enum.TryParse(input.Progress, out PlanProgress parsedProgress);
|
||||||
|
if (!validType || !validPriority || !validProgress)
|
||||||
|
{
|
||||||
|
Response.StatusCode = 400;
|
||||||
|
return Json(OperationResponse.Failed("Input object invalid, values for Type(ServiceRecord, RepairRecord, UpgradeRecord), Priority(Critical, Normal, Low), or Progress(Backlog, InProgress, Testing) is invalid."));
|
||||||
|
}
|
||||||
|
if (parsedType != ImportMode.ServiceRecord && parsedType != ImportMode.RepairRecord && parsedType != ImportMode.UpgradeRecord)
|
||||||
|
{
|
||||||
|
Response.StatusCode = 400;
|
||||||
|
return Json(OperationResponse.Failed("Input object invalid, Type can only ServiceRecord, RepairRecord, or UpgradeRecord"));
|
||||||
|
}
|
||||||
|
if (parsedProgress == PlanProgress.Done)
|
||||||
|
{
|
||||||
|
Response.StatusCode = 400;
|
||||||
|
return Json(OperationResponse.Failed("Input object invalid, Progress cannot be set to Done."));
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//retrieve existing record
|
||||||
|
var existingRecord = _planRecordDataAccess.GetPlanRecordById(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.DateModified = DateTime.Now;
|
||||||
|
existingRecord.Description = input.Description;
|
||||||
|
existingRecord.Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes;
|
||||||
|
existingRecord.Cost = decimal.Parse(input.Cost);
|
||||||
|
existingRecord.ImportMode = parsedType;
|
||||||
|
existingRecord.Priority = parsedPriority;
|
||||||
|
existingRecord.Progress = parsedProgress;
|
||||||
|
existingRecord.Files = input.Files;
|
||||||
|
existingRecord.ExtraFields = input.ExtraFields;
|
||||||
|
_planRecordDataAccess.SavePlanRecordToVehicle(existingRecord);
|
||||||
|
StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromPlanRecord(existingRecord, "planrecord.update.api", User.Identity.Name));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Response.StatusCode = 400;
|
||||||
|
return Json(OperationResponse.Failed("Invalid Record Id"));
|
||||||
|
}
|
||||||
|
return Json(OperationResponse.Succeed("Plan Record Updated"));
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Response.StatusCode = 500;
|
||||||
|
return Json(OperationResponse.Failed(ex.Message));
|
||||||
|
}
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
#region ServiceRecord
|
#region ServiceRecord
|
||||||
[TypeFilter(typeof(CollaboratorFilter))]
|
[TypeFilter(typeof(CollaboratorFilter))]
|
||||||
|
|||||||
@@ -187,6 +187,69 @@
|
|||||||
vehicleId - Id of Vehicle
|
vehicleId - Id of Vehicle
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row api-method">
|
||||||
|
<div class="col-1">
|
||||||
|
<span class="badge bg-primary">POST</span>
|
||||||
|
</div>
|
||||||
|
<div class="col-5 copyable">
|
||||||
|
<code>/api/vehicle/planrecords/add</code>
|
||||||
|
</div>
|
||||||
|
<div class="col-3">
|
||||||
|
Adds Plan Record to the vehicle
|
||||||
|
</div>
|
||||||
|
<div class="col-3">
|
||||||
|
vehicleId - Id of Vehicle
|
||||||
|
<br />
|
||||||
|
Body(form-data): {<br />
|
||||||
|
description - Description<br />
|
||||||
|
cost - Cost<br />
|
||||||
|
type - ServiceRecord/RepairRecord/UpgradeRecord<br />
|
||||||
|
priority - Low/Normal/Critical<br />
|
||||||
|
progress - Backlog/InProgress/Testing<br />
|
||||||
|
notes - notes(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 />
|
||||||
|
files - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showAttachmentsInfo()">attachments(optional)</a><br />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row api-method">
|
||||||
|
<div class="col-1">
|
||||||
|
<span class="badge text-bg-warning">PUT</span>
|
||||||
|
</div>
|
||||||
|
<div class="col-5 copyable">
|
||||||
|
<code>/api/vehicle/planrecords/update</code>
|
||||||
|
</div>
|
||||||
|
<div class="col-3">
|
||||||
|
Updates Plan Record
|
||||||
|
</div>
|
||||||
|
<div class="col-3">
|
||||||
|
Body(form-data): {<br />
|
||||||
|
Id - Id of Plan Record<br />
|
||||||
|
description - Description<br />
|
||||||
|
cost - Cost<br />
|
||||||
|
type - ServiceRecord/RepairRecord/UpgradeRecord<br />
|
||||||
|
priority - Low/Normal/Critical<br />
|
||||||
|
progress - Backlog/InProgress/Testing<br />
|
||||||
|
notes - notes(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 />
|
||||||
|
files - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showAttachmentsInfo()">attachments(optional)</a><br />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row api-method">
|
||||||
|
<div class="col-1">
|
||||||
|
<span class="badge text-bg-danger">DELETE</span>
|
||||||
|
</div>
|
||||||
|
<div class="col-5 copyable">
|
||||||
|
<code>/api/vehicle/planrecords/delete</code>
|
||||||
|
</div>
|
||||||
|
<div class="col-3">
|
||||||
|
Deletes Plan Record
|
||||||
|
</div>
|
||||||
|
<div class="col-3">
|
||||||
|
Id - Id of Plan Record
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="row api-method">
|
<div class="row api-method">
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
<span class="badge bg-success">GET</span>
|
<span class="badge bg-success">GET</span>
|
||||||
|
|||||||
Reference in New Issue
Block a user