using SQLite; using WguApp.Models; namespace WguApp.Services; public static class DatabaseService { private static SQLiteAsyncConnection? _db; public static async Task Init() { if (_db is not null) return; var databasePath = Path.Combine(FileSystem.AppDataDirectory, "WguApp.db"); _db = new SQLiteAsyncConnection(databasePath); try { await _db.CreateTablesAsync(); } catch (Exception e) { Console.WriteLine(e); throw; } } // -- Add Methods -- // #region Add methods public static async Task AddTerm(Term term) { await Init(); var result = await _db?.InsertAsync(term)!; return !(result <= 0); } public static async Task AddCourse(Course course) { await Init(); var result = await _db?.InsertAsync(course)!; return !(result <= 0); } public static async Task AddAssessment(Assessment assessment) { await Init(); var result = await _db?.InsertAsync(assessment)!; return !(result <= 0); } #endregion // -- Get Methods -- // #region Get Methods public static async Task> GetAllTerms() { await Init(); var allTerms = await _db?.Table().ToListAsync()!; return allTerms ?? []; } public static async Task> GetAllCourses() { await Init(); var allCourses = await _db?.Table().ToListAsync()!; return allCourses ?? []; } public static async Task> GetAllAssessments() { await Init(); var allAssessments = await _db?.Table().ToListAsync()!; return allAssessments ?? []; } public static async Task> GetAssessmentsByCourseId(int courseId) { await Init(); var query = $"SELECT * FROM Assessments WHERE CourseId = {courseId}"; var result = await _db?.QueryAsync(query)!; return result.ToList() ?? []; } public static async Task> GetCoursesByTermId(int termId) { await Init(); var query = $"SELECT * FROM Courses WHERE TermId = {termId}"; var result = await _db?.QueryAsync(query)!; return result.ToList() ?? []; } #endregion // -- Update Methods #region Update Methods public static async Task UpdateTerm(Term term) { await Init(); return await _db?.UpdateAsync(term)! != 0; } public static async Task UpdateCourse(Course course) { await Init(); return await _db?.UpdateAsync(course)! != 0; } public static async Task UpdateAssessment(Assessment assessment) { await Init(); return await _db?.UpdateAsync(assessment)! != 0; } #endregion // -- Delete Methods #region Delete Methods public static async Task DeleteTerm(Term term) { await Init(); return await _db?.DeleteAsync(term)! != 0; } public static async Task DeleteTerm(int termId) { await Init(); return await _db?.DeleteAsync(termId)! != 0; } public static async Task DeleteCourse(Course course) { await Init(); return await _db?.DeleteAsync(course)! != 0; } public static async Task DeleteCourse(int courseId) { await Init(); return await _db?.DeleteAsync(courseId)! != 0; } public static async Task DeleteAssessment(Assessment assessment) { await Init(); return await _db?.DeleteAsync(assessment)! != 0; } public static async Task DeleteAssessment(int assessmentId) { await Init(); return await _db?.DeleteAsync(assessmentId)! != 0; } #endregion // -- Sample Data -- // public static async Task LoadSampleData() { await ClearDbData(); var term1 = new Term() { Name = "Term 1", StartDate = DateTime.Today, EndDate = DateTime.Today.AddDays(30) }; await AddTerm(term1); var course1 = new Course() { TermId = term1.Id, Name = "Course 1", StartDate = DateTime.Today, EndDate = DateTime.Today.AddDays(30), InstructorName = "Anika Patel", InstructorEmail = "anika.patel@strimeuniversity.edu", InstructorPhone = "555-123-4567", StartNotifCheck = false, EndNotifCheck = false, Status = CourseStatus.InProgress, Notes = "Some notes" }; await AddCourse(course1); var assessment1 = new Assessment() { CourseId = course1.Id, Name = "Performance Assessment", Type = AssessmentType.Performance, StartDate = DateTime.Today, EndDate = DateTime.Today.AddDays(30), StartNotifCheck = false, EndNotifCheck = false }; await AddAssessment(assessment1); var assessment2 = new Assessment() { CourseId = course1.Id, Name = "Objective Assessment", Type = AssessmentType.Objective, StartDate = DateTime.Today, EndDate = DateTime.Today.AddDays(30), StartNotifCheck = false, EndNotifCheck = false }; await AddAssessment(assessment2); } public static async Task ClearDbData() { await Init(); await _db?.DeleteAllAsync()!; await _db?.DeleteAllAsync()!; await _db?.DeleteAllAsync()!; _db = null; } }