< Summary - Syki

Line coverage
96%
Covered lines: 216
Uncovered lines: 9
Coverable lines: 225
Total lines: 549
Line coverage: 96%
Branch coverage
70%
Covered branches: 17
Total branches: 24
Branch coverage: 70.8%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
File 1: get_UserActivities()100%11100%
File 1: ConfigureActivities(...)100%11100%
File 1: RecordSuccess(...)100%11100%
File 1: RecordInfo(...)100%210%
File 1: RecordError(...)100%210%
File 1: Record(...)50%88100%
File 2: ConfigureAudit(...)100%11100%
File 3: get_Campi()100%11100%
File 3: ConfigureCampi(...)100%11100%
File 4: get_Classes()100%11100%
File 4: get_Schedules()100%11100%
File 4: get_ClassLessons()100%11100%
File 4: get_ClassLessonAttendances()100%11100%
File 4: ConfigureClasses(...)100%11100%
File 5: get_HasPendingCommands()100%11100%
File 5: get_CommandLogs()100%11100%
File 5: get_Commands()100%11100%
File 5: ConfigureCommands(...)100%11100%
File 5: AddCommand(...)50%22100%
File 5: AddCommand(...)50%22100%
File 6: get_CourseCurriculums()100%11100%
File 6: get_CourseCurriculumDisciplines()100%11100%
File 6: ConfigureCourseCurriculums(...)100%11100%
File 7: get_CourseOfferings()100%11100%
File 7: ConfigureCourseOfferings(...)100%11100%
File 8: get_Courses()100%11100%
File 8: get_CoursesDisciplines()100%11100%
File 8: ConfigureCourses(...)100%11100%
File 9: .ctor(...)100%11100%
File 9: get_Cache()100%11100%
File 9: get_RequestUser()100%11100%
File 9: get_ActivityId()100%11100%
File 9: get_Operation()100%11100%
File 9: get_DataProtectionKeys()100%11100%
File 9: OnConfiguring(...)100%11100%
File 9: OnModelCreating(...)100%11100%
File 9: ConfigureDatabaseNames(...)91.66%1212100%
File 9: GetOpenConnectionAsync()100%11100%
File 9: SaveChangesAsync()100%11100%
File 10: get_Disciplines()100%11100%
File 10: ConfigureDisciplines(...)100%11100%
File 11: get_WebMagicLinks()100%11100%
File 11: get_ResetPasswordTokens()100%11100%
File 11: get_WebSsoConfigurations()100%11100%
File 11: get_WebSsoAllowedDomains()100%11100%
File 11: get_UserSocialLogins()100%11100%
File 11: ConfigureIdentity(...)100%11100%
File 11: GetUserRole()100%11100%
File 11: GetDirectorRole()100%11100%
File 11: <GetDirectorRole()100%11100%
File 11: GetTeacherRole()100%11100%
File 11: <GetTeacherRole()100%11100%
File 11: GetStudentRole()100%11100%
File 11: <GetStudentRole()100%11100%
File 11: GetActiveSsoConfigForSchemeAsync()100%210%
File 11: EmailRequiresSsoAsync()100%210%
File 12: get_Institutions()100%11100%
File 12: ConfigureInstitutions(...)100%11100%
File 13: get_Notifications()100%11100%
File 13: get_UserNotifications()100%11100%
File 13: ConfigureNotifications(...)100%11100%
File 14: get_AcademicPeriods()100%11100%
File 14: ConfigurePeriods(...)100%11100%
File 15: get_Students()100%11100%
File 15: get_StudentCourseEnrollments()100%11100%
File 15: ConfigureStudents(...)100%11100%
File 16: get_Teachers()100%11100%
File 16: get_TeachersCampi()100%11100%
File 16: get_TeachersDisciplines()100%11100%
File 16: ConfigureTeachers(...)100%11100%
File 17: get_WebhookSubscriptions()100%11100%
File 17: get_ReceivedWebhookEvents()100%11100%
File 17: ConfigureWebhooks(...)100%11100%

File(s)

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

#LineLine coverage
 1using Syki.Back.Domain.Activities;
 2using Syki.Back.Database.Activities;
 3
 4namespace Syki.Back.Database;
 5
 6public partial class SykiDbContext
 7{
 25548    public DbSet<UserActivity> UserActivities { get; set; }
 9
 10    private static void ConfigureActivities(ModelBuilder modelBuilder)
 11    {
 412        modelBuilder.ApplyConfiguration(new UserActivityDbConfig());
 413    }
 14
 15    public void RecordSuccess(UserActivityType type, int? userId = null, int? institutionId = null, object? metadata = n
 16    {
 817        Record(UserActivitySeverity.Success, type, userId, institutionId, metadata);
 818    }
 19
 20    public void RecordInfo(UserActivityType type, int? userId = null, int? institutionId = null, object? metadata = null
 21    {
 022        Record(UserActivitySeverity.Info, type, userId, institutionId, metadata);
 023    }
 24
 25    public void RecordError(UserActivityType type, int? userId = null, int? institutionId = null, object? metadata = nul
 26    {
 027        Record(UserActivitySeverity.Error, type, userId, institutionId, metadata);
 028    }
 29
 30    private void Record(UserActivitySeverity severity, UserActivityType type, int? userId = null, int? institutionId = n
 31    {
 832        var activity = new UserActivity(
 833            severity,
 834            type,
 835            userId ?? (RequestUser.Id > 0 ? RequestUser.Id : null),
 836            institutionId ?? (RequestUser.InstitutionId > 0 ? RequestUser.InstitutionId : null),
 837            metadata
 838        );
 839        UserActivities.Add(activity);
 840    }
 41}

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

#LineLine coverage
 1using Syki.Back.Audit;
 2
 3namespace Syki.Back.Database;
 4
 5public partial class SykiDbContext
 6{
 7    private static void ConfigureAudit(ModelBuilder modelBuilder)
 8    {
 49        modelBuilder.ApplyConfiguration(new AuditTrailDbConfig());
 410    }
 11}

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

#LineLine coverage
 1using Syki.Back.Domain.Campi;
 2using Syki.Back.Database.Campi;
 3
 4namespace Syki.Back.Database;
 5
 6public partial class SykiDbContext
 7{
 25568    public DbSet<Campus> Campi { get; set; }
 9
 10    private static void ConfigureCampi(ModelBuilder modelBuilder)
 11    {
 412        modelBuilder.ApplyConfiguration(new CampusDbConfig());
 413    }
 14}

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

#LineLine coverage
 1using Syki.Back.Database.Classes;
 2using Syki.Back.Commands.Domain.Classes;
 3
 4namespace Syki.Back.Database;
 5
 6public partial class SykiDbContext
 7{
 25468    public DbSet<Class> Classes { get; set; }
 25469    public DbSet<Schedule> Schedules { get; set; }
 254610    public DbSet<ClassLesson> ClassLessons { get; set; }
 254611    public DbSet<ClassLessonAttendance> ClassLessonAttendances { get; set; }
 12
 13    private static void ConfigureClasses(ModelBuilder modelBuilder)
 14    {
 415        modelBuilder.ApplyConfiguration(new ClassDbConfig());
 416        modelBuilder.ApplyConfiguration(new ScheduleDbConfig());
 417        modelBuilder.ApplyConfiguration(new ClassLessonDbConfig());
 418        modelBuilder.ApplyConfiguration(new ClassLessonAttendanceDbConfig());
 419    }
 20}

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

#LineLine coverage
 1using System.Diagnostics;
 2using Syki.Back.Database.Commands;
 3using Syki.Back.Domain.Institutions;
 4using Syki.Back.Commands.Domain.Commands;
 5
 6namespace Syki.Back.Database;
 7
 8public partial class SykiDbContext
 9{
 201610    public bool HasPendingCommands { get; set; }
 320211    public List<string> CommandLogs { get; set; } = [];
 12
 324613    public DbSet<Command> Commands { get; set; }
 14
 15    private static void ConfigureCommands(ModelBuilder modelBuilder)
 16    {
 417        modelBuilder.ApplyConfiguration(new CommandDbConfig());
 418        modelBuilder.ApplyConfiguration(new CommandBatchDbConfig());
 419    }
 20
 21    public Command AddCommand(
 22        Institution institution,
 23        ICommand command,
 24        int? parentId = null,
 25        int? originalId = null,
 26        int? batchId = null,
 27        int? delaySeconds = null,
 28        int maxRetries = 0,
 29        int baseDelaySeconds = 5,
 30        BackoffStrategy backoffStrategy = BackoffStrategy.None)
 31    {
 29232        var activityId = Activity.Current?.Id;
 33
 29234        HasPendingCommands = true;
 35
 29236        return Add(
 29237            new Command(
 29238                institution,
 29239                command,
 29240                parentId: parentId,
 29241                originalId: originalId,
 29242                batchId: batchId,
 29243                delaySeconds: delaySeconds,
 29244                activityId: activityId,
 29245                maxRetries: maxRetries,
 29246                backoffStrategy: backoffStrategy,
 29247                baseDelaySeconds: baseDelaySeconds
 29248            )
 29249        ).Entity;
 50    }
 51
 52    public Command AddCommand(
 53        int institutionId,
 54        ICommand command,
 55        int? parentId = null,
 56        int? originalId = null,
 57        int? batchId = null,
 58        int? delaySeconds = null,
 59        int maxRetries = 0,
 60        int baseDelaySeconds = 5,
 61        BackoffStrategy backoffStrategy = BackoffStrategy.None)
 62    {
 3663        var activityId = Activity.Current?.Id;
 64
 3665        HasPendingCommands = true;
 66
 3667        return Add(
 3668            new Command(
 3669                institutionId,
 3670                command,
 3671                parentId: parentId,
 3672                originalId: originalId,
 3673                batchId: batchId,
 3674                delaySeconds: delaySeconds,
 3675                activityId: activityId,
 3676                maxRetries: maxRetries,
 3677                backoffStrategy: backoffStrategy,
 3678                baseDelaySeconds: baseDelaySeconds
 3679            )
 3680        ).Entity;
 81    }
 82}

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

#LineLine coverage
 1using Syki.Back.Domain.CourseCurriculums;
 2using Syki.Back.Database.CourseCurriculums;
 3
 4namespace Syki.Back.Database;
 5
 6public partial class SykiDbContext
 7{
 25528    public DbSet<CourseCurriculum> CourseCurriculums { get; set; }
 25509    public DbSet<CourseCurriculumDiscipline> CourseCurriculumDisciplines { get; set; }
 10
 11    private static void ConfigureCourseCurriculums(ModelBuilder modelBuilder)
 12    {
 413        modelBuilder.ApplyConfiguration(new CourseCurriculumDbConfig());
 414        modelBuilder.ApplyConfiguration(new CourseCurriculumDisciplineDbConfig());
 415    }
 16}

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

#LineLine coverage
 1using Syki.Back.Domain.CourseOfferings;
 2using Syki.Back.Database.CourseOfferings;
 3
 4namespace Syki.Back.Database;
 5
 6public partial class SykiDbContext
 7{
 25548    public DbSet<CourseOffering> CourseOfferings { get; set; }
 9
 10    private static void ConfigureCourseOfferings(ModelBuilder modelBuilder)
 11    {
 412        modelBuilder.ApplyConfiguration(new CourseOfferingDbConfig());
 413    }
 14}

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

#LineLine coverage
 1using Syki.Back.Domain.Courses;
 2using Syki.Back.Database.Courses;
 3
 4namespace Syki.Back.Database;
 5
 6public partial class SykiDbContext
 7{
 27908    public DbSet<Course> Courses { get; set; }
 25589    public DbSet<CourseDiscipline> CoursesDisciplines { get; set; }
 10
 11    private static void ConfigureCourses(ModelBuilder modelBuilder)
 12    {
 413        modelBuilder.ApplyConfiguration(new CourseDbConfig());
 414        modelBuilder.ApplyConfiguration(new CourseDisciplineDbConfig());
 415    }
 16}

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

#LineLine coverage
 1using Npgsql;
 2using System.Data.Common;
 3using Syki.Back.Auth.Users;
 4using Audit.EntityFramework;
 5using Syki.Back.Domain.Identity;
 6using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
 7using Microsoft.AspNetCore.DataProtection.EntityFrameworkCore;
 8
 9namespace Syki.Back.Database;
 10
 11public partial class SykiDbContext(DbContextOptions<SykiDbContext> options, NpgsqlDataSource npgsqlDataSource, HybridCac
 254612    : IdentityDbContext<SykiUser, SykiRole, int, SykiUserClaim, SykiUserRole, SykiUserLogin, SykiRoleClaim, SykiUserToke
 13{
 287414    public HybridCache Cache { get; set; } = cache;
 15
 1109616    public RequestUser RequestUser { get; set; } = new();
 17
 434218    public string ActivityId { get; set; }
 434219    public string Operation { get; set; }
 20
 255221    public DbSet<DataProtectionKey> DataProtectionKeys { get; set; }
 22
 23    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
 24    {
 218025        optionsBuilder.UseSnakeCaseNamingConvention();
 436026        optionsBuilder.UseNpgsql(npgsqlDataSource, x => x.MigrationsHistoryTable("migrations", DbSchemas.Syki));
 27
 218028        optionsBuilder.AddInterceptors(new AuditSaveChangesInterceptor());
 218029    }
 30
 31    protected override void OnModelCreating(ModelBuilder modelBuilder)
 32    {
 433        base.OnModelCreating(modelBuilder);
 34
 435        ConfigureAudit(modelBuilder);
 436        ConfigureCampi(modelBuilder);
 437        ConfigureClasses(modelBuilder);
 438        ConfigureCourses(modelBuilder);
 439        ConfigurePeriods(modelBuilder);
 440        ConfigureTeachers(modelBuilder);
 441        ConfigureStudents(modelBuilder);
 442        ConfigureCommands(modelBuilder);
 443        ConfigureIdentity(modelBuilder);
 444        ConfigureWebhooks(modelBuilder);
 445        ConfigureActivities(modelBuilder);
 446        ConfigureDisciplines(modelBuilder);
 447        ConfigureInstitutions(modelBuilder);
 448        ConfigureNotifications(modelBuilder);
 449        ConfigureCourseOfferings(modelBuilder);
 450        ConfigureCourseCurriculums(modelBuilder);
 51
 452        ConfigureDatabaseNames(modelBuilder);
 453    }
 54
 55    private static void ConfigureDatabaseNames(ModelBuilder modelBuilder)
 56    {
 36057        foreach (var entity in modelBuilder.Model.GetEntityTypes())
 58        {
 17659            if (entity.GetTableName().IsEmpty()) continue;
 60
 17661            entity.SetTableName(entity.GetTableName().ToSnakeCase().Replace("asp_net_", ""));
 62
 85663            foreach (var fk in entity.GetForeignKeys())
 64            {
 25265                if (fk.GetConstraintName().HasValue())
 66                {
 25267                    fk.SetConstraintName(fk.GetConstraintName()!.Replace("~", "").Replace("1", ""));
 68                }
 69            }
 70
 86471            foreach (var index in entity.GetIndexes())
 72            {
 25673                index.SetDatabaseName(index.GetDatabaseName()?.ToSnakeCase());
 74            }
 75        }
 476    }
 77
 78    public async Task<DbConnection> GetOpenConnectionAsync(CancellationToken ct = default)
 79    {
 480        await Database.OpenConnectionAsync(ct);
 481        return Database.GetDbConnection();
 482    }
 83
 84    public async Task<int> SaveChangesAsync<TEntity>(TEntity entity)
 85    {
 16486        Add(entity);
 16487        return await SaveChangesAsync();
 16488    }
 89}

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

#LineLine coverage
 1using Syki.Back.Domain.Disciplines;
 2using Syki.Back.Database.Disciplines;
 3
 4namespace Syki.Back.Database;
 5
 6public partial class SykiDbContext
 7{
 25748    public DbSet<Discipline> Disciplines { get; set; }
 9
 10    private static void ConfigureDisciplines(ModelBuilder modelBuilder)
 11    {
 412        modelBuilder.ApplyConfiguration(new DisciplineDbConfig());
 413    }
 14}

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

#LineLine coverage
 1using Dapper;
 2using Syki.Back.Cache;
 3using Syki.Back.Auth.Roles;
 4using Syki.Back.Domain.Identity;
 5using Syki.Back.Database.Identity;
 6
 7namespace Syki.Back.Database;
 8
 9public partial class SykiDbContext
 10{
 308411    public DbSet<MagicLink> WebMagicLinks { get; set; }
 261812    public DbSet<ResetPasswordToken> ResetPasswordTokens { get; set; }
 13
 254614    public DbSet<SsoConfiguration> WebSsoConfigurations { get; set; }
 254615    public DbSet<SsoAllowedDomain> WebSsoAllowedDomains { get; set; }
 16
 254617    public DbSet<UserSocialLogin> UserSocialLogins { get; set; }
 18
 19    private static void ConfigureIdentity(ModelBuilder modelBuilder)
 20    {
 421        modelBuilder.ApplyConfiguration(new MagicLinkDbConfig());
 422        modelBuilder.ApplyConfiguration(new ResetPasswordTokenDbConfig());
 23
 424        modelBuilder.ApplyConfiguration(new SykiRoleDbConfig());
 425        modelBuilder.ApplyConfiguration(new SykiUserDbConfig());
 426        modelBuilder.ApplyConfiguration(new SykiUserRoleDbConfig());
 427        modelBuilder.ApplyConfiguration(new SykiRoleClaimDbConfig());
 428        modelBuilder.ApplyConfiguration(new SykiUserClaimDbConfig());
 429        modelBuilder.ApplyConfiguration(new SykiUserTokenDbConfig());
 430        modelBuilder.ApplyConfiguration(new SykiUserLoginDbConfig());
 31
 432        modelBuilder.ApplyConfiguration(new InstitutionRoleDbConfig());
 33
 434        modelBuilder.ApplyConfiguration(new SsoConfigurationDbConfig());
 435        modelBuilder.ApplyConfiguration(new SsoAllowedDomainDbConfig());
 36
 437        modelBuilder.ApplyConfiguration(new UserSocialLoginDbConfig());
 38
 439        modelBuilder.ApplyConfiguration(new DataProtectionKeyDbConfig());
 440    }
 41
 42    public async Task<SykiRole> GetUserRole(int userId, int institutionId)
 43    {
 28244        var userRole = await UserRoles.Where(x => x.UserId == userId && x.InstitutionId == institutionId).FirstAsync();
 45
 28246        return await Roles.Where(x => x.Id == userRole.RoleId).FirstAsync();
 28247    }
 48
 49    public async Task<SykiRole> GetDirectorRole()
 50    {
 29251        return await Cache.GetOrCreateAsync(
 29252            key: $"{CacheKeys.GetDirectorRole}",
 29253            state: this,
 29254            options: new() { Expiration = TimeSpan.FromDays(100) },
 29255            factory: async (state, ct) =>
 29256            {
 257                return await state.Roles.AsNoTracking()
 258                    .Where(x => x.OwnerId == null && x.NormalizedName == SykiDefaultRoles.Director.NormalizedName)
 259                    .FirstAsync(ct);
 260            }
 29261        );
 29262    }
 63
 64    public async Task<SykiRole> GetTeacherRole()
 65    {
 3066        return await Cache.GetOrCreateAsync(
 3067            key: $"{CacheKeys.GetTeacherRole}",
 3068            state: this,
 3069            options: new() { Expiration = TimeSpan.FromDays(100) },
 3070            factory: async (state, ct) =>
 3071            {
 272                return await state.Roles.AsNoTracking()
 273                    .Where(x => x.OwnerId == null && x.NormalizedName == SykiDefaultRoles.Teacher.NormalizedName)
 274                    .FirstAsync(ct);
 275            }
 3076        );
 3077    }
 78
 79    public async Task<SykiRole> GetStudentRole()
 80    {
 681        return await Cache.GetOrCreateAsync(
 682            key: $"{CacheKeys.GetStudentRole}",
 683            state: this,
 684            options: new() { Expiration = TimeSpan.FromDays(100) },
 685            factory: async (state, ct) =>
 686            {
 287                return await state.Roles.AsNoTracking()
 288                    .Where(x => x.OwnerId == null && x.NormalizedName == SykiDefaultRoles.Student.NormalizedName)
 289                    .FirstAsync(ct);
 290            }
 691        );
 692    }
 93
 94    public async Task<SsoConfiguration?> GetActiveSsoConfigForSchemeAsync(Guid publicId)
 95    {
 96        const string sql = @"
 97            SELECT
 98                id,
 99                external_id,
 100                authority,
 101                client_id,
 102                client_secret,
 103                updated_at
 104            FROM
 105                syki.sso_configurations
 106            WHERE
 107                public_id = @PublicId AND is_active = true
 108            LIMIT 1
 109        ";
 110
 0111        return await Database.GetDbConnection().QueryFirstOrDefaultAsync<SsoConfiguration?>(sql, new { PublicId = public
 0112    }
 113
 114    public async Task<bool> EmailRequiresSsoAsync(string email)
 115    {
 116        const string sql = @"
 117            SELECT
 118                count(1) > 0
 119            FROM
 120                syki.sso_allowed_domains d
 121            INNER JOIN
 122                syki.sso_configurations c ON c.id = d.sso_configuration_id
 123            WHERE
 124                d.domain = @Domain
 125                    AND
 126                c.is_active = true
 127                    AND
 128                c.require_sso = true
 129        ";
 130
 0131        var domain = email.Split('@').Last().ToLowerInvariant();
 0132        return await Database.GetDbConnection().QuerySingleAsync<bool>(sql, new { domain });
 0133    }
 134}

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

#LineLine coverage
 1using Syki.Back.Domain.Institutions;
 2using Syki.Back.Database.Institutions;
 3
 4namespace Syki.Back.Database;
 5
 6public partial class SykiDbContext
 7{
 25768    public DbSet<Institution> Institutions { get; set; }
 9
 10    private static void ConfigureInstitutions(ModelBuilder modelBuilder)
 11    {
 412        modelBuilder.ApplyConfiguration(new InstitutionDbConfig());
 413    }
 14}

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

#LineLine coverage
 1using Syki.Back.Domain.Notifications;
 2using Syki.Back.Database.Notifications;
 3
 4namespace Syki.Back.Database;
 5
 6public partial class SykiDbContext
 7{
 25468    public DbSet<Notification> Notifications { get; set; }
 25469    public DbSet<UserNotification> UserNotifications { get; set; }
 10
 11    private static void ConfigureNotifications(ModelBuilder modelBuilder)
 12    {
 413        modelBuilder.ApplyConfiguration(new NotificationDbConfig());
 414        modelBuilder.ApplyConfiguration(new UserNotificationDbConfig());
 415    }
 16}

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

#LineLine coverage
 1using Syki.Back.Domain.Periods;
 2using Syki.Back.Database.Periods;
 3
 4namespace Syki.Back.Database;
 5
 6public partial class SykiDbContext
 7{
 25668    public DbSet<AcademicPeriod> AcademicPeriods { get; set; }
 9
 10    private static void ConfigurePeriods(ModelBuilder modelBuilder)
 11    {
 412        modelBuilder.ApplyConfiguration(new AcademicPeriodDbConfig());
 413        modelBuilder.ApplyConfiguration(new EnrollmentPeriodDbConfig());
 414    }
 15}

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

#LineLine coverage
 1using Syki.Back.Domain.Students;
 2using Syki.Back.Database.Students;
 3
 4namespace Syki.Back.Database;
 5
 6public partial class SykiDbContext
 7{
 25488    public DbSet<SykiStudent> Students { get; set; }
 25509    public DbSet<StudentCourseEnrollment> StudentCourseEnrollments { get; set; }
 10
 11    private static void ConfigureStudents(ModelBuilder modelBuilder)
 12    {
 413        modelBuilder.ApplyConfiguration(new SykiStudentDbConfig());
 414        modelBuilder.ApplyConfiguration(new StudentCourseEnrollmentDbConfig());
 415    }
 16}

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

#LineLine coverage
 1using Syki.Back.Domain.Teachers;
 2using Syki.Back.Database.Teachers;
 3
 4namespace Syki.Back.Database;
 5
 6public partial class SykiDbContext
 7{
 25488    public DbSet<SykiTeacher> Teachers { get; set; }
 25489    public DbSet<TeacherCampus> TeachersCampi { get; set; }
 254810    public DbSet<TeacherDiscipline> TeachersDisciplines { get; set; }
 11
 12    private static void ConfigureTeachers(ModelBuilder modelBuilder)
 13    {
 414        modelBuilder.ApplyConfiguration(new SykiTeacherDbConfig());
 415        modelBuilder.ApplyConfiguration(new TeacherCampusDbConfig());
 416        modelBuilder.ApplyConfiguration(new TeacherDisciplineDbConfig());
 417    }
 18}

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

#LineLine coverage
 1using Syki.Back.Domain.Webhooks;
 2using Syki.Back.Database.Webhooks;
 3
 4namespace Syki.Back.Database;
 5
 6public partial class SykiDbContext
 7{
 25468    public DbSet<WebhookSubscription> WebhookSubscriptions { get; set; }
 25469    public DbSet<ReceivedWebhookEvent> ReceivedWebhookEvents { get; set; }
 10
 11    private static void ConfigureWebhooks(ModelBuilder modelBuilder)
 12    {
 413        modelBuilder.ApplyConfiguration(new WebhookCallDbConfig());
 414        modelBuilder.ApplyConfiguration(new WebhookCallAttemptDbConfig());
 415        modelBuilder.ApplyConfiguration(new WebhookSubscriptionDbConfig());
 16
 417        modelBuilder.ApplyConfiguration(new ReceivedWebhookEventDbConfig());
 418    }
 19}

Methods/Properties

get_UserActivities()
ConfigureActivities(Microsoft.EntityFrameworkCore.ModelBuilder)
RecordSuccess(Syki.Back.Domain.Enums.UserActivityType,System.Nullable`1<System.Int32>,System.Nullable`1<System.Int32>,System.Object)
RecordInfo(Syki.Back.Domain.Enums.UserActivityType,System.Nullable`1<System.Int32>,System.Nullable`1<System.Int32>,System.Object)
RecordError(Syki.Back.Domain.Enums.UserActivityType,System.Nullable`1<System.Int32>,System.Nullable`1<System.Int32>,System.Object)
Record(Syki.Back.Domain.Enums.UserActivitySeverity,Syki.Back.Domain.Enums.UserActivityType,System.Nullable`1<System.Int32>,System.Nullable`1<System.Int32>,System.Object)
ConfigureAudit(Microsoft.EntityFrameworkCore.ModelBuilder)
get_Campi()
ConfigureCampi(Microsoft.EntityFrameworkCore.ModelBuilder)
get_Classes()
get_Schedules()
get_ClassLessons()
get_ClassLessonAttendances()
ConfigureClasses(Microsoft.EntityFrameworkCore.ModelBuilder)
get_HasPendingCommands()
get_CommandLogs()
get_Commands()
ConfigureCommands(Microsoft.EntityFrameworkCore.ModelBuilder)
AddCommand(Syki.Back.Domain.Institutions.Institution,Syki.Back.Commands.ICommand,System.Nullable`1<System.Int32>,System.Nullable`1<System.Int32>,System.Nullable`1<System.Int32>,System.Nullable`1<System.Int32>,System.Int32,System.Int32,Syki.Back.Domain.Enums.BackoffStrategy)
AddCommand(System.Int32,Syki.Back.Commands.ICommand,System.Nullable`1<System.Int32>,System.Nullable`1<System.Int32>,System.Nullable`1<System.Int32>,System.Nullable`1<System.Int32>,System.Int32,System.Int32,Syki.Back.Domain.Enums.BackoffStrategy)
get_CourseCurriculums()
get_CourseCurriculumDisciplines()
ConfigureCourseCurriculums(Microsoft.EntityFrameworkCore.ModelBuilder)
get_CourseOfferings()
ConfigureCourseOfferings(Microsoft.EntityFrameworkCore.ModelBuilder)
get_Courses()
get_CoursesDisciplines()
ConfigureCourses(Microsoft.EntityFrameworkCore.ModelBuilder)
.ctor(Microsoft.EntityFrameworkCore.DbContextOptions`1<Syki.Back.Database.SykiDbContext>,Npgsql.NpgsqlDataSource,Microsoft.Extensions.Caching.Hybrid.HybridCache)
get_Cache()
get_RequestUser()
get_ActivityId()
get_Operation()
get_DataProtectionKeys()
OnConfiguring(Microsoft.EntityFrameworkCore.DbContextOptionsBuilder)
OnModelCreating(Microsoft.EntityFrameworkCore.ModelBuilder)
ConfigureDatabaseNames(Microsoft.EntityFrameworkCore.ModelBuilder)
GetOpenConnectionAsync()
SaveChangesAsync()
get_Disciplines()
ConfigureDisciplines(Microsoft.EntityFrameworkCore.ModelBuilder)
get_WebMagicLinks()
get_ResetPasswordTokens()
get_WebSsoConfigurations()
get_WebSsoAllowedDomains()
get_UserSocialLogins()
ConfigureIdentity(Microsoft.EntityFrameworkCore.ModelBuilder)
GetUserRole()
GetDirectorRole()
<GetDirectorRole()
GetTeacherRole()
<GetTeacherRole()
GetStudentRole()
<GetStudentRole()
GetActiveSsoConfigForSchemeAsync()
EmailRequiresSsoAsync()
get_Institutions()
ConfigureInstitutions(Microsoft.EntityFrameworkCore.ModelBuilder)
get_Notifications()
get_UserNotifications()
ConfigureNotifications(Microsoft.EntityFrameworkCore.ModelBuilder)
get_AcademicPeriods()
ConfigurePeriods(Microsoft.EntityFrameworkCore.ModelBuilder)
get_Students()
get_StudentCourseEnrollments()
ConfigureStudents(Microsoft.EntityFrameworkCore.ModelBuilder)
get_Teachers()
get_TeachersCampi()
get_TeachersDisciplines()
ConfigureTeachers(Microsoft.EntityFrameworkCore.ModelBuilder)
get_WebhookSubscriptions()
get_ReceivedWebhookEvents()
ConfigureWebhooks(Microsoft.EntityFrameworkCore.ModelBuilder)