-
-
Notifications
You must be signed in to change notification settings - Fork 47
Expand file tree
/
Copy pathBasalScheduleEntity.cs
More file actions
113 lines (96 loc) · 3.25 KB
/
Copy pathBasalScheduleEntity.cs
File metadata and controls
113 lines (96 loc) · 3.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Nocturne.Infrastructure.Data.Entities;
namespace Nocturne.Infrastructure.Data.Entities.V4;
/// <summary>
/// PostgreSQL entity for basal rate schedule records
/// Maps to Nocturne.Core.Models.V4.BasalSchedule
/// </summary>
[Table("basal_schedules")]
public class BasalScheduleEntity : ITenantScoped, IAuditable, ISoftDeletable, IV4TimeSeriesEntity, ISystemTimestamped
{
/// <summary>
/// The unique identifier of the tenant this record belongs to.
/// </summary>
[Column("tenant_id")]
public Guid TenantId { get; set; }
/// <summary>
/// Primary key - UUID Version 7 for time-ordered, globally unique identification
/// </summary>
[Key]
public Guid Id { get; set; }
/// <summary>
/// Canonical timestamp as UTC DateTime (timestamptz)
/// </summary>
[Column("timestamp")]
public DateTime Timestamp { get; set; }
/// <summary>
/// UTC offset in minutes
/// </summary>
[Column("utc_offset")]
public int? UtcOffset { get; set; }
/// <summary>
/// Device identifier that created this schedule record
/// </summary>
[Column("device")]
[MaxLength(256)]
public string? Device { get; set; }
/// <summary>
/// Application that uploaded this schedule record
/// </summary>
[Column("app")]
[MaxLength(256)]
public string? App { get; set; }
/// <summary>
/// Origin data source identifier
/// </summary>
[Column("data_source")]
[MaxLength(256)]
public string? DataSource { get; set; }
/// <summary>
/// Links records that were split from the same legacy Treatment
/// </summary>
[Column("correlation_id")]
public Guid? CorrelationId { get; set; }
/// <summary>
/// Original v1/v3 record ID for migration traceability
/// </summary>
[Column("legacy_id")]
[MaxLength(64)]
public string? LegacyId { get; set; }
/// <summary>
/// System tracking: when record was inserted
/// </summary>
[AuditIgnored]
[Column("sys_created_at")]
public DateTime SysCreatedAt { get; set; } = DateTime.UtcNow;
/// <summary>
/// System tracking: when record was last updated
/// </summary>
[AuditIgnored]
[Column("sys_updated_at")]
public DateTime SysUpdatedAt { get; set; } = DateTime.UtcNow;
/// <summary>
/// Profile name this basal schedule belongs to
/// </summary>
[Column("profile_name")]
[MaxLength(100)]
public string ProfileName { get; set; } = string.Empty;
/// <summary>
/// Basal rate schedule entries stored as JSONB array
/// </summary>
[Column("entries_json", TypeName = "jsonb")]
public string EntriesJson { get; set; } = "[]";
/// <summary>
/// Catch-all JSONB column for fields not mapped to dedicated columns
/// </summary>
[Column("additional_properties", TypeName = "jsonb")]
public string? AdditionalPropertiesJson { get; set; }
/// <summary>
/// Soft-delete timestamp. When non-null the record is treated as deleted
/// by the global query filter and is invisible above the repository layer.
/// </summary>
[AuditIgnored]
[Column("deleted_at")]
public DateTime? DeletedAt { get; set; }
}