Merge branch 'main' into Hargata/planner.drag.drop.fix

This commit is contained in:
DESKTOP-T0O5CDB\DESK-555BD
2024-11-19 13:31:29 -07:00
15 changed files with 163 additions and 207 deletions

View File

@@ -150,9 +150,7 @@ namespace CarCareTracker.Controllers
{ {
if (vehicleId == default) if (vehicleId == default)
{ {
var response = new OperationResponse(); var response = OperationResponse.Failed("Must provide a valid vehicle id");
response.Success = false;
response.Message = "Must provide a valid vehicle id";
Response.StatusCode = 400; Response.StatusCode = 400;
return Json(response); return Json(response);
} }
@@ -165,23 +163,18 @@ namespace CarCareTracker.Controllers
[Route("/api/vehicle/servicerecords/add")] [Route("/api/vehicle/servicerecords/add")]
public IActionResult AddServiceRecord(int vehicleId, GenericRecordExportModel input) public IActionResult AddServiceRecord(int vehicleId, GenericRecordExportModel input)
{ {
var response = new OperationResponse();
if (vehicleId == default) if (vehicleId == default)
{ {
response.Success = false;
response.Message = "Must provide a valid vehicle id";
Response.StatusCode = 400; Response.StatusCode = 400;
return Json(response); return Json(OperationResponse.Failed("Must provide a valid vehicle id"));
} }
if (string.IsNullOrWhiteSpace(input.Date) || if (string.IsNullOrWhiteSpace(input.Date) ||
string.IsNullOrWhiteSpace(input.Description) || string.IsNullOrWhiteSpace(input.Description) ||
string.IsNullOrWhiteSpace(input.Odometer) || string.IsNullOrWhiteSpace(input.Odometer) ||
string.IsNullOrWhiteSpace(input.Cost)) string.IsNullOrWhiteSpace(input.Cost))
{ {
response.Success = false;
response.Message = "Input object invalid, Date, Description, Odometer, and Cost cannot be empty.";
Response.StatusCode = 400; Response.StatusCode = 400;
return Json(response); return Json(OperationResponse.Failed("Input object invalid, Date, Description, Odometer, and Cost cannot be empty."));
} }
try try
{ {
@@ -209,16 +202,12 @@ namespace CarCareTracker.Controllers
_odometerLogic.AutoInsertOdometerRecord(odometerRecord); _odometerLogic.AutoInsertOdometerRecord(odometerRecord);
} }
StaticHelper.NotifyAsync(_config.GetWebHookUrl(), vehicleId, User.Identity.Name, $"Added Service Record via API - Description: {serviceRecord.Description}"); StaticHelper.NotifyAsync(_config.GetWebHookUrl(), vehicleId, User.Identity.Name, $"Added Service Record via API - Description: {serviceRecord.Description}");
response.Success = true; return Json(OperationResponse.Succeed("Service Record Added"));
response.Message = "Service Record Added";
return Json(response);
} }
catch (Exception ex) catch (Exception ex)
{ {
response.Success = false;
response.Message = ex.Message;
Response.StatusCode = 500; Response.StatusCode = 500;
return Json(response); return Json(OperationResponse.Failed(ex.Message));
} }
} }
[TypeFilter(typeof(CollaboratorFilter))] [TypeFilter(typeof(CollaboratorFilter))]
@@ -228,9 +217,7 @@ namespace CarCareTracker.Controllers
{ {
if (vehicleId == default) if (vehicleId == default)
{ {
var response = new OperationResponse(); var response = OperationResponse.Failed("Must provide a valid vehicle id");
response.Success = false;
response.Message = "Must provide a valid vehicle id";
Response.StatusCode = 400; Response.StatusCode = 400;
return Json(response); return Json(response);
} }
@@ -243,23 +230,18 @@ namespace CarCareTracker.Controllers
[Route("/api/vehicle/repairrecords/add")] [Route("/api/vehicle/repairrecords/add")]
public IActionResult AddRepairRecord(int vehicleId, GenericRecordExportModel input) public IActionResult AddRepairRecord(int vehicleId, GenericRecordExportModel input)
{ {
var response = new OperationResponse();
if (vehicleId == default) if (vehicleId == default)
{ {
response.Success = false;
response.Message = "Must provide a valid vehicle id";
Response.StatusCode = 400; Response.StatusCode = 400;
return Json(response); return Json(OperationResponse.Failed("Must provide a valid vehicle id"));
} }
if (string.IsNullOrWhiteSpace(input.Date) || if (string.IsNullOrWhiteSpace(input.Date) ||
string.IsNullOrWhiteSpace(input.Description) || string.IsNullOrWhiteSpace(input.Description) ||
string.IsNullOrWhiteSpace(input.Odometer) || string.IsNullOrWhiteSpace(input.Odometer) ||
string.IsNullOrWhiteSpace(input.Cost)) string.IsNullOrWhiteSpace(input.Cost))
{ {
response.Success = false;
response.Message = "Input object invalid, Date, Description, Odometer, and Cost cannot be empty.";
Response.StatusCode = 400; Response.StatusCode = 400;
return Json(response); return Json(OperationResponse.Failed("Input object invalid, Date, Description, Odometer, and Cost cannot be empty."));
} }
try try
{ {
@@ -287,16 +269,12 @@ namespace CarCareTracker.Controllers
_odometerLogic.AutoInsertOdometerRecord(odometerRecord); _odometerLogic.AutoInsertOdometerRecord(odometerRecord);
} }
StaticHelper.NotifyAsync(_config.GetWebHookUrl(), vehicleId, User.Identity.Name, $"Added Repair Record via API - Description: {repairRecord.Description}"); StaticHelper.NotifyAsync(_config.GetWebHookUrl(), vehicleId, User.Identity.Name, $"Added Repair Record via API - Description: {repairRecord.Description}");
response.Success = true; return Json(OperationResponse.Succeed("Repair Record Added"));
response.Message = "Repair Record Added";
return Json(response);
} }
catch (Exception ex) catch (Exception ex)
{ {
response.Success = false;
response.Message = ex.Message;
Response.StatusCode = 500; Response.StatusCode = 500;
return Json(response); return Json(OperationResponse.Failed(ex.Message));
} }
} }
[TypeFilter(typeof(CollaboratorFilter))] [TypeFilter(typeof(CollaboratorFilter))]
@@ -306,9 +284,7 @@ namespace CarCareTracker.Controllers
{ {
if (vehicleId == default) if (vehicleId == default)
{ {
var response = new OperationResponse(); var response = OperationResponse.Failed("Must provide a valid vehicle id");
response.Success = false;
response.Message = "Must provide a valid vehicle id";
Response.StatusCode = 400; Response.StatusCode = 400;
return Json(response); return Json(response);
} }
@@ -321,23 +297,18 @@ namespace CarCareTracker.Controllers
[Route("/api/vehicle/upgraderecords/add")] [Route("/api/vehicle/upgraderecords/add")]
public IActionResult AddUpgradeRecord(int vehicleId, GenericRecordExportModel input) public IActionResult AddUpgradeRecord(int vehicleId, GenericRecordExportModel input)
{ {
var response = new OperationResponse();
if (vehicleId == default) if (vehicleId == default)
{ {
response.Success = false;
response.Message = "Must provide a valid vehicle id";
Response.StatusCode = 400; Response.StatusCode = 400;
return Json(response); return Json(OperationResponse.Failed("Must provide a valid vehicle id"));
} }
if (string.IsNullOrWhiteSpace(input.Date) || if (string.IsNullOrWhiteSpace(input.Date) ||
string.IsNullOrWhiteSpace(input.Description) || string.IsNullOrWhiteSpace(input.Description) ||
string.IsNullOrWhiteSpace(input.Odometer) || string.IsNullOrWhiteSpace(input.Odometer) ||
string.IsNullOrWhiteSpace(input.Cost)) string.IsNullOrWhiteSpace(input.Cost))
{ {
response.Success = false;
response.Message = "Input object invalid, Date, Description, Odometer, and Cost cannot be empty.";
Response.StatusCode = 400; Response.StatusCode = 400;
return Json(response); return Json(OperationResponse.Failed("Input object invalid, Date, Description, Odometer, and Cost cannot be empty."));
} }
try try
{ {
@@ -365,16 +336,12 @@ namespace CarCareTracker.Controllers
_odometerLogic.AutoInsertOdometerRecord(odometerRecord); _odometerLogic.AutoInsertOdometerRecord(odometerRecord);
} }
StaticHelper.NotifyAsync(_config.GetWebHookUrl(), vehicleId, User.Identity.Name, $"Added Upgrade Record via API - Description: {upgradeRecord.Description}"); StaticHelper.NotifyAsync(_config.GetWebHookUrl(), vehicleId, User.Identity.Name, $"Added Upgrade Record via API - Description: {upgradeRecord.Description}");
response.Success = true; return Json(OperationResponse.Succeed("Upgrade Record Added"));
response.Message = "Upgrade Record Added";
return Json(response);
} }
catch (Exception ex) catch (Exception ex)
{ {
response.Success = false;
response.Message = ex.Message;
Response.StatusCode = 500; Response.StatusCode = 500;
return Json(response); return Json(OperationResponse.Failed(ex.Message));
} }
} }
[TypeFilter(typeof(CollaboratorFilter))] [TypeFilter(typeof(CollaboratorFilter))]
@@ -384,9 +351,7 @@ namespace CarCareTracker.Controllers
{ {
if (vehicleId == default) if (vehicleId == default)
{ {
var response = new OperationResponse(); var response = OperationResponse.Failed("Must provide a valid vehicle id");
response.Success = false;
response.Message = "Must provide a valid vehicle id";
Response.StatusCode = 400; Response.StatusCode = 400;
return Json(response); return Json(response);
} }
@@ -398,22 +363,17 @@ namespace CarCareTracker.Controllers
[Route("/api/vehicle/taxrecords/add")] [Route("/api/vehicle/taxrecords/add")]
public IActionResult AddTaxRecord(int vehicleId, TaxRecordExportModel input) public IActionResult AddTaxRecord(int vehicleId, TaxRecordExportModel input)
{ {
var response = new OperationResponse();
if (vehicleId == default) if (vehicleId == default)
{ {
response.Success = false;
response.Message = "Must provide a valid vehicle id";
Response.StatusCode = 400; Response.StatusCode = 400;
return Json(response); return Json(OperationResponse.Failed("Must provide a valid vehicle id"));
} }
if (string.IsNullOrWhiteSpace(input.Date) || if (string.IsNullOrWhiteSpace(input.Date) ||
string.IsNullOrWhiteSpace(input.Description) || string.IsNullOrWhiteSpace(input.Description) ||
string.IsNullOrWhiteSpace(input.Cost)) string.IsNullOrWhiteSpace(input.Cost))
{ {
response.Success = false;
response.Message = "Input object invalid, Date, Description, and Cost cannot be empty.";
Response.StatusCode = 400; Response.StatusCode = 400;
return Json(response); return Json(OperationResponse.Failed("Input object invalid, Date, Description, and Cost cannot be empty."));
} }
try try
{ {
@@ -429,16 +389,12 @@ namespace CarCareTracker.Controllers
}; };
_taxRecordDataAccess.SaveTaxRecordToVehicle(taxRecord); _taxRecordDataAccess.SaveTaxRecordToVehicle(taxRecord);
StaticHelper.NotifyAsync(_config.GetWebHookUrl(), vehicleId, User.Identity.Name, $"Added Tax Record via API - Description: {taxRecord.Description}"); StaticHelper.NotifyAsync(_config.GetWebHookUrl(), vehicleId, User.Identity.Name, $"Added Tax Record via API - Description: {taxRecord.Description}");
response.Success = true; return Json(OperationResponse.Succeed("Tax Record Added"));
response.Message = "Tax Record Added";
return Json(response);
} }
catch (Exception ex) catch (Exception ex)
{ {
response.Success = false;
response.Message = ex.Message;
Response.StatusCode = 500; Response.StatusCode = 500;
return Json(response); return Json(OperationResponse.Failed(ex.Message));
} }
} }
[TypeFilter(typeof(CollaboratorFilter))] [TypeFilter(typeof(CollaboratorFilter))]
@@ -448,9 +404,7 @@ namespace CarCareTracker.Controllers
{ {
if (vehicleId == default) if (vehicleId == default)
{ {
var response = new OperationResponse(); var response = OperationResponse.Failed("Must provide a valid vehicle id");
response.Success = false;
response.Message = "Must provide a valid vehicle id";
Response.StatusCode = 400; Response.StatusCode = 400;
return Json(response); return Json(response);
} }
@@ -464,9 +418,7 @@ namespace CarCareTracker.Controllers
{ {
if (vehicleId == default) if (vehicleId == default)
{ {
var response = new OperationResponse(); var response = OperationResponse.Failed("Must provide a valid vehicle id");
response.Success = false;
response.Message = "Must provide a valid vehicle id";
Response.StatusCode = 400; Response.StatusCode = 400;
return Json(response); return Json(response);
} }
@@ -484,21 +436,16 @@ namespace CarCareTracker.Controllers
[Route("/api/vehicle/odometerrecords/add")] [Route("/api/vehicle/odometerrecords/add")]
public IActionResult AddOdometerRecord(int vehicleId, OdometerRecordExportModel input) public IActionResult AddOdometerRecord(int vehicleId, OdometerRecordExportModel input)
{ {
var response = new OperationResponse();
if (vehicleId == default) if (vehicleId == default)
{ {
response.Success = false;
response.Message = "Must provide a valid vehicle id";
Response.StatusCode = 400; Response.StatusCode = 400;
return Json(response); return Json(OperationResponse.Failed("Must provide a valid vehicle id"));
} }
if (string.IsNullOrWhiteSpace(input.Date) || if (string.IsNullOrWhiteSpace(input.Date) ||
string.IsNullOrWhiteSpace(input.Odometer)) string.IsNullOrWhiteSpace(input.Odometer))
{ {
response.Success = false;
response.Message = "Input object invalid, Date and Odometer cannot be empty.";
Response.StatusCode = 400; Response.StatusCode = 400;
return Json(response); return Json(OperationResponse.Failed("Input object invalid, Date and Odometer cannot be empty."));
} }
try try
{ {
@@ -514,15 +461,11 @@ namespace CarCareTracker.Controllers
}; };
_odometerRecordDataAccess.SaveOdometerRecordToVehicle(odometerRecord); _odometerRecordDataAccess.SaveOdometerRecordToVehicle(odometerRecord);
StaticHelper.NotifyAsync(_config.GetWebHookUrl(), vehicleId, User.Identity.Name, $"Added Odometer Record via API - Mileage: {odometerRecord.Mileage.ToString()}"); StaticHelper.NotifyAsync(_config.GetWebHookUrl(), vehicleId, User.Identity.Name, $"Added Odometer Record via API - Mileage: {odometerRecord.Mileage.ToString()}");
response.Success = true; return Json(OperationResponse.Succeed("Odometer Record Added"));
response.Message = "Odometer Record Added";
return Json(response);
} catch (Exception ex) } catch (Exception ex)
{ {
response.Success = false;
response.Message = ex.Message;
Response.StatusCode = 500; Response.StatusCode = 500;
return Json(response); return Json(OperationResponse.Failed(ex.Message));
} }
} }
[TypeFilter(typeof(CollaboratorFilter))] [TypeFilter(typeof(CollaboratorFilter))]
@@ -532,9 +475,7 @@ namespace CarCareTracker.Controllers
{ {
if (vehicleId == default) if (vehicleId == default)
{ {
var response = new OperationResponse(); var response = OperationResponse.Failed("Must provide a valid vehicle id");
response.Success = false;
response.Message = "Must provide a valid vehicle id";
Response.StatusCode = 400; Response.StatusCode = 400;
return Json(response); return Json(response);
} }
@@ -558,13 +499,10 @@ namespace CarCareTracker.Controllers
[Route("/api/vehicle/gasrecords/add")] [Route("/api/vehicle/gasrecords/add")]
public IActionResult AddGasRecord(int vehicleId, GasRecordExportModel input) public IActionResult AddGasRecord(int vehicleId, GasRecordExportModel input)
{ {
var response = new OperationResponse();
if (vehicleId == default) if (vehicleId == default)
{ {
response.Success = false;
response.Message = "Must provide a valid vehicle id";
Response.StatusCode = 400; Response.StatusCode = 400;
return Json(response); return Json(OperationResponse.Failed("Must provide a valid vehicle id"));
} }
if (string.IsNullOrWhiteSpace(input.Date) || if (string.IsNullOrWhiteSpace(input.Date) ||
string.IsNullOrWhiteSpace(input.Odometer) || string.IsNullOrWhiteSpace(input.Odometer) ||
@@ -574,10 +512,8 @@ namespace CarCareTracker.Controllers
string.IsNullOrWhiteSpace(input.MissedFuelUp) string.IsNullOrWhiteSpace(input.MissedFuelUp)
) )
{ {
response.Success = false;
response.Message = "Input object invalid, Date, Odometer, FuelConsumed, IsFillToFull, MissedFuelUp, and Cost cannot be empty.";
Response.StatusCode = 400; Response.StatusCode = 400;
return Json(response); return Json(OperationResponse.Failed("Input object invalid, Date, Odometer, FuelConsumed, IsFillToFull, MissedFuelUp, and Cost cannot be empty."));
} }
try try
{ {
@@ -607,16 +543,12 @@ namespace CarCareTracker.Controllers
_odometerLogic.AutoInsertOdometerRecord(odometerRecord); _odometerLogic.AutoInsertOdometerRecord(odometerRecord);
} }
StaticHelper.NotifyAsync(_config.GetWebHookUrl(), vehicleId, User.Identity.Name, $"Added Gas record via API - Mileage: {gasRecord.Mileage.ToString()}"); StaticHelper.NotifyAsync(_config.GetWebHookUrl(), vehicleId, User.Identity.Name, $"Added Gas record via API - Mileage: {gasRecord.Mileage.ToString()}");
response.Success = true; return Json(OperationResponse.Succeed("Gas Record Added"));
response.Message = "Gas Record Added";
return Json(response);
} }
catch (Exception ex) catch (Exception ex)
{ {
response.Success = false;
response.Message = ex.Message;
Response.StatusCode = 500; Response.StatusCode = 500;
return Json(response); return Json(OperationResponse.Failed(ex.Message));
} }
} }
[TypeFilter(typeof(CollaboratorFilter))] [TypeFilter(typeof(CollaboratorFilter))]
@@ -626,11 +558,8 @@ namespace CarCareTracker.Controllers
{ {
if (vehicleId == default) if (vehicleId == default)
{ {
var response = new OperationResponse();
response.Success = false;
response.Message = "Must provide a valid vehicle id";
Response.StatusCode = 400; Response.StatusCode = 400;
return Json(response); return Json(OperationResponse.Failed("Must provide a valid vehicle id"));
} }
var currentMileage = _vehicleLogic.GetMaxMileage(vehicleId); var currentMileage = _vehicleLogic.GetMaxMileage(vehicleId);
var reminders = _reminderRecordDataAccess.GetReminderRecordsByVehicleId(vehicleId); var reminders = _reminderRecordDataAccess.GetReminderRecordsByVehicleId(vehicleId);
@@ -678,17 +607,17 @@ namespace CarCareTracker.Controllers
} }
if (!operationResponses.Any()) if (!operationResponses.Any())
{ {
return Json(new OperationResponse { Success = false, Message = "No Emails Sent, No Vehicles Available or No Recipients Configured" }); return Json(OperationResponse.Failed("No Emails Sent, No Vehicles Available or No Recipients Configured"));
} }
else if (operationResponses.All(x => x.Success)) else if (operationResponses.All(x => x.Success))
{ {
return Json(new OperationResponse { Success = true, Message = $"Emails Sent({operationResponses.Count()})" }); return Json(OperationResponse.Succeed($"Emails Sent({operationResponses.Count()})"));
} else if (operationResponses.All(x => !x.Success)) } else if (operationResponses.All(x => !x.Success))
{ {
return Json(new OperationResponse { Success = false, Message = $"All Emails Failed({operationResponses.Count()}), Check SMTP Settings" }); return Json(OperationResponse.Failed($"All Emails Failed({operationResponses.Count()}), Check SMTP Settings"));
} else } else
{ {
return Json(new OperationResponse { Success = true, Message = $"Emails Sent({operationResponses.Count(x => x.Success)}), Emails Failed({operationResponses.Count(x => !x.Success)}), Check Recipient Settings" }); return Json(OperationResponse.Succeed($"Emails Sent({operationResponses.Count(x => x.Success)}), Emails Failed({operationResponses.Count(x => !x.Success)}), Check Recipient Settings"));
} }
} }
[Authorize(Roles = nameof(UserData.IsRootUser))] [Authorize(Roles = nameof(UserData.IsRootUser))]

View File

@@ -55,7 +55,7 @@ namespace CarCareTracker.Controllers
} }
} }
} }
var successResponse = new OperationResponse { Success = true, Message = "Token Generated!" }; var successResponse = OperationResponse.Succeed("Token Generated!");
return Json(successResponse); return Json(successResponse);
} else } else
{ {

View File

@@ -32,7 +32,7 @@ namespace CarCareTracker.Controllers
var originalFileName = Path.GetFileNameWithoutExtension(file.FileName); var originalFileName = Path.GetFileNameWithoutExtension(file.FileName);
if (originalFileName == "en_US") if (originalFileName == "en_US")
{ {
return Json(new OperationResponse { Success = false, Message = "The translation file name en_US is reserved." }); return Json(OperationResponse.Failed("The translation file name en_US is reserved."));
} }
var fileName = UploadFile(file); var fileName = UploadFile(file);
//move file from temp to translation folder. //move file from temp to translation folder.
@@ -41,9 +41,9 @@ namespace CarCareTracker.Controllers
if (!string.IsNullOrWhiteSpace(uploadedFilePath)) if (!string.IsNullOrWhiteSpace(uploadedFilePath))
{ {
var result = _fileHelper.RenameFile(uploadedFilePath, originalFileName); var result = _fileHelper.RenameFile(uploadedFilePath, originalFileName);
return Json(new OperationResponse { Success = result, Message = string.Empty }); return Json(OperationResponse.Conditional(result));
} }
return Json(new OperationResponse { Success = false, Message = StaticHelper.GenericErrorMessage }); return Json(OperationResponse.Failed());
} }
[HttpPost] [HttpPost]

View File

@@ -280,12 +280,12 @@ namespace CarCareTracker.Controllers
var result = _loginLogic.UpdateUserDetails(userId, userAccount); var result = _loginLogic.UpdateUserDetails(userId, userAccount);
return Json(result); return Json(result);
} }
return Json(new OperationResponse { Success = false, Message = StaticHelper.GenericErrorMessage }); return Json(OperationResponse.Failed());
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogError(ex.Message); _logger.LogError(ex.Message);
return Json(new OperationResponse { Success = false, Message = StaticHelper.GenericErrorMessage }); return Json(OperationResponse.Failed());
} }
} }
[HttpGet] [HttpGet]
@@ -493,16 +493,16 @@ namespace CarCareTracker.Controllers
} }
if (translationsDownloaded > 0) if (translationsDownloaded > 0)
{ {
return Json(new OperationResponse() { Success = true, Message = $"{translationsDownloaded} Translations Downloaded" }); return Json(OperationResponse.Succeed($"{translationsDownloaded} Translations Downloaded"));
} else } else
{ {
return Json(new OperationResponse() { Success = false, Message = "No Translations Downloaded" }); return Json(OperationResponse.Failed("No Translations Downloaded"));
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogError($"Unable to retrieve translations: {ex.Message}"); _logger.LogError($"Unable to retrieve translations: {ex.Message}");
return Json(new OperationResponse() { Success = false, Message = StaticHelper.GenericErrorMessage }); return Json(OperationResponse.Failed());
} }
} }
public ActionResult GetVehicleSelector(int vehicleId) public ActionResult GetVehicleSelector(int vehicleId)

View File

@@ -66,7 +66,7 @@ namespace CarCareTracker.Controllers
{ {
if (string.IsNullOrWhiteSpace(_configHelper.GetServerPostgresConnection())) if (string.IsNullOrWhiteSpace(_configHelper.GetServerPostgresConnection()))
{ {
return Json(new OperationResponse { Success = false, Message = "Postgres connection not set up" }); return Json(OperationResponse.Failed("Postgres connection not set up"));
} }
var tempFolder = $"temp/{Guid.NewGuid()}"; var tempFolder = $"temp/{Guid.NewGuid()}";
var tempPath = $"{tempFolder}/cartracker.db"; var tempPath = $"{tempFolder}/cartracker.db";
@@ -419,24 +419,24 @@ namespace CarCareTracker.Controllers
#endregion #endregion
var destFilePath = $"{fullFolderPath}.zip"; var destFilePath = $"{fullFolderPath}.zip";
ZipFile.CreateFromDirectory(fullFolderPath, destFilePath); ZipFile.CreateFromDirectory(fullFolderPath, destFilePath);
return Json(new OperationResponse { Success = true, Message = $"/{tempFolder}.zip" }); return Json(OperationResponse.Succeed($"/{tempFolder}.zip"));
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogError(ex.Message); _logger.LogError(ex.Message);
return Json(new OperationResponse { Success = false, Message = StaticHelper.GenericErrorMessage }); return Json(OperationResponse.Failed());
} }
} }
public IActionResult Import(string fileName) public IActionResult Import(string fileName)
{ {
if (string.IsNullOrWhiteSpace(_configHelper.GetServerPostgresConnection())) if (string.IsNullOrWhiteSpace(_configHelper.GetServerPostgresConnection()))
{ {
return Json(new OperationResponse { Success = false, Message = "Postgres connection not set up" }); return Json(OperationResponse.Failed("Postgres connection not set up"));
} }
var fullFileName = _fileHelper.GetFullFilePath(fileName); var fullFileName = _fileHelper.GetFullFilePath(fileName);
if (string.IsNullOrWhiteSpace(fullFileName)) if (string.IsNullOrWhiteSpace(fullFileName))
{ {
return Json(new OperationResponse { Success = false, Message = StaticHelper.GenericErrorMessage }); return Json(OperationResponse.Failed());
} }
try try
{ {
@@ -744,12 +744,12 @@ namespace CarCareTracker.Controllers
} }
} }
#endregion #endregion
return Json(new OperationResponse { Success = true, Message = "Data Imported Successfully" }); return Json(OperationResponse.Succeed("Data Imported Successfully"));
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogError(ex.Message); _logger.LogError(ex.Message);
return Json(new OperationResponse { Success = false, Message = StaticHelper.GenericErrorMessage }); return Json(OperationResponse.Failed());
} }
} }
} }

View File

@@ -47,11 +47,11 @@ namespace CarCareTracker.Controllers
var existingRecord = _planRecordTemplateDataAccess.GetPlanRecordTemplatesByVehicleId(planRecord.VehicleId).Where(x => x.Description == planRecord.Description).Any(); var existingRecord = _planRecordTemplateDataAccess.GetPlanRecordTemplatesByVehicleId(planRecord.VehicleId).Where(x => x.Description == planRecord.Description).Any();
if (planRecord.Id == default && existingRecord) if (planRecord.Id == default && existingRecord)
{ {
return Json(new OperationResponse { Success = false, Message = "A template with that description already exists for this vehicle" }); return Json(OperationResponse.Failed("A template with that description already exists for this vehicle"));
} }
planRecord.Files = planRecord.Files.Select(x => { return new UploadedFiles { Name = x.Name, Location = _fileHelper.MoveFileFromTemp(x.Location, "documents/") }; }).ToList(); planRecord.Files = planRecord.Files.Select(x => { return new UploadedFiles { Name = x.Name, Location = _fileHelper.MoveFileFromTemp(x.Location, "documents/") }; }).ToList();
var result = _planRecordTemplateDataAccess.SavePlanRecordTemplateToVehicle(planRecord); var result = _planRecordTemplateDataAccess.SavePlanRecordTemplateToVehicle(planRecord);
return Json(new OperationResponse { Success = result, Message = result ? "Template Added" : StaticHelper.GenericErrorMessage }); return Json(OperationResponse.Conditional(result, "Template Added", string.Empty));
} }
[TypeFilter(typeof(CollaboratorFilter))] [TypeFilter(typeof(CollaboratorFilter))]
[HttpGet] [HttpGet]
@@ -72,7 +72,7 @@ namespace CarCareTracker.Controllers
var existingRecord = _planRecordTemplateDataAccess.GetPlanRecordTemplateById(planRecordTemplateId); var existingRecord = _planRecordTemplateDataAccess.GetPlanRecordTemplateById(planRecordTemplateId);
if (existingRecord.Id == default) if (existingRecord.Id == default)
{ {
return Json(new OperationResponse { Success = false, Message = "Unable to find template" }); return Json(OperationResponse.Failed("Unable to find template"));
} }
if (existingRecord.Supplies.Any()) if (existingRecord.Supplies.Any())
{ {
@@ -81,7 +81,7 @@ namespace CarCareTracker.Controllers
} }
else else
{ {
return Json(new OperationResponse { Success = false, Message = "Template has No Supplies" }); return Json(OperationResponse.Failed("Template has No Supplies"));
} }
} }
[HttpPost] [HttpPost]
@@ -90,7 +90,7 @@ namespace CarCareTracker.Controllers
var existingRecord = _planRecordTemplateDataAccess.GetPlanRecordTemplateById(planRecordTemplateId); var existingRecord = _planRecordTemplateDataAccess.GetPlanRecordTemplateById(planRecordTemplateId);
if (existingRecord.Id == default) if (existingRecord.Id == default)
{ {
return Json(new OperationResponse { Success = false, Message = "Unable to find template" }); return Json(OperationResponse.Failed("Unable to find template"));
} }
if (existingRecord.Supplies.Any()) if (existingRecord.Supplies.Any())
{ {
@@ -98,11 +98,11 @@ namespace CarCareTracker.Controllers
var supplyAvailability = CheckSupplyRecordsAvailability(existingRecord.Supplies); var supplyAvailability = CheckSupplyRecordsAvailability(existingRecord.Supplies);
if (supplyAvailability.Any(x => x.Missing)) if (supplyAvailability.Any(x => x.Missing))
{ {
return Json(new OperationResponse { Success = false, Message = "Missing Supplies, Please Delete This Template and Recreate It." }); return Json(OperationResponse.Failed("Missing Supplies, Please Delete This Template and Recreate It."));
} }
else if (supplyAvailability.Any(x => x.Insufficient)) else if (supplyAvailability.Any(x => x.Insufficient))
{ {
return Json(new OperationResponse { Success = false, Message = "Insufficient Supplies" }); return Json(OperationResponse.Failed("Insufficient Supplies"));
} }
} }
if (existingRecord.ReminderRecordId != default) if (existingRecord.ReminderRecordId != default)
@@ -111,7 +111,7 @@ namespace CarCareTracker.Controllers
var existingReminder = _reminderRecordDataAccess.GetReminderRecordById(existingRecord.ReminderRecordId); var existingReminder = _reminderRecordDataAccess.GetReminderRecordById(existingRecord.ReminderRecordId);
if (existingReminder is null || existingReminder.Id == default || !existingReminder.IsRecurring) if (existingReminder is null || existingReminder.Id == default || !existingReminder.IsRecurring)
{ {
return Json(new OperationResponse { Success = false, Message = "Missing or Non-recurring Reminder, Please Delete This Template and Recreate It." }); return Json(OperationResponse.Failed("Missing or Non-recurring Reminder, Please Delete This Template and Recreate It."));
} }
} }
//populate createdDate //populate createdDate
@@ -127,7 +127,7 @@ namespace CarCareTracker.Controllers
} }
} }
var result = _planRecordDataAccess.SavePlanRecordToVehicle(existingRecord.ToPlanRecord()); var result = _planRecordDataAccess.SavePlanRecordToVehicle(existingRecord.ToPlanRecord());
return Json(new OperationResponse { Success = result, Message = result ? "Plan Record Added" : StaticHelper.GenericErrorMessage }); return Json(OperationResponse.Conditional(result, "Plan Record Added", string.Empty));
} }
[HttpGet] [HttpGet]
public IActionResult GetAddPlanRecordPartialView() public IActionResult GetAddPlanRecordPartialView()

View File

@@ -311,13 +311,13 @@ namespace CarCareTracker.Controllers
var result = _fileHelper.MakeAttachmentsExport(attachmentData); var result = _fileHelper.MakeAttachmentsExport(attachmentData);
if (string.IsNullOrWhiteSpace(result)) if (string.IsNullOrWhiteSpace(result))
{ {
return Json(new OperationResponse { Success = false, Message = StaticHelper.GenericErrorMessage }); return Json(OperationResponse.Failed());
} }
return Json(new OperationResponse { Success = true, Message = result }); return Json(OperationResponse.Succeed(result));
} }
else else
{ {
return Json(new OperationResponse { Success = false, Message = "No Attachments Found" }); return Json(OperationResponse.Failed("No Attachments Found"));
} }
} }
public IActionResult GetReportParameters() public IActionResult GetReportParameters()

View File

@@ -188,15 +188,15 @@ namespace CarCareTracker.Controllers
} }
else else
{ {
return Json(new OperationResponse { Success = false, Message = "Both vehicles already have identical collaborators" }); return Json(OperationResponse.Failed("Both vehicles already have identical collaborators"));
} }
} }
return Json(new OperationResponse { Success = true, Message = "Collaborators Copied" }); return Json(OperationResponse.Succeed("Collaborators Copied"));
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogError(ex.Message); _logger.LogError(ex.Message);
return Json(new OperationResponse { Success = false, Message = StaticHelper.GenericErrorMessage }); return Json(OperationResponse.Failed());
} }
} }

View File

@@ -31,79 +31,79 @@ namespace CarCareTracker.Helper
{ {
if (string.IsNullOrWhiteSpace(mailConfig.EmailServer)) if (string.IsNullOrWhiteSpace(mailConfig.EmailServer))
{ {
return new OperationResponse { Success = false, Message = "SMTP Server Not Setup" }; return OperationResponse.Failed("SMTP Server Not Setup");
} }
if (string.IsNullOrWhiteSpace(emailAddress) || string.IsNullOrWhiteSpace(token)) { if (string.IsNullOrWhiteSpace(emailAddress) || string.IsNullOrWhiteSpace(token)) {
return new OperationResponse { Success = false, Message = "Email Address or Token is invalid" }; return OperationResponse.Failed("Email Address or Token is invalid");
} }
string emailSubject = "Your Registration Token for LubeLogger"; string emailSubject = "Your Registration Token for LubeLogger";
string emailBody = $"A token has been generated on your behalf, please complete your registration for LubeLogger using the token: {token}"; string emailBody = $"A token has been generated on your behalf, please complete your registration for LubeLogger using the token: {token}";
var result = SendEmail(new List<string> { emailAddress }, emailSubject, emailBody); var result = SendEmail(new List<string> { emailAddress }, emailSubject, emailBody);
if (result) if (result)
{ {
return new OperationResponse { Success = true, Message = "Email Sent!" }; return OperationResponse.Succeed("Email Sent!");
} else } else
{ {
return new OperationResponse { Success = false, Message = StaticHelper.GenericErrorMessage }; return OperationResponse.Failed();
} }
} }
public OperationResponse NotifyUserForPasswordReset(string emailAddress, string token) public OperationResponse NotifyUserForPasswordReset(string emailAddress, string token)
{ {
if (string.IsNullOrWhiteSpace(mailConfig.EmailServer)) if (string.IsNullOrWhiteSpace(mailConfig.EmailServer))
{ {
return new OperationResponse { Success = false, Message = "SMTP Server Not Setup" }; return OperationResponse.Failed("SMTP Server Not Setup");
} }
if (string.IsNullOrWhiteSpace(emailAddress) || string.IsNullOrWhiteSpace(token)) if (string.IsNullOrWhiteSpace(emailAddress) || string.IsNullOrWhiteSpace(token))
{ {
return new OperationResponse { Success = false, Message = "Email Address or Token is invalid" }; return OperationResponse.Failed("Email Address or Token is invalid");
} }
string emailSubject = "Your Password Reset Token for LubeLogger"; string emailSubject = "Your Password Reset Token for LubeLogger";
string emailBody = $"A token has been generated on your behalf, please reset your password for LubeLogger using the token: {token}"; string emailBody = $"A token has been generated on your behalf, please reset your password for LubeLogger using the token: {token}";
var result = SendEmail(new List<string> { emailAddress }, emailSubject, emailBody); var result = SendEmail(new List<string> { emailAddress }, emailSubject, emailBody);
if (result) if (result)
{ {
return new OperationResponse { Success = true, Message = "Email Sent!" }; return OperationResponse.Succeed("Email Sent!");
} }
else else
{ {
return new OperationResponse { Success = false, Message = StaticHelper.GenericErrorMessage }; return OperationResponse.Failed();
} }
} }
public OperationResponse NotifyUserForAccountUpdate(string emailAddress, string token) public OperationResponse NotifyUserForAccountUpdate(string emailAddress, string token)
{ {
if (string.IsNullOrWhiteSpace(mailConfig.EmailServer)) if (string.IsNullOrWhiteSpace(mailConfig.EmailServer))
{ {
return new OperationResponse { Success = false, Message = "SMTP Server Not Setup" }; return OperationResponse.Failed("SMTP Server Not Setup");
} }
if (string.IsNullOrWhiteSpace(emailAddress) || string.IsNullOrWhiteSpace(token)) if (string.IsNullOrWhiteSpace(emailAddress) || string.IsNullOrWhiteSpace(token))
{ {
return new OperationResponse { Success = false, Message = "Email Address or Token is invalid" }; return OperationResponse.Failed("Email Address or Token is invalid");
} }
string emailSubject = "Your User Account Update Token for LubeLogger"; string emailSubject = "Your User Account Update Token for LubeLogger";
string emailBody = $"A token has been generated on your behalf, please update your account for LubeLogger using the token: {token}"; string emailBody = $"A token has been generated on your behalf, please update your account for LubeLogger using the token: {token}";
var result = SendEmail(new List<string> { emailAddress}, emailSubject, emailBody); var result = SendEmail(new List<string> { emailAddress}, emailSubject, emailBody);
if (result) if (result)
{ {
return new OperationResponse { Success = true, Message = "Email Sent!" }; return OperationResponse.Succeed("Email Sent!");
} }
else else
{ {
return new OperationResponse { Success = false, Message = StaticHelper.GenericErrorMessage }; return OperationResponse.Failed();
} }
} }
public OperationResponse NotifyUserForReminders(Vehicle vehicle, List<string> emailAddresses, List<ReminderRecordViewModel> reminders) public OperationResponse NotifyUserForReminders(Vehicle vehicle, List<string> emailAddresses, List<ReminderRecordViewModel> reminders)
{ {
if (string.IsNullOrWhiteSpace(mailConfig.EmailServer)) if (string.IsNullOrWhiteSpace(mailConfig.EmailServer))
{ {
return new OperationResponse { Success = false, Message = "SMTP Server Not Setup" }; return OperationResponse.Failed("SMTP Server Not Setup");
} }
if (!emailAddresses.Any()) if (!emailAddresses.Any())
{ {
return new OperationResponse { Success = false, Message = "No recipients could be found" }; return OperationResponse.Failed("No recipients could be found");
} }
if (!reminders.Any()) if (!reminders.Any())
{ {
return new OperationResponse { Success = false, Message = "No reminders could be found" }; return OperationResponse.Failed("No reminders could be found");
} }
//get email template, this file has to exist since it's a static file. //get email template, this file has to exist since it's a static file.
var emailTemplatePath = _fileHelper.GetFullFilePath(StaticHelper.ReminderEmailTemplate); var emailTemplatePath = _fileHelper.GetFullFilePath(StaticHelper.ReminderEmailTemplate);
@@ -123,14 +123,14 @@ namespace CarCareTracker.Helper
var result = SendEmail(emailAddresses, emailSubject, emailBody); var result = SendEmail(emailAddresses, emailSubject, emailBody);
if (result) if (result)
{ {
return new OperationResponse { Success = true, Message = "Email Sent!" }; return OperationResponse.Succeed("Email Sent!");
} else } else
{ {
return new OperationResponse { Success = false, Message = StaticHelper.GenericErrorMessage }; return OperationResponse.Failed();
} }
} catch (Exception ex) } catch (Exception ex)
{ {
return new OperationResponse { Success = false, Message = ex.Message }; return OperationResponse.Failed(ex.Message);
} }
} }
private bool SendEmail(List<string> emailTo, string emailSubject, string emailBody) { private bool SendEmail(List<string> emailTo, string emailSubject, string emailBody) {

View File

@@ -9,16 +9,16 @@ namespace CarCareTracker.Helper
/// </summary> /// </summary>
public static class StaticHelper public static class StaticHelper
{ {
public static string VersionNumber = "1.4.0"; public const string VersionNumber = "1.4.0";
public static string DbName = "data/cartracker.db"; public const string DbName = "data/cartracker.db";
public static string UserConfigPath = "config/userConfig.json"; public const string UserConfigPath = "config/userConfig.json";
public static string AdditionalWidgetsPath = "data/widgets.html"; public const string AdditionalWidgetsPath = "data/widgets.html";
public static string GenericErrorMessage = "An error occurred, please try again later"; public const string GenericErrorMessage = "An error occurred, please try again later";
public static string ReminderEmailTemplate = "defaults/reminderemailtemplate.txt"; public const string ReminderEmailTemplate = "defaults/reminderemailtemplate.txt";
public static string DefaultAllowedFileExtensions = ".png,.jpg,.jpeg,.pdf,.xls,.xlsx,.docx"; public const string DefaultAllowedFileExtensions = ".png,.jpg,.jpeg,.pdf,.xls,.xlsx,.docx";
public static string SponsorsPath = "https://hargata.github.io/hargata/sponsors.json"; public const string SponsorsPath = "https://hargata.github.io/hargata/sponsors.json";
public static string TranslationPath = "https://hargata.github.io/lubelog_translations"; public const string TranslationPath = "https://hargata.github.io/lubelog_translations";
public static string TranslationDirectoryPath = $"{TranslationPath}/directory.json"; public const string TranslationDirectoryPath = $"{TranslationPath}/directory.json";
public const string ReportNote = "Report generated by LubeLogger, a Free and Open Source Vehicle Maintenance Tracker - LubeLogger.com"; public const string ReportNote = "Report generated by LubeLogger, a Free and Open Source Vehicle Maintenance Tracker - LubeLogger.com";
public static string GetTitleCaseReminderUrgency(ReminderUrgency input) public static string GetTitleCaseReminderUrgency(ReminderUrgency input)
{ {

View File

@@ -130,15 +130,15 @@ namespace CarCareTracker.Helper
bool isDefaultLanguage = userLanguage == "en_US"; bool isDefaultLanguage = userLanguage == "en_US";
if (isDefaultLanguage && !create) if (isDefaultLanguage && !create)
{ {
return new OperationResponse { Success = false, Message = "The translation file name en_US is reserved." }; return OperationResponse.Failed("The translation file name en_US is reserved.");
} }
if (string.IsNullOrWhiteSpace(userLanguage)) if (string.IsNullOrWhiteSpace(userLanguage))
{ {
return new OperationResponse { Success = false, Message = "File name is not provided." }; return OperationResponse.Failed("File name is not provided.");
} }
if (!translations.Any()) if (!translations.Any())
{ {
return new OperationResponse { Success = false, Message = "Translation has no data." }; return OperationResponse.Failed("Translation has no data.");
} }
var translationFilePath = isDefaultLanguage ? _fileHelper.GetFullFilePath($"/defaults/en_US.json") : _fileHelper.GetFullFilePath($"/translations/{userLanguage}.json", false); var translationFilePath = isDefaultLanguage ? _fileHelper.GetFullFilePath($"/defaults/en_US.json") : _fileHelper.GetFullFilePath($"/translations/{userLanguage}.json", false);
try try
@@ -159,12 +159,12 @@ namespace CarCareTracker.Helper
//write to file //write to file
File.WriteAllText(translationFilePath, JsonSerializer.Serialize(translations)); File.WriteAllText(translationFilePath, JsonSerializer.Serialize(translations));
} }
return new OperationResponse { Success = true, Message = "Translation Updated" }; return OperationResponse.Succeed("Translation Updated");
} }
catch (Exception ex) catch (Exception ex)
{ {
_logger.LogError(ex.Message); _logger.LogError(ex.Message);
return new OperationResponse { Success = false, Message = StaticHelper.GenericErrorMessage }; return OperationResponse.Failed();
} }
} }
public string ExportTranslation(Dictionary<string, string> translations) public string ExportTranslation(Dictionary<string, string> translations)

View File

@@ -71,13 +71,13 @@ namespace CarCareTracker.Logic
var existingUser = _userData.GetUserRecordById(userId); var existingUser = _userData.GetUserRecordById(userId);
if (existingUser.Id == default) if (existingUser.Id == default)
{ {
return new OperationResponse { Success = false, Message = "Invalid user" }; return OperationResponse.Failed("Invalid user");
} }
//validate user token //validate user token
var existingToken = _tokenData.GetTokenRecordByBody(credentials.Token); var existingToken = _tokenData.GetTokenRecordByBody(credentials.Token);
if (existingToken.Id == default || existingToken.EmailAddress != existingUser.EmailAddress) if (existingToken.Id == default || existingToken.EmailAddress != existingUser.EmailAddress)
{ {
return new OperationResponse { Success = false, Message = "Invalid Token" }; return OperationResponse.Failed("Invalid Token");
} }
if (!string.IsNullOrWhiteSpace(credentials.UserName) && existingUser.UserName != credentials.UserName) if (!string.IsNullOrWhiteSpace(credentials.UserName) && existingUser.UserName != credentials.UserName)
{ {
@@ -85,7 +85,7 @@ namespace CarCareTracker.Logic
var existingUserWithUserName = _userData.GetUserRecordByUserName(credentials.UserName); var existingUserWithUserName = _userData.GetUserRecordByUserName(credentials.UserName);
if (existingUserWithUserName.Id != default) if (existingUserWithUserName.Id != default)
{ {
return new OperationResponse { Success = false, Message = "Username already taken" }; return OperationResponse.Failed("Username already taken");
} }
existingUser.UserName = credentials.UserName; existingUser.UserName = credentials.UserName;
} }
@@ -95,7 +95,7 @@ namespace CarCareTracker.Logic
var existingUserWithEmailAddress = _userData.GetUserRecordByEmailAddress(credentials.EmailAddress); var existingUserWithEmailAddress = _userData.GetUserRecordByEmailAddress(credentials.EmailAddress);
if (existingUserWithEmailAddress.Id != default) if (existingUserWithEmailAddress.Id != default)
{ {
return new OperationResponse { Success = false, Message = "A user with that email already exists" }; return OperationResponse.Failed("A user with that email already exists");
} }
existingUser.EmailAddress = credentials.EmailAddress; existingUser.EmailAddress = credentials.EmailAddress;
} }
@@ -107,7 +107,7 @@ namespace CarCareTracker.Logic
//delete token //delete token
_tokenData.DeleteToken(existingToken.Id); _tokenData.DeleteToken(existingToken.Id);
var result = _userData.SaveUserRecord(existingUser); var result = _userData.SaveUserRecord(existingUser);
return new OperationResponse { Success = result, Message = result ? "User Updated" : StaticHelper.GenericErrorMessage }; return OperationResponse.Conditional(result, "User Updated", string.Empty);
} }
public OperationResponse RegisterOpenIdUser(LoginModel credentials) public OperationResponse RegisterOpenIdUser(LoginModel credentials)
{ {
@@ -115,21 +115,21 @@ namespace CarCareTracker.Logic
var existingToken = _tokenData.GetTokenRecordByBody(credentials.Token); var existingToken = _tokenData.GetTokenRecordByBody(credentials.Token);
if (existingToken.Id == default || existingToken.EmailAddress != credentials.EmailAddress) if (existingToken.Id == default || existingToken.EmailAddress != credentials.EmailAddress)
{ {
return new OperationResponse { Success = false, Message = "Invalid Token" }; return OperationResponse.Failed("Invalid Token");
} }
if (string.IsNullOrWhiteSpace(credentials.EmailAddress) || string.IsNullOrWhiteSpace(credentials.UserName)) if (string.IsNullOrWhiteSpace(credentials.EmailAddress) || string.IsNullOrWhiteSpace(credentials.UserName))
{ {
return new OperationResponse { Success = false, Message = "Username cannot be blank" }; return OperationResponse.Failed("Username cannot be blank");
} }
var existingUser = _userData.GetUserRecordByUserName(credentials.UserName); var existingUser = _userData.GetUserRecordByUserName(credentials.UserName);
if (existingUser.Id != default) if (existingUser.Id != default)
{ {
return new OperationResponse { Success = false, Message = "Username already taken" }; return OperationResponse.Failed("Username already taken");
} }
var existingUserWithEmail = _userData.GetUserRecordByEmailAddress(credentials.EmailAddress); var existingUserWithEmail = _userData.GetUserRecordByEmailAddress(credentials.EmailAddress);
if (existingUserWithEmail.Id != default) if (existingUserWithEmail.Id != default)
{ {
return new OperationResponse { Success = false, Message = "A user with that email already exists" }; return OperationResponse.Failed("A user with that email already exists");
} }
_tokenData.DeleteToken(existingToken.Id); _tokenData.DeleteToken(existingToken.Id);
var newUser = new UserData() var newUser = new UserData()
@@ -141,11 +141,11 @@ namespace CarCareTracker.Logic
var result = _userData.SaveUserRecord(newUser); var result = _userData.SaveUserRecord(newUser);
if (result) if (result)
{ {
return new OperationResponse { Success = true, Message = "You will be logged in briefly." }; return OperationResponse.Succeed("You will be logged in briefly.");
} }
else else
{ {
return new OperationResponse { Success = false, Message = "Something went wrong, please try again later." }; return OperationResponse.Failed("Something went wrong, please try again later.");
} }
} }
//handles user registration //handles user registration
@@ -155,22 +155,22 @@ namespace CarCareTracker.Logic
var existingToken = _tokenData.GetTokenRecordByBody(credentials.Token); var existingToken = _tokenData.GetTokenRecordByBody(credentials.Token);
if (existingToken.Id == default || existingToken.EmailAddress != credentials.EmailAddress) if (existingToken.Id == default || existingToken.EmailAddress != credentials.EmailAddress)
{ {
return new OperationResponse { Success = false, Message = "Invalid Token" }; return OperationResponse.Failed("Invalid Token");
} }
//token is valid, check if username and password is acceptable and that username is unique. //token is valid, check if username and password is acceptable and that username is unique.
if (string.IsNullOrWhiteSpace(credentials.EmailAddress) || string.IsNullOrWhiteSpace(credentials.UserName) || string.IsNullOrWhiteSpace(credentials.Password)) if (string.IsNullOrWhiteSpace(credentials.EmailAddress) || string.IsNullOrWhiteSpace(credentials.UserName) || string.IsNullOrWhiteSpace(credentials.Password))
{ {
return new OperationResponse { Success = false, Message = "Neither username nor password can be blank" }; return OperationResponse.Failed("Neither username nor password can be blank");
} }
var existingUser = _userData.GetUserRecordByUserName(credentials.UserName); var existingUser = _userData.GetUserRecordByUserName(credentials.UserName);
if (existingUser.Id != default) if (existingUser.Id != default)
{ {
return new OperationResponse { Success = false, Message = "Username already taken" }; return OperationResponse.Failed("Username already taken");
} }
var existingUserWithEmail = _userData.GetUserRecordByEmailAddress(credentials.EmailAddress); var existingUserWithEmail = _userData.GetUserRecordByEmailAddress(credentials.EmailAddress);
if (existingUserWithEmail.Id != default) if (existingUserWithEmail.Id != default)
{ {
return new OperationResponse { Success = false, Message = "A user with that email already exists" }; return OperationResponse.Failed("A user with that email already exists");
} }
//username is unique then we delete the token and create the user. //username is unique then we delete the token and create the user.
_tokenData.DeleteToken(existingToken.Id); _tokenData.DeleteToken(existingToken.Id);
@@ -183,11 +183,11 @@ namespace CarCareTracker.Logic
var result = _userData.SaveUserRecord(newUser); var result = _userData.SaveUserRecord(newUser);
if (result) if (result)
{ {
return new OperationResponse { Success = true, Message = "You will be redirected to the login page briefly." }; return OperationResponse.Succeed("You will be redirected to the login page briefly.");
} }
else else
{ {
return new OperationResponse { Success = false, Message = "Something went wrong, please try again later." }; return OperationResponse.Failed();
} }
} }
/// <summary> /// <summary>
@@ -205,24 +205,24 @@ namespace CarCareTracker.Logic
} }
//for security purposes we want to always return true for this method. //for security purposes we want to always return true for this method.
//otherwise someone can spam the reset password method to sniff out users. //otherwise someone can spam the reset password method to sniff out users.
return new OperationResponse { Success = true, Message = "If your user exists in the system you should receive an email shortly with instructions on how to proceed." }; return OperationResponse.Succeed("If your user exists in the system you should receive an email shortly with instructions on how to proceed.");
} }
public OperationResponse ResetPasswordByUser(LoginModel credentials) public OperationResponse ResetPasswordByUser(LoginModel credentials)
{ {
var existingToken = _tokenData.GetTokenRecordByBody(credentials.Token); var existingToken = _tokenData.GetTokenRecordByBody(credentials.Token);
if (existingToken.Id == default || existingToken.EmailAddress != credentials.EmailAddress) if (existingToken.Id == default || existingToken.EmailAddress != credentials.EmailAddress)
{ {
return new OperationResponse { Success = false, Message = "Invalid Token" }; return OperationResponse.Failed("Invalid Token");
} }
if (string.IsNullOrWhiteSpace(credentials.Password)) if (string.IsNullOrWhiteSpace(credentials.Password))
{ {
return new OperationResponse { Success = false, Message = "New Password cannot be blank" }; return OperationResponse.Failed("New Password cannot be blank");
} }
//if token is valid. //if token is valid.
var existingUser = _userData.GetUserRecordByEmailAddress(credentials.EmailAddress); var existingUser = _userData.GetUserRecordByEmailAddress(credentials.EmailAddress);
if (existingUser.Id == default) if (existingUser.Id == default)
{ {
return new OperationResponse { Success = false, Message = "Unable to locate user" }; return OperationResponse.Failed("Unable to locate user");
} }
existingUser.Password = GetHash(credentials.Password); existingUser.Password = GetHash(credentials.Password);
var result = _userData.SaveUserRecord(existingUser); var result = _userData.SaveUserRecord(existingUser);
@@ -230,10 +230,10 @@ namespace CarCareTracker.Logic
_tokenData.DeleteToken(existingToken.Id); _tokenData.DeleteToken(existingToken.Id);
if (result) if (result)
{ {
return new OperationResponse { Success = true, Message = "Password resetted, you will be redirected to login page shortly." }; return OperationResponse.Succeed("Password resetted, you will be redirected to login page shortly.");
} else } else
{ {
return new OperationResponse { Success = false, Message = StaticHelper.GenericErrorMessage }; return OperationResponse.Failed();
} }
} }
/// <summary> /// <summary>
@@ -310,7 +310,7 @@ namespace CarCareTracker.Logic
var existingToken = _tokenData.GetTokenRecordByEmailAddress(emailAddress); var existingToken = _tokenData.GetTokenRecordByEmailAddress(emailAddress);
if (existingToken.Id != default) if (existingToken.Id != default)
{ {
return new OperationResponse { Success = false, Message = "There is an existing token tied to this email address" }; return OperationResponse.Failed("There is an existing token tied to this email address");
} }
var token = new Token() var token = new Token()
{ {
@@ -323,16 +323,16 @@ namespace CarCareTracker.Logic
result = _mailHelper.NotifyUserForRegistration(emailAddress, token.Body).Success; result = _mailHelper.NotifyUserForRegistration(emailAddress, token.Body).Success;
if (!result) if (!result)
{ {
return new OperationResponse { Success = false, Message = "Token Generated, but Email failed to send, please check your SMTP settings." }; return OperationResponse.Failed("Token Generated, but Email failed to send, please check your SMTP settings.");
} }
} }
if (result) if (result)
{ {
return new OperationResponse { Success = true, Message = "Token Generated!" }; return OperationResponse.Succeed("Token Generated!");
} }
else else
{ {
return new OperationResponse { Success = false, Message = StaticHelper.GenericErrorMessage }; return OperationResponse.Failed();
} }
} }
public bool DeleteUserToken(int tokenId) public bool DeleteUserToken(int tokenId)
@@ -351,18 +351,18 @@ namespace CarCareTracker.Logic
var existingUser = _userData.GetUserRecordByUserName(credentials.UserName); var existingUser = _userData.GetUserRecordByUserName(credentials.UserName);
if (existingUser.Id == default) if (existingUser.Id == default)
{ {
return new OperationResponse { Success = false, Message = "Unable to find user" }; return OperationResponse.Failed("Unable to find user");
} }
var newPassword = Guid.NewGuid().ToString().Substring(0, 8); var newPassword = Guid.NewGuid().ToString().Substring(0, 8);
existingUser.Password = GetHash(newPassword); existingUser.Password = GetHash(newPassword);
var result = _userData.SaveUserRecord(existingUser); var result = _userData.SaveUserRecord(existingUser);
if (result) if (result)
{ {
return new OperationResponse { Success = true, Message = newPassword }; return OperationResponse.Succeed(newPassword);
} }
else else
{ {
return new OperationResponse { Success = false, Message = "Something went wrong, please try again later." }; return OperationResponse.Failed();
} }
} }
#endregion #endregion

View File

@@ -51,16 +51,16 @@ namespace CarCareTracker.Logic
var userAccess = _userAccess.GetUserAccessByVehicleAndUserId(existingUser.Id, vehicleId); var userAccess = _userAccess.GetUserAccessByVehicleAndUserId(existingUser.Id, vehicleId);
if (userAccess != null) if (userAccess != null)
{ {
return new OperationResponse { Success = false, Message = "User is already a collaborator" }; return OperationResponse.Failed("User is already a collaborator");
} }
var result = AddUserAccessToVehicle(existingUser.Id, vehicleId); var result = AddUserAccessToVehicle(existingUser.Id, vehicleId);
if (result) if (result)
{ {
return new OperationResponse { Success = true, Message = "Collaborator Added" }; return OperationResponse.Succeed("Collaborator Added");
} }
return new OperationResponse { Success = false, Message = StaticHelper.GenericErrorMessage }; return OperationResponse.Failed();
} }
return new OperationResponse { Success = false, Message = $"Unable to find user {username} in the system" }; return OperationResponse.Failed($"Unable to find user {username} in the system");
} }
public bool DeleteCollaboratorFromVehicle(int userId, int vehicleId) public bool DeleteCollaboratorFromVehicle(int userId, int vehicleId)
{ {

View File

@@ -1,8 +1,33 @@
namespace CarCareTracker.Models using CarCareTracker.Helper;
namespace CarCareTracker.Models
{ {
public class OperationResponse public class OperationResponseBase
{ {
public bool Success { get; set; } public bool Success { get; set; }
public string Message { get; set; } public string Message { get; set; }
} }
public class OperationResponse: OperationResponseBase
{
public static OperationResponse Succeed(string message = "")
{
return new OperationResponse { Success = true, Message = message };
}
public static OperationResponse Failed(string message = "")
{
if (string.IsNullOrWhiteSpace(message))
{
message = StaticHelper.GenericErrorMessage;
}
return new OperationResponse { Success = false, Message = message};
}
public static OperationResponse Conditional(bool result, string successMessage = "", string errorMessage = "")
{
if (string.IsNullOrWhiteSpace(errorMessage))
{
errorMessage = StaticHelper.GenericErrorMessage;
}
return new OperationResponse { Success = result, Message = result ? successMessage : errorMessage };
}
}
} }

View File

@@ -42,6 +42,7 @@
function deleteCollaborator(userId, vehicleId) { function deleteCollaborator(userId, vehicleId) {
$.post('/Vehicle/DeleteCollaboratorFromVehicle', {userId: userId, vehicleId: vehicleId}, function(data){ $.post('/Vehicle/DeleteCollaboratorFromVehicle', {userId: userId, vehicleId: vehicleId}, function(data){
if (data) { if (data) {
successToast('Collaborator Removed');
refreshCollaborators(); refreshCollaborators();
} else { } else {
errorToast(genericErrorMessage()); errorToast(genericErrorMessage());
@@ -68,6 +69,7 @@
var vehicleId = GetVehicleId().vehicleId; var vehicleId = GetVehicleId().vehicleId;
$.post('/Vehicle/AddCollaboratorsToVehicle', { username: result.value.userName, vehicleId: vehicleId }, function (data) { $.post('/Vehicle/AddCollaboratorsToVehicle', { username: result.value.userName, vehicleId: vehicleId }, function (data) {
if (data.success) { if (data.success) {
successToast(data.message);
refreshCollaborators(); refreshCollaborators();
} else { } else {
errorToast(data.message) errorToast(data.message)