mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-09-30 07:13:12 +00:00
185 lines
7.3 KiB
C#
185 lines
7.3 KiB
C#
using System;
|
|
using Data.SeaHavenIndustries;
|
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
|
using Microsoft.EntityFrameworkCore.Migrations;
|
|
|
|
#nullable disable
|
|
|
|
namespace Data.SeaHavenIndustries.Migrations
|
|
{
|
|
[DbContext(typeof(ApplicationDbContext))]
|
|
[Migration("20260723194013_AddVendorCompanyAndAudit")]
|
|
public partial class AddVendorCompanyAndAudit : Migration
|
|
{
|
|
protected override void Up(MigrationBuilder migrationBuilder)
|
|
{
|
|
migrationBuilder.AddColumn<int>(
|
|
name: "CompanyId",
|
|
table: "Vendors",
|
|
type: "int",
|
|
nullable: true);
|
|
|
|
migrationBuilder.AddColumn<string>(
|
|
name: "PreferredContact",
|
|
table: "Vendors",
|
|
type: "nvarchar(max)",
|
|
nullable: true);
|
|
|
|
migrationBuilder.CreateTable(
|
|
name: "VendorCompanies",
|
|
columns: table => new
|
|
{
|
|
Id = table.Column<int>(type: "int", nullable: false)
|
|
.Annotation("SqlServer:Identity", "1, 1"),
|
|
Name = table.Column<string>(type: "nvarchar(max)", nullable: false),
|
|
NormalizedName = table.Column<string>(type: "nvarchar(450)", nullable: false),
|
|
CompanyPhone = table.Column<string>(type: "nvarchar(max)", nullable: true),
|
|
Email = table.Column<string>(type: "nvarchar(max)", nullable: true),
|
|
Address = table.Column<string>(type: "nvarchar(max)", nullable: true),
|
|
City = table.Column<string>(type: "nvarchar(max)", nullable: true),
|
|
State = table.Column<string>(type: "nvarchar(max)", nullable: true),
|
|
Zip = table.Column<string>(type: "nvarchar(max)", nullable: true),
|
|
GoogleMapsUrl = table.Column<string>(type: "nvarchar(max)", nullable: true),
|
|
IsDeleted = table.Column<bool>(type: "bit", nullable: true),
|
|
createdby = table.Column<string>(type: "nvarchar(max)", nullable: true),
|
|
DeleterUserId = table.Column<string>(type: "nvarchar(max)", nullable: true),
|
|
DeletionTime = table.Column<DateTime>(type: "datetime2", nullable: true),
|
|
CreatedDate = table.Column<DateTime>(type: "datetime2", nullable: true),
|
|
LastModificationTime = table.Column<DateTime>(type: "datetime2", nullable: true),
|
|
LastModifierUserId = table.Column<int>(type: "int", nullable: true)
|
|
},
|
|
constraints: table =>
|
|
{
|
|
table.PrimaryKey("PK_VendorCompanies", x => x.Id);
|
|
});
|
|
|
|
migrationBuilder.CreateTable(
|
|
name: "VendorAuditLogs",
|
|
columns: table => new
|
|
{
|
|
Id = table.Column<int>(type: "int", nullable: false)
|
|
.Annotation("SqlServer:Identity", "1, 1"),
|
|
VendorId = table.Column<int>(type: "int", nullable: false),
|
|
WorkOrderId = table.Column<int>(type: "int", nullable: true),
|
|
FieldName = table.Column<string>(type: "nvarchar(max)", nullable: true),
|
|
OldValue = table.Column<string>(type: "nvarchar(max)", nullable: true),
|
|
NewValue = table.Column<string>(type: "nvarchar(max)", nullable: true),
|
|
Actor = table.Column<string>(type: "nvarchar(max)", nullable: true),
|
|
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
|
|
},
|
|
constraints: table =>
|
|
{
|
|
table.PrimaryKey("PK_VendorAuditLogs", x => x.Id);
|
|
table.ForeignKey(
|
|
name: "FK_VendorAuditLogs_Vendors_VendorId",
|
|
column: x => x.VendorId,
|
|
principalTable: "Vendors",
|
|
principalColumn: "Id",
|
|
onDelete: ReferentialAction.Restrict);
|
|
});
|
|
|
|
// Backfill: create one VendorCompany per distinct (case-insensitive, trimmed) legacy name.
|
|
// Keep all company-owned fields from the same deterministic source vendor row.
|
|
migrationBuilder.Sql(@"
|
|
WITH RankedVendors AS (
|
|
SELECT
|
|
v.[CompanyName] AS [Name],
|
|
LOWER(LTRIM(RTRIM(v.[CompanyName]))) AS [NormalizedName],
|
|
v.[CompanyPhone],
|
|
v.[Email],
|
|
v.[Address],
|
|
v.[City],
|
|
v.[State],
|
|
v.[Zip],
|
|
v.[GoogleMapsUrl],
|
|
ROW_NUMBER() OVER (
|
|
PARTITION BY LOWER(LTRIM(RTRIM(v.[CompanyName])))
|
|
ORDER BY v.[Id]
|
|
) AS [RowNumber]
|
|
FROM [Vendors] v
|
|
WHERE v.[CompanyName] IS NOT NULL AND LTRIM(RTRIM(v.[CompanyName])) <> ''
|
|
)
|
|
INSERT INTO [VendorCompanies] (
|
|
[Name], [NormalizedName], [CompanyPhone], [Email], [Address], [City], [State], [Zip], [GoogleMapsUrl], [CreatedDate]
|
|
)
|
|
SELECT
|
|
ranked.[Name],
|
|
ranked.[NormalizedName],
|
|
ranked.[CompanyPhone],
|
|
ranked.[Email],
|
|
ranked.[Address],
|
|
ranked.[City],
|
|
ranked.[State],
|
|
ranked.[Zip],
|
|
ranked.[GoogleMapsUrl],
|
|
GETUTCDATE() AS [CreatedDate]
|
|
FROM RankedVendors ranked
|
|
WHERE ranked.[RowNumber] = 1;
|
|
|
|
UPDATE v
|
|
SET v.[CompanyId] = vc.[Id]
|
|
FROM [Vendors] v
|
|
INNER JOIN [VendorCompanies] vc
|
|
ON vc.[NormalizedName] = LOWER(LTRIM(RTRIM(v.[CompanyName])))
|
|
WHERE v.[CompanyName] IS NOT NULL AND LTRIM(RTRIM(v.[CompanyName])) <> '';
|
|
");
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_Vendors_CompanyId",
|
|
table: "Vendors",
|
|
column: "CompanyId");
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_VendorAuditLogs_VendorId",
|
|
table: "VendorAuditLogs",
|
|
column: "VendorId");
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_VendorCompanies_NormalizedName",
|
|
table: "VendorCompanies",
|
|
column: "NormalizedName",
|
|
unique: true);
|
|
|
|
migrationBuilder.AddForeignKey(
|
|
name: "FK_Vendors_VendorCompanies_CompanyId",
|
|
table: "Vendors",
|
|
column: "CompanyId",
|
|
principalTable: "VendorCompanies",
|
|
principalColumn: "Id",
|
|
onDelete: ReferentialAction.Restrict);
|
|
}
|
|
|
|
protected override void Down(MigrationBuilder migrationBuilder)
|
|
{
|
|
migrationBuilder.DropForeignKey(
|
|
name: "FK_Vendors_VendorCompanies_CompanyId",
|
|
table: "Vendors");
|
|
|
|
migrationBuilder.DropIndex(
|
|
name: "IX_Vendors_CompanyId",
|
|
table: "Vendors");
|
|
|
|
migrationBuilder.DropIndex(
|
|
name: "IX_VendorAuditLogs_VendorId",
|
|
table: "VendorAuditLogs");
|
|
|
|
migrationBuilder.DropIndex(
|
|
name: "IX_VendorCompanies_NormalizedName",
|
|
table: "VendorCompanies");
|
|
|
|
migrationBuilder.DropTable(
|
|
name: "VendorAuditLogs");
|
|
|
|
migrationBuilder.DropTable(
|
|
name: "VendorCompanies");
|
|
|
|
migrationBuilder.DropColumn(
|
|
name: "CompanyId",
|
|
table: "Vendors");
|
|
|
|
migrationBuilder.DropColumn(
|
|
name: "PreferredContact",
|
|
table: "Vendors");
|
|
}
|
|
}
|
|
}
|