< Summary

Line coverage
0%
Covered lines: 0
Uncovered lines: 604
Coverable lines: 604
Total lines: 678
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/20251225200000_AddWorldSlug.cs

#LineLine coverage
 1using Microsoft.EntityFrameworkCore.Migrations;
 2
 3#nullable disable
 4
 5namespace Chronicis.Api.Migrations
 6{
 7    /// <inheritdoc />
 8    public partial class AddWorldSlug : Migration
 9    {
 10        /// <inheritdoc />
 11        protected override void Up(MigrationBuilder migrationBuilder)
 12        {
 13            // Step 1: Add Slug column as nullable first
 014            migrationBuilder.AddColumn<string>(
 015                name: "Slug",
 016                table: "Worlds",
 017                type: "nvarchar(200)",
 018                maxLength: 200,
 019                nullable: true);
 20
 21            // Step 2: Populate existing worlds with slugs derived from names
 22            // Uses SQL to generate slugs: lowercase, replace spaces with hyphens, remove special chars
 023            migrationBuilder.Sql(@"
 024                UPDATE Worlds
 025                SET Slug = LOWER(
 026                    REPLACE(
 027                        REPLACE(
 028                            REPLACE(
 029                                REPLACE(
 030                                    REPLACE(
 031                                        REPLACE(Name, ' ', '-'),
 032                                        '''', ''),
 033                                    '""', ''),
 034                                ',', ''),
 035                            '.', ''),
 036                        ':', '')
 037                )
 038                WHERE Slug IS NULL;
 039
 040                -- Handle any remaining empty slugs
 041                UPDATE Worlds
 042                SET Slug = LOWER(CONVERT(nvarchar(36), Id))
 043                WHERE Slug IS NULL OR Slug = '';
 044            ");
 45
 46            // Step 3: Handle duplicate slugs for the same owner by appending a number
 047            migrationBuilder.Sql(@"
 048                WITH DuplicateSlugs AS (
 049                    SELECT Id, OwnerId, Slug,
 050                           ROW_NUMBER() OVER (PARTITION BY OwnerId, Slug ORDER BY CreatedAt) as RowNum
 051                    FROM Worlds
 052                )
 053                UPDATE Worlds
 054                SET Slug = Worlds.Slug + '-' + CAST(ds.RowNum AS nvarchar(10))
 055                FROM Worlds
 056                INNER JOIN DuplicateSlugs ds ON Worlds.Id = ds.Id
 057                WHERE ds.RowNum > 1;
 058            ");
 59
 60            // Step 4: Make the column non-nullable
 061            migrationBuilder.AlterColumn<string>(
 062                name: "Slug",
 063                table: "Worlds",
 064                type: "nvarchar(200)",
 065                maxLength: 200,
 066                nullable: false,
 067                defaultValue: "");
 68
 69            // Step 5: Add unique index per owner
 070            migrationBuilder.CreateIndex(
 071                name: "IX_Worlds_OwnerId_Slug",
 072                table: "Worlds",
 073                columns: new[] { "OwnerId", "Slug" },
 074                unique: true);
 075        }
 76
 77        /// <inheritdoc />
 78        protected override void Down(MigrationBuilder migrationBuilder)
 79        {
 080            migrationBuilder.DropIndex(
 081                name: "IX_Worlds_OwnerId_Slug",
 082                table: "Worlds");
 83
 084            migrationBuilder.DropColumn(
 085                name: "Slug",
 086                table: "Worlds");
 087        }
 88    }
 89}

/home/runner/work/chronicis/chronicis/src/Chronicis.Api/Migrations/20251225200000_AddWorldSlug.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("20251225200000_AddWorldSlug")]
 16    partial class AddWorldSlug
 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.Property<string>("Slug")
 0339                        .IsRequired()
 0340                        .HasMaxLength(200)
 0341                        .HasColumnType("nvarchar(200)");
 0342
 0343                    b.HasKey("Id");
 0344
 0345                    b.HasIndex("OwnerId");
 0346
 0347                    b.HasIndex("OwnerId", "Slug")
 0348                        .IsUnique()
 0349                        .HasDatabaseName("IX_Worlds_OwnerId_Slug");
 0350
 0351                    b.ToTable("Worlds");
 0352                });
 353
 0354            modelBuilder.Entity("Chronicis.Shared.Models.WorldLink", b =>
 0355                {
 0356                    b.Property<Guid>("Id")
 0357                        .ValueGeneratedOnAdd()
 0358                        .HasColumnType("uniqueidentifier");
 0359
 0360                    b.Property<DateTime>("CreatedAt")
 0361                        .HasColumnType("datetime2");
 0362
 0363                    b.Property<string>("Description")
 0364                        .HasMaxLength(500)
 0365                        .HasColumnType("nvarchar(500)");
 0366
 0367                    b.Property<string>("Title")
 0368                        .IsRequired()
 0369                        .HasMaxLength(200)
 0370                        .HasColumnType("nvarchar(200)");
 0371
 0372                    b.Property<string>("Url")
 0373                        .IsRequired()
 0374                        .HasMaxLength(2048)
 0375                        .HasColumnType("nvarchar(2048)");
 0376
 0377                    b.Property<Guid>("WorldId")
 0378                        .HasColumnType("uniqueidentifier");
 0379
 0380                    b.HasKey("Id");
 0381
 0382                    b.HasIndex("WorldId");
 0383
 0384                    b.ToTable("WorldLinks");
 0385                });
 386
 0387            modelBuilder.Entity("Chronicis.Shared.Models.Arc", b =>
 0388                {
 0389                    b.HasOne("Chronicis.Shared.Models.Campaign", "Campaign")
 0390                        .WithMany("Arcs")
 0391                        .HasForeignKey("CampaignId")
 0392                        .OnDelete(DeleteBehavior.Cascade)
 0393                        .IsRequired();
 0394
 0395                    b.HasOne("Chronicis.Shared.Models.User", "Creator")
 0396                        .WithMany("CreatedArcs")
 0397                        .HasForeignKey("CreatedBy")
 0398                        .OnDelete(DeleteBehavior.Restrict)
 0399                        .IsRequired();
 0400
 0401                    b.Navigation("Campaign");
 0402
 0403                    b.Navigation("Creator");
 0404                });
 405
 0406            modelBuilder.Entity("Chronicis.Shared.Models.Article", b =>
 0407                {
 0408                    b.HasOne("Chronicis.Shared.Models.Arc", "Arc")
 0409                        .WithMany("Sessions")
 0410                        .HasForeignKey("ArcId")
 0411                        .OnDelete(DeleteBehavior.Restrict);
 0412
 0413                    b.HasOne("Chronicis.Shared.Models.Campaign", "Campaign")
 0414                        .WithMany("Articles")
 0415                        .HasForeignKey("CampaignId")
 0416                        .OnDelete(DeleteBehavior.Restrict);
 0417
 0418                    b.HasOne("Chronicis.Shared.Models.User", "Creator")
 0419                        .WithMany("CreatedArticles")
 0420                        .HasForeignKey("CreatedBy")
 0421                        .OnDelete(DeleteBehavior.Restrict)
 0422                        .IsRequired();
 0423
 0424                    b.HasOne("Chronicis.Shared.Models.User", "Modifier")
 0425                        .WithMany("ModifiedArticles")
 0426                        .HasForeignKey("LastModifiedBy")
 0427                        .OnDelete(DeleteBehavior.Restrict);
 0428
 0429                    b.HasOne("Chronicis.Shared.Models.Article", "Parent")
 0430                        .WithMany("Children")
 0431                        .HasForeignKey("ParentId")
 0432                        .OnDelete(DeleteBehavior.Restrict);
 0433
 0434                    b.HasOne("Chronicis.Shared.Models.User", "Player")
 0435                        .WithMany("OwnedCharacters")
 0436                        .HasForeignKey("PlayerId")
 0437                        .OnDelete(DeleteBehavior.Restrict);
 0438
 0439                    b.HasOne("Chronicis.Shared.Models.World", "World")
 0440                        .WithMany("Articles")
 0441                        .HasForeignKey("WorldId")
 0442                        .OnDelete(DeleteBehavior.Restrict);
 0443
 0444                    b.Navigation("Arc");
 0445
 0446                    b.Navigation("Campaign");
 0447
 0448                    b.Navigation("Creator");
 0449
 0450                    b.Navigation("Modifier");
 0451
 0452                    b.Navigation("Parent");
 0453
 0454                    b.Navigation("Player");
 0455
 0456                    b.Navigation("World");
 0457                });
 458
 0459            modelBuilder.Entity("Chronicis.Shared.Models.ArticleLink", b =>
 0460                {
 0461                    b.HasOne("Chronicis.Shared.Models.Article", "SourceArticle")
 0462                        .WithMany("OutgoingLinks")
 0463                        .HasForeignKey("SourceArticleId")
 0464                        .OnDelete(DeleteBehavior.Cascade)
 0465                        .IsRequired();
 0466
 0467                    b.HasOne("Chronicis.Shared.Models.Article", "TargetArticle")
 0468                        .WithMany("IncomingLinks")
 0469                        .HasForeignKey("TargetArticleId")
 0470                        .OnDelete(DeleteBehavior.NoAction)
 0471                        .IsRequired();
 0472
 0473                    b.Navigation("SourceArticle");
 0474
 0475                    b.Navigation("TargetArticle");
 0476                });
 477
 0478            modelBuilder.Entity("Chronicis.Shared.Models.Campaign", b =>
 0479                {
 0480                    b.HasOne("Chronicis.Shared.Models.User", "Owner")
 0481                        .WithMany("OwnedCampaigns")
 0482                        .HasForeignKey("OwnerId")
 0483                        .OnDelete(DeleteBehavior.Restrict)
 0484                        .IsRequired();
 0485
 0486                    b.HasOne("Chronicis.Shared.Models.World", "World")
 0487                        .WithMany("Campaigns")
 0488                        .HasForeignKey("WorldId")
 0489                        .OnDelete(DeleteBehavior.Restrict)
 0490                        .IsRequired();
 0491
 0492                    b.Navigation("Owner");
 0493
 0494                    b.Navigation("World");
 0495                });
 496
 0497            modelBuilder.Entity("Chronicis.Shared.Models.CampaignMember", b =>
 0498                {
 0499                    b.HasOne("Chronicis.Shared.Models.Campaign", "Campaign")
 0500                        .WithMany("Members")
 0501                        .HasForeignKey("CampaignId")
 0502                        .OnDelete(DeleteBehavior.Cascade)
 0503                        .IsRequired();
 0504
 0505                    b.HasOne("Chronicis.Shared.Models.User", "User")
 0506                        .WithMany("CampaignMemberships")
 0507                        .HasForeignKey("UserId")
 0508                        .OnDelete(DeleteBehavior.Cascade)
 0509                        .IsRequired();
 0510
 0511                    b.Navigation("Campaign");
 0512
 0513                    b.Navigation("User");
 0514                });
 515
 0516            modelBuilder.Entity("Chronicis.Shared.Models.World", b =>
 0517                {
 0518                    b.HasOne("Chronicis.Shared.Models.User", "Owner")
 0519                        .WithMany("OwnedWorlds")
 0520                        .HasForeignKey("OwnerId")
 0521                        .OnDelete(DeleteBehavior.Restrict)
 0522                        .IsRequired();
 0523
 0524                    b.Navigation("Owner");
 0525                });
 526
 0527            modelBuilder.Entity("Chronicis.Shared.Models.WorldLink", b =>
 0528                {
 0529                    b.HasOne("Chronicis.Shared.Models.World", "World")
 0530                        .WithMany("Links")
 0531                        .HasForeignKey("WorldId")
 0532                        .OnDelete(DeleteBehavior.Cascade)
 0533                        .IsRequired();
 0534
 0535                    b.Navigation("World");
 0536                });
 537
 0538            modelBuilder.Entity("Chronicis.Shared.Models.Arc", b =>
 0539                {
 0540                    b.Navigation("Sessions");
 0541                });
 542
 0543            modelBuilder.Entity("Chronicis.Shared.Models.Article", b =>
 0544                {
 0545                    b.Navigation("Children");
 0546
 0547                    b.Navigation("IncomingLinks");
 0548
 0549                    b.Navigation("OutgoingLinks");
 0550                });
 551
 0552            modelBuilder.Entity("Chronicis.Shared.Models.Campaign", b =>
 0553                {
 0554                    b.Navigation("Arcs");
 0555
 0556                    b.Navigation("Articles");
 0557
 0558                    b.Navigation("Members");
 0559                });
 560
 0561            modelBuilder.Entity("Chronicis.Shared.Models.User", b =>
 0562                {
 0563                    b.Navigation("CampaignMemberships");
 0564
 0565                    b.Navigation("CreatedArcs");
 0566
 0567                    b.Navigation("CreatedArticles");
 0568
 0569                    b.Navigation("ModifiedArticles");
 0570
 0571                    b.Navigation("OwnedCampaigns");
 0572
 0573                    b.Navigation("OwnedCharacters");
 0574
 0575                    b.Navigation("OwnedWorlds");
 0576                });
 577
 0578            modelBuilder.Entity("Chronicis.Shared.Models.World", b =>
 0579                {
 0580                    b.Navigation("Articles");
 0581
 0582                    b.Navigation("Campaigns");
 0583
 0584                    b.Navigation("Links");
 0585                });
 586#pragma warning restore 612, 618
 0587        }
 588    }
 589}