feat(config-db): AddAlarmMesReportable migration (TemplateAlarms.IsMesReportable, InstanceAlarmOverrides.IsMesReportableOverride)
Claude-Session: https://claude.ai/code/session_01Y5ef34iUUMjmwnMpL9xgmB
This commit is contained in:
+2142
File diff suppressed because it is too large
Load Diff
+39
@@ -0,0 +1,39 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class AddAlarmMesReportable : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.AddColumn<bool>(
|
||||||
|
name: "IsMesReportable",
|
||||||
|
table: "TemplateAlarms",
|
||||||
|
type: "bit",
|
||||||
|
nullable: false,
|
||||||
|
defaultValue: false);
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<bool>(
|
||||||
|
name: "IsMesReportableOverride",
|
||||||
|
table: "InstanceAlarmOverrides",
|
||||||
|
type: "bit",
|
||||||
|
nullable: true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "IsMesReportable",
|
||||||
|
table: "TemplateAlarms");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "IsMesReportableOverride",
|
||||||
|
table: "InstanceAlarmOverrides");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+6
@@ -611,6 +611,9 @@ namespace ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Migrations
|
|||||||
b.Property<int>("InstanceId")
|
b.Property<int>("InstanceId")
|
||||||
.HasColumnType("int");
|
.HasColumnType("int");
|
||||||
|
|
||||||
|
b.Property<bool?>("IsMesReportableOverride")
|
||||||
|
.HasColumnType("bit");
|
||||||
|
|
||||||
b.Property<int?>("PriorityLevelOverride")
|
b.Property<int?>("PriorityLevelOverride")
|
||||||
.HasColumnType("int");
|
.HasColumnType("int");
|
||||||
|
|
||||||
@@ -1477,6 +1480,9 @@ namespace ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Migrations
|
|||||||
b.Property<bool>("IsLocked")
|
b.Property<bool>("IsLocked")
|
||||||
.HasColumnType("bit");
|
.HasColumnType("bit");
|
||||||
|
|
||||||
|
b.Property<bool>("IsMesReportable")
|
||||||
|
.HasColumnType("bit");
|
||||||
|
|
||||||
b.Property<bool>("LockedInDerived")
|
b.Property<bool>("LockedInDerived")
|
||||||
.HasColumnType("bit");
|
.HasColumnType("bit");
|
||||||
|
|
||||||
|
|||||||
+42
-1
@@ -3,12 +3,14 @@ using Microsoft.EntityFrameworkCore.Infrastructure;
|
|||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
using Microsoft.EntityFrameworkCore.Metadata;
|
||||||
using ZB.MOM.WW.ScadaBridge.Commons.Entities.Audit;
|
using ZB.MOM.WW.ScadaBridge.Commons.Entities.Audit;
|
||||||
using ZB.MOM.WW.ScadaBridge.Commons.Entities.ExternalSystems;
|
using ZB.MOM.WW.ScadaBridge.Commons.Entities.ExternalSystems;
|
||||||
|
using ZB.MOM.WW.ScadaBridge.Commons.Entities.Instances;
|
||||||
using ZB.MOM.WW.ScadaBridge.Commons.Entities.Notifications;
|
using ZB.MOM.WW.ScadaBridge.Commons.Entities.Notifications;
|
||||||
using ZB.MOM.WW.ScadaBridge.Commons.Entities.Sites;
|
using ZB.MOM.WW.ScadaBridge.Commons.Entities.Sites;
|
||||||
using ZB.MOM.WW.ScadaBridge.Commons.Entities.Templates;
|
using ZB.MOM.WW.ScadaBridge.Commons.Entities.Templates;
|
||||||
|
using ZB.MOM.WW.ScadaBridge.Commons.Types.Enums;
|
||||||
|
using ZB.MOM.WW.ScadaBridge.Commons.Types.Templates;
|
||||||
using ZB.MOM.WW.ScadaBridge.ConfigurationDatabase;
|
using ZB.MOM.WW.ScadaBridge.ConfigurationDatabase;
|
||||||
using ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Repositories;
|
using ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Repositories;
|
||||||
using ZB.MOM.WW.ScadaBridge.Commons.Types.Templates;
|
|
||||||
|
|
||||||
namespace ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Tests;
|
namespace ZB.MOM.WW.ScadaBridge.ConfigurationDatabase.Tests;
|
||||||
|
|
||||||
@@ -111,6 +113,45 @@ public class SchemaConfigurationTests : IDisposable
|
|||||||
Assert.Equal(new[] { nameof(SiteCall.TerminalAtUtc) }, index.Properties.Select(p => p.Name).ToArray());
|
Assert.Equal(new[] { nameof(SiteCall.TerminalAtUtc) }, index.Properties.Select(p => p.Name).ToArray());
|
||||||
Assert.Equal("[TerminalAtUtc] IS NOT NULL", index.GetFilter());
|
Assert.Equal("[TerminalAtUtc] IS NOT NULL", index.GetFilter());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MES-reportable alarm flag: TemplateAlarm.IsMesReportable (bool, non-nullable,
|
||||||
|
// defaults false) and the nullable per-instance InstanceAlarmOverride
|
||||||
|
// .IsMesReportableOverride (null = inherit) must both round-trip through the
|
||||||
|
// configuration database. Backed on SQL Server by the AddAlarmMesReportable
|
||||||
|
// migration; pinned here on the model/persist path.
|
||||||
|
[Fact]
|
||||||
|
public async Task TemplateAlarm_And_Override_PersistMesReportableFlags()
|
||||||
|
{
|
||||||
|
var site = new Site("Site1", "S-001");
|
||||||
|
var template = new Template("MesAlarmT1");
|
||||||
|
_context.Sites.Add(site);
|
||||||
|
_context.Templates.Add(template);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
|
||||||
|
var instance = new Instance("MesAlarmInst1") { SiteId = site.Id, TemplateId = template.Id };
|
||||||
|
_context.Instances.Add(instance);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
|
||||||
|
var alarm = new TemplateAlarm("HighTemp")
|
||||||
|
{
|
||||||
|
TemplateId = template.Id,
|
||||||
|
TriggerType = AlarmTriggerType.HiLo,
|
||||||
|
PriorityLevel = 500,
|
||||||
|
IsMesReportable = true
|
||||||
|
};
|
||||||
|
var ovr = new InstanceAlarmOverride("HighTemp")
|
||||||
|
{
|
||||||
|
InstanceId = instance.Id,
|
||||||
|
IsMesReportableOverride = false
|
||||||
|
};
|
||||||
|
_context.TemplateAlarms.Add(alarm);
|
||||||
|
_context.InstanceAlarmOverrides.Add(ovr);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
_context.ChangeTracker.Clear();
|
||||||
|
|
||||||
|
Assert.True((await _context.TemplateAlarms.SingleAsync(a => a.Id == alarm.Id)).IsMesReportable);
|
||||||
|
Assert.False((await _context.InstanceAlarmOverrides.SingleAsync(o => o.Id == ovr.Id)).IsMesReportableOverride);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SplitQueryBehaviourTests : IDisposable
|
public class SplitQueryBehaviourTests : IDisposable
|
||||||
|
|||||||
Reference in New Issue
Block a user