< Summary

Line coverage
0%
Covered lines: 0
Uncovered lines: 459
Coverable lines: 459
Total lines: 520
Line coverage: 0%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
File 1: Up(...)100%210%
File 1: Down(...)100%210%
File 2: BuildTargetModel(...)100%210%

File(s)

/home/runner/work/chronicis/chronicis/src/Chronicis.Api/Migrations/20251223060913_AddArticleLinks.cs

#LineLine coverage
 1using Microsoft.EntityFrameworkCore.Migrations;
 2
 3#nullable disable
 4
 5namespace Chronicis.Api.Migrations
 6{
 7    /// <inheritdoc />
 8    public partial class AddArticleLinks : Migration
 9    {
 10        /// <inheritdoc />
 11        protected override void Up(MigrationBuilder migrationBuilder)
 12        {
 013            migrationBuilder.CreateTable(
 014                name: "ArticleLinks",
 015                columns: table => new
 016                {
 017                    Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
 018                    SourceArticleId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
 019                    TargetArticleId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
 020                    DisplayText = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: true),
 021                    Position = table.Column<int>(type: "int", nullable: false),
 022                    CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
 023                },
 024                constraints: table =>
 025                {
 026                    table.PrimaryKey("PK_ArticleLinks", x => x.Id);
 027                    table.ForeignKey(
 028                        name: "FK_ArticleLinks_Articles_SourceArticleId",
 029                        column: x => x.SourceArticleId,
 030                        principalTable: "Articles",
 031                        principalColumn: "Id",
 032                        onDelete: ReferentialAction.Cascade);
 033                    table.ForeignKey(
 034                        name: "FK_ArticleLinks_Articles_TargetArticleId",
 035                        column: x => x.TargetArticleId,
 036                        principalTable: "Articles",
 037                        principalColumn: "Id");
 038                });
 39
 040            migrationBuilder.CreateIndex(
 041                name: "IX_ArticleLinks_SourceArticleId",
 042                table: "ArticleLinks",
 043                column: "SourceArticleId");
 44
 045            migrationBuilder.CreateIndex(
 046                name: "IX_ArticleLinks_SourceArticleId_TargetArticleId_Position",
 047                table: "ArticleLinks",
 048                columns: new[] { "SourceArticleId", "TargetArticleId", "Position" },
 049                unique: true);
 50
 051            migrationBuilder.CreateIndex(
 052                name: "IX_ArticleLinks_TargetArticleId",
 053                table: "ArticleLinks",
 054                column: "TargetArticleId");
 055        }
 56
 57        /// <inheritdoc />
 58        protected override void Down(MigrationBuilder migrationBuilder)
 59        {
 060            migrationBuilder.DropTable(
 061                name: "ArticleLinks");
 062        }
 63    }
 64}

/home/runner/work/chronicis/chronicis/src/Chronicis.Api/Migrations/20251223060913_AddArticleLinks.Designer.cs

#LineLine coverage
 1// <auto-generated />
 2using System;
 3using Chronicis.Api.Data;
 4using Microsoft.EntityFrameworkCore;
 5using Microsoft.EntityFrameworkCore.Infrastructure;
 6using Microsoft.EntityFrameworkCore.Metadata;
 7using Microsoft.EntityFrameworkCore.Migrations;
 8using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
 9
 10#nullable disable
 11
 12namespace Chronicis.Api.Migrations
 13{
 14    [DbContext(typeof(ChronicisDbContext))]
 15    [Migration("20251223060913_AddArticleLinks")]
 16    partial class AddArticleLinks
 17    {
 18        /// <inheritdoc />
 19        protected override void BuildTargetModel(ModelBuilder modelBuilder)
 20        {
 21#pragma warning disable 612, 618
 022            modelBuilder
 023                .HasAnnotation("ProductVersion", "9.0.0")
 024                .HasAnnotation("Relational:MaxIdentifierLength", 128);
 25
 026            SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
 27
 028            modelBuilder.Entity("Chronicis.Shared.Models.Article", b =>
 029                {
 030                    b.Property<Guid>("Id")
 031                        .ValueGeneratedOnAdd()
 032                        .HasColumnType("uniqueidentifier");
 033
 034                    b.Property<string>("AISummary")
 035                        .HasColumnType("nvarchar(max)");
 036
 037                    b.Property<DateTime?>("AISummaryGeneratedAt")
 038                        .HasColumnType("datetime2");
 039
 040                    b.Property<string>("Body")
 041                        .HasColumnType("nvarchar(max)");
 042
 043                    b.Property<Guid?>("CampaignId")
 044                        .HasColumnType("uniqueidentifier");
 045
 046                    b.Property<DateTime>("CreatedAt")
 047                        .HasColumnType("datetime2");
 048
 049                    b.Property<Guid>("CreatedBy")
 050                        .HasColumnType("uniqueidentifier");
 051
 052                    b.Property<DateTime>("EffectiveDate")
 053                        .HasColumnType("datetime2");
 054
 055                    b.Property<string>("IconEmoji")
 056                        .HasMaxLength(50)
 057                        .HasColumnType("nvarchar(50)");
 058
 059                    b.Property<string>("InGameDate")
 060                        .HasMaxLength(100)
 061                        .HasColumnType("nvarchar(100)");
 062
 063                    b.Property<Guid?>("LastModifiedBy")
 064                        .HasColumnType("uniqueidentifier");
 065
 066                    b.Property<DateTime?>("ModifiedAt")
 067                        .HasColumnType("datetime2");
 068
 069                    b.Property<Guid?>("ParentId")
 070                        .HasColumnType("uniqueidentifier");
 071
 072                    b.Property<Guid?>("PlayerId")
 073                        .HasColumnType("uniqueidentifier");
 074
 075                    b.Property<DateTime?>("SessionDate")
 076                        .HasColumnType("datetime2");
 077
 078                    b.Property<string>("Slug")
 079                        .IsRequired()
 080                        .HasMaxLength(200)
 081                        .HasColumnType("nvarchar(200)");
 082
 083                    b.Property<string>("Title")
 084                        .IsRequired()
 085                        .HasMaxLength(500)
 086                        .HasColumnType("nvarchar(500)");
 087
 088                    b.Property<int>("Type")
 089                        .HasColumnType("int");
 090
 091                    b.Property<int>("Visibility")
 092                        .HasColumnType("int");
 093
 094                    b.Property<Guid?>("WorldId")
 095                        .HasColumnType("uniqueidentifier");
 096
 097                    b.HasKey("Id");
 098
 099                    b.HasIndex("CampaignId");
 0100
 0101                    b.HasIndex("CreatedBy");
 0102
 0103                    b.HasIndex("LastModifiedBy");
 0104
 0105                    b.HasIndex("ParentId");
 0106
 0107                    b.HasIndex("PlayerId");
 0108
 0109                    b.HasIndex("Slug")
 0110                        .IsUnique()
 0111                        .HasDatabaseName("IX_Articles_Slug_Root")
 0112                        .HasFilter("[ParentId] IS NULL");
 0113
 0114                    b.HasIndex("Title");
 0115
 0116                    b.HasIndex("Type");
 0117
 0118                    b.HasIndex("WorldId");
 0119
 0120                    b.HasIndex("ParentId", "Slug")
 0121                        .IsUnique()
 0122                        .HasDatabaseName("IX_Articles_ParentId_Slug")
 0123                        .HasFilter("[ParentId] IS NOT NULL");
 0124
 0125                    b.ToTable("Articles");
 0126                });
 127
 0128            modelBuilder.Entity("Chronicis.Shared.Models.ArticleLink", b =>
 0129                {
 0130                    b.Property<Guid>("Id")
 0131                        .ValueGeneratedOnAdd()
 0132                        .HasColumnType("uniqueidentifier");
 0133
 0134                    b.Property<DateTime>("CreatedAt")
 0135                        .HasColumnType("datetime2");
 0136
 0137                    b.Property<string>("DisplayText")
 0138                        .HasMaxLength(500)
 0139                        .HasColumnType("nvarchar(500)");
 0140
 0141                    b.Property<int>("Position")
 0142                        .HasColumnType("int");
 0143
 0144                    b.Property<Guid>("SourceArticleId")
 0145                        .HasColumnType("uniqueidentifier");
 0146
 0147                    b.Property<Guid>("TargetArticleId")
 0148                        .HasColumnType("uniqueidentifier");
 0149
 0150                    b.HasKey("Id");
 0151
 0152                    b.HasIndex("SourceArticleId");
 0153
 0154                    b.HasIndex("TargetArticleId");
 0155
 0156                    b.HasIndex("SourceArticleId", "TargetArticleId", "Position")
 0157                        .IsUnique();
 0158
 0159                    b.ToTable("ArticleLinks");
 0160                });
 161
 0162            modelBuilder.Entity("Chronicis.Shared.Models.Campaign", b =>
 0163                {
 0164                    b.Property<Guid>("Id")
 0165                        .ValueGeneratedOnAdd()
 0166                        .HasColumnType("uniqueidentifier");
 0167
 0168                    b.Property<DateTime>("CreatedAt")
 0169                        .HasColumnType("datetime2");
 0170
 0171                    b.Property<string>("Description")
 0172                        .HasMaxLength(1000)
 0173                        .HasColumnType("nvarchar(1000)");
 0174
 0175                    b.Property<DateTime?>("EndedAt")
 0176                        .HasColumnType("datetime2");
 0177
 0178                    b.Property<string>("Name")
 0179                        .IsRequired()
 0180                        .HasMaxLength(200)
 0181                        .HasColumnType("nvarchar(200)");
 0182
 0183                    b.Property<Guid>("OwnerId")
 0184                        .HasColumnType("uniqueidentifier");
 0185
 0186                    b.Property<DateTime?>("StartedAt")
 0187                        .HasColumnType("datetime2");
 0188
 0189                    b.Property<Guid>("WorldId")
 0190                        .HasColumnType("uniqueidentifier");
 0191
 0192                    b.HasKey("Id");
 0193
 0194                    b.HasIndex("OwnerId");
 0195
 0196                    b.HasIndex("WorldId");
 0197
 0198                    b.ToTable("Campaigns");
 0199                });
 200
 0201            modelBuilder.Entity("Chronicis.Shared.Models.CampaignMember", b =>
 0202                {
 0203                    b.Property<Guid>("Id")
 0204                        .ValueGeneratedOnAdd()
 0205                        .HasColumnType("uniqueidentifier");
 0206
 0207                    b.Property<Guid>("CampaignId")
 0208                        .HasColumnType("uniqueidentifier");
 0209
 0210                    b.Property<string>("CharacterName")
 0211                        .HasMaxLength(100)
 0212                        .HasColumnType("nvarchar(100)");
 0213
 0214                    b.Property<DateTime>("JoinedAt")
 0215                        .HasColumnType("datetime2");
 0216
 0217                    b.Property<int>("Role")
 0218                        .HasColumnType("int");
 0219
 0220                    b.Property<Guid>("UserId")
 0221                        .HasColumnType("uniqueidentifier");
 0222
 0223                    b.HasKey("Id");
 0224
 0225                    b.HasIndex("UserId");
 0226
 0227                    b.HasIndex("CampaignId", "UserId")
 0228                        .IsUnique();
 0229
 0230                    b.ToTable("CampaignMembers");
 0231                });
 232
 0233            modelBuilder.Entity("Chronicis.Shared.Models.User", b =>
 0234                {
 0235                    b.Property<Guid>("Id")
 0236                        .ValueGeneratedOnAdd()
 0237                        .HasColumnType("uniqueidentifier");
 0238
 0239                    b.Property<string>("Auth0UserId")
 0240                        .IsRequired()
 0241                        .HasMaxLength(256)
 0242                        .HasColumnType("nvarchar(256)");
 0243
 0244                    b.Property<string>("AvatarUrl")
 0245                        .HasMaxLength(500)
 0246                        .HasColumnType("nvarchar(500)");
 0247
 0248                    b.Property<DateTime>("CreatedAt")
 0249                        .HasColumnType("datetime2");
 0250
 0251                    b.Property<string>("DisplayName")
 0252                        .IsRequired()
 0253                        .HasMaxLength(100)
 0254                        .HasColumnType("nvarchar(100)");
 0255
 0256                    b.Property<string>("Email")
 0257                        .IsRequired()
 0258                        .HasMaxLength(256)
 0259                        .HasColumnType("nvarchar(256)");
 0260
 0261                    b.Property<DateTime>("LastLoginAt")
 0262                        .HasColumnType("datetime2");
 0263
 0264                    b.HasKey("Id");
 0265
 0266                    b.HasIndex("Auth0UserId")
 0267                        .IsUnique();
 0268
 0269                    b.HasIndex("Email");
 0270
 0271                    b.ToTable("Users");
 0272                });
 273
 0274            modelBuilder.Entity("Chronicis.Shared.Models.World", b =>
 0275                {
 0276                    b.Property<Guid>("Id")
 0277                        .ValueGeneratedOnAdd()
 0278                        .HasColumnType("uniqueidentifier");
 0279
 0280                    b.Property<DateTime>("CreatedAt")
 0281                        .HasColumnType("datetime2");
 0282
 0283                    b.Property<string>("Description")
 0284                        .HasMaxLength(1000)
 0285                        .HasColumnType("nvarchar(1000)");
 0286
 0287                    b.Property<string>("Name")
 0288                        .IsRequired()
 0289                        .HasMaxLength(200)
 0290                        .HasColumnType("nvarchar(200)");
 0291
 0292                    b.Property<Guid>("OwnerId")
 0293                        .HasColumnType("uniqueidentifier");
 0294
 0295                    b.HasKey("Id");
 0296
 0297                    b.HasIndex("OwnerId");
 0298
 0299                    b.ToTable("Worlds");
 0300                });
 301
 0302            modelBuilder.Entity("Chronicis.Shared.Models.Article", b =>
 0303                {
 0304                    b.HasOne("Chronicis.Shared.Models.Campaign", "Campaign")
 0305                        .WithMany("Articles")
 0306                        .HasForeignKey("CampaignId")
 0307                        .OnDelete(DeleteBehavior.Restrict);
 0308
 0309                    b.HasOne("Chronicis.Shared.Models.User", "Creator")
 0310                        .WithMany("CreatedArticles")
 0311                        .HasForeignKey("CreatedBy")
 0312                        .OnDelete(DeleteBehavior.Restrict)
 0313                        .IsRequired();
 0314
 0315                    b.HasOne("Chronicis.Shared.Models.User", "Modifier")
 0316                        .WithMany("ModifiedArticles")
 0317                        .HasForeignKey("LastModifiedBy")
 0318                        .OnDelete(DeleteBehavior.Restrict);
 0319
 0320                    b.HasOne("Chronicis.Shared.Models.Article", "Parent")
 0321                        .WithMany("Children")
 0322                        .HasForeignKey("ParentId")
 0323                        .OnDelete(DeleteBehavior.Restrict);
 0324
 0325                    b.HasOne("Chronicis.Shared.Models.User", "Player")
 0326                        .WithMany("OwnedCharacters")
 0327                        .HasForeignKey("PlayerId")
 0328                        .OnDelete(DeleteBehavior.Restrict);
 0329
 0330                    b.HasOne("Chronicis.Shared.Models.World", "World")
 0331                        .WithMany("Articles")
 0332                        .HasForeignKey("WorldId")
 0333                        .OnDelete(DeleteBehavior.Restrict);
 0334
 0335                    b.Navigation("Campaign");
 0336
 0337                    b.Navigation("Creator");
 0338
 0339                    b.Navigation("Modifier");
 0340
 0341                    b.Navigation("Parent");
 0342
 0343                    b.Navigation("Player");
 0344
 0345                    b.Navigation("World");
 0346                });
 347
 0348            modelBuilder.Entity("Chronicis.Shared.Models.ArticleLink", b =>
 0349                {
 0350                    b.HasOne("Chronicis.Shared.Models.Article", "SourceArticle")
 0351                        .WithMany("OutgoingLinks")
 0352                        .HasForeignKey("SourceArticleId")
 0353                        .OnDelete(DeleteBehavior.Cascade)
 0354                        .IsRequired();
 0355
 0356                    b.HasOne("Chronicis.Shared.Models.Article", "TargetArticle")
 0357                        .WithMany("IncomingLinks")
 0358                        .HasForeignKey("TargetArticleId")
 0359                        .OnDelete(DeleteBehavior.NoAction)
 0360                        .IsRequired();
 0361
 0362                    b.Navigation("SourceArticle");
 0363
 0364                    b.Navigation("TargetArticle");
 0365                });
 366
 0367            modelBuilder.Entity("Chronicis.Shared.Models.Campaign", b =>
 0368                {
 0369                    b.HasOne("Chronicis.Shared.Models.User", "Owner")
 0370                        .WithMany("OwnedCampaigns")
 0371                        .HasForeignKey("OwnerId")
 0372                        .OnDelete(DeleteBehavior.Restrict)
 0373                        .IsRequired();
 0374
 0375                    b.HasOne("Chronicis.Shared.Models.World", "World")
 0376                        .WithMany("Campaigns")
 0377                        .HasForeignKey("WorldId")
 0378                        .OnDelete(DeleteBehavior.Restrict)
 0379                        .IsRequired();
 0380
 0381                    b.Navigation("Owner");
 0382
 0383                    b.Navigation("World");
 0384                });
 385
 0386            modelBuilder.Entity("Chronicis.Shared.Models.CampaignMember", b =>
 0387                {
 0388                    b.HasOne("Chronicis.Shared.Models.Campaign", "Campaign")
 0389                        .WithMany("Members")
 0390                        .HasForeignKey("CampaignId")
 0391                        .OnDelete(DeleteBehavior.Cascade)
 0392                        .IsRequired();
 0393
 0394                    b.HasOne("Chronicis.Shared.Models.User", "User")
 0395                        .WithMany("CampaignMemberships")
 0396                        .HasForeignKey("UserId")
 0397                        .OnDelete(DeleteBehavior.Cascade)
 0398                        .IsRequired();
 0399
 0400                    b.Navigation("Campaign");
 0401
 0402                    b.Navigation("User");
 0403                });
 404
 0405            modelBuilder.Entity("Chronicis.Shared.Models.World", b =>
 0406                {
 0407                    b.HasOne("Chronicis.Shared.Models.User", "Owner")
 0408                        .WithMany("OwnedWorlds")
 0409                        .HasForeignKey("OwnerId")
 0410                        .OnDelete(DeleteBehavior.Restrict)
 0411                        .IsRequired();
 0412
 0413                    b.Navigation("Owner");
 0414                });
 415
 0416            modelBuilder.Entity("Chronicis.Shared.Models.Article", b =>
 0417                {
 0418                    b.Navigation("Children");
 0419
 0420                    b.Navigation("IncomingLinks");
 0421
 0422                    b.Navigation("OutgoingLinks");
 0423                });
 424
 0425            modelBuilder.Entity("Chronicis.Shared.Models.Campaign", b =>
 0426                {
 0427                    b.Navigation("Articles");
 0428
 0429                    b.Navigation("Members");
 0430                });
 431
 0432            modelBuilder.Entity("Chronicis.Shared.Models.User", b =>
 0433                {
 0434                    b.Navigation("CampaignMemberships");
 0435
 0436                    b.Navigation("CreatedArticles");
 0437
 0438                    b.Navigation("ModifiedArticles");
 0439
 0440                    b.Navigation("OwnedCampaigns");
 0441
 0442                    b.Navigation("OwnedCharacters");
 0443
 0444                    b.Navigation("OwnedWorlds");
 0445                });
 446
 0447            modelBuilder.Entity("Chronicis.Shared.Models.World", b =>
 0448                {
 0449                    b.Navigation("Articles");
 0450
 0451                    b.Navigation("Campaigns");
 0452                });
 453#pragma warning restore 612, 618
 0454        }
 455    }
 456}