Changed Response format of all APIs

This commit is contained in:
ashutosh.nehete 2025-04-03 15:50:54 +05:30
parent 9c4b1639fe
commit 352b4fb40e
8 changed files with 172 additions and 113 deletions

View File

@ -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.AttendanceModule;
using Marco.Pms.Model.Dtos.Attendance; using Marco.Pms.Model.Dtos.Attendance;
using Marco.Pms.Model.Employees; using Marco.Pms.Model.Employees;
@ -9,7 +10,6 @@ using MarcoBMS.Services.Helpers;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using System.Globalization;
namespace MarcoBMS.Services.Controllers namespace MarcoBMS.Services.Controllers
{ {
@ -59,7 +59,7 @@ namespace MarcoBMS.Services.Controllers
if (date != null && DateOnly.TryParse(date, out forDate) == false) if (date != null && DateOnly.TryParse(date, out forDate) == false)
{ {
return StatusCode(400, ApiResponse<object>.SuccessResponse(date, "Invalid Date", 400));// new { error = ex.Message }); return BadRequest(ApiResponse<object>.ErrorResponse("Invalid Date", "Invalid Date", 400));
} }
List<AttendanceLog> lstAttendance = await _context.AttendanceLogs.Where(c => c.EmployeeID == employeeid && c.TenantId == TenantId).ToListAsync(); List<AttendanceLog> 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) if (dateFrom != null && DateTime.TryParse(dateFrom, out fromDate) == false)
{ {
return StatusCode(400, ApiResponse<object>.SuccessResponse(dateFrom, "Invalid Date", 400));// new { error = ex.Message }); return BadRequest(ApiResponse<object>.ErrorResponse("Invalid Date", "Invalid Date", 400));
} }
if (dateTo != null && DateTime.TryParse(dateTo, out toDate) == false) if (dateTo != null && DateTime.TryParse(dateTo, out toDate) == false)
{ {
return StatusCode(400, ApiResponse<object>.SuccessResponse(dateTo, "Invalid Date", 400));// new { error = ex.Message }); return BadRequest(ApiResponse<object>.ErrorResponse("Invalid Date", "Invalid Date", 400));
} }
if (projectId <= 0) if (projectId <= 0)
{ {
return BadRequest("Project ID is required and must be greater than zero."); return BadRequest(ApiResponse<object>.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<EmployeeAttendanceVM>(); var result = new List<EmployeeAttendanceVM>();
@ -151,12 +149,12 @@ namespace MarcoBMS.Services.Controllers
if (date != null && DateTime.TryParse(date, out forDate) == false) if (date != null && DateTime.TryParse(date, out forDate) == false)
{ {
return StatusCode(400, ApiResponse<object>.SuccessResponse(date, "Invalid Date", 400));// new { error = ex.Message }); return BadRequest(ApiResponse<object>.ErrorResponse("Invalid Date", "Invalid Date", 400));
} }
if (projectId <= 0) if (projectId <= 0)
{ {
return BadRequest("Project ID is required and must be greater than zero."); return BadRequest(ApiResponse<object>.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<EmployeeAttendanceVM>(); var result = new List<EmployeeAttendanceVM>();
@ -204,7 +202,13 @@ namespace MarcoBMS.Services.Controllers
public async Task<IActionResult> RecordAttendance([FromBody] RecordAttendanceDot recordAttendanceDot) public async Task<IActionResult> RecordAttendance([FromBody] RecordAttendanceDot recordAttendanceDot)
{ {
if (!ModelState.IsValid) if (!ModelState.IsValid)
return BadRequest(ModelState); {
var errors = ModelState.Values
.SelectMany(v => v.Errors)
.Select(e => e.ErrorMessage)
.ToList();
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
}
int TenantId = GetTenantId(); int TenantId = GetTenantId();
@ -233,13 +237,10 @@ namespace MarcoBMS.Services.Controllers
//string timeString = "10:30 PM"; // Format: "hh:mm tt" //string timeString = "10:30 PM"; // Format: "hh:mm tt"
//DateTime finalDateTime = GetDateFromTimeStamp(recordAttendanceDot, recordAttendanceDot.MarkTime);
attendance.OutTime = finalDateTime; attendance.OutTime = finalDateTime;
} }
else if (recordAttendanceDot.Action == ATTENDANCE_MARK_TYPE.REQUEST_REGULARIZE) else if (recordAttendanceDot.Action == ATTENDANCE_MARK_TYPE.REQUEST_REGULARIZE)
{ {
//DateTime finalDateTime = GetDateFromTimeStamp(recordAttendanceDot, recordAttendanceDot.MarkTime);
attendance.OutTime = finalDateTime; attendance.OutTime = finalDateTime;
attendance.Activity = ATTENDANCE_MARK_TYPE.REQUEST_REGULARIZE; attendance.Activity = ATTENDANCE_MARK_TYPE.REQUEST_REGULARIZE;
@ -274,7 +275,6 @@ namespace MarcoBMS.Services.Controllers
attendance.Date = DateTime.UtcNow; attendance.Date = DateTime.UtcNow;
//DateTime finalDateTime = GetDateFromTimeStamp(recordAttendanceDot, recordAttendanceDot.MarkTime);
attendance.InTime = finalDateTime; attendance.InTime = finalDateTime;
attendance.OutTime = null; attendance.OutTime = null;
@ -332,12 +332,9 @@ namespace MarcoBMS.Services.Controllers
catch (Exception ex) catch (Exception ex)
{ {
await transaction.RollbackAsync(); // Rollback on failure await transaction.RollbackAsync(); // Rollback on failure
return StatusCode(500, ApiResponse<object>.SuccessResponse(new object(), ex.Message, 500));// new { error = ex.Message }); return BadRequest(ApiResponse<object>.ErrorResponse(ex.Message, ex, 400));
} }
return Ok(ApiResponse<object>.SuccessResponse("success", "Roles modified.", 200));
} }
private static DateTime GetDateFromTimeStamp(RecordAttendanceDot recordAttendanceDot, string timeString) private static DateTime GetDateFromTimeStamp(RecordAttendanceDot recordAttendanceDot, string timeString)

View File

@ -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.Authentication;
using Marco.Pms.Model.Dtos; using Marco.Pms.Model.Dtos;
using Marco.Pms.Model.Dtos.Util; using Marco.Pms.Model.Dtos.Util;
using Marco.Pms.Model.Employees; using Marco.Pms.Model.Employees;
using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Entitlements;
using Marco.Pms.Model.Utilities; using Marco.Pms.Model.Utilities;
using Marco.Pms.Model.ViewModels.Employee;
using MarcoBMS.Services.Helpers; using MarcoBMS.Services.Helpers;
using MarcoBMS.Services.Service; using MarcoBMS.Services.Service;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.Data;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using System.Net;
namespace MarcoBMS.Services.Controllers namespace MarcoBMS.Services.Controllers
{ {
@ -48,16 +45,19 @@ namespace MarcoBMS.Services.Controllers
if (user == null || !await _userManager.CheckPasswordAsync(user, loginDto.Password)) if (user == null || !await _userManager.CheckPasswordAsync(user, loginDto.Password))
{ {
return Unauthorized("Invalid username or password."); return Unauthorized(ApiResponse<object>.ErrorResponse("Invalid username or password.", "Invalid username or password.", 401));
//return Unauthorized("Invalid username or password.");
} }
if (!user.IsActive) if (!user.IsActive)
{ {
return BadRequest("User is In Active"); return BadRequest(ApiResponse<object>.ErrorResponse("User is In Active", "User is In Active", 400));
//return BadRequest("User is In Active");
} }
if (!user.EmailConfirmed) if (!user.EmailConfirmed)
{ {
return BadRequest("Your email is not verified, Please verify your email"); return BadRequest(ApiResponse<object>.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); Employee emp = await _employeeHelper.GetEmployeeByApplicationUserID(user.Id);
//var refreshToken = GenerateRefreshToken(); //var refreshToken = GenerateRefreshToken();
@ -74,7 +74,8 @@ namespace MarcoBMS.Services.Controllers
{ {
if (string.IsNullOrEmpty(logoutDto.RefreshToken)) if (string.IsNullOrEmpty(logoutDto.RefreshToken))
{ {
return BadRequest(new { Message = "Refresh token is required" }); return BadRequest(ApiResponse<object>.ErrorResponse("Refresh token is required", "Refresh token is required", 400));
} }
try try
@ -83,7 +84,8 @@ namespace MarcoBMS.Services.Controllers
bool isRevoked = await _refreshTokenService.RevokeRefreshTokenAsync(logoutDto.RefreshToken); bool isRevoked = await _refreshTokenService.RevokeRefreshTokenAsync(logoutDto.RefreshToken);
if (!isRevoked) if (!isRevoked)
return Unauthorized(new { Message = "Invalid or expired refresh token" }); return Unauthorized(ApiResponse<object>.ErrorResponse("Invalid or expired refresh token", "Invalid or expired refresh token", 401));
// Optional: Blacklist the access token (JWT) // Optional: Blacklist the access token (JWT)
string jwtToken = HttpContext.Request.Headers["Authorization"].ToString().Replace("Bearer ", ""); string jwtToken = HttpContext.Request.Headers["Authorization"].ToString().Replace("Bearer ", "");
@ -91,38 +93,22 @@ namespace MarcoBMS.Services.Controllers
{ {
await _refreshTokenService.BlacklistJwtTokenAsync(jwtToken); await _refreshTokenService.BlacklistJwtTokenAsync(jwtToken);
} }
return Ok(ApiResponse<object>.SuccessResponse(new { }, "Logged out successfully", 200));
return Ok(new { Message = "Logged out successfully" });
} }
catch (Exception ex) catch (Exception ex)
{ {
// _logger.LogError(ex, "Error during logout"); // _logger.LogError(ex, "Error during logout");
return StatusCode(500, new { Message = "Internal server error" }); return BadRequest(ApiResponse<object>.ErrorResponse("Internal server error", "Internal server error", 500));
} }
} }
[HttpPost("register")]
public async Task<IActionResult> 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")] [HttpPost("refresh-token")]
public async Task<IActionResult> RefreshToken([FromBody] RefreshTokenDto refreshTokenDto) public async Task<IActionResult> RefreshToken([FromBody] RefreshTokenDto refreshTokenDto)
{ {
var refreshToken = await _refreshTokenService.GetRefreshToken(refreshTokenDto.RefreshToken); var refreshToken = await _refreshTokenService.GetRefreshToken(refreshTokenDto.RefreshToken);
if (refreshToken == null || refreshToken.ExpiryDate < DateTime.UtcNow) if (refreshToken == null || refreshToken.ExpiryDate < DateTime.UtcNow)
{ {
return Unauthorized("Invalid or expired refresh token."); return Unauthorized(ApiResponse<object>.ErrorResponse("Invalid or expired refresh token.", "Invalid or expired refresh token.", 401));
} }
// Mark token as used // Mark token as used
@ -131,7 +117,7 @@ namespace MarcoBMS.Services.Controllers
// Generate new JWT token and refresh token // Generate new JWT token and refresh token
var user = await _userManager.FindByIdAsync(refreshToken.UserId); var user = await _userManager.FindByIdAsync(refreshToken.UserId);
if (user == null) if (user == null)
return BadRequest("Invalid request."); return BadRequest(ApiResponse<object>.ErrorResponse("Invalid request.", "Invalid request.", 400));
Employee emp = await _employeeHelper.GetEmployeeByApplicationUserID(user.Id); Employee emp = await _employeeHelper.GetEmployeeByApplicationUserID(user.Id);
@ -145,7 +131,8 @@ namespace MarcoBMS.Services.Controllers
public async Task<IActionResult> ForgotPassword([FromBody] ForgotPasswordDto forgotPasswordDto) public async Task<IActionResult> ForgotPassword([FromBody] ForgotPasswordDto forgotPasswordDto)
{ {
var user = await _userManager.FindByEmailAsync(forgotPasswordDto.Email); var user = await _userManager.FindByEmailAsync(forgotPasswordDto.Email);
if (user == null) return NotFound("User not found."); if (user == null)
return NotFound(ApiResponse<object>.ErrorResponse("User not found.", "User not found.", 404));
/* SEND USER REGISTRATION MAIL*/ /* SEND USER REGISTRATION MAIL*/
var token = await _userManager.GeneratePasswordResetTokenAsync(user); var token = await _userManager.GeneratePasswordResetTokenAsync(user);
@ -161,7 +148,7 @@ namespace MarcoBMS.Services.Controllers
{ {
var user = await _userManager.FindByEmailAsync(model.Email); var user = await _userManager.FindByEmailAsync(model.Email);
if (user == null) if (user == null)
return BadRequest("Invalid request."); return BadRequest(ApiResponse<object>.ErrorResponse("Invalid request.", "Invalid request.", 400));
// var isTokenValid = await _userManager.VerifyUserTokenAsync(user,UserManager<ApplicationUser>.ResetPasswordTokenPurpose, model.ResetCode); // var isTokenValid = await _userManager.VerifyUserTokenAsync(user,UserManager<ApplicationUser>.ResetPasswordTokenPurpose, model.ResetCode);
var isTokenValid = await _userManager.VerifyUserTokenAsync( var isTokenValid = await _userManager.VerifyUserTokenAsync(
@ -181,7 +168,7 @@ namespace MarcoBMS.Services.Controllers
model.Token model.Token
); );
if(!isDecodedTokenValid) if(!isDecodedTokenValid)
return BadRequest("Invalid or expired token."); return BadRequest(ApiResponse<object>.ErrorResponse("Invalid request.", "Invalid request.", 400));
token = model.Token; token = model.Token;
} }
@ -193,13 +180,16 @@ namespace MarcoBMS.Services.Controllers
var result = await _userManager.ResetPasswordAsync(user, token, model.NewPassword); var result = await _userManager.ResetPasswordAsync(user, token, model.NewPassword);
if (!result.Succeeded) if (!result.Succeeded)
return BadRequest(result.Errors); {
var errors = result.Errors.Select(e => e.Description).ToList();
return BadRequest(ApiResponse<object>.ErrorResponse("Failed to Change password", errors, 400));
}
return Ok(ApiResponse<object>.SuccessResponse(result.Succeeded, "Password reset successfully.", 200)); return Ok(ApiResponse<object>.SuccessResponse(result.Succeeded, "Password reset successfully.", 200));
} }
[HttpPost("sendmail")] [HttpPost("sendmail")]
public async Task<IActionResult> SendEmail([FromBody] EmailDot emailDot) public async Task<IActionResult> SendEmail([FromBody] EmailDot emailDot)
{ {
@ -209,7 +199,7 @@ namespace MarcoBMS.Services.Controllers
var user = await _userManager.FindByEmailAsync(emailDot.ToEmail); var user = await _userManager.FindByEmailAsync(emailDot.ToEmail);
if (user == null) if (user == null)
{ {
return BadRequest("User not found."); return BadRequest(ApiResponse<object>.ErrorResponse("User not found.", "User not found.", 400));
} }
/* New User*/ /* New User*/
@ -229,8 +219,7 @@ namespace MarcoBMS.Services.Controllers
var resetLink = $"{_configuration["AppSettings:WebFrontendUrl"]}/reset-password?token={WebUtility.UrlEncode(token)}"; var resetLink = $"{_configuration["AppSettings:WebFrontendUrl"]}/reset-password?token={WebUtility.UrlEncode(token)}";
await _emailSender.SendResetPasswordEmail(user.Email, "", resetLink); await _emailSender.SendResetPasswordEmail(user.Email, "", resetLink);
return Ok(ApiResponse<object>.SuccessResponse(new {}, "Password reset link sent.", 200));
return Ok("Password reset link sent.");
} }
} }
} }

View File

@ -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.Dtos.Employees;
using Marco.Pms.Model.Employees; using Marco.Pms.Model.Employees;
using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Entitlements;
@ -12,8 +14,6 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using System.Data;
using System.Net;
namespace MarcoBMS.Services.Controllers namespace MarcoBMS.Services.Controllers
{ {
@ -49,7 +49,11 @@ namespace MarcoBMS.Services.Controllers
{ {
if (!ModelState.IsValid) if (!ModelState.IsValid)
{ {
return BadRequest(ModelState); var errors = ModelState.Values
.SelectMany(v => v.Errors)
.Select(e => e.ErrorMessage)
.ToList();
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
} }
int tenantId = GetTenantId(); int tenantId = GetTenantId();
@ -74,7 +78,7 @@ namespace MarcoBMS.Services.Controllers
} }
else else
{ {
return Ok(ApiResponse<object>.SuccessResponse(new List<EmployeeRolesVM>(), "Success.", 200)); return BadRequest(ApiResponse<object>.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<IActionResult> ManageRoles([FromBody] List<EmployeeRoleDot> employeeRoleDots) public async Task<IActionResult> ManageRoles([FromBody] List<EmployeeRoleDot> employeeRoleDots)
{ {
if (!ModelState.IsValid) if (!ModelState.IsValid)
return BadRequest(ModelState); {
var errors = ModelState.Values
.SelectMany(v => v.Errors)
.Select(e => e.ErrorMessage)
.ToList();
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
}
int TenantId = GetTenantId(); int TenantId = GetTenantId();
try try
@ -108,6 +118,7 @@ namespace MarcoBMS.Services.Controllers
} }
catch (Exception ex) catch (Exception ex)
{ {
return BadRequest(ApiResponse<object>.ErrorResponse(ex.Message, ex, 400));
} }
return Ok(ApiResponse<object>.SuccessResponse("success", "Roles modified.", 200)); return Ok(ApiResponse<object>.SuccessResponse("success", "Roles modified.", 200));
} }
@ -118,7 +129,11 @@ namespace MarcoBMS.Services.Controllers
{ {
if (!ModelState.IsValid) if (!ModelState.IsValid)
{ {
return BadRequest(ModelState); var errors = ModelState.Values
.SelectMany(v => v.Errors)
.Select(e => e.ErrorMessage)
.ToList();
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
} }
var result = await _employeeHelper.GetEmployeeByProjectId(GetTenantId(), projectid); var result = await _employeeHelper.GetEmployeeByProjectId(GetTenantId(), projectid);
@ -131,7 +146,12 @@ namespace MarcoBMS.Services.Controllers
{ {
if (!ModelState.IsValid) if (!ModelState.IsValid)
{ {
return BadRequest(ModelState); var errors = ModelState.Values
.SelectMany(v => v.Errors)
.Select(e => e.ErrorMessage)
.ToList();
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
} }
var result = await _employeeHelper.SearchEmployeeByProjectId(GetTenantId(), name.ToLower(), projectid); var result = await _employeeHelper.SearchEmployeeByProjectId(GetTenantId(), name.ToLower(), projectid);
@ -144,7 +164,11 @@ namespace MarcoBMS.Services.Controllers
{ {
if (!ModelState.IsValid) if (!ModelState.IsValid)
{ {
return BadRequest(ModelState); var errors = ModelState.Values
.SelectMany(v => v.Errors)
.Select(e => e.ErrorMessage)
.ToList();
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
} }
Employee emp = await _employeeHelper.GetEmployeeByID(employeeId); Employee emp = await _employeeHelper.GetEmployeeByID(employeeId);
@ -168,7 +192,7 @@ namespace MarcoBMS.Services.Controllers
public async Task<IActionResult> CreateUser([FromForm] CreateUserDto model) public async Task<IActionResult> CreateUser([FromForm] CreateUserDto model)
{ {
if (model == null) if (model == null)
return BadRequest("Invalid user data."); return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", "Invaild Data", 400));
int TenantId = GetTenantId(); int TenantId = GetTenantId();
string responsemessage = ""; string responsemessage = "";
@ -196,7 +220,7 @@ namespace MarcoBMS.Services.Controllers
// Create Employee record if missing // Create Employee record if missing
//Employee newEmployee = GetNewEmployeeModel(model, TenantId, existingUser.Id); //Employee newEmployee = GetNewEmployeeModel(model, TenantId, existingUser.Id);
//_context.Employees.Add(newEmployee); //_context.Employees.Add(newEmployee);
return BadRequest("You cannot use this email"); return BadRequest(ApiResponse<object>.ErrorResponse("You cannot use this email", "You cannot use this email", 400));
} }
@ -213,7 +237,7 @@ namespace MarcoBMS.Services.Controllers
// Create Identity User // Create Identity User
var result = await _userManager.CreateAsync(user, "User@123"); var result = await _userManager.CreateAsync(user, "User@123");
if (!result.Succeeded) if (!result.Succeeded)
return BadRequest(result.Errors); return Ok(ApiResponse<object>.ErrorResponse("Failed to create user", result.Errors, 400));
Employee newEmployee = GetNewEmployeeModel(model, TenantId, user.Id); Employee newEmployee = GetNewEmployeeModel(model, TenantId, user.Id);
_context.Employees.Add(newEmployee); _context.Employees.Add(newEmployee);
@ -250,8 +274,7 @@ namespace MarcoBMS.Services.Controllers
responsemessage = "User created successfully."; responsemessage = "User created successfully.";
} }
return Ok(ApiResponse<object>.SuccessResponse("Success.",responsemessage, 200));
return Ok(new { message = responsemessage });
} }
private static Employee GetNewEmployeeModel(CreateUserDto model, int TenantId, string? ApplicationUserId) private static Employee GetNewEmployeeModel(CreateUserDto model, int TenantId, string? ApplicationUserId)

View File

@ -1,6 +1,7 @@
using Marco.Pms.DataAccess.Data; using Marco.Pms.DataAccess.Data;
using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Entitlements;
using Marco.Pms.Model.Mapper; using Marco.Pms.Model.Mapper;
using Marco.Pms.Model.Utilities;
using Marco.Pms.Model.ViewModels; using Marco.Pms.Model.ViewModels;
using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
@ -50,7 +51,7 @@ namespace MarcoBMS.Services.Controllers
ModuleName = c.Module.Name, ModuleName = c.Module.Name,
IsActive = c.IsActive IsActive = c.IsActive
}); });
return Ok(rolesVM); return Ok(ApiResponse<object>.SuccessResponse(rolesVM, "Success.", 200));
} }
} }
} }

View File

@ -1,5 +1,4 @@
using Marco.Pms.DataAccess.Data; using Marco.Pms.DataAccess.Data;
using Marco.Pms.Model.Dtos.Employees;
using Marco.Pms.Model.Utilities; using Marco.Pms.Model.Utilities;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
@ -22,7 +21,7 @@ namespace MarcoBMS.Services.Controllers
public async Task<IActionResult> FileUploadDemo([FromForm] DemoEmployeeModel model) public async Task<IActionResult> FileUploadDemo([FromForm] DemoEmployeeModel model)
{ {
string imageName = await Saveimage(model.ImageFile); string imageName = await Saveimage(model.ImageFile);
return Ok(); return Ok(ApiResponse<object>.SuccessResponse("Success.", "Success.", 200));
} }
[NonAction] [NonAction]

View File

@ -41,11 +41,16 @@ namespace MarcoBMS.Services.Controllers
{ {
if (!ModelState.IsValid) if (!ModelState.IsValid)
{ {
return BadRequest(ModelState); var errors = ModelState.Values
.SelectMany(v => v.Errors)
.Select(e => e.ErrorMessage)
.ToList();
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
} }
List<Project> project = await _context.Projects.Where(c=>c.TenantId == _userHelper.GetTenantId()).ToListAsync(); List<Project> project = await _context.Projects.Where(c=>c.TenantId == _userHelper.GetTenantId()).ToListAsync();
return Ok(project); return Ok(ApiResponse<object>.SuccessResponse(project, "Success.", 200));
} }
[HttpGet("get/{id:int}")] [HttpGet("get/{id:int}")]
@ -53,12 +58,17 @@ namespace MarcoBMS.Services.Controllers
{ {
if (!ModelState.IsValid) if (!ModelState.IsValid)
{ {
return BadRequest(ModelState); var errors = ModelState.Values
.SelectMany(v => v.Errors)
.Select(e => e.ErrorMessage)
.ToList();
return BadRequest(ApiResponse<object>.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<object>.SuccessResponse(project, "Success.", 200));
} }
[HttpGet("details/{id:int}")] [HttpGet("details/{id:int}")]
@ -68,14 +78,19 @@ namespace MarcoBMS.Services.Controllers
if (!ModelState.IsValid) if (!ModelState.IsValid)
{ {
return BadRequest(ModelState); var errors = ModelState.Values
.SelectMany(v => v.Errors)
.Select(e => e.ErrorMessage)
.ToList();
return BadRequest(ApiResponse<object>.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); 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) if (project == null)
{ {
return Ok(new ProjectVM()); return NotFound(ApiResponse<object>.ErrorResponse("Project not found", "Project not found", 404));
} }
else else
@ -124,8 +139,7 @@ namespace MarcoBMS.Services.Controllers
} }
projectVM.Buildings.Add(buildVM); projectVM.Buildings.Add(buildVM);
} }
return Ok(ApiResponse<object>.SuccessResponse(projectVM, "Success.", 200));
return Ok(projectVM);
} }
@ -170,7 +184,12 @@ namespace MarcoBMS.Services.Controllers
{ {
if (!ModelState.IsValid) if (!ModelState.IsValid)
{ {
return BadRequest(ModelState); var errors = ModelState.Values
.SelectMany(v => v.Errors)
.Select(e => e.ErrorMessage)
.ToList();
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
} }
int TenantId = GetTenantId(); int TenantId = GetTenantId();
@ -189,7 +208,12 @@ namespace MarcoBMS.Services.Controllers
{ {
if (!ModelState.IsValid) if (!ModelState.IsValid)
{ {
return BadRequest(ModelState); var errors = ModelState.Values
.SelectMany(v => v.Errors)
.Select(e => e.ErrorMessage)
.ToList();
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
} }
try try
{ {
@ -206,7 +230,7 @@ namespace MarcoBMS.Services.Controllers
} }
catch (Exception ex) catch (Exception ex)
{ {
return Ok(null); return BadRequest(ApiResponse<object>.ErrorResponse(ex.Message, ex, 400));
} }
} }
@ -262,7 +286,12 @@ namespace MarcoBMS.Services.Controllers
{ {
if (!ModelState.IsValid) if (!ModelState.IsValid)
{ {
return BadRequest(ModelState); var errors = ModelState.Values
.SelectMany(v => v.Errors)
.Select(e => e.ErrorMessage)
.ToList();
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
} }
int TenantId = GetTenantId(); int TenantId = GetTenantId();
@ -297,7 +326,7 @@ namespace MarcoBMS.Services.Controllers
} }
else else
{ {
return Ok(ApiResponse<object>.ErrorResponse("Invalid Input Parameter", 422)); return NotFound(ApiResponse<object>.ErrorResponse("Invalid Input Parameter", 404));
} }
@ -309,7 +338,12 @@ namespace MarcoBMS.Services.Controllers
{ {
if (!ModelState.IsValid) if (!ModelState.IsValid)
{ {
return BadRequest(ModelState); var errors = ModelState.Values
.SelectMany(v => v.Errors)
.Select(e => e.ErrorMessage)
.ToList();
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
} }
int TenantId = GetTenantId(); int TenantId = GetTenantId();
@ -378,14 +412,14 @@ namespace MarcoBMS.Services.Controllers
} }
} }
catch (Exception ex) { } catch (Exception ex) {
return Ok(ApiResponse<object>.ErrorResponse(ex.Message,ex, 400));
}
} }
return Ok(ApiResponse<object>.SuccessResponse(null, "Data saved successfully.", 200)); return Ok(ApiResponse<object>.SuccessResponse(null, "Data saved successfully.", 200));
} }
return BadRequest(ApiResponse<string>.ErrorResponse("Invalid details.", new { id = "Work Item Details are not valid." }, 400)); return BadRequest(ApiResponse<object>.ErrorResponse("Invalid details.", "Work Item Details are not valid." , 400));
} }
@ -416,7 +450,7 @@ namespace MarcoBMS.Services.Controllers
return Ok(ApiResponse<object>.SuccessResponse(null, "Data saved successfully.", 200)); return Ok(ApiResponse<object>.SuccessResponse(null, "Data saved successfully.", 200));
} }
return BadRequest(ApiResponse<string>.ErrorResponse("Invalid details.", new { id = "Work Item Details are not valid." }, 400)); return BadRequest(ApiResponse<object>.ErrorResponse("Invalid details.", "Work Item Details are not valid.", 400));
} }
[HttpPost("manage-infra")] [HttpPost("manage-infra")]
@ -483,10 +517,11 @@ namespace MarcoBMS.Services.Controllers
} }
} }
} }
return Ok(ApiResponse<object>.SuccessResponse(null, "Data saved successfully.", 200));
} }
return Ok(); return BadRequest(ApiResponse<object>.ErrorResponse("Invalid details.", "Infra Details are not valid.", 400));
}
}
} }
} }

View File

@ -11,6 +11,7 @@ using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using System.Data; using System.Data;
using static System.Runtime.InteropServices.JavaScript.JSType;
namespace MarcoBMS.Services.Controllers namespace MarcoBMS.Services.Controllers
{ {
@ -49,8 +50,7 @@ namespace MarcoBMS.Services.Controllers
Name = x.Name, Name = x.Name,
Description = x.Description Description = x.Description
}).ToListAsync(); }).ToListAsync();
return Ok(ApiResponse<object>.SuccessResponse(roles, "Success.", 200));
return Ok(roles);
} }
[HttpPost("jobrole")] [HttpPost("jobrole")]
@ -61,7 +61,7 @@ namespace MarcoBMS.Services.Controllers
int TenantId = GetTenantId(); int TenantId = GetTenantId();
if (await _context.JobRoles.AnyAsync(c => c.Name.ToLower() == createJobRoleDto.Name.ToLower() && c.TenantId == TenantId)) if (await _context.JobRoles.AnyAsync(c => c.Name.ToLower() == createJobRoleDto.Name.ToLower() && c.TenantId == TenantId))
{ {
return Ok(ApiResponse<object>.SuccessResponse(null, "Role with same name already Exists.", 200)); return BadRequest(ApiResponse<object>.ErrorResponse("Role with same name already Exists.", "Role with same name already Exists.", 400));
} }
else else
{ {
@ -77,10 +77,14 @@ namespace MarcoBMS.Services.Controllers
{ {
if (!ModelState.IsValid) if (!ModelState.IsValid)
{ {
return BadRequest(ModelState); var errors = ModelState.Values
.SelectMany(v => v.Errors)
.Select(e => e.ErrorMessage)
.ToList();
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
} }
if (id != updateRoleDto.Id.ToString()) if (id != updateRoleDto.Id.ToString())
return BadRequest("Role ID mismatch"); return BadRequest(ApiResponse<object>.ErrorResponse("Role ID mismatch", "Role ID mismatch",400));
try try
{ {
@ -94,7 +98,7 @@ namespace MarcoBMS.Services.Controllers
} }
catch (Exception ex) catch (Exception ex)
{ {
return Ok(null); return BadRequest(ApiResponse<object>.ErrorResponse(ex.Message, ex, 400));
} }
} }
@ -167,20 +171,26 @@ namespace MarcoBMS.Services.Controllers
public async Task<IActionResult> AddRole([FromBody] CreateApplicationRoleDto createRoleDto) public async Task<IActionResult> AddRole([FromBody] CreateApplicationRoleDto createRoleDto)
{ {
if (!ModelState.IsValid) if (!ModelState.IsValid)
return BadRequest(ModelState); {
var errors = ModelState.Values
.SelectMany(v => v.Errors)
.Select(e => e.ErrorMessage)
.ToList();
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
}
int TenantId = GetTenantId(); int TenantId = GetTenantId();
if (createRoleDto.FeaturesPermission == null || (createRoleDto.FeaturesPermission != null && createRoleDto.FeaturesPermission.Count == 0)) if (createRoleDto.FeaturesPermission == null || (createRoleDto.FeaturesPermission != null && createRoleDto.FeaturesPermission.Count == 0))
{ {
return BadRequest(new { Message = "Feature Permission is required." }); return BadRequest(ApiResponse<object>.ErrorResponse("Feature Permission is required.", "Feature Permission is required.", 400));
} }
bool roleExists = _context.ApplicationRoles bool roleExists = _context.ApplicationRoles
.Any(r => r.TenantId == TenantId && r.Role.ToLower() == createRoleDto.Role.ToLower());// assuming role name is unique per tenant .Any(r => r.TenantId == TenantId && r.Role.ToLower() == createRoleDto.Role.ToLower());// assuming role name is unique per tenant
if (roleExists) if (roleExists)
{ {
return BadRequest(new {message = "Role already exists." }); return BadRequest(ApiResponse<object>.ErrorResponse("Role already exists.", "Role already exists.", 400));
} }
ApplicationRole role = createRoleDto.ToApplicationRoleFromCreateDto(TenantId); ApplicationRole role = createRoleDto.ToApplicationRoleFromCreateDto(TenantId);
_context.ApplicationRoles.Add(role); _context.ApplicationRoles.Add(role);
@ -196,7 +206,7 @@ namespace MarcoBMS.Services.Controllers
} }
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
return CreatedAtAction(nameof(GetRoleById), new { id = role.Id }, role.ToRoleVMFromApplicationRole()); return Ok(ApiResponse<object>.SuccessResponse(role.ToRoleVMFromApplicationRole(), "Roles created successfully.", 200));
} }
[HttpPut("{id}")] [HttpPut("{id}")]
@ -204,7 +214,11 @@ namespace MarcoBMS.Services.Controllers
{ {
if (!ModelState.IsValid) if (!ModelState.IsValid)
{ {
return BadRequest(ModelState); var errors = ModelState.Values
.SelectMany(v => v.Errors)
.Select(e => e.ErrorMessage)
.ToList();
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
} }
if (id != updateRoleDto.Id.ToString()) if (id != updateRoleDto.Id.ToString())
return BadRequest("Role ID mismatch"); return BadRequest("Role ID mismatch");
@ -217,13 +231,13 @@ namespace MarcoBMS.Services.Controllers
ApplicationRole role = updateRoleDto.ToApplicationRoleFromUpdateDto(TenantId); ApplicationRole role = updateRoleDto.ToApplicationRoleFromUpdateDto(TenantId);
if (role.TenantId != TenantId) if (role.TenantId != TenantId)
return Unauthorized(); return Unauthorized(ApiResponse<object>.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); var projectModel = _context.ApplicationRoles.Update(role);
if (projectModel == null) if (projectModel == null)
{ {
return NotFound("Project not found"); return NotFound(ApiResponse<object>.ErrorResponse("Project not found", "Project not found",404));
} }
bool modified = false; bool modified = false;
@ -253,7 +267,7 @@ namespace MarcoBMS.Services.Controllers
} }
catch (Exception ex) catch (Exception ex)
{ {
return Ok(ApiResponse<object>.ErrorResponse( "RUnable to update roles perimssions.", 200)); return BadRequest(ApiResponse<object>.ErrorResponse(ex.Message,ex, 400));
} }
} }
@ -266,10 +280,10 @@ namespace MarcoBMS.Services.Controllers
var role = await _context.ApplicationRoles.FindAsync(id); var role = await _context.ApplicationRoles.FindAsync(id);
if (role == null) if (role == null)
return NotFound(); return NotFound(ApiResponse<object>.ErrorResponse("Role not found", "Role not found", 404));
if (role.TenantId != TenantId) if (role.TenantId != TenantId)
return Unauthorized(); return Unauthorized(ApiResponse<object>.ErrorResponse("You don't have any authority", "You don't have any authority", 401));
var featurePermissions = await _context.RolePermissionMappings var featurePermissions = await _context.RolePermissionMappings
.Where(rfp => rfp.ApplicationRoleId == id) .Where(rfp => rfp.ApplicationRoleId == id)

View File

@ -2,6 +2,7 @@
using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Entitlements;
using Marco.Pms.Model.Mapper; using Marco.Pms.Model.Mapper;
using Marco.Pms.Model.Projects; using Marco.Pms.Model.Projects;
using Marco.Pms.Model.Utilities;
using Marco.Pms.Model.ViewModels.Employee; using Marco.Pms.Model.ViewModels.Employee;
using MarcoBMS.Services.Helpers; using MarcoBMS.Services.Helpers;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
@ -65,7 +66,7 @@ namespace MarcoBMS.Services.Controllers
}; };
return Ok(profile); return Ok(ApiResponse<object>.SuccessResponse(profile, "Success", 200));
} }
} }
} }