diff --git a/backend/src/Health.WebApi/Endpoints/health_endpoints.cs b/backend/src/Health.WebApi/Endpoints/health_endpoints.cs index f0ab047..be06330 100644 --- a/backend/src/Health.WebApi/Endpoints/health_endpoints.cs +++ b/backend/src/Health.WebApi/Endpoints/health_endpoints.cs @@ -122,6 +122,13 @@ public static class HealthEndpoints Guid.TryParse(http.User.FindFirst(System.Security.Claims.ClaimTypes.NameIdentifier)?.Value, out var id) ? id : Guid.Empty; } -public sealed record CreateHealthRecordRequest( - HealthMetricType Type, int? Systolic, int? Diastolic, decimal? Value, - string? Unit, HealthRecordSource Source, DateTime? RecordedAt); +public sealed class CreateHealthRecordRequest +{ + public HealthMetricType Type { get; init; } + public int? Systolic { get; init; } + public int? Diastolic { get; init; } + public decimal? Value { get; init; } + public string? Unit { get; init; } + public HealthRecordSource Source { get; init; } + public DateTime? RecordedAt { get; init; } +} diff --git a/backend/src/Health.WebApi/Endpoints/remaining_endpoints.cs b/backend/src/Health.WebApi/Endpoints/remaining_endpoints.cs index 68c295c..e235104 100644 --- a/backend/src/Health.WebApi/Endpoints/remaining_endpoints.cs +++ b/backend/src/Health.WebApi/Endpoints/remaining_endpoints.cs @@ -193,7 +193,21 @@ public static class RemainingEndpoints var today = DateOnly.FromDateTime(DateTime.Now); var monday = today.AddDays(-(int)today.DayOfWeek + 1); var plan = await db.ExercisePlans.Include(p => p.Items).FirstOrDefaultAsync(p => p.UserId == userId && p.WeekStartDate == monday); - return Results.Ok(new { code = 0, data = plan, message = (string?)null }); + if (plan == null) return Results.Ok(new { code = 0, data = (object?)null, message = (string?)null }); + return Results.Ok(new + { + code = 0, + data = new + { + plan.Id, plan.WeekStartDate, plan.CreatedAt, plan.UpdatedAt, + items = plan.Items.Select(i => new + { + i.Id, i.DayOfWeek, i.ExerciseType, i.DurationMinutes, + i.IsCompleted, i.CompletedAt, i.IsRestDay + }) + }, + message = (string?)null + }); }); group.MapPost("/", async (CreateExercisePlanRequest req, HttpContext http, AppDbContext db, CancellationToken ct) => diff --git a/backend/src/Health.WebApi/Program.cs b/backend/src/Health.WebApi/Program.cs index c3dc020..1329c34 100644 --- a/backend/src/Health.WebApi/Program.cs +++ b/backend/src/Health.WebApi/Program.cs @@ -27,6 +27,14 @@ if (File.Exists(envPath)) var builder = WebApplication.CreateBuilder(args); +// ---- JSON 配置(枚举字符串、camelCase)---- +builder.Services.ConfigureHttpJsonOptions(options => +{ + options.SerializerOptions.Converters.Add(new System.Text.Json.Serialization.JsonStringEnumConverter()); + options.SerializerOptions.PropertyNamingPolicy = System.Text.Json.JsonNamingPolicy.CamelCase; + options.SerializerOptions.PropertyNameCaseInsensitive = true; +}); + // ---- 数据库 ---- builder.Services.AddDbContext(options => options.UseNpgsql(builder.Configuration.GetConnectionString("Default") ?? builder.Configuration["DB_CONNECTION"] ?? "Host=localhost;Database=health_manager;Username=postgres;Password=postgres"));