< Summary

Information
Class: Api.Jobs.JobDTOBuilder
Assembly: Api
File(s): /home/runner/work/ProjectRead.ing/ProjectRead.ing/Api/Jobs/JobDTOBuilder.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 19
Coverable lines: 19
Total lines: 37
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 12
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor()0%4260%
CreateFrom(...)0%620%

File(s)

/home/runner/work/ProjectRead.ing/ProjectRead.ing/Api/Jobs/JobDTOBuilder.cs

#LineLine coverage
 1// SPDX-FileCopyrightText: 2026 Alper Çelik <alper@alper-celik.dev>
 2//
 3// SPDX-License-Identifier: AGPL-3.0-or-later
 4
 5using System.Reflection;
 6using Api.Jobs.DTOs;
 7using Api.Jobs.Models;
 8
 9namespace Api.Jobs;
 10
 11public class JobDTOBuilder
 12{
 13    public delegate IJob JobFactory(JobData data);
 14    private readonly Dictionary<string, JobFactory> _jobFactories;
 15
 016    JobDTOBuilder()
 017    {
 018        _jobFactories = Assembly
 019            .GetExecutingAssembly()
 020            .GetTypes()
 021            .Where(t =>
 022                t.GetInterfaces().Any(i => i.GetType() == typeof(IJob)) && t.IsClass
 023            )
 024            .ToDictionary(
 025                t => t.Name,
 026                t =>
 027                    t.GetMethod(
 028                                nameof(IJobType.CreateFrom),
 029                                BindingFlags.Static | BindingFlags.Public
 030                            )!
 031                        .CreateDelegate<JobFactory>()
 032            );
 033    }
 34
 35    public IJob? CreateFrom(string jobType, JobData data) =>
 036        _jobFactories.TryGetValue(jobType, out var factory) ? factory(data) : null;
 37}