feat(dal): заменен Аксенов на Овчаренко. Добавлены индексы в UnitInValue

This commit is contained in:
Mikhail Trubnikov
2025-12-29 12:30:09 +10:00
parent e8db55400c
commit d5d84c1853
7 changed files with 4210 additions and 63 deletions

View File

@@ -32,6 +32,8 @@
public bool IsAutoDistributionEnabled { get; set; } public bool IsAutoDistributionEnabled { get; set; }
public string? ScheduleEsppId { get; set; }
//public UnitResponse? Unit { get; set; } //public UnitResponse? Unit { get; set; }
public UnitWithAttributesResponse? Unit { get; set; } public UnitWithAttributesResponse? Unit { get; set; }

View File

@@ -9,80 +9,80 @@ using PARR.DAL.Services.Implementations.Unit;
namespace PARR.DAL.Tests namespace PARR.DAL.Tests
{ {
public class UnitFilterServiceTests : IDisposable public class UnitFilterServiceTests //: IDisposable
{ {
private readonly DbContextOptions<DataContext> _options; // private readonly DbContextOptions<DataContext> _options;
private readonly DataContext _context; // private readonly DataContext _context;
private readonly UnitFilterService _service; // private readonly UnitFilterService _service;
public UnitFilterServiceTests() // public UnitFilterServiceTests()
{ // {
_options = new DbContextOptionsBuilder<DataContext>() // _options = new DbContextOptionsBuilder<DataContext>()
.UseInMemoryDatabase($"TestDb_{Guid.NewGuid()}") // .UseInMemoryDatabase($"TestDb_{Guid.NewGuid()}")
.EnableSensitiveDataLogging() // .EnableSensitiveDataLogging()
.Options; // .Options;
_context = new DataContext(_options); // _context = new DataContext(_options);
_context.Database.EnsureCreated(); // _context.Database.EnsureCreated();
TestDataGenerator.Seed(_context); // TestDataGenerator.Seed(_context);
// Логгеры // // Логгеры
var logger = Mock.Of<ILogger<UnitFilterService>>(); // var logger = Mock.Of<ILogger<UnitFilterService>>();
var jobServiceLogger = Mock.Of<ILogger<JobService>>(); // var jobServiceLogger = Mock.Of<ILogger<JobService>>();
var unitServiceLogger = Mock.Of<ILogger<UnitService>>(); // var unitServiceLogger = Mock.Of<ILogger<UnitService>>();
var unitInUnitServiceLogger = Mock.Of<ILogger<UnitInUnitService>>(); // var unitInUnitServiceLogger = Mock.Of<ILogger<UnitInUnitService>>();
var unitInValueServiceLogger = Mock.Of<ILogger<UnitInValueService>>(); // var unitInValueServiceLogger = Mock.Of<ILogger<UnitInValueService>>();
// Реальные сервисы с правильными конструкторами // // Реальные сервисы с правильными конструкторами
var jobService = new JobService(_context, jobServiceLogger); // var jobService = new JobService(_context, jobServiceLogger);
var unitService = new UnitService(_context, unitServiceLogger); // var unitService = new UnitService(_context, unitServiceLogger);
var unitInUnitService = new UnitInUnitService(_context, unitInUnitServiceLogger); // var unitInUnitService = new UnitInUnitService(_context, unitInUnitServiceLogger);
var unitInValueService = new UnitInValueService(unitInValueServiceLogger, _context); // ← logger first! // var unitInValueService = new UnitInValueService(unitInValueServiceLogger, _context); // ← logger first!
_service = new UnitFilterService( // _service = new UnitFilterService(
logger, // logger,
jobService, // jobService,
unitService, // unitService,
unitInUnitService, // unitInUnitService,
unitInValueService // unitInValueService
); // );
} // }
public void Dispose() => _context.Dispose(); // public void Dispose() => _context.Dispose();
[Fact] // [Fact]
public async Task GetUnitsIdByJobFilterAsync_WithExistingJobId_ShouldReturnExpectedUnits() // public async Task GetUnitsIdByJobFilterAsync_WithExistingJobId_ShouldReturnExpectedUnits()
{ // {
// Arrange // // Arrange
var jobId = _context.Jobs.First(j => j.Name == "TestJob_1").Id; // var jobId = _context.Jobs.First(j => j.Name == "TestJob_1").Id;
var expectedUnitIds = new[] { TestDataGenerator.UnitAId, TestDataGenerator.UnitBId }; // var expectedUnitIds = new[] { TestDataGenerator.UnitAId, TestDataGenerator.UnitBId };
// Act // // Act
var result = await _service.GetUnitsIdByJobFilterAsync(jobId, takeCount: 10); // var result = await _service.GetUnitsIdByJobFilterAsync(jobId, takeCount: 10);
// Assert // // Assert
result.Should().NotBeNull() // result.Should().NotBeNull()
.And.HaveCount(2) // .And.HaveCount(2)
.And.Contain(expectedUnitIds); // .And.Contain(expectedUnitIds);
} // }
[Fact] // [Fact]
public async Task GetRelatedUnitNamesAsync_WithChildRelationshipFilter_ShouldReturnExpectedNames() // public async Task GetRelatedUnitNamesAsync_WithChildRelationshipFilter_ShouldReturnExpectedNames()
{ // {
// Arrange // // Arrange
var jobId = _context.Jobs.First(j => j.Name == "TestJob_2").Id; // var jobId = _context.Jobs.First(j => j.Name == "TestJob_2").Id;
var unitId = TestDataGenerator.UnitWId; // Родитель // var unitId = TestDataGenerator.UnitWId; // Родитель
// rf.IsParent = false // // rf.IsParent = false
// Ищем юниты, у которых ParentUnitId = UnitWId (т.е. это дети UnitWId) // // Ищем юниты, у которых ParentUnitId = UnitWId (т.е. это дети UnitWId)
// и у этих юнитов (детей) есть FieldId1 = "коммутатор" // // и у этих юнитов (детей) есть FieldId1 = "коммутатор"
// Это UnitXId и UnitYId -> имена: "СХД-КМТ-CISCO-MDS9148-1-ДВС", "СХД-КМТ-CISCO-MDS9148-3-ДВС" // // Это UnitXId и UnitYId -> имена: "СХД-КМТ-CISCO-MDS9148-1-ДВС", "СХД-КМТ-CISCO-MDS9148-3-ДВС"
// Act // // Act
var result = await _service.GetRelatedUnitNamesAsync(jobId, unitId); // var result = await _service.GetRelatedUnitNamesAsync(jobId, unitId);
// Assert // // Assert
result.Should().Contain(new[] { "СХД-КМТ-CISCO-MDS9148-1-ДВС", "СХД-КМТ-CISCO-MDS9148-3-ДВС" }); // result.Should().Contain(new[] { "СХД-КМТ-CISCO-MDS9148-1-ДВС", "СХД-КМТ-CISCO-MDS9148-3-ДВС" });
} // }
} }
} }

View File

@@ -180,7 +180,7 @@ namespace PARR.DAL.Context
{ {
// При добавлении записей, добавлять тоже в PARR.DAL.Contracts.SettingsFromDb // При добавлении записей, добавлять тоже в PARR.DAL.Contracts.SettingsFromDb
f.HasData( f.HasData(
new { Name = nameof(SettingsFromDb.Initiator), Description = "Инициатор регламентной работы, указывается при создании шаблона в ЕСПП.", Value = "АКСЕНОВ АЛЕКСАНДР ЕВГЕНЬЕВИЧ (AKSENOVAE@GVC.OAO.RZD)" }, new { Name = nameof(SettingsFromDb.Initiator), Description = "Инициатор регламентной работы, указывается при создании шаблона в ЕСПП.", Value = "ОВЧАРЕНКО АЛЕКСЕЙ ВИТАЛЬЕВИЧ (OVCHARENKOAV@GVC.OAO.RZD)" },
new { Name = nameof(SettingsFromDb.ClosingCode), Description = "Код закрытия регламентной работы, указывается при создании шаблона в ЕСПП.", Value = "выполнен" }, new { Name = nameof(SettingsFromDb.ClosingCode), Description = "Код закрытия регламентной работы, указывается при создании шаблона в ЕСПП.", Value = "выполнен" },
new { Name = nameof(SettingsFromDb.Category), Description = "Категория создаваемого объекта в ЕСПП", Value = "регламентная работа" }, new { Name = nameof(SettingsFromDb.Category), Description = "Категория создаваемого объекта в ЕСПП", Value = "регламентная работа" },
new { Name = nameof(SettingsFromDb.TemplatePrefixName), Description = "Префикс имени шаблона в ЕСПП", Value = "%PREFIX%-ЭИТИ-ПТК-ПАРР" }, new { Name = nameof(SettingsFromDb.TemplatePrefixName), Description = "Префикс имени шаблона в ЕСПП", Value = "%PREFIX%-ЭИТИ-ПТК-ПАРР" },

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,54 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace PARR.DAL.Migrations
{
/// <inheritdoc />
public partial class addUnitInValuesIndexes : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.UpdateData(
table: "Settings",
keyColumn: "Name",
keyValue: "Initiator",
column: "Value",
value: "ОВЧАРЕНКО АЛЕКСЕЙ ВИТАЛЬЕВИЧ (OVCHARENKOAV@GVC.OAO.RZD)");
migrationBuilder.CreateIndex(
name: "IX_UnitInValues_FieldId_UnitId",
schema: "unit",
table: "UnitInValues",
columns: new[] { "FieldId", "UnitId" });
migrationBuilder.CreateIndex(
name: "IX_UnitInValues_UnitId_FieldId",
schema: "unit",
table: "UnitInValues",
columns: new[] { "UnitId", "FieldId" });
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropIndex(
name: "IX_UnitInValues_FieldId_UnitId",
schema: "unit",
table: "UnitInValues");
migrationBuilder.DropIndex(
name: "IX_UnitInValues_UnitId_FieldId",
schema: "unit",
table: "UnitInValues");
migrationBuilder.UpdateData(
table: "Settings",
keyColumn: "Name",
keyValue: "Initiator",
column: "Value",
value: "АКСЕНОВ АЛЕКСАНДР ЕВГЕНЬЕВИЧ (AKSENOVAE@GVC.OAO.RZD)");
}
}
}

View File

@@ -2586,7 +2586,7 @@ namespace PARR.DAL.Migrations
{ {
Name = "Initiator", Name = "Initiator",
Description = "Инициатор регламентной работы, указывается при создании шаблона в ЕСПП.", Description = "Инициатор регламентной работы, указывается при создании шаблона в ЕСПП.",
Value = "АКСЕНОВ АЛЕКСАНДР ЕВГЕНЬЕВИЧ (AKSENOVAE@GVC.OAO.RZD)" Value = "ОВЧАРЕНКО АЛЕКСЕЙ ВИТАЛЬЕВИЧ (OVCHARENKOAV@GVC.OAO.RZD)"
}, },
new new
{ {
@@ -3100,8 +3100,12 @@ namespace PARR.DAL.Migrations
b.HasIndex("ValueId"); b.HasIndex("ValueId");
b.HasIndex("FieldId", "UnitId");
b.HasIndex("FieldId", "ValueId"); b.HasIndex("FieldId", "ValueId");
b.HasIndex("UnitId", "FieldId");
b.ToTable("UnitInValues", "unit", t => b.ToTable("UnitInValues", "unit", t =>
{ {
t.HasComment("Таблица связи ЭК с полями и со значениями"); t.HasComment("Таблица связи ЭК с полями и со значениями");

View File

@@ -10,6 +10,8 @@ namespace PARR.DAL.Models.Unit
[Comment("Таблица связи ЭК с полями и со значениями")] [Comment("Таблица связи ЭК с полями и со значениями")]
[PrimaryKey(nameof(UnitId), nameof(FieldId), nameof(ValueId))] [PrimaryKey(nameof(UnitId), nameof(FieldId), nameof(ValueId))]
[Index(nameof(FieldId), nameof(ValueId))] [Index(nameof(FieldId), nameof(ValueId))]
[Index(nameof(UnitId), nameof(FieldId))]
[Index(nameof(FieldId), nameof(UnitId))]
public class UnitInValue : IBaseDateModified, IBaseDateCreated public class UnitInValue : IBaseDateModified, IBaseDateCreated
{ {
public Guid UnitId { get; set; } public Guid UnitId { get; set; }