Files
tnsu-approval-route/backend/Tnsu.ApprovalRoute.Application/Reminders/HireRow.cs
T
gorbenko.pavel 95d460c80a
Tests / frontend-test (push) Successful in 46s
Tests / backend-test (push) Successful in 2m22s
Расширение reminders (#19)
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/19
2026-08-27 11:43:45 +00:00

47 lines
1.7 KiB
C#

using System.Text.Json;
namespace Tnsu.ApprovalRoute.Application.Reminders;
/// <summary>
/// Строка списка «Прием на работу — данные», разобранная из ответа SharePoint.
/// Имена колонок — как в request-portal (provisioning.json формы RecruitingHire).
/// </summary>
internal sealed record HireRow(
int Id,
string Status,
string? CandidateName,
DateTimeOffset? HireDate,
string? ProbationPeriod,
string? RequestUniqueCode)
{
public static HireRow? TryParse(JsonElement item)
{
if (!item.TryGetProperty("Id", out var idProp) || !idProp.TryGetInt32(out var id)) return null;
return new HireRow(
id,
GetString(item, "RequestStatus") ?? string.Empty,
GetString(item, "CandidateName"),
TryGetDate(item, "HireDate"),
GetString(item, "ProbationPeriod"),
GetString(item, "RequestUniqueCode"));
}
private static string? GetString(JsonElement e, string name) =>
e.TryGetProperty(name, out var v) && v.ValueKind == JsonValueKind.String ? v.GetString() : null;
private static DateTimeOffset? TryGetDate(JsonElement e, string name) =>
e.TryGetProperty(name, out var v) &&
v.ValueKind == JsonValueKind.String &&
DateTimeOffset.TryParse(v.GetString(), out var parsed)
? parsed
: null;
}
/// <summary>Статусы списка данных («… — данные», колонка RequestStatus) — считаем приём завершённым по ним.</summary>
internal static class HireRequestStatuses
{
public const string Approved = "Согласовано";
public const string Closed = "Закрыта";
}