| Anichron.API | 795 | 259 | 1054 | 2531 | 75.4% | | 263 | 285 | 92.2% | |
| Anichron.API.Endpoints.AdminEndpoints | 40 | 20 | 60 | 138 | 66.6% | | 4 | 4 | 100% | |
| Anichron.API.Endpoints.AuthEndpoints | 28 | 13 | 41 | 94 | 68.2% | | 12 | 12 | 100% | |
| Anichron.API.Endpoints.AuthResponseMapper | 153 | 3 | 156 | 234 | 98% | | 92 | 95 | 96.8% | |
| Anichron.API.Endpoints.UserEndpoints | 14 | 9 | 23 | 54 | 60.8% | | 6 | 6 | 100% | |
| Anichron.API.Infrastructure.ApiPaths | 2 | 0 | 2 | 43 | 100% | | 0 | 0 | | |
| Anichron.API.Infrastructure.ApplicationExtensions | 0 | 38 | 38 | 78 | 0% | | 0 | 2 | 0% | |
| Anichron.API.Infrastructure.AuthMessages | 1 | 0 | 1 | 29 | 100% | | 2 | 2 | 100% | |
| Anichron.API.Infrastructure.HealthCheckResponseWriter | 11 | 0 | 11 | 19 | 100% | | 0 | 0 | | |
| Anichron.API.Infrastructure.MustChangePasswordMiddleware | 19 | 0 | 19 | 31 | 100% | | 7 | 8 | 87.5% | |
| Anichron.API.Infrastructure.ProxyStorageHealthCheck | 11 | 0 | 11 | 23 | 100% | | 2 | 2 | 100% | |
| Anichron.API.Infrastructure.ServiceCollectionExtensions | 0 | 140 | 140 | 197 | 0% | | 0 | 14 | 0% | |
| Anichron.API.Infrastructure.WebApplicationBuilderExtensions | 0 | 12 | 12 | 26 | 0% | | 0 | 0 | | |
| Anichron.API.Security.Argon2PasswordHasher | 38 | 0 | 38 | 85 | 100% | | 2 | 2 | 100% | |
| Anichron.API.Security.JwtFactory | 28 | 0 | 28 | 58 | 100% | | 4 | 4 | 100% | |
| Anichron.API.Services.AdminResetService | 21 | 0 | 21 | 41 | 100% | | 2 | 2 | 100% | |
| Anichron.API.Services.AdminStorageConfigService | 41 | 0 | 41 | 67 | 100% | | 12 | 12 | 100% | |
| Anichron.API.Services.AdminUserService | 43 | 0 | 43 | 80 | 100% | | 18 | 18 | 100% | |
| Anichron.API.Services.AuthResult | 10 | 0 | 10 | 256 | 100% | | 0 | 0 | | |
| Anichron.API.Services.AuthResult<T> | 1 | 0 | 1 | 256 | 100% | | 0 | 0 | | |
| Anichron.API.Services.AuthService | 134 | 0 | 134 | 256 | 100% | | 40 | 40 | 100% | |
| Anichron.API.Services.BootstrapResetService | 34 | 0 | 34 | 75 | 100% | | 12 | 12 | 100% | |
| Anichron.API.Services.BootstrapSeeder | 33 | 0 | 33 | 65 | 100% | | 6 | 6 | 100% | |
| Anichron.API.Services.LockoutService | 17 | 0 | 17 | 41 | 100% | | 6 | 6 | 100% | |
| Anichron.API.Services.PwnedPasswordClient | 18 | 0 | 18 | 48 | 100% | | 0 | 0 | | |
| Anichron.API.Services.RegistrationValidator | 39 | 0 | 39 | 76 | 100% | | 20 | 20 | 100% | |
| Anichron.API.Services.TokenService | 56 | 0 | 56 | 104 | 100% | | 16 | 16 | 100% | |
| Anichron.API.Settings.PasswordPolicy | 2 | 0 | 2 | 11 | 100% | | 0 | 0 | | |
| Anichron.API.Settings.UsernamePolicy | 1 | 0 | 1 | 14 | 100% | | 0 | 0 | | |
| Program | 0 | 24 | 24 | 32 | 0% | | 0 | 2 | 0% | |
| Anichron.Core | 272 | 32 | 304 | 476 | 89.4% | | 0 | 0 | | |
| Anichron.Core.Data.AnichronDbContext | 243 | 16 | 259 | 281 | 93.8% | | 0 | 0 | | |
| Anichron.Core.Data.AnichronDbContextFactory | 0 | 7 | 7 | 16 | 0% | | 0 | 0 | | |
| Anichron.Core.Data.Repository.EfInviteRepository | 4 | 0 | 4 | 20 | 100% | | 0 | 0 | | |
| Anichron.Core.Data.Repository.EfMediaAssetRepository | 0 | 4 | 4 | 20 | 0% | | 0 | 0 | | |
| Anichron.Core.Data.Repository.EfRefreshTokenRepository | 4 | 4 | 8 | 33 | 50% | | 0 | 0 | | |
| Anichron.Core.Data.Repository.EfUserRepository | 13 | 0 | 13 | 56 | 100% | | 0 | 0 | | |
| Anichron.Core.Data.Repository.EfUserStorageConfigRepository | 8 | 0 | 8 | 39 | 100% | | 0 | 0 | | |
| Anichron.Core.TimeOrderedGuidFactory | 0 | 1 | 1 | 11 | 0% | | 0 | 0 | | |
| Anichron.Infrastructure | 69 | 33 | 102 | 189 | 67.6% | | 24 | 30 | 80% | |
| Anichron.Infrastructure.Configuration.AppIniInitializer | 48 | 0 | 48 | 77 | 100% | | 12 | 12 | 100% | |
| Anichron.Infrastructure.Configuration.DatabaseConfiguration | 21 | 0 | 21 | 38 | 100% | | 12 | 12 | 100% | |
| Anichron.Infrastructure.Data.DatabaseFacadeExtensions | 0 | 33 | 33 | 74 | 0% | | 0 | 6 | 0% | |
| Anichron.Worker | 741 | 208 | 949 | 6044 | 78% | | 111 | 150 | 74% | |
| Anichron.Worker.Crawling.FileIngestionPipeline | 72 | 4 | 76 | 454 | 94.7% | | 12 | 12 | 100% | |
| Anichron.Worker.Crawling.Worker | 20 | 15 | 35 | 413 | 57.1% | | 4 | 8 | 50% | |
| Anichron.Worker.Infrastructure.HostApplicationBuilderExtensions | 0 | 22 | 22 | 35 | 0% | | 0 | 0 | | |
| Anichron.Worker.Infrastructure.WorkerServiceCollectionExtensions | 43 | 11 | 54 | 97 | 79.6% | | 0 | 0 | | |
| Anichron.Worker.Ingestion.ExifData | 11 | 0 | 11 | 18 | 100% | | 0 | 0 | | |
| Anichron.Worker.Ingestion.IngestionShutdown | 1 | 0 | 1 | 11 | 100% | | 2 | 2 | 100% | |
| Anichron.Worker.Ingestion.LivePhotoLinker | 31 | 0 | 31 | 54 | 100% | | 10 | 10 | 100% | |
| Anichron.Worker.Ingestion.LivePhotoLinkResult | 3 | 0 | 3 | 54 | 100% | | 0 | 0 | | |
| Anichron.Worker.Ingestion.LivePhotoPairItem | 2 | 0 | 2 | 33 | 100% | | 0 | 0 | | |
| Anichron.Worker.Ingestion.MediaTypeDetector | 24 | 0 | 24 | 33 | 100% | | 2 | 2 | 100% | |
| Anichron.Worker.Ingestion.Middlewares.ContentHashingMiddleware | 13 | 2 | 15 | 27 | 86.6% | | 2 | 2 | 100% | |
| Anichron.Worker.Ingestion.Middlewares.ExifExtractionMiddleware | 63 | 34 | 97 | 368 | 64.9% | | 24 | 50 | 48% | |
| Anichron.Worker.Ingestion.Middlewares.IdempotencyCheckMiddleware | 11 | 4 | 15 | 266 | 73.3% | | 2 | 2 | 100% | |
| Anichron.Worker.Ingestion.Middlewares.ImageProxyMiddleware | 17 | 3 | 20 | 534 | 85% | | 6 | 6 | 100% | |
| Anichron.Worker.Ingestion.Middlewares.LoggingMiddleware | 10 | 2 | 12 | 479 | 83.3% | | 0 | 0 | | |
| Anichron.Worker.Ingestion.Middlewares.PersistenceMiddleware | 78 | 4 | 82 | 532 | 95.1% | | 7 | 8 | 87.5% | |
| Anichron.Worker.Ingestion.Middlewares.VideoProxyMiddleware | 14 | 3 | 17 | 300 | 82.3% | | 2 | 2 | 100% | |
| Anichron.Worker.Ingestion.Pipeline.IngestionContext | 8 | 0 | 8 | 37 | 100% | | 0 | 0 | | |
| Anichron.Worker.Ingestion.Pipeline.IngestionPipelineBuilder | 20 | 4 | 24 | 330 | 83.3% | | 2 | 2 | 100% | |
| Anichron.Worker.Ingestion.Pipeline.IngestionPipelineRunner | 73 | 12 | 85 | 276 | 85.8% | | 13 | 14 | 92.8% | |
| Anichron.Worker.Ingestion.Proxy.BlurhashGenerator | 7 | 0 | 7 | 40 | 100% | | 0 | 0 | | |
| Anichron.Worker.Ingestion.Proxy.FfmpegException | 5 | 3 | 8 | 137 | 62.5% | | 0 | 0 | | |
| Anichron.Worker.Ingestion.Proxy.FfmpegVideoProcessor | 69 | 4 | 73 | 240 | 94.5% | | 10 | 10 | 100% | |
| Anichron.Worker.Ingestion.Proxy.FullPreviewGenerator | 4 | 0 | 4 | 40 | 100% | | 0 | 0 | | |
| Anichron.Worker.Ingestion.Proxy.ImageSharpProcessor | 0 | 23 | 23 | 62 | 0% | | 0 | 2 | 0% | |
| Anichron.Worker.Ingestion.Proxy.ProxyFileBuilder | 9 | 0 | 9 | 26 | 100% | | 0 | 0 | | |
| Anichron.Worker.Ingestion.Proxy.ProxyStagingWriter | 34 | 4 | 38 | 158 | 89.4% | | 4 | 4 | 100% | |
| Anichron.Worker.Ingestion.Proxy.SystemProcessLauncher | 0 | 26 | 26 | 49 | 0% | | 0 | 2 | 0% | |
| Anichron.Worker.Ingestion.Proxy.ThumbnailGenerator | 4 | 0 | 4 | 40 | 100% | | 0 | 0 | | |
| Anichron.Worker.Ingestion.Proxy.TwoLevelHexShardStrategy | 1 | 0 | 1 | 18 | 100% | | 0 | 0 | | |
| Anichron.Worker.Ingestion.Proxy.Video720PGenerator | 4 | 0 | 4 | 19 | 100% | | 0 | 0 | | |
| Anichron.Worker.Ingestion.SecondaryFileDescriptor | 4 | 0 | 4 | 33 | 100% | | 0 | 0 | | |
| Anichron.Worker.Ingestion.SingleFileItem | 2 | 0 | 2 | 33 | 100% | | 0 | 0 | | |
| Anichron.Worker.Maintenance.TokenCleanupService | 17 | 13 | 30 | 219 | 56.6% | | 0 | 2 | 0% | |
| Anichron.Worker.Startup.DatabaseMigratorService | 26 | 7 | 33 | 88 | 78.7% | | 1 | 2 | 50% | |
| Anichron.Worker.Startup.EfDatabaseMigrator | 0 | 2 | 2 | 15 | 0% | | 0 | 0 | | |
| Anichron.Worker.Startup.WorkerInitializer | 41 | 6 | 47 | 476 | 87.2% | | 8 | 8 | 100% | |