< Summary

Line coverage
0%
Covered lines: 0
Uncovered lines: 555
Coverable lines: 555
Total lines: 620
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/20251225182413_FixRootSlugUniquenessPerWorld.cs

#LineLine coverage
 1using Microsoft.EntityFrameworkCore.Migrations;
 2
 3#nullable disable
 4
 5namespace Chronicis.Api.Migrations
 6{
 7    /// <inheritdoc />
 8    public partial class FixRootSlugUniquenessPerWorld : Migration
 9    {
 10        /// <inheritdoc />
 11        protected override void Up(MigrationBuilder migrationBuilder)
 12        {
 013            migrationBuilder.DropIndex(
 014                name: "IX_Articles_Slug_Root",
 015                table: "Articles");
 16
 017            migrationBuilder.CreateIndex(
 018                name: "IX_Articles_WorldId_Slug_Root",
 019                table: "Articles",
 020                columns: new[] { "WorldId", "Slug" },
 021                unique: true,
 022                filter: "[ParentId] IS NULL");
 023        }
 24
 25        /// <inheritdoc />
 26        protected override void Down(MigrationBuilder migrationBuilder)
 27        {
 028            migrationBuilder.DropIndex(
 029                name: "IX_Articles_WorldId_Slug_Root",
 030                table: "Articles");
 31
 032            migrationBuilder.CreateIndex(
 033                name: "IX_Articles_Slug_Root",
 034                table: "Articles",
 035                column: "Slug",
 036                unique: true,
 037                filter: "[ParentId] IS NULL");
 038        }
 39    }
 40}

/home/runner/work/chronicis/chronicis/src/Chronicis.Api/Migrations/20251225182413_FixRootSlugUniquenessPerWorld.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("20251225182413_FixRootSlugUniquenessPerWorld")]
 16    partial class FixRootSlugUniquenessPerWorld
 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.Arc", b =>
 029                {
 030                    b.Property<Guid>("Id")
 031                        .ValueGeneratedOnAdd()
 032                        .HasColumnType("uniqueidentifier");
 033
 034                    b.Property<Guid>("CampaignId")
 035                        .HasColumnType("uniqueidentifier");
 036
 037                    b.Property<DateTime>("CreatedAt")
 038                        .HasColumnType("datetime2");
 039
 040                    b.Property<Guid>("CreatedBy")
 041                        .HasColumnType("uniqueidentifier");
 042
 043                    b.Property<string>("Description")
 044                        .HasMaxLength(1000)
 045                        .HasColumnType("nvarchar(1000)");
 046
 047                    b.Property<string>("Name")
 048                        .IsRequired()
 049                        .HasMaxLength(200)
 050                        .HasColumnType("nvarchar(200)");
 051
 052                    b.Property<int>("SortOrder")
 053                        .HasColumnType("int");
 054
 055                    b.HasKey("Id");
 056
 057                    b.HasIndex("CampaignId");
 058
 059                    b.HasIndex("CreatedBy");
 060
 061                    b.HasIndex("CampaignId", "SortOrder");
 062
 063                    b.ToTable("Arcs");
 064                });
 65
 066            modelBuilder.Entity("Chronicis.Shared.Models.Article", b =>
 067                {
 068                    b.Property<Guid>("Id")
 069                        .ValueGeneratedOnAdd()
 070                        .HasColumnType("uniqueidentifier");
 071
 072                    b.Property<string>("AISummary")
 073                        .HasColumnType("nvarchar(max)");
 074
 075                    b.Property<DateTime?>("AISummaryGeneratedAt")
 076                        .HasColumnType("datetime2");
 077
 078                    b.Property<Guid?>("ArcId")
 079                        .HasColumnType("uniqueidentifier");
 080
 081                    b.Property<string>("Body")
 082                        .HasColumnType("nvarchar(max)");
 083
 084                    b.Property<Guid?>("CampaignId")
 085                        .HasColumnType("uniqueidentifier");
 086
 087                    b.Property<DateTime>("CreatedAt")
 088                        .HasColumnType("datetime2");
 089
 090                    b.Property<Guid>("CreatedBy")
 091                        .HasColumnType("uniqueidentifier");
 092
 093                    b.Property<DateTime>("EffectiveDate")
 094                        .HasColumnType("datetime2");
 095
 096                    b.Property<string>("IconEmoji")
 097                        .HasMaxLength(50)
 098                        .HasColumnType("nvarchar(50)");
 099
 0100                    b.Property<string>("InGameDate")
 0101                        .HasMaxLength(100)
 0102                        .HasColumnType("nvarchar(100)");
 0103
 0104                    b.Property<Guid?>("LastModifiedBy")
 0105                        .HasColumnType("uniqueidentifier");
 0106
 0107                    b.Property<DateTime?>("ModifiedAt")
 0108                        .HasColumnType("datetime2");
 0109
 0110                    b.Property<Guid?>("ParentId")
 0111                        .HasColumnType("uniqueidentifier");
 0112
 0113                    b.Property<Guid?>("PlayerId")
 0114                        .HasColumnType("uniqueidentifier");
 0115
 0116                    b.Property<DateTime?>("SessionDate")
 0117                        .HasColumnType("datetime2");
 0118
 0119                    b.Property<string>("Slug")
 0120                        .IsRequired()
 0121                        .HasMaxLength(200)
 0122                        .HasColumnType("nvarchar(200)");
 0123
 0124                    b.Property<string>("Title")
 0125                        .IsRequired()
 0126                        .HasMaxLength(500)
 0127                        .HasColumnType("nvarchar(500)");
 0128
 0129                    b.Property<int>("Type")
 0130                        .HasColumnType("int");
 0131
 0132                    b.Property<int>("Visibility")
 0133                        .HasColumnType("int");
 0134
 0135                    b.Property<Guid?>("WorldId")
 0136                        .HasColumnType("uniqueidentifier");
 0137
 0138                    b.HasKey("Id");
 0139
 0140                    b.HasIndex("ArcId");
 0141
 0142                    b.HasIndex("CampaignId");
 0143
 0144                    b.HasIndex("CreatedBy");
 0145
 0146                    b.HasIndex("LastModifiedBy");
 0147
 0148                    b.HasIndex("ParentId");
 0149
 0150                    b.HasIndex("PlayerId");
 0151
 0152                    b.HasIndex("Title");
 0153
 0154                    b.HasIndex("Type");
 0155
 0156                    b.HasIndex("WorldId");
 0157
 0158                    b.HasIndex("ParentId", "Slug")
 0159                        .IsUnique()
 0160                        .HasDatabaseName("IX_Articles_ParentId_Slug")
 0161                        .HasFilter("[ParentId] IS NOT NULL");
 0162
 0163                    b.HasIndex("WorldId", "Slug")
 0164                        .IsUnique()
 0165                        .HasDatabaseName("IX_Articles_WorldId_Slug_Root")
 0166                        .HasFilter("[ParentId] IS NULL");
 0167
 0168                    b.ToTable("Articles");
 0169                });
 170
 0171            modelBuilder.Entity("Chronicis.Shared.Models.ArticleLink", b =>
 0172                {
 0173                    b.Property<Guid>("Id")
 0174                        .ValueGeneratedOnAdd()
 0175                        .HasColumnType("uniqueidentifier");
 0176
 0177                    b.Property<DateTime>("CreatedAt")
 0178                        .HasColumnType("datetime2");
 0179
 0180                    b.Property<string>("DisplayText")
 0181                        .HasMaxLength(500)
 0182                        .HasColumnType("nvarchar(500)");
 0183
 0184                    b.Property<int>("Position")
 0185                        .HasColumnType("int");
 0186
 0187                    b.Property<Guid>("SourceArticleId")
 0188                        .HasColumnType("uniqueidentifier");
 0189
 0190                    b.Property<Guid>("TargetArticleId")
 0191                        .HasColumnType("uniqueidentifier");
 0192
 0193                    b.HasKey("Id");
 0194
 0195                    b.HasIndex("SourceArticleId");
 0196
 0197                    b.HasIndex("TargetArticleId");
 0198
 0199                    b.HasIndex("SourceArticleId", "TargetArticleId", "Position")
 0200                        .IsUnique();
 0201
 0202                    b.ToTable("ArticleLinks");
 0203                });
 204
 0205            modelBuilder.Entity("Chronicis.Shared.Models.Campaign", b =>
 0206                {
 0207                    b.Property<Guid>("Id")
 0208                        .ValueGeneratedOnAdd()
 0209                        .HasColumnType("uniqueidentifier");
 0210
 0211                    b.Property<DateTime>("CreatedAt")
 0212                        .HasColumnType("datetime2");
 0213
 0214                    b.Property<string>("Description")
 0215                        .HasMaxLength(1000)
 0216                        .HasColumnType("nvarchar(1000)");
 0217
 0218                    b.Property<DateTime?>("EndedAt")
 0219                        .HasColumnType("datetime2");
 0220
 0221                    b.Property<string>("Name")
 0222                        .IsRequired()
 0223                        .HasMaxLength(200)
 0224                        .HasColumnType("nvarchar(200)");
 0225
 0226                    b.Property<Guid>("OwnerId")
 0227                        .HasColumnType("uniqueidentifier");
 0228
 0229                    b.Property<DateTime?>("StartedAt")
 0230                        .HasColumnType("datetime2");
 0231
 0232                    b.Property<Guid>("WorldId")
 0233                        .HasColumnType("uniqueidentifier");
 0234
 0235                    b.HasKey("Id");
 0236
 0237                    b.HasIndex("OwnerId");
 0238
 0239                    b.HasIndex("WorldId");
 0240
 0241                    b.ToTable("Campaigns");
 0242                });
 243
 0244            modelBuilder.Entity("Chronicis.Shared.Models.CampaignMember", b =>
 0245                {
 0246                    b.Property<Guid>("Id")
 0247                        .ValueGeneratedOnAdd()
 0248                        .HasColumnType("uniqueidentifier");
 0249
 0250                    b.Property<Guid>("CampaignId")
 0251                        .HasColumnType("uniqueidentifier");
 0252
 0253                    b.Property<string>("CharacterName")
 0254                        .HasMaxLength(100)
 0255                        .HasColumnType("nvarchar(100)");
 0256
 0257                    b.Property<DateTime>("JoinedAt")
 0258                        .HasColumnType("datetime2");
 0259
 0260                    b.Property<int>("Role")
 0261                        .HasColumnType("int");
 0262
 0263                    b.Property<Guid>("UserId")
 0264                        .HasColumnType("uniqueidentifier");
 0265
 0266                    b.HasKey("Id");
 0267
 0268                    b.HasIndex("UserId");
 0269
 0270                    b.HasIndex("CampaignId", "UserId")
 0271                        .IsUnique();
 0272
 0273                    b.ToTable("CampaignMembers");
 0274                });
 275
 0276            modelBuilder.Entity("Chronicis.Shared.Models.User", b =>
 0277                {
 0278                    b.Property<Guid>("Id")
 0279                        .ValueGeneratedOnAdd()
 0280                        .HasColumnType("uniqueidentifier");
 0281
 0282                    b.Property<string>("Auth0UserId")
 0283                        .IsRequired()
 0284                        .HasMaxLength(256)
 0285                        .HasColumnType("nvarchar(256)");
 0286
 0287                    b.Property<string>("AvatarUrl")
 0288                        .HasMaxLength(500)
 0289                        .HasColumnType("nvarchar(500)");
 0290
 0291                    b.Property<DateTime>("CreatedAt")
 0292                        .HasColumnType("datetime2");
 0293
 0294                    b.Property<string>("DisplayName")
 0295                        .IsRequired()
 0296                        .HasMaxLength(100)
 0297                        .HasColumnType("nvarchar(100)");
 0298
 0299                    b.Property<string>("Email")
 0300                        .IsRequired()
 0301                        .HasMaxLength(256)
 0302                        .HasColumnType("nvarchar(256)");
 0303
 0304                    b.Property<DateTime>("LastLoginAt")
 0305                        .HasColumnType("datetime2");
 0306
 0307                    b.HasKey("Id");
 0308
 0309                    b.HasIndex("Auth0UserId")
 0310                        .IsUnique();
 0311
 0312                    b.HasIndex("Email");
 0313
 0314                    b.ToTable("Users");
 0315                });
 316
 0317            modelBuilder.Entity("Chronicis.Shared.Models.World", b =>
 0318                {
 0319                    b.Property<Guid>("Id")
 0320                        .ValueGeneratedOnAdd()
 0321                        .HasColumnType("uniqueidentifier");
 0322
 0323                    b.Property<DateTime>("CreatedAt")
 0324                        .HasColumnType("datetime2");
 0325
 0326                    b.Property<string>("Description")
 0327                        .HasMaxLength(1000)
 0328                        .HasColumnType("nvarchar(1000)");
 0329
 0330                    b.Property<string>("Name")
 0331                        .IsRequired()
 0332                        .HasMaxLength(200)
 0333                        .HasColumnType("nvarchar(200)");
 0334
 0335                    b.Property<Guid>("OwnerId")
 0336                        .HasColumnType("uniqueidentifier");
 0337
 0338                    b.HasKey("Id");
 0339
 0340                    b.HasIndex("OwnerId");
 0341
 0342                    b.ToTable("Worlds");
 0343                });
 344
 0345            modelBuilder.Entity("Chronicis.Shared.Models.WorldLink", b =>
 0346                {
 0347                    b.Property<Guid>("Id")
 0348                        .ValueGeneratedOnAdd()
 0349                        .HasColumnType("uniqueidentifier");
 0350
 0351                    b.Property<DateTime>("CreatedAt")
 0352                        .HasColumnType("datetime2");
 0353
 0354                    b.Property<string>("Description")
 0355                        .HasMaxLength(500)
 0356                        .HasColumnType("nvarchar(500)");
 0357
 0358                    b.Property<string>("Title")
 0359                        .IsRequired()
 0360                        .HasMaxLength(200)
 0361                        .HasColumnType("nvarchar(200)");
 0362
 0363                    b.Property<string>("Url")
 0364                        .IsRequired()
 0365                        .HasMaxLength(2048)
 0366                        .HasColumnType("nvarchar(2048)");
 0367
 0368                    b.Property<Guid>("WorldId")
 0369                        .HasColumnType("uniqueidentifier");
 0370
 0371                    b.HasKey("Id");
 0372
 0373                    b.HasIndex("WorldId");
 0374
 0375                    b.ToTable("WorldLinks");
 0376                });
 377
 0378            modelBuilder.Entity("Chronicis.Shared.Models.Arc", b =>
 0379                {
 0380                    b.HasOne("Chronicis.Shared.Models.Campaign", "Campaign")
 0381                        .WithMany("Arcs")
 0382                        .HasForeignKey("CampaignId")
 0383                        .OnDelete(DeleteBehavior.Cascade)
 0384                        .IsRequired();
 0385
 0386                    b.HasOne("Chronicis.Shared.Models.User", "Creator")
 0387                        .WithMany("CreatedArcs")
 0388                        .HasForeignKey("CreatedBy")
 0389                        .OnDelete(DeleteBehavior.Restrict)
 0390                        .IsRequired();
 0391
 0392                    b.Navigation("Campaign");
 0393
 0394                    b.Navigation("Creator");
 0395                });
 396
 0397            modelBuilder.Entity("Chronicis.Shared.Models.Article", b =>
 0398                {
 0399                    b.HasOne("Chronicis.Shared.Models.Arc", "Arc")
 0400                        .WithMany("Sessions")
 0401                        .HasForeignKey("ArcId")
 0402                        .OnDelete(DeleteBehavior.Restrict);
 0403
 0404                    b.HasOne("Chronicis.Shared.Models.Campaign", "Campaign")
 0405                        .WithMany("Articles")
 0406                        .HasForeignKey("CampaignId")
 0407                        .OnDelete(DeleteBehavior.Restrict);
 0408
 0409                    b.HasOne("Chronicis.Shared.Models.User", "Creator")
 0410                        .WithMany("CreatedArticles")
 0411                        .HasForeignKey("CreatedBy")
 0412                        .OnDelete(DeleteBehavior.Restrict)
 0413                        .IsRequired();
 0414
 0415                    b.HasOne("Chronicis.Shared.Models.User", "Modifier")
 0416                        .WithMany("ModifiedArticles")
 0417                        .HasForeignKey("LastModifiedBy")
 0418                        .OnDelete(DeleteBehavior.Restrict);
 0419
 0420                    b.HasOne("Chronicis.Shared.Models.Article", "Parent")
 0421                        .WithMany("Children")
 0422                        .HasForeignKey("ParentId")
 0423                        .OnDelete(DeleteBehavior.Restrict);
 0424
 0425                    b.HasOne("Chronicis.Shared.Models.User", "Player")
 0426                        .WithMany("OwnedCharacters")
 0427                        .HasForeignKey("PlayerId")
 0428                        .OnDelete(DeleteBehavior.Restrict);
 0429
 0430                    b.HasOne("Chronicis.Shared.Models.World", "World")
 0431                        .WithMany("Articles")
 0432                        .HasForeignKey("WorldId")
 0433                        .OnDelete(DeleteBehavior.Restrict);
 0434
 0435                    b.Navigation("Arc");
 0436
 0437                    b.Navigation("Campaign");
 0438
 0439                    b.Navigation("Creator");
 0440
 0441                    b.Navigation("Modifier");
 0442
 0443                    b.Navigation("Parent");
 0444
 0445                    b.Navigation("Player");
 0446
 0447                    b.Navigation("World");
 0448                });
 449
 0450            modelBuilder.Entity("Chronicis.Shared.Models.ArticleLink", b =>
 0451                {
 0452                    b.HasOne("Chronicis.Shared.Models.Article", "SourceArticle")
 0453                        .WithMany("OutgoingLinks")
 0454                        .HasForeignKey("SourceArticleId")
 0455                        .OnDelete(DeleteBehavior.Cascade)
 0456                        .IsRequired();
 0457
 0458                    b.HasOne("Chronicis.Shared.Models.Article", "TargetArticle")
 0459                        .WithMany("IncomingLinks")
 0460                        .HasForeignKey("TargetArticleId")
 0461                        .OnDelete(DeleteBehavior.NoAction)
 0462                        .IsRequired();
 0463
 0464                    b.Navigation("SourceArticle");
 0465
 0466                    b.Navigation("TargetArticle");
 0467                });
 468
 0469            modelBuilder.Entity("Chronicis.Shared.Models.Campaign", b =>
 0470                {
 0471                    b.HasOne("Chronicis.Shared.Models.User", "Owner")
 0472                        .WithMany("OwnedCampaigns")
 0473                        .HasForeignKey("OwnerId")
 0474                        .OnDelete(DeleteBehavior.Restrict)
 0475                        .IsRequired();
 0476
 0477                    b.HasOne("Chronicis.Shared.Models.World", "World")
 0478                        .WithMany("Campaigns")
 0479                        .HasForeignKey("WorldId")
 0480                        .OnDelete(DeleteBehavior.Restrict)
 0481                        .IsRequired();
 0482
 0483                    b.Navigation("Owner");
 0484
 0485                    b.Navigation("World");
 0486                });
 487
 0488            modelBuilder.Entity("Chronicis.Shared.Models.CampaignMember", b =>
 0489                {
 0490                    b.HasOne("Chronicis.Shared.Models.Campaign", "Campaign")
 0491                        .WithMany("Members")
 0492                        .HasForeignKey("CampaignId")
 0493                        .OnDelete(DeleteBehavior.Cascade)
 0494                        .IsRequired();
 0495
 0496                    b.HasOne("Chronicis.Shared.Models.User", "User")
 0497                        .WithMany("CampaignMemberships")
 0498                        .HasForeignKey("UserId")
 0499                        .OnDelete(DeleteBehavior.Cascade)
 0500                        .IsRequired();
 0501
 0502                    b.Navigation("Campaign");
 0503
 0504                    b.Navigation("User");
 0505                });
 506
 0507            modelBuilder.Entity("Chronicis.Shared.Models.World", b =>
 0508                {
 0509                    b.HasOne("Chronicis.Shared.Models.User", "Owner")
 0510                        .WithMany("OwnedWorlds")
 0511                        .HasForeignKey("OwnerId")
 0512                        .OnDelete(DeleteBehavior.Restrict)
 0513                        .IsRequired();
 0514
 0515                    b.Navigation("Owner");
 0516                });
 517
 0518            modelBuilder.Entity("Chronicis.Shared.Models.WorldLink", b =>
 0519                {
 0520                    b.HasOne("Chronicis.Shared.Models.World", "World")
 0521                        .WithMany("Links")
 0522                        .HasForeignKey("WorldId")
 0523                        .OnDelete(DeleteBehavior.Cascade)
 0524                        .IsRequired();
 0525
 0526                    b.Navigation("World");
 0527                });
 528
 0529            modelBuilder.Entity("Chronicis.Shared.Models.Arc", b =>
 0530                {
 0531                    b.Navigation("Sessions");
 0532                });
 533
 0534            modelBuilder.Entity("Chronicis.Shared.Models.Article", b =>
 0535                {
 0536                    b.Navigation("Children");
 0537
 0538                    b.Navigation("IncomingLinks");
 0539
 0540                    b.Navigation("OutgoingLinks");
 0541                });
 542
 0543            modelBuilder.Entity("Chronicis.Shared.Models.Campaign", b =>
 0544                {
 0545                    b.Navigation("Arcs");
 0546
 0547                    b.Navigation("Articles");
 0548
 0549                    b.Navigation("Members");
 0550                });
 551
 0552            modelBuilder.Entity("Chronicis.Shared.Models.User", b =>
 0553                {
 0554                    b.Navigation("CampaignMemberships");
 0555
 0556                    b.Navigation("CreatedArcs");
 0557
 0558                    b.Navigation("CreatedArticles");
 0559
 0560                    b.Navigation("ModifiedArticles");
 0561
 0562                    b.Navigation("OwnedCampaigns");
 0563
 0564                    b.Navigation("OwnedCharacters");
 0565
 0566                    b.Navigation("OwnedWorlds");
 0567                });
 568
 0569            modelBuilder.Entity("Chronicis.Shared.Models.World", b =>
 0570                {
 0571                    b.Navigation("Articles");
 0572
 0573                    b.Navigation("Campaigns");
 0574
 0575                    b.Navigation("Links");
 0576                });
 577#pragma warning restore 612, 618
 0578        }
 579    }
 580}