< Summary - Syki

Information
Class: Syki.Back.Database.SykiDbContext
Assembly: Back
File(s): /home/runner/work/syki/syki/Back/Database/SykiDbContext.cs
Tag: 4_16869239191
Line coverage
100%
Covered lines: 59
Uncovered lines: 0
Coverable lines: 59
Total lines: 121
Line coverage: 100%
Branch coverage
90%
Covered branches: 9
Total branches: 10
Branch coverage: 90%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_Institutions()100%11100%
get_Configs()100%11100%
get_Campi()100%11100%
get_Courses()100%11100%
get_Disciplines()100%11100%
get_CourseCurriculums()100%11100%
get_CoursesDisciplines()100%11100%
get_CourseCurriculumDisciplines()100%11100%
get_CourseOfferings()100%11100%
get_AcademicPeriods()100%11100%
get_EnrollmentPeriods()100%11100%
get_Notifications()100%11100%
get_UserNotifications()100%11100%
get_UserRegisters()100%11100%
get_ResetPasswordTokens()100%11100%
get_Webhooks()100%11100%
get_WebhookCalls()100%11100%
get_Classes()100%11100%
get_Classrooms()100%11100%
get_Teachers()100%11100%
get_TeachersDisciplines()100%11100%
get_Students()100%11100%
get_ClassesStudents()100%11100%
get_Lessons()100%11100%
get_Attendances()100%11100%
get_ClassActivities()100%11100%
get_ClassActivityWorks()100%11100%
get_AuditLogs()100%11100%
get_FeatureFlags()100%11100%
get_DomainEvents()100%11100%
get_Commands()100%11100%
OnConfiguring(...)100%11100%
OnModelCreating(...)90%1010100%
ConfigureConventions(...)100%11100%

File(s)

/home/runner/work/syki/syki/Back/Database/SykiDbContext.cs

#LineLine coverage
 1using Npgsql;
 2using Syki.Back.Audit;
 3using Audit.EntityFramework;
 4using Syki.Back.Database.Interceptors;
 5using Syki.Back.Features.Cross.CreateUser;
 6using Syki.Back.Features.Academic.CreateClass;
 7using Syki.Back.Features.Academic.CreateCourse;
 8using Syki.Back.Features.Academic.CallWebhooks;
 9using Syki.Back.Features.Academic.CreateCampus;
 10using Syki.Back.Features.Academic.CreateStudent;
 11using Syki.Back.Features.Academic.CreateTeacher;
 12using Microsoft.EntityFrameworkCore.Diagnostics;
 13using Syki.Back.Features.Cross.CreateInstitution;
 14using Syki.Back.Features.Cross.SetupFeatureFlags;
 15using Syki.Back.Features.Academic.CreateClassroom;
 16using Syki.Back.Features.Academic.CreateDiscipline;
 17using Syki.Back.Features.Academic.CreateNotification;
 18using Syki.Back.Features.Teacher.CreateClassActivity;
 19using Syki.Back.Features.Cross.SendResetPasswordToken;
 20using Syki.Back.Features.Academic.CreateCourseOffering;
 21using Syki.Back.Features.Academic.CreateAcademicPeriod;
 22using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
 23using Syki.Back.Features.Teacher.CreateLessonAttendance;
 24using Syki.Back.Features.Cross.CreatePendingUserRegister;
 25using Syki.Back.Features.Academic.CreateCourseCurriculum;
 26using Syki.Back.Features.Academic.CreateEnrollmentPeriod;
 27using Syki.Back.Features.Student.CreateStudentEnrollment;
 28using Syki.Back.Features.Student.CreateClassActivityWork;
 29using Syki.Back.Features.Academic.CreateWebhookSubscription;
 30
 31namespace Syki.Back.Database;
 32
 1386833public class SykiDbContext(DbContextOptions<SykiDbContext> options, NpgsqlDataSource npgsqlDataSource) : IdentityDbConte
 34{
 1494235    public DbSet<Institution> Institutions { get; set; }
 1387036    public DbSet<InstitutionConfigs> Configs { get; set; }
 37
 1440438    public DbSet<Campus> Campi { get; set; }
 1497039    public DbSet<Course> Courses { get; set; }
 1448440    public DbSet<Discipline> Disciplines { get; set; }
 1501841    public DbSet<CourseCurriculum> CourseCurriculums { get; set; }
 1440442    public DbSet<CourseDiscipline> CoursesDisciplines { get; set; }
 1388243    public DbSet<CourseCurriculumDiscipline> CourseCurriculumDisciplines { get; set; }
 1524644    public DbSet<CourseOffering> CourseOfferings { get; set; }
 1577445    public DbSet<AcademicPeriod> AcademicPeriods { get; set; }
 1446446    public DbSet<EnrollmentPeriod> EnrollmentPeriods { get; set; }
 47
 1431248    public DbSet<Notification> Notifications { get; set; }
 1435449    public DbSet<UserNotification> UserNotifications { get; set; }
 1636050    public DbSet<UserRegister> UserRegisters { get; set; }
 1528851    public DbSet<ResetPasswordToken> ResetPasswordTokens { get; set; }
 52
 1418853    public DbSet<WebhookSubscription> Webhooks { get; set; }
 1386854    public DbSet<WebhookCall> WebhookCalls { get; set; }
 55
 1609656    public DbSet<Class> Classes { get; set; }
 1386857    public DbSet<Classroom> Classrooms { get; set; }
 1448858    public DbSet<SykiTeacher> Teachers { get; set; }
 1387059    public DbSet<TeacherDiscipline> TeachersDisciplines { get; set; }
 1468060    public DbSet<SykiStudent> Students { get; set; }
 1438261    public DbSet<ClassStudent> ClassesStudents { get; set; }
 1412462    public DbSet<ClassLesson> Lessons { get; set; }
 1396463    public DbSet<ClassLessonAttendance> Attendances { get; set; }
 1415664    public DbSet<ClassActivity> ClassActivities { get; set; }
 1393865    public DbSet<ClassActivityWork> ClassActivityWorks { get; set; }
 66
 1387267    public DbSet<AuditLog> AuditLogs { get; set; }
 1387268    public DbSet<FeatureFlags> FeatureFlags { get; set; }
 1878669    public DbSet<DomainEvent> DomainEvents { get; set; }
 1857670    public DbSet<Command> Commands { get; set; }
 71
 72    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
 73    {
 1377674        optionsBuilder.UseSnakeCaseNamingConvention();
 1377675        optionsBuilder.UseNpgsql(
 1377676            npgsqlDataSource,
 1377677            x => x.MigrationsHistoryTable("migrations", "syki")
 1377678        );
 79
 2755280        optionsBuilder.ConfigureWarnings(w => w.Ignore(RelationalEventId.PendingModelChangesWarning));
 81
 1377682        optionsBuilder.AddInterceptors(new SetBatchSizeInterceptor());
 1377683        optionsBuilder.AddInterceptors(new AuditSaveChangesInterceptor());
 1377684        optionsBuilder.AddInterceptors(new SaveDomainEventsInterceptor());
 1377685        optionsBuilder.AddInterceptors(new CommandsDelayInterceptor());
 1377686    }
 87
 88    protected override void OnModelCreating(ModelBuilder builder)
 89    {
 290        base.OnModelCreating(builder);
 91
 292        builder.HasDefaultSchema("syki");
 93
 294        builder.ApplyConfigurationsFromAssembly(GetType().Assembly);
 95
 20096        foreach (var entity in builder.Model.GetEntityTypes())
 97        {
 9898            if (entity.GetTableName().IsEmpty()) continue;
 99
 98100            entity.SetTableName(entity.GetTableName().ToSnakeCase().Replace("asp_net_", ""));
 101
 464102            foreach (var fk in entity.GetForeignKeys())
 103            {
 134104                fk.SetConstraintName(fk.GetConstraintName().Replace("1", ""));
 105            }
 106
 424107            foreach (var index in entity.GetIndexes())
 108            {
 114109                index.SetDatabaseName(index.GetDatabaseName()?.ToSnakeCase());
 110            }
 111        }
 2112    }
 113
 114    protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
 115    {
 2116        configurationBuilder.Properties<Enum>().HaveConversion<string>();
 2117        configurationBuilder.Properties<CommandId>().HaveConversion<CommandId.CommandIdEfCoreValueConverter>();
 2118        configurationBuilder.Properties<DomainEventId>().HaveConversion<DomainEventId.DomainEventIdEfCoreValueConverter>
 2119        configurationBuilder.Properties<CommandBatchId>().HaveConversion<CommandBatchId.CommandBatchIdEfCoreValueConvert
 2120    }
 121}