feat: enhance project creation validation and add operation result filter
This commit is contained in:
@@ -8,8 +8,8 @@ public class CreateProjectCommandValidator:AbstractValidator<CreateProjectComman
|
||||
public CreateProjectCommandValidator()
|
||||
{
|
||||
RuleFor(x => x.Name)
|
||||
.MaximumLength(15)
|
||||
.WithMessage("نام نمیتواند بیشتر از 15 کاراکتر باشد")
|
||||
.MaximumLength(25)
|
||||
.WithMessage("نام نمیتواند بیشتر از 25 کاراکتر باشد")
|
||||
.NotEmpty()
|
||||
.NotNull()
|
||||
.WithMessage("نام نمیتواند خالی باشد");
|
||||
|
||||
@@ -68,7 +68,7 @@ public class ProjectBoardDetailQueryHandler : IBaseQueryHandler<ProjectBoardDeta
|
||||
}).ToList()
|
||||
};
|
||||
}).ToList();
|
||||
var response = new ProjectBoardDetailResponse(users, $"{totalTimeSpan.TotalHours}:{totalTimeSpan.Minutes:D2}");
|
||||
var response = new ProjectBoardDetailResponse(users, $"{(int)totalTimeSpan.TotalHours}:{totalTimeSpan.Minutes:D2}");
|
||||
return OperationResult<ProjectBoardDetailResponse>.Success(response);
|
||||
}
|
||||
}
|
||||
@@ -101,8 +101,8 @@ public class ProjectController : ProgramManagerBaseController
|
||||
var res = await _mediator.Send(query);
|
||||
return res;
|
||||
}
|
||||
[HttpGet("board/{id:guid}")]
|
||||
public async Task<ActionResult<OperationResult<ProjectBoardDetailResponse>>> Test(Guid id)
|
||||
[HttpGet("board/details")]
|
||||
public async Task<ActionResult<OperationResult<ProjectBoardDetailResponse>>> GetProjectBoardDetails(Guid id)
|
||||
{
|
||||
var query = new ProjectBoardDetailQuery(id);
|
||||
var res = await _mediator.Send(query);
|
||||
|
||||
38
ServiceHost/Filters/OperationResultFilter.cs
Normal file
38
ServiceHost/Filters/OperationResultFilter.cs
Normal file
@@ -0,0 +1,38 @@
|
||||
using GozareshgirProgramManager.Application._Common.Models;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.Filters;
|
||||
|
||||
namespace ServiceHost.Filters;
|
||||
|
||||
public class OperationResultFilter : ActionFilterAttribute
|
||||
{
|
||||
public override void OnActionExecuted(ActionExecutedContext context)
|
||||
{
|
||||
// بررسی کنید که درخواست برای مسیر /api/programmanager/ است
|
||||
var path = context.HttpContext.Request.Path.Value ?? string.Empty;
|
||||
if (!path.StartsWith("/api/programmanager/", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return; // اگر مسیر مطابقت ندارد، فیلتر را اعمال نکنید
|
||||
}
|
||||
|
||||
if (context.Result is ObjectResult objectResult)
|
||||
{
|
||||
if (objectResult.Value is OperationResult operationResult && !operationResult.IsSuccess)
|
||||
{
|
||||
int statusCode = GetStatusCode(operationResult.ErrorType);
|
||||
objectResult.StatusCode = statusCode;
|
||||
context.HttpContext.Response.StatusCode = statusCode;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static int GetStatusCode(ErrorType errorType) => errorType switch
|
||||
{
|
||||
ErrorType.NotFound => StatusCodes.Status404NotFound,
|
||||
ErrorType.Unauthorized => StatusCodes.Status401Unauthorized,
|
||||
ErrorType.Validation => StatusCodes.Status400BadRequest,
|
||||
ErrorType.BadRequest => StatusCodes.Status400BadRequest,
|
||||
ErrorType.InternalServerError => StatusCodes.Status500InternalServerError,
|
||||
_ => StatusCodes.Status400BadRequest
|
||||
};
|
||||
}
|
||||
@@ -35,6 +35,7 @@ using Microsoft.OpenApi;
|
||||
using ServiceHost.Hubs.ProgramManager;
|
||||
using ServiceHost.Notifications.ProgramManager;
|
||||
using ServiceHost.Conventions;
|
||||
using ServiceHost.Filters;
|
||||
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
@@ -178,6 +179,7 @@ builder.Services.AddAuthorization(options =>
|
||||
builder.Services.AddControllers(options =>
|
||||
{
|
||||
options.Conventions.Add(new ParameterBindingConvention());
|
||||
options.Filters.Add(new OperationResultFilter());
|
||||
})
|
||||
.AddJsonOptions(options =>
|
||||
{
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
"sqlDebugging": true,
|
||||
"dotnetRunMessages": "true",
|
||||
"nativeDebugging": true,
|
||||
"applicationUrl": "https://localhost:5004;http://localhost:5003;",
|
||||
"applicationUrl": "https://localhost:5004;http://localhost:5003;https://192.168.0.117:5006;",
|
||||
"jsWebView2Debugging": false,
|
||||
"hotReloadEnabled": true
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user