diff --git a/Marco.Pms.Services/Controllers/AttendanceController.cs b/Marco.Pms.Services/Controllers/AttendanceController.cs index df91456..6655e4f 100644 --- a/Marco.Pms.Services/Controllers/AttendanceController.cs +++ b/Marco.Pms.Services/Controllers/AttendanceController.cs @@ -1,4 +1,5 @@ -using Marco.Pms.DataAccess.Data; +using System.Globalization; +using Marco.Pms.DataAccess.Data; using Marco.Pms.Model.AttendanceModule; using Marco.Pms.Model.Dtos.Attendance; using Marco.Pms.Model.Employees; @@ -9,7 +10,6 @@ using MarcoBMS.Services.Helpers; using Microsoft.AspNetCore.Mvc; using Microsoft.CodeAnalysis; using Microsoft.EntityFrameworkCore; -using System.Globalization; namespace MarcoBMS.Services.Controllers { @@ -59,7 +59,7 @@ namespace MarcoBMS.Services.Controllers if (date != null && DateOnly.TryParse(date, out forDate) == false) { - return StatusCode(400, ApiResponse.SuccessResponse(date, "Invalid Date", 400));// new { error = ex.Message }); + return BadRequest(ApiResponse.ErrorResponse("Invalid Date", "Invalid Date", 400)); } List lstAttendance = await _context.AttendanceLogs.Where(c => c.EmployeeID == employeeid && c.TenantId == TenantId).ToListAsync(); @@ -85,18 +85,16 @@ namespace MarcoBMS.Services.Controllers if (dateFrom != null && DateTime.TryParse(dateFrom, out fromDate) == false) { - return StatusCode(400, ApiResponse.SuccessResponse(dateFrom, "Invalid Date", 400));// new { error = ex.Message }); - + return BadRequest(ApiResponse.ErrorResponse("Invalid Date", "Invalid Date", 400)); } if (dateTo != null && DateTime.TryParse(dateTo, out toDate) == false) { - return StatusCode(400, ApiResponse.SuccessResponse(dateTo, "Invalid Date", 400));// new { error = ex.Message }); - + return BadRequest(ApiResponse.ErrorResponse("Invalid Date", "Invalid Date", 400)); } if (projectId <= 0) { - return BadRequest("Project ID is required and must be greater than zero."); + return BadRequest(ApiResponse.ErrorResponse("Project ID is required and must be greater than zero.", "Project ID is required and must be greater than zero.", 400)); } var result = new List(); @@ -151,12 +149,12 @@ namespace MarcoBMS.Services.Controllers if (date != null && DateTime.TryParse(date, out forDate) == false) { - return StatusCode(400, ApiResponse.SuccessResponse(date, "Invalid Date", 400));// new { error = ex.Message }); + return BadRequest(ApiResponse.ErrorResponse("Invalid Date", "Invalid Date", 400)); } if (projectId <= 0) { - return BadRequest("Project ID is required and must be greater than zero."); + return BadRequest(ApiResponse.ErrorResponse("Project ID is required and must be greater than zero.", "Project ID is required and must be greater than zero.", 400)); } var result = new List(); @@ -204,7 +202,13 @@ namespace MarcoBMS.Services.Controllers public async Task RecordAttendance([FromBody] RecordAttendanceDot recordAttendanceDot) { if (!ModelState.IsValid) - return BadRequest(ModelState); + { + var errors = ModelState.Values + .SelectMany(v => v.Errors) + .Select(e => e.ErrorMessage) + .ToList(); + return BadRequest(ApiResponse.ErrorResponse("Invalid data", errors, 400)); + } int TenantId = GetTenantId(); @@ -233,13 +237,10 @@ namespace MarcoBMS.Services.Controllers //string timeString = "10:30 PM"; // Format: "hh:mm tt" - //DateTime finalDateTime = GetDateFromTimeStamp(recordAttendanceDot, recordAttendanceDot.MarkTime); - attendance.OutTime = finalDateTime; } else if (recordAttendanceDot.Action == ATTENDANCE_MARK_TYPE.REQUEST_REGULARIZE) { - //DateTime finalDateTime = GetDateFromTimeStamp(recordAttendanceDot, recordAttendanceDot.MarkTime); attendance.OutTime = finalDateTime; attendance.Activity = ATTENDANCE_MARK_TYPE.REQUEST_REGULARIZE; @@ -274,7 +275,6 @@ namespace MarcoBMS.Services.Controllers attendance.Date = DateTime.UtcNow; - //DateTime finalDateTime = GetDateFromTimeStamp(recordAttendanceDot, recordAttendanceDot.MarkTime); attendance.InTime = finalDateTime; attendance.OutTime = null; @@ -332,12 +332,9 @@ namespace MarcoBMS.Services.Controllers catch (Exception ex) { await transaction.RollbackAsync(); // Rollback on failure - return StatusCode(500, ApiResponse.SuccessResponse(new object(), ex.Message, 500));// new { error = ex.Message }); + return BadRequest(ApiResponse.ErrorResponse(ex.Message, ex, 400)); } - - - return Ok(ApiResponse.SuccessResponse("success", "Roles modified.", 200)); } private static DateTime GetDateFromTimeStamp(RecordAttendanceDot recordAttendanceDot, string timeString) diff --git a/Marco.Pms.Services/Controllers/AuthController.cs b/Marco.Pms.Services/Controllers/AuthController.cs index 58a4a6c..de63975 100644 --- a/Marco.Pms.Services/Controllers/AuthController.cs +++ b/Marco.Pms.Services/Controllers/AuthController.cs @@ -1,19 +1,16 @@ -using Marco.Pms.DataAccess.Data; +using System.Net; +using Marco.Pms.DataAccess.Data; using Marco.Pms.Model.Authentication; using Marco.Pms.Model.Dtos; using Marco.Pms.Model.Dtos.Util; using Marco.Pms.Model.Employees; using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Utilities; -using Marco.Pms.Model.ViewModels.Employee; using MarcoBMS.Services.Helpers; using MarcoBMS.Services.Service; -using Microsoft.AspNetCore.Cors; using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Identity.Data; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; -using System.Net; namespace MarcoBMS.Services.Controllers { @@ -48,16 +45,19 @@ namespace MarcoBMS.Services.Controllers if (user == null || !await _userManager.CheckPasswordAsync(user, loginDto.Password)) { - return Unauthorized("Invalid username or password."); + return Unauthorized(ApiResponse.ErrorResponse("Invalid username or password.", "Invalid username or password.", 401)); + //return Unauthorized("Invalid username or password."); } if (!user.IsActive) { - return BadRequest("User is In Active"); + return BadRequest(ApiResponse.ErrorResponse("User is In Active", "User is In Active", 400)); + //return BadRequest("User is In Active"); } if (!user.EmailConfirmed) { - return BadRequest("Your email is not verified, Please verify your email"); + return BadRequest(ApiResponse.ErrorResponse("Your email is not verified, Please verify your email", "Your email is not verified, Please verify your email", 400)); + //return BadRequest("Your email is not verified, Please verify your email"); } Employee emp = await _employeeHelper.GetEmployeeByApplicationUserID(user.Id); //var refreshToken = GenerateRefreshToken(); @@ -74,7 +74,8 @@ namespace MarcoBMS.Services.Controllers { if (string.IsNullOrEmpty(logoutDto.RefreshToken)) { - return BadRequest(new { Message = "Refresh token is required" }); + return BadRequest(ApiResponse.ErrorResponse("Refresh token is required", "Refresh token is required", 400)); + } try @@ -83,7 +84,8 @@ namespace MarcoBMS.Services.Controllers bool isRevoked = await _refreshTokenService.RevokeRefreshTokenAsync(logoutDto.RefreshToken); if (!isRevoked) - return Unauthorized(new { Message = "Invalid or expired refresh token" }); + return Unauthorized(ApiResponse.ErrorResponse("Invalid or expired refresh token", "Invalid or expired refresh token", 401)); + // Optional: Blacklist the access token (JWT) string jwtToken = HttpContext.Request.Headers["Authorization"].ToString().Replace("Bearer ", ""); @@ -91,38 +93,22 @@ namespace MarcoBMS.Services.Controllers { await _refreshTokenService.BlacklistJwtTokenAsync(jwtToken); } - - return Ok(new { Message = "Logged out successfully" }); + return Ok(ApiResponse.SuccessResponse(new { }, "Logged out successfully", 200)); } catch (Exception ex) { // _logger.LogError(ex, "Error during logout"); - return StatusCode(500, new { Message = "Internal server error" }); + return BadRequest(ApiResponse.ErrorResponse("Internal server error", "Internal server error", 500)); } } - - [HttpPost("register")] - public async Task Register([FromBody] RegisterDto registerDto) - { - var user = new IdentityUser { UserName = registerDto.Username, Email = registerDto.Email }; - var result = await _userManager.CreateAsync(user, registerDto.Password); - - if (!result.Succeeded) - { - return BadRequest(result.Errors); - } - - return Ok("User registered successfully."); - } - [HttpPost("refresh-token")] public async Task RefreshToken([FromBody] RefreshTokenDto refreshTokenDto) { var refreshToken = await _refreshTokenService.GetRefreshToken(refreshTokenDto.RefreshToken); if (refreshToken == null || refreshToken.ExpiryDate < DateTime.UtcNow) { - return Unauthorized("Invalid or expired refresh token."); + return Unauthorized(ApiResponse.ErrorResponse("Invalid or expired refresh token.", "Invalid or expired refresh token.", 401)); } // Mark token as used @@ -131,7 +117,7 @@ namespace MarcoBMS.Services.Controllers // Generate new JWT token and refresh token var user = await _userManager.FindByIdAsync(refreshToken.UserId); if (user == null) - return BadRequest("Invalid request."); + return BadRequest(ApiResponse.ErrorResponse("Invalid request.", "Invalid request.", 400)); Employee emp = await _employeeHelper.GetEmployeeByApplicationUserID(user.Id); @@ -145,7 +131,8 @@ namespace MarcoBMS.Services.Controllers public async Task ForgotPassword([FromBody] ForgotPasswordDto forgotPasswordDto) { var user = await _userManager.FindByEmailAsync(forgotPasswordDto.Email); - if (user == null) return NotFound("User not found."); + if (user == null) + return NotFound(ApiResponse.ErrorResponse("User not found.", "User not found.", 404)); /* SEND USER REGISTRATION MAIL*/ var token = await _userManager.GeneratePasswordResetTokenAsync(user); @@ -161,7 +148,7 @@ namespace MarcoBMS.Services.Controllers { var user = await _userManager.FindByEmailAsync(model.Email); if (user == null) - return BadRequest("Invalid request."); + return BadRequest(ApiResponse.ErrorResponse("Invalid request.", "Invalid request.", 400)); // var isTokenValid = await _userManager.VerifyUserTokenAsync(user,UserManager.ResetPasswordTokenPurpose, model.ResetCode); var isTokenValid = await _userManager.VerifyUserTokenAsync( @@ -181,7 +168,7 @@ namespace MarcoBMS.Services.Controllers model.Token ); if(!isDecodedTokenValid) - return BadRequest("Invalid or expired token."); + return BadRequest(ApiResponse.ErrorResponse("Invalid request.", "Invalid request.", 400)); token = model.Token; } @@ -193,13 +180,16 @@ namespace MarcoBMS.Services.Controllers var result = await _userManager.ResetPasswordAsync(user, token, model.NewPassword); if (!result.Succeeded) - return BadRequest(result.Errors); + { + var errors = result.Errors.Select(e => e.Description).ToList(); + return BadRequest(ApiResponse.ErrorResponse("Failed to Change password", errors, 400)); + } return Ok(ApiResponse.SuccessResponse(result.Succeeded, "Password reset successfully.", 200)); } - + [HttpPost("sendmail")] public async Task SendEmail([FromBody] EmailDot emailDot) { @@ -209,7 +199,7 @@ namespace MarcoBMS.Services.Controllers var user = await _userManager.FindByEmailAsync(emailDot.ToEmail); if (user == null) { - return BadRequest("User not found."); + return BadRequest(ApiResponse.ErrorResponse("User not found.", "User not found.", 400)); } /* New User*/ @@ -229,8 +219,7 @@ namespace MarcoBMS.Services.Controllers var resetLink = $"{_configuration["AppSettings:WebFrontendUrl"]}/reset-password?token={WebUtility.UrlEncode(token)}"; await _emailSender.SendResetPasswordEmail(user.Email, "", resetLink); - - return Ok("Password reset link sent."); + return Ok(ApiResponse.SuccessResponse(new {}, "Password reset link sent.", 200)); } } } diff --git a/Marco.Pms.Services/Controllers/EmployeeController.cs b/Marco.Pms.Services/Controllers/EmployeeController.cs index 3112008..4a974ea 100644 --- a/Marco.Pms.Services/Controllers/EmployeeController.cs +++ b/Marco.Pms.Services/Controllers/EmployeeController.cs @@ -1,4 +1,6 @@ -using Marco.Pms.DataAccess.Data; +using System.Data; +using System.Net; +using Marco.Pms.DataAccess.Data; using Marco.Pms.Model.Dtos.Employees; using Marco.Pms.Model.Employees; using Marco.Pms.Model.Entitlements; @@ -12,8 +14,6 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; -using System.Data; -using System.Net; namespace MarcoBMS.Services.Controllers { @@ -49,7 +49,11 @@ namespace MarcoBMS.Services.Controllers { if (!ModelState.IsValid) { - return BadRequest(ModelState); + var errors = ModelState.Values + .SelectMany(v => v.Errors) + .Select(e => e.ErrorMessage) + .ToList(); + return BadRequest(ApiResponse.ErrorResponse("Invalid data", errors, 400)); } int tenantId = GetTenantId(); @@ -74,7 +78,7 @@ namespace MarcoBMS.Services.Controllers } else { - return Ok(ApiResponse.SuccessResponse(new List(), "Success.", 200)); + return BadRequest(ApiResponse.ErrorResponse("This employee has no assigned permissions.", "This employee has no assigned permissions.", 400)); } } @@ -83,7 +87,13 @@ namespace MarcoBMS.Services.Controllers public async Task ManageRoles([FromBody] List employeeRoleDots) { if (!ModelState.IsValid) - return BadRequest(ModelState); + { + var errors = ModelState.Values + .SelectMany(v => v.Errors) + .Select(e => e.ErrorMessage) + .ToList(); + return BadRequest(ApiResponse.ErrorResponse("Invalid data", errors, 400)); + } int TenantId = GetTenantId(); try @@ -108,6 +118,7 @@ namespace MarcoBMS.Services.Controllers } catch (Exception ex) { + return BadRequest(ApiResponse.ErrorResponse(ex.Message, ex, 400)); } return Ok(ApiResponse.SuccessResponse("success", "Roles modified.", 200)); } @@ -118,7 +129,11 @@ namespace MarcoBMS.Services.Controllers { if (!ModelState.IsValid) { - return BadRequest(ModelState); + var errors = ModelState.Values + .SelectMany(v => v.Errors) + .Select(e => e.ErrorMessage) + .ToList(); + return BadRequest(ApiResponse.ErrorResponse("Invalid data", errors, 400)); } var result = await _employeeHelper.GetEmployeeByProjectId(GetTenantId(), projectid); @@ -131,7 +146,12 @@ namespace MarcoBMS.Services.Controllers { if (!ModelState.IsValid) { - return BadRequest(ModelState); + var errors = ModelState.Values + .SelectMany(v => v.Errors) + .Select(e => e.ErrorMessage) + .ToList(); + return BadRequest(ApiResponse.ErrorResponse("Invalid data", errors, 400)); + } var result = await _employeeHelper.SearchEmployeeByProjectId(GetTenantId(), name.ToLower(), projectid); @@ -144,7 +164,11 @@ namespace MarcoBMS.Services.Controllers { if (!ModelState.IsValid) { - return BadRequest(ModelState); + var errors = ModelState.Values + .SelectMany(v => v.Errors) + .Select(e => e.ErrorMessage) + .ToList(); + return BadRequest(ApiResponse.ErrorResponse("Invalid data", errors, 400)); } Employee emp = await _employeeHelper.GetEmployeeByID(employeeId); @@ -168,7 +192,7 @@ namespace MarcoBMS.Services.Controllers public async Task CreateUser([FromForm] CreateUserDto model) { if (model == null) - return BadRequest("Invalid user data."); + return BadRequest(ApiResponse.ErrorResponse("Invalid data", "Invaild Data", 400)); int TenantId = GetTenantId(); string responsemessage = ""; @@ -196,7 +220,7 @@ namespace MarcoBMS.Services.Controllers // Create Employee record if missing //Employee newEmployee = GetNewEmployeeModel(model, TenantId, existingUser.Id); //_context.Employees.Add(newEmployee); - return BadRequest("You cannot use this email"); + return BadRequest(ApiResponse.ErrorResponse("You cannot use this email", "You cannot use this email", 400)); } @@ -213,7 +237,7 @@ namespace MarcoBMS.Services.Controllers // Create Identity User var result = await _userManager.CreateAsync(user, "User@123"); if (!result.Succeeded) - return BadRequest(result.Errors); + return Ok(ApiResponse.ErrorResponse("Failed to create user", result.Errors, 400)); Employee newEmployee = GetNewEmployeeModel(model, TenantId, user.Id); _context.Employees.Add(newEmployee); @@ -250,8 +274,7 @@ namespace MarcoBMS.Services.Controllers responsemessage = "User created successfully."; } - - return Ok(new { message = responsemessage }); + return Ok(ApiResponse.SuccessResponse("Success.",responsemessage, 200)); } private static Employee GetNewEmployeeModel(CreateUserDto model, int TenantId, string? ApplicationUserId) diff --git a/Marco.Pms.Services/Controllers/FeatureController.cs b/Marco.Pms.Services/Controllers/FeatureController.cs index f4e8c7b..cfc3e29 100644 --- a/Marco.Pms.Services/Controllers/FeatureController.cs +++ b/Marco.Pms.Services/Controllers/FeatureController.cs @@ -1,6 +1,7 @@ using Marco.Pms.DataAccess.Data; using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Mapper; +using Marco.Pms.Model.Utilities; using Marco.Pms.Model.ViewModels; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; @@ -50,7 +51,7 @@ namespace MarcoBMS.Services.Controllers ModuleName = c.Module.Name, IsActive = c.IsActive }); - return Ok(rolesVM); + return Ok(ApiResponse.SuccessResponse(rolesVM, "Success.", 200)); } } } diff --git a/Marco.Pms.Services/Controllers/FileController.cs b/Marco.Pms.Services/Controllers/FileController.cs index ffec508..168418b 100644 --- a/Marco.Pms.Services/Controllers/FileController.cs +++ b/Marco.Pms.Services/Controllers/FileController.cs @@ -1,5 +1,4 @@ using Marco.Pms.DataAccess.Data; -using Marco.Pms.Model.Dtos.Employees; using Marco.Pms.Model.Utilities; using Microsoft.AspNetCore.Mvc; @@ -22,7 +21,7 @@ namespace MarcoBMS.Services.Controllers public async Task FileUploadDemo([FromForm] DemoEmployeeModel model) { string imageName = await Saveimage(model.ImageFile); - return Ok(); + return Ok(ApiResponse.SuccessResponse("Success.", "Success.", 200)); } [NonAction] diff --git a/Marco.Pms.Services/Controllers/ProjectController.cs b/Marco.Pms.Services/Controllers/ProjectController.cs index f76f613..f368ae7 100644 --- a/Marco.Pms.Services/Controllers/ProjectController.cs +++ b/Marco.Pms.Services/Controllers/ProjectController.cs @@ -41,11 +41,16 @@ namespace MarcoBMS.Services.Controllers { if (!ModelState.IsValid) { - return BadRequest(ModelState); + var errors = ModelState.Values + .SelectMany(v => v.Errors) + .Select(e => e.ErrorMessage) + .ToList(); + return BadRequest(ApiResponse.ErrorResponse("Invalid data", errors, 400)); + } List project = await _context.Projects.Where(c=>c.TenantId == _userHelper.GetTenantId()).ToListAsync(); - return Ok(project); + return Ok(ApiResponse.SuccessResponse(project, "Success.", 200)); } [HttpGet("get/{id:int}")] @@ -53,12 +58,17 @@ namespace MarcoBMS.Services.Controllers { if (!ModelState.IsValid) { - return BadRequest(ModelState); + var errors = ModelState.Values + .SelectMany(v => v.Errors) + .Select(e => e.ErrorMessage) + .ToList(); + return BadRequest(ApiResponse.ErrorResponse("Invalid data", errors, 400)); + } - var project = await _context.Projects.Where(c => c.TenantId == _userHelper.GetTenantId() && c.Id == id).SingleOrDefaultAsync(); + var project = await _context.Projects.Where(c => c.TenantId == _userHelper.GetTenantId() && c.Id == id).SingleOrDefaultAsync(); - return Ok(project); + return Ok(ApiResponse.SuccessResponse(project, "Success.", 200)); } [HttpGet("details/{id:int}")] @@ -68,14 +78,19 @@ namespace MarcoBMS.Services.Controllers if (!ModelState.IsValid) { - return BadRequest(ModelState); + var errors = ModelState.Values + .SelectMany(v => v.Errors) + .Select(e => e.ErrorMessage) + .ToList(); + return BadRequest(ApiResponse.ErrorResponse("Invalid data", errors, 400)); + } var project = await _context.Projects.Where(c => c.TenantId == _userHelper.GetTenantId() && c.Id == id).Include(c=> c.ProjectStatus).SingleOrDefaultAsync(); // includeProperties: "ProjectStatus,Tenant"); //_context.Stock.FindAsync(id); if (project == null) { - return Ok(new ProjectVM()); + return NotFound(ApiResponse.ErrorResponse("Project not found", "Project not found", 404)); } else @@ -124,8 +139,7 @@ namespace MarcoBMS.Services.Controllers } projectVM.Buildings.Add(buildVM); } - - return Ok(projectVM); + return Ok(ApiResponse.SuccessResponse(projectVM, "Success.", 200)); } @@ -170,7 +184,12 @@ namespace MarcoBMS.Services.Controllers { if (!ModelState.IsValid) { - return BadRequest(ModelState); + var errors = ModelState.Values + .SelectMany(v => v.Errors) + .Select(e => e.ErrorMessage) + .ToList(); + return BadRequest(ApiResponse.ErrorResponse("Invalid data", errors, 400)); + } int TenantId = GetTenantId(); @@ -189,7 +208,12 @@ namespace MarcoBMS.Services.Controllers { if (!ModelState.IsValid) { - return BadRequest(ModelState); + var errors = ModelState.Values + .SelectMany(v => v.Errors) + .Select(e => e.ErrorMessage) + .ToList(); + return BadRequest(ApiResponse.ErrorResponse("Invalid data", errors, 400)); + } try { @@ -206,7 +230,7 @@ namespace MarcoBMS.Services.Controllers } catch (Exception ex) { - return Ok(null); + return BadRequest(ApiResponse.ErrorResponse(ex.Message, ex, 400)); } } @@ -262,7 +286,12 @@ namespace MarcoBMS.Services.Controllers { if (!ModelState.IsValid) { - return BadRequest(ModelState); + var errors = ModelState.Values + .SelectMany(v => v.Errors) + .Select(e => e.ErrorMessage) + .ToList(); + return BadRequest(ApiResponse.ErrorResponse("Invalid data", errors, 400)); + } int TenantId = GetTenantId(); @@ -297,7 +326,7 @@ namespace MarcoBMS.Services.Controllers } else { - return Ok(ApiResponse.ErrorResponse("Invalid Input Parameter", 422)); + return NotFound(ApiResponse.ErrorResponse("Invalid Input Parameter", 404)); } @@ -309,7 +338,12 @@ namespace MarcoBMS.Services.Controllers { if (!ModelState.IsValid) { - return BadRequest(ModelState); + var errors = ModelState.Values + .SelectMany(v => v.Errors) + .Select(e => e.ErrorMessage) + .ToList(); + return BadRequest(ApiResponse.ErrorResponse("Invalid data", errors, 400)); + } int TenantId = GetTenantId(); @@ -378,14 +412,14 @@ namespace MarcoBMS.Services.Controllers } } - catch (Exception ex) { } - - + catch (Exception ex) { + return Ok(ApiResponse.ErrorResponse(ex.Message,ex, 400)); + } } return Ok(ApiResponse.SuccessResponse(null, "Data saved successfully.", 200)); } - return BadRequest(ApiResponse.ErrorResponse("Invalid details.", new { id = "Work Item Details are not valid." }, 400)); + return BadRequest(ApiResponse.ErrorResponse("Invalid details.", "Work Item Details are not valid." , 400)); } @@ -416,7 +450,7 @@ namespace MarcoBMS.Services.Controllers return Ok(ApiResponse.SuccessResponse(null, "Data saved successfully.", 200)); } - return BadRequest(ApiResponse.ErrorResponse("Invalid details.", new { id = "Work Item Details are not valid." }, 400)); + return BadRequest(ApiResponse.ErrorResponse("Invalid details.", "Work Item Details are not valid.", 400)); } [HttpPost("manage-infra")] @@ -483,10 +517,11 @@ namespace MarcoBMS.Services.Controllers } } } + return Ok(ApiResponse.SuccessResponse(null, "Data saved successfully.", 200)); } - return Ok(); - } + return BadRequest(ApiResponse.ErrorResponse("Invalid details.", "Infra Details are not valid.", 400)); + } } } diff --git a/Marco.Pms.Services/Controllers/RolesController.cs b/Marco.Pms.Services/Controllers/RolesController.cs index b5e5dcd..1a2d23f 100644 --- a/Marco.Pms.Services/Controllers/RolesController.cs +++ b/Marco.Pms.Services/Controllers/RolesController.cs @@ -11,6 +11,7 @@ using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using System.Data; +using static System.Runtime.InteropServices.JavaScript.JSType; namespace MarcoBMS.Services.Controllers { @@ -49,8 +50,7 @@ namespace MarcoBMS.Services.Controllers Name = x.Name, Description = x.Description }).ToListAsync(); - - return Ok(roles); + return Ok(ApiResponse.SuccessResponse(roles, "Success.", 200)); } [HttpPost("jobrole")] @@ -61,7 +61,7 @@ namespace MarcoBMS.Services.Controllers int TenantId = GetTenantId(); if (await _context.JobRoles.AnyAsync(c => c.Name.ToLower() == createJobRoleDto.Name.ToLower() && c.TenantId == TenantId)) { - return Ok(ApiResponse.SuccessResponse(null, "Role with same name already Exists.", 200)); + return BadRequest(ApiResponse.ErrorResponse("Role with same name already Exists.", "Role with same name already Exists.", 400)); } else { @@ -77,10 +77,14 @@ namespace MarcoBMS.Services.Controllers { if (!ModelState.IsValid) { - return BadRequest(ModelState); + var errors = ModelState.Values + .SelectMany(v => v.Errors) + .Select(e => e.ErrorMessage) + .ToList(); + return BadRequest(ApiResponse.ErrorResponse("Invalid data", errors, 400)); } if (id != updateRoleDto.Id.ToString()) - return BadRequest("Role ID mismatch"); + return BadRequest(ApiResponse.ErrorResponse("Role ID mismatch", "Role ID mismatch",400)); try { @@ -94,7 +98,7 @@ namespace MarcoBMS.Services.Controllers } catch (Exception ex) { - return Ok(null); + return BadRequest(ApiResponse.ErrorResponse(ex.Message, ex, 400)); } } @@ -167,20 +171,26 @@ namespace MarcoBMS.Services.Controllers public async Task AddRole([FromBody] CreateApplicationRoleDto createRoleDto) { if (!ModelState.IsValid) - return BadRequest(ModelState); + { + var errors = ModelState.Values + .SelectMany(v => v.Errors) + .Select(e => e.ErrorMessage) + .ToList(); + return BadRequest(ApiResponse.ErrorResponse("Invalid data", errors, 400)); + } int TenantId = GetTenantId(); if (createRoleDto.FeaturesPermission == null || (createRoleDto.FeaturesPermission != null && createRoleDto.FeaturesPermission.Count == 0)) { - return BadRequest(new { Message = "Feature Permission is required." }); + return BadRequest(ApiResponse.ErrorResponse("Feature Permission is required.", "Feature Permission is required.", 400)); } bool roleExists = _context.ApplicationRoles .Any(r => r.TenantId == TenantId && r.Role.ToLower() == createRoleDto.Role.ToLower());// assuming role name is unique per tenant if (roleExists) { - return BadRequest(new {message = "Role already exists." }); + return BadRequest(ApiResponse.ErrorResponse("Role already exists.", "Role already exists.", 400)); } ApplicationRole role = createRoleDto.ToApplicationRoleFromCreateDto(TenantId); _context.ApplicationRoles.Add(role); @@ -196,7 +206,7 @@ namespace MarcoBMS.Services.Controllers } await _context.SaveChangesAsync(); - return CreatedAtAction(nameof(GetRoleById), new { id = role.Id }, role.ToRoleVMFromApplicationRole()); + return Ok(ApiResponse.SuccessResponse(role.ToRoleVMFromApplicationRole(), "Roles created successfully.", 200)); } [HttpPut("{id}")] @@ -204,7 +214,11 @@ namespace MarcoBMS.Services.Controllers { if (!ModelState.IsValid) { - return BadRequest(ModelState); + var errors = ModelState.Values + .SelectMany(v => v.Errors) + .Select(e => e.ErrorMessage) + .ToList(); + return BadRequest(ApiResponse.ErrorResponse("Invalid data", errors, 400)); } if (id != updateRoleDto.Id.ToString()) return BadRequest("Role ID mismatch"); @@ -217,13 +231,13 @@ namespace MarcoBMS.Services.Controllers ApplicationRole role = updateRoleDto.ToApplicationRoleFromUpdateDto(TenantId); if (role.TenantId != TenantId) - return Unauthorized(); + return Unauthorized(ApiResponse.ErrorResponse("You don't have any authority to update role", "You don't have any authority to update role", 401)); var projectModel = _context.ApplicationRoles.Update(role); if (projectModel == null) { - return NotFound("Project not found"); + return NotFound(ApiResponse.ErrorResponse("Project not found", "Project not found",404)); } bool modified = false; @@ -253,7 +267,7 @@ namespace MarcoBMS.Services.Controllers } catch (Exception ex) { - return Ok(ApiResponse.ErrorResponse( "RUnable to update roles perimssions.", 200)); + return BadRequest(ApiResponse.ErrorResponse(ex.Message,ex, 400)); } } @@ -266,10 +280,10 @@ namespace MarcoBMS.Services.Controllers var role = await _context.ApplicationRoles.FindAsync(id); if (role == null) - return NotFound(); + return NotFound(ApiResponse.ErrorResponse("Role not found", "Role not found", 404)); if (role.TenantId != TenantId) - return Unauthorized(); + return Unauthorized(ApiResponse.ErrorResponse("You don't have any authority", "You don't have any authority", 401)); var featurePermissions = await _context.RolePermissionMappings .Where(rfp => rfp.ApplicationRoleId == id) diff --git a/Marco.Pms.Services/Controllers/UserController.cs b/Marco.Pms.Services/Controllers/UserController.cs index c8ff79c..fc8b6ae 100644 --- a/Marco.Pms.Services/Controllers/UserController.cs +++ b/Marco.Pms.Services/Controllers/UserController.cs @@ -2,6 +2,7 @@ using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Mapper; using Marco.Pms.Model.Projects; +using Marco.Pms.Model.Utilities; using Marco.Pms.Model.ViewModels.Employee; using MarcoBMS.Services.Helpers; using Microsoft.AspNetCore.Authorization; @@ -65,7 +66,7 @@ namespace MarcoBMS.Services.Controllers }; - return Ok(profile); + return Ok(ApiResponse.SuccessResponse(profile, "Success", 200)); } } }