first grpc and minimal api preview :)
This commit is contained in:
@@ -720,6 +720,8 @@ namespace Svrnty.CQRS.Grpc.Generators
|
||||
sb.AppendLine("using System.Linq;");
|
||||
sb.AppendLine("using Microsoft.Extensions.DependencyInjection;");
|
||||
sb.AppendLine("using FluentValidation;");
|
||||
sb.AppendLine("using Google.Rpc;");
|
||||
sb.AppendLine("using Google.Protobuf.WellKnownTypes;");
|
||||
sb.AppendLine($"using {rootNamespace}.Grpc;");
|
||||
sb.AppendLine("using Svrnty.CQRS.Abstractions;");
|
||||
sb.AppendLine();
|
||||
@@ -764,8 +766,25 @@ namespace Svrnty.CQRS.Grpc.Generators
|
||||
sb.AppendLine(" var validationResult = await validator.ValidateAsync(command, context.CancellationToken);");
|
||||
sb.AppendLine(" if (!validationResult.IsValid)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" var errors = string.Join(\", \", validationResult.Errors.Select(e => e.ErrorMessage));");
|
||||
sb.AppendLine(" throw new RpcException(new Status(StatusCode.InvalidArgument, $\"Validation failed: {errors}\"));");
|
||||
sb.AppendLine(" // Create Rich Error Model with structured field violations");
|
||||
sb.AppendLine(" var badRequest = new BadRequest();");
|
||||
sb.AppendLine(" foreach (var error in validationResult.Errors)");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" badRequest.FieldViolations.Add(new BadRequest.Types.FieldViolation");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" Field = error.PropertyName,");
|
||||
sb.AppendLine(" Description = error.ErrorMessage");
|
||||
sb.AppendLine(" });");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(" var status = new Google.Rpc.Status");
|
||||
sb.AppendLine(" {");
|
||||
sb.AppendLine(" Code = (int)Code.InvalidArgument,");
|
||||
sb.AppendLine(" Message = \"Validation failed\",");
|
||||
sb.AppendLine(" Details = { Any.Pack(badRequest) }");
|
||||
sb.AppendLine(" };");
|
||||
sb.AppendLine();
|
||||
sb.AppendLine(" throw status.ToRpcException();");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine(" }");
|
||||
sb.AppendLine();
|
||||
|
||||
Reference in New Issue
Block a user