feat: add scoreline dynamic records

This commit is contained in:
xiong
2026-07-26 18:30:15 +08:00
parent fcf70db8aa
commit 5715869d29
19 changed files with 17069 additions and 13 deletions

View File

@@ -3,6 +3,7 @@ using System.Net.Http.Json;
using System.Text.Json;
using Microsoft.Extensions.DependencyInjection;
using Tiku.Api.Contracts;
using Tiku.Domain.Catalog;
using Tiku.Domain.Common;
using Tiku.Domain.Content;
using Tiku.Domain.Identity;
@@ -174,6 +175,56 @@ public sealed class DirectContentEndpointTests
Assert.True(dbContext.Questions.Single(item => item.Id == questionId).HasVideoExplanation);
}
[Fact]
public async Task Tenant_admin_can_upsert_scoreline_fields_and_records()
{
await using var factory = new ApiTestFactory();
var seed = await SeedAdminAsync(factory);
var regionId = Guid.NewGuid();
var schoolId = Guid.NewGuid();
var majorId = Guid.NewGuid();
await factory.SeedAsync(
new Region { Id = regionId, TenantId = seed.TenantId, Name = "四川" },
new School { Id = schoolId, TenantId = seed.TenantId, RegionId = regionId, Name = "美术学院" },
new Major { Id = majorId, TenantId = seed.TenantId, RegionId = regionId, SchoolId = schoolId, Name = "视觉传达" });
using var client = factory.CreateClient();
await LoginAsync(client, seed);
var fieldResponse = await client.PutAsJsonAsync(
"/api/tenant-content/scoreline/fields",
new DirectScorelineFieldDto
{
RegionId = regionId,
FieldKey = "cultureScore",
FieldName = "文化分",
FieldType = "number",
IsFilter = true,
IsTrend = true
});
var recordResponse = await client.PutAsJsonAsync(
"/api/tenant-content/scoreline/records",
new DirectScorelineRecordDto
{
RegionId = regionId,
SchoolId = schoolId,
MajorId = majorId,
Year = 2026,
SchoolName = "美术学院",
MajorName = "视觉传达",
FieldValues = JsonSerializer.SerializeToElement(new { cultureScore = 420, rank = "A" })
});
var fieldsResponse = await client.GetAsync($"/api/tenant-content/scoreline/fields?regionId={regionId}");
var recordsResponse = await client.GetAsync($"/api/tenant-content/scoreline/records?regionId={regionId}&year=2026");
var fieldsJson = await ReadJsonAsync(fieldsResponse);
var recordsJson = await ReadJsonAsync(recordsResponse);
Assert.Equal(HttpStatusCode.OK, fieldResponse.StatusCode);
Assert.Equal(HttpStatusCode.OK, recordResponse.StatusCode);
Assert.Single(fieldsJson.RootElement.GetProperty("items").EnumerateArray());
Assert.Single(recordsJson.RootElement.GetProperty("items").EnumerateArray());
}
private static async Task<(Guid TenantId, Guid UserId, string Phone)> SeedAdminAsync(ApiTestFactory factory)
{
var tenantId = Guid.NewGuid();