diff --git a/backend/src/Tnsu.ApprovalRoute.Infrastructure/Persistence/Migrations/20260722100629_InitialCreate.Designer.cs b/backend/src/Tnsu.ApprovalRoute.Infrastructure/Persistence/Migrations/20260722100629_InitialCreate.Designer.cs
new file mode 100644
index 0000000..1cc4994
--- /dev/null
+++ b/backend/src/Tnsu.ApprovalRoute.Infrastructure/Persistence/Migrations/20260722100629_InitialCreate.Designer.cs
@@ -0,0 +1,151 @@
+//
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+using Tnsu.ApprovalRoute.Infrastructure.Persistence;
+
+#nullable disable
+
+namespace Tnsu.ApprovalRoute.Infrastructure.Persistence.Migrations
+{
+ [DbContext(typeof(ApprovalRouteDbContext))]
+ [Migration("20260722100629_InitialCreate")]
+ partial class InitialCreate
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "10.0.0")
+ .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+ NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
+
+ modelBuilder.Entity("Tnsu.ApprovalRoute.Domain.Entities.RequestType", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)");
+
+ b.Property("PageUrl")
+ .IsRequired()
+ .HasMaxLength(512)
+ .HasColumnType("character varying(512)");
+
+ b.HasKey("Id");
+
+ b.ToTable("request_types", (string)null);
+ });
+
+ modelBuilder.Entity("Tnsu.ApprovalRoute.Domain.Entities.Route", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("CompanyId")
+ .HasColumnType("uuid");
+
+ b.Property("DepartmentId")
+ .HasColumnType("uuid");
+
+ b.Property("ProjectId")
+ .HasColumnType("uuid");
+
+ b.Property("RequestTypeId")
+ .HasColumnType("uuid");
+
+ b.Property("RequiresControl")
+ .HasColumnType("boolean");
+
+ b.Property("RouteType")
+ .IsRequired()
+ .HasMaxLength(32)
+ .HasColumnType("character varying(32)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("RequestTypeId");
+
+ b.ToTable("routes", (string)null);
+ });
+
+ modelBuilder.Entity("Tnsu.ApprovalRoute.Domain.Entities.RouteStep", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("AllowReassignToOtherApprovers")
+ .HasColumnType("boolean");
+
+ b.Property("ExecutorUserId")
+ .HasColumnType("uuid");
+
+ b.Property("OrderNo")
+ .HasColumnType("integer");
+
+ b.Property("Position")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("character varying(128)");
+
+ b.Property("RouteId")
+ .HasColumnType("uuid");
+
+ b.Property("Status")
+ .IsRequired()
+ .HasMaxLength(32)
+ .HasColumnType("character varying(32)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("RouteId", "OrderNo");
+
+ b.ToTable("route_steps", (string)null);
+ });
+
+ modelBuilder.Entity("Tnsu.ApprovalRoute.Domain.Entities.Route", b =>
+ {
+ b.HasOne("Tnsu.ApprovalRoute.Domain.Entities.RequestType", "RequestType")
+ .WithMany("Routes")
+ .HasForeignKey("RequestTypeId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("RequestType");
+ });
+
+ modelBuilder.Entity("Tnsu.ApprovalRoute.Domain.Entities.RouteStep", b =>
+ {
+ b.HasOne("Tnsu.ApprovalRoute.Domain.Entities.Route", "Route")
+ .WithMany("Steps")
+ .HasForeignKey("RouteId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Route");
+ });
+
+ modelBuilder.Entity("Tnsu.ApprovalRoute.Domain.Entities.RequestType", b =>
+ {
+ b.Navigation("Routes");
+ });
+
+ modelBuilder.Entity("Tnsu.ApprovalRoute.Domain.Entities.Route", b =>
+ {
+ b.Navigation("Steps");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/backend/src/Tnsu.ApprovalRoute.Infrastructure/Persistence/Migrations/20260722100629_InitialCreate.cs b/backend/src/Tnsu.ApprovalRoute.Infrastructure/Persistence/Migrations/20260722100629_InitialCreate.cs
new file mode 100644
index 0000000..45c15a9
--- /dev/null
+++ b/backend/src/Tnsu.ApprovalRoute.Infrastructure/Persistence/Migrations/20260722100629_InitialCreate.cs
@@ -0,0 +1,97 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace Tnsu.ApprovalRoute.Infrastructure.Persistence.Migrations
+{
+ ///
+ public partial class InitialCreate : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.CreateTable(
+ name: "request_types",
+ columns: table => new
+ {
+ Id = table.Column(type: "uuid", nullable: false),
+ Name = table.Column(type: "character varying(256)", maxLength: 256, nullable: false),
+ PageUrl = table.Column(type: "character varying(512)", maxLength: 512, nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_request_types", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "routes",
+ columns: table => new
+ {
+ Id = table.Column(type: "uuid", nullable: false),
+ RouteType = table.Column(type: "character varying(32)", maxLength: 32, nullable: false),
+ RequestTypeId = table.Column(type: "uuid", nullable: false),
+ DepartmentId = table.Column(type: "uuid", nullable: false),
+ CompanyId = table.Column(type: "uuid", nullable: false),
+ ProjectId = table.Column(type: "uuid", nullable: false),
+ RequiresControl = table.Column(type: "boolean", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_routes", x => x.Id);
+ table.ForeignKey(
+ name: "FK_routes_request_types_RequestTypeId",
+ column: x => x.RequestTypeId,
+ principalTable: "request_types",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "route_steps",
+ columns: table => new
+ {
+ Id = table.Column(type: "uuid", nullable: false),
+ OrderNo = table.Column(type: "integer", nullable: false),
+ ExecutorUserId = table.Column(type: "uuid", nullable: false),
+ Position = table.Column(type: "character varying(128)", maxLength: 128, nullable: false),
+ Status = table.Column(type: "character varying(32)", maxLength: 32, nullable: false),
+ RouteId = table.Column(type: "uuid", nullable: false),
+ AllowReassignToOtherApprovers = table.Column(type: "boolean", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_route_steps", x => x.Id);
+ table.ForeignKey(
+ name: "FK_route_steps_routes_RouteId",
+ column: x => x.RouteId,
+ principalTable: "routes",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "IX_route_steps_RouteId_OrderNo",
+ table: "route_steps",
+ columns: new[] { "RouteId", "OrderNo" });
+
+ migrationBuilder.CreateIndex(
+ name: "IX_routes_RequestTypeId",
+ table: "routes",
+ column: "RequestTypeId");
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "route_steps");
+
+ migrationBuilder.DropTable(
+ name: "routes");
+
+ migrationBuilder.DropTable(
+ name: "request_types");
+ }
+ }
+}
diff --git a/backend/src/Tnsu.ApprovalRoute.Infrastructure/Persistence/Migrations/ApprovalRouteDbContextModelSnapshot.cs b/backend/src/Tnsu.ApprovalRoute.Infrastructure/Persistence/Migrations/ApprovalRouteDbContextModelSnapshot.cs
new file mode 100644
index 0000000..80351d9
--- /dev/null
+++ b/backend/src/Tnsu.ApprovalRoute.Infrastructure/Persistence/Migrations/ApprovalRouteDbContextModelSnapshot.cs
@@ -0,0 +1,148 @@
+//
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+using Tnsu.ApprovalRoute.Infrastructure.Persistence;
+
+#nullable disable
+
+namespace Tnsu.ApprovalRoute.Infrastructure.Persistence.Migrations
+{
+ [DbContext(typeof(ApprovalRouteDbContext))]
+ partial class ApprovalRouteDbContextModelSnapshot : ModelSnapshot
+ {
+ protected override void BuildModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "10.0.0")
+ .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+ NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
+
+ modelBuilder.Entity("Tnsu.ApprovalRoute.Domain.Entities.RequestType", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)");
+
+ b.Property("PageUrl")
+ .IsRequired()
+ .HasMaxLength(512)
+ .HasColumnType("character varying(512)");
+
+ b.HasKey("Id");
+
+ b.ToTable("request_types", (string)null);
+ });
+
+ modelBuilder.Entity("Tnsu.ApprovalRoute.Domain.Entities.Route", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("CompanyId")
+ .HasColumnType("uuid");
+
+ b.Property("DepartmentId")
+ .HasColumnType("uuid");
+
+ b.Property("ProjectId")
+ .HasColumnType("uuid");
+
+ b.Property("RequestTypeId")
+ .HasColumnType("uuid");
+
+ b.Property("RequiresControl")
+ .HasColumnType("boolean");
+
+ b.Property("RouteType")
+ .IsRequired()
+ .HasMaxLength(32)
+ .HasColumnType("character varying(32)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("RequestTypeId");
+
+ b.ToTable("routes", (string)null);
+ });
+
+ modelBuilder.Entity("Tnsu.ApprovalRoute.Domain.Entities.RouteStep", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("AllowReassignToOtherApprovers")
+ .HasColumnType("boolean");
+
+ b.Property("ExecutorUserId")
+ .HasColumnType("uuid");
+
+ b.Property("OrderNo")
+ .HasColumnType("integer");
+
+ b.Property("Position")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("character varying(128)");
+
+ b.Property("RouteId")
+ .HasColumnType("uuid");
+
+ b.Property("Status")
+ .IsRequired()
+ .HasMaxLength(32)
+ .HasColumnType("character varying(32)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("RouteId", "OrderNo");
+
+ b.ToTable("route_steps", (string)null);
+ });
+
+ modelBuilder.Entity("Tnsu.ApprovalRoute.Domain.Entities.Route", b =>
+ {
+ b.HasOne("Tnsu.ApprovalRoute.Domain.Entities.RequestType", "RequestType")
+ .WithMany("Routes")
+ .HasForeignKey("RequestTypeId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("RequestType");
+ });
+
+ modelBuilder.Entity("Tnsu.ApprovalRoute.Domain.Entities.RouteStep", b =>
+ {
+ b.HasOne("Tnsu.ApprovalRoute.Domain.Entities.Route", "Route")
+ .WithMany("Steps")
+ .HasForeignKey("RouteId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Route");
+ });
+
+ modelBuilder.Entity("Tnsu.ApprovalRoute.Domain.Entities.RequestType", b =>
+ {
+ b.Navigation("Routes");
+ });
+
+ modelBuilder.Entity("Tnsu.ApprovalRoute.Domain.Entities.Route", b =>
+ {
+ b.Navigation("Steps");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}