69 lines
3.2 KiB
C#
69 lines
3.2 KiB
C#
using LiteDB;
|
||
using LehrerApp.Core.Models;
|
||
|
||
namespace LehrerApp.Data;
|
||
|
||
/// <summary>
|
||
/// Zentrale LiteDB-Verbindung. Singleton – eine Datei = ein Nutzer.
|
||
/// </summary>
|
||
public class LiteDbContext : IDisposable
|
||
{
|
||
private readonly LiteDatabase _db;
|
||
|
||
public LiteDbContext(string databasePath)
|
||
{
|
||
_db = new LiteDatabase(new ConnectionString(databasePath)
|
||
{
|
||
Connection = ConnectionType.Shared,
|
||
});
|
||
EnsureIndexes();
|
||
}
|
||
|
||
public ILiteCollection<Student> Students => _db.GetCollection<Student>("students");
|
||
public ILiteCollection<LearningGroup> Groups => _db.GetCollection<LearningGroup>("groups");
|
||
public ILiteCollection<Enrollment> Enrollments => _db.GetCollection<Enrollment>("enrollments");
|
||
public ILiteCollection<Exam> Exams => _db.GetCollection<Exam>("exams");
|
||
public ILiteCollection<ExamResult> ExamResults => _db.GetCollection<ExamResult>("exam_results");
|
||
public ILiteCollection<Grade> Grades => _db.GetCollection<Grade>("grades");
|
||
public ILiteCollection<Unit> Units => _db.GetCollection<Unit>("units");
|
||
public ILiteCollection<Lesson> Lessons => _db.GetCollection<Lesson>("lessons");
|
||
public ILiteCollection<Documentation> Documentation => _db.GetCollection<Documentation>("documentation");
|
||
public ILiteCollection<WorkTask> Tasks => _db.GetCollection<WorkTask>("tasks");
|
||
public ILiteCollection<TimeEntry> TimeEntries => _db.GetCollection<TimeEntry>("time_entries");
|
||
public ILiteCollection<ParticipationSession> ParticipationSessions => _db.GetCollection<ParticipationSession>("participation_sessions");
|
||
public ILiteCollection<ParticipationEntry> ParticipationEntries => _db.GetCollection<ParticipationEntry>("participation");
|
||
public ILiteCollection<ParticipationAspect> ParticipationAspects => _db.GetCollection<ParticipationAspect>("participation_aspects");
|
||
|
||
public void Checkpoint() => _db.Checkpoint();
|
||
|
||
private void EnsureIndexes()
|
||
{
|
||
Students.EnsureIndex(x => x.LastName);
|
||
Students.EnsureIndex(x => x.IsActive);
|
||
Groups.EnsureIndex(x => x.SchoolYear);
|
||
Enrollments.EnsureIndex(x => x.StudentId);
|
||
Enrollments.EnsureIndex(x => x.GroupId);
|
||
Enrollments.EnsureIndex(x => x.SchoolYear);
|
||
Exams.EnsureIndex(x => x.GroupId);
|
||
Exams.EnsureIndex(x => x.Status);
|
||
ExamResults.EnsureIndex(x => x.ExamId);
|
||
ExamResults.EnsureIndex(x => x.StudentId);
|
||
Grades.EnsureIndex(x => x.StudentId);
|
||
Grades.EnsureIndex(x => x.GroupId);
|
||
Units.EnsureIndex(x => x.GroupId);
|
||
Lessons.EnsureIndex(x => x.UnitId);
|
||
Lessons.EnsureIndex(x => x.GroupId);
|
||
Lessons.EnsureIndex(x => x.Date);
|
||
Documentation.EnsureIndex(x => x.StudentId);
|
||
Tasks.EnsureIndex(x => x.Status);
|
||
TimeEntries.EnsureIndex(x => x.Date);
|
||
ParticipationSessions.EnsureIndex(x => x.GroupId);
|
||
ParticipationSessions.EnsureIndex(x => x.Date);
|
||
ParticipationEntries.EnsureIndex(x => x.SessionId);
|
||
ParticipationEntries.EnsureIndex(x => x.StudentId);
|
||
ParticipationAspects.EnsureIndex(x => x.GroupId);
|
||
}
|
||
|
||
public void Dispose() => _db.Dispose();
|
||
}
|