feat: enhance project creation validation and add operation result filter

This commit is contained in:
2025-12-16 20:18:54 +03:30
parent 0969e8a5fd
commit 84fb29c8c8
6 changed files with 46 additions and 6 deletions

View File

@@ -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);

View 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
};
}

View File

@@ -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 =>
{

View File

@@ -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
},