using LiteDB;
using LehrerApp.Core.Models;
namespace LehrerApp.Data;
///
/// Zentrale LiteDB-Verbindung. Singleton – eine Datei = ein Nutzer.
///
public class LiteDbContext : IDisposable
{
private readonly LiteDatabase _db;
public LiteDbContext(string databasePath)
{
_db = new LiteDatabase(new ConnectionString(databasePath)
{
Connection = ConnectionType.Shared,
});
EnsureIndexes();
}
public ILiteCollection Students => _db.GetCollection("students");
public ILiteCollection Groups => _db.GetCollection("groups");
public ILiteCollection Enrollments => _db.GetCollection("enrollments");
public ILiteCollection Exams => _db.GetCollection("exams");
public ILiteCollection ExamResults => _db.GetCollection("exam_results");
public ILiteCollection Grades => _db.GetCollection("grades");
public ILiteCollection Units => _db.GetCollection("units");
public ILiteCollection Lessons => _db.GetCollection("lessons");
public ILiteCollection Documentation => _db.GetCollection("documentation");
public ILiteCollection Tasks => _db.GetCollection("tasks");
public ILiteCollection TimeEntries => _db.GetCollection("time_entries");
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);
}
public void Dispose() => _db.Dispose();
}