using System.ComponentModel.DataAnnotations;
using Tiku.Application.QuestionBanks;
using Tiku.Domain.Content;
namespace Tiku.Api.Contracts;
///
/// 题目题库查询参数。
///
public sealed class QuestionBankQueryDto
{
///
/// 租户编码。
///
[StringLength(100)]
public string? TenantCode { get; set; }
///
/// 地区 ID。
///
public Guid? RegionId { get; set; }
///
/// 题库 ID。
///
public Guid? QuestionBankId { get; set; }
///
/// 科目 ID。
///
public Guid? SubjectId { get; set; }
///
/// 分类 ID。
///
public Guid? CategoryId { get; set; }
///
/// 节点 ID。
///
public Guid? NodeId { get; set; }
///
/// 内容入口 ID。
///
public Guid? EntryId { get; set; }
///
/// 内容节点 ID。
///
public Guid? ContentNodeId { get; set; }
///
/// 题集 ID。
///
public Guid? CollectionId { get; set; }
///
/// 来源。
///
public QuestionSource? Source { get; set; }
///
/// 类型。
///
[StringLength(50)]
public string? Type { get; set; }
///
/// 关键字。
///
[StringLength(100)]
public string? Keyword { get; set; }
///
/// 题目 ID 列表。
///
public string? QuestionIds { get; set; }
///
/// 返回数量上限。
///
[Range(1, 500)]
public int? Limit { get; set; }
public QuestionBankFilter ToFilter(Guid tenantId, Guid? questionId = null)
{
return new QuestionBankFilter(
tenantId,
RegionId,
QuestionBankId,
SubjectId,
CategoryId,
NodeId,
EntryId,
ContentNodeId,
CollectionId,
questionId,
ParseQuestionIds(),
Type,
Keyword,
Limit,
Source);
}
private Guid[] ParseQuestionIds()
{
if (string.IsNullOrWhiteSpace(QuestionIds))
{
return [];
}
return QuestionIds
.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)
.Select(value => Guid.TryParse(value, out var id) ? id : (Guid?)null)
.Where(id => id.HasValue)
.Select(id => id!.Value)
.Distinct()
.Take(300)
.ToArray();
}
}