Fix logs showing non enumerated enumerable as error messages
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2025-10-16 17:15:11 +02:00
parent 87a0241f11
commit ad77c2fe2b
4 changed files with 38 additions and 30 deletions

View File

@@ -11,6 +11,7 @@ namespace Vegasco.Server.Api.Cars;
public static class CreateCar public static class CreateCar
{ {
public record Request(string Name); public record Request(string Name);
public record Response(Guid Id, string Name); public record Response(Guid Id, string Name);
public static RouteHandlerBuilder MapEndpoint(IEndpointRouteBuilder builder) public static RouteHandlerBuilder MapEndpoint(IEndpointRouteBuilder builder)
@@ -43,17 +44,21 @@ public static class CreateCar
CancellationToken cancellationToken) CancellationToken cancellationToken)
{ {
ILogger logger = loggerFactory.CreateLogger(typeof(CreateCar)); ILogger logger = loggerFactory.CreateLogger(typeof(CreateCar));
List<ValidationResult> failedValidations = await validators.ValidateAllAsync(request, cancellationToken: cancellationToken); List<ValidationResult> failedValidations =
await validators.ValidateAllAsync(request, cancellationToken: cancellationToken);
if (failedValidations.Count > 0) if (failedValidations.Count > 0)
{ {
string[] errors = failedValidations
.Where(x => !x.IsValid)
.SelectMany(x => x.Errors)
.Select(x => x.ErrorMessage)
.ToArray();
logger.LogDebug( logger.LogDebug(
"Validation failed for request {@Request} with errors {@Errors}", "Validation failed for request {@Request} with errors {@Errors}",
request, request,
failedValidations errors);
.Where(x => !x.IsValid)
.SelectMany(x => x.Errors)
.Select(x => x.ErrorMessage));
return TypedResults.BadRequest(new HttpValidationProblemDetails(failedValidations.ToCombinedDictionary())); return TypedResults.BadRequest(new HttpValidationProblemDetails(failedValidations.ToCombinedDictionary()));
} }
@@ -74,18 +79,11 @@ public static class CreateCar
{ {
logger.LogDebug("User with ID '{UserId}' not found, creating new user", userId); logger.LogDebug("User with ID '{UserId}' not found, creating new user", userId);
user = new User user = new User { Id = userId };
{
Id = userId
};
await dbContext.Users.AddAsync(user, cancellationToken); await dbContext.Users.AddAsync(user, cancellationToken);
} }
Car car = new() Car car = new() { Name = request.Name.Trim(), UserId = userId };
{
Name = request.Name.Trim(),
UserId = userId
};
await dbContext.Cars.AddAsync(car, cancellationToken); await dbContext.Cars.AddAsync(car, cancellationToken);
await dbContext.SaveChangesAsync(cancellationToken); await dbContext.SaveChangesAsync(cancellationToken);
@@ -95,4 +93,4 @@ public static class CreateCar
Response response = new(car.Id.Value, car.Name); Response response = new(car.Id.Value, car.Name);
return TypedResults.Created($"/v1/cars/{car.Id}", response); return TypedResults.Created($"/v1/cars/{car.Id}", response);
} }
} }

View File

@@ -49,13 +49,16 @@ public static class UpdateCar
List<ValidationResult> failedValidations = await validators.ValidateAllAsync(request, cancellationToken); List<ValidationResult> failedValidations = await validators.ValidateAllAsync(request, cancellationToken);
if (failedValidations.Count > 0) if (failedValidations.Count > 0)
{ {
string[] errors = failedValidations
.Where(x => !x.IsValid)
.SelectMany(x => x.Errors)
.Select(x => x.ErrorMessage)
.ToArray();
logger.LogDebug( logger.LogDebug(
"Validation failed for request {@Request} with errors {@Errors}", "Validation failed for request {@Request} with errors {@Errors}",
request, request,
failedValidations errors);
.Where(x => !x.IsValid)
.SelectMany(x => x.Errors)
.Select(x => x.ErrorMessage));
return TypedResults.BadRequest(new HttpValidationProblemDetails(failedValidations.ToCombinedDictionary())); return TypedResults.BadRequest(new HttpValidationProblemDetails(failedValidations.ToCombinedDictionary()));
} }

View File

@@ -58,13 +58,16 @@ public static class CreateConsumption
List<ValidationResult> failedValidations = await validators.ValidateAllAsync(request, cancellationToken); List<ValidationResult> failedValidations = await validators.ValidateAllAsync(request, cancellationToken);
if (failedValidations.Count > 0) if (failedValidations.Count > 0)
{ {
string[] errors = failedValidations
.Where(x => !x.IsValid)
.SelectMany(x => x.Errors)
.Select(x => x.ErrorMessage)
.ToArray();
logger.LogDebug( logger.LogDebug(
"Validation failed for request {@Request} with errors {@Errors}", "Validation failed for request {@Request} with errors {@Errors}",
request, request,
failedValidations errors);
.Where(x => !x.IsValid)
.SelectMany(x => x.Errors)
.Select(x => x.ErrorMessage));
return TypedResults.BadRequest(new HttpValidationProblemDetails(failedValidations.ToCombinedDictionary())); return TypedResults.BadRequest(new HttpValidationProblemDetails(failedValidations.ToCombinedDictionary()));
} }

View File

@@ -52,17 +52,20 @@ public static class UpdateConsumption
CancellationToken cancellationToken) CancellationToken cancellationToken)
{ {
ILogger logger = loggerFactory.CreateLogger(typeof(UpdateConsumption)); ILogger logger = loggerFactory.CreateLogger(typeof(UpdateConsumption));
List<ValidationResult> failedValidations = await validators.ValidateAllAsync(request, cancellationToken); List<ValidationResult> failedValidations = await validators.ValidateAllAsync(request, cancellationToken);
if (failedValidations.Count > 0) if (failedValidations.Count > 0)
{ {
string[] errors = failedValidations
.Where(x => !x.IsValid)
.SelectMany(x => x.Errors)
.Select(x => x.ErrorMessage)
.ToArray();
logger.LogDebug( logger.LogDebug(
"Validation failed for request {@Request} with errors {@Errors}", "Validation failed for request {@Request} with errors {@Errors}",
request, request,
failedValidations errors);
.Where(x => !x.IsValid)
.SelectMany(x => x.Errors)
.Select(x => x.ErrorMessage));
return TypedResults.BadRequest(new HttpValidationProblemDetails(failedValidations.ToCombinedDictionary())); return TypedResults.BadRequest(new HttpValidationProblemDetails(failedValidations.ToCombinedDictionary()));
} }
@@ -81,6 +84,7 @@ public static class UpdateConsumption
logger.LogTrace("Updated consumption: {@Consumption}", consumption); logger.LogTrace("Updated consumption: {@Consumption}", consumption);
return TypedResults.Ok(new Response(consumption.Id.Value, consumption.DateTime, consumption.Distance, consumption.Amount, consumption.CarId.Value)); return TypedResults.Ok(new Response(consumption.Id.Value, consumption.DateTime, consumption.Distance,
consumption.Amount, consumption.CarId.Value));
} }
} }