using iknow_api.Data; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; namespace iknow_api.Controllers; [ApiController] [Route("[controller]")] public class DbHealthController(AppDbContext db) : ControllerBase { /// /// Verifies that the SSH tunnel is up, the DB credentials work, and that /// the entity mapping matches the schema created by sql/ddl.sql. /// [HttpGet] public async Task Get() { try { // EF projects SqlQuery onto a column named "Value", hence the alias. var version = await db.Database .SqlQuery($"SELECT version() AS \"Value\"") .SingleAsync(); return Ok(new { connected = true, server = version, counts = new { users = await db.User.CountAsync(), subjects = await db.Subjects.CountAsync(), enrolledSemesters = await db.EnrolledSemesters.CountAsync(), semesterSubjects = await db.SemesterSubjects.CountAsync(), passedSubjects = await db.PassedSubjects.CountAsync(), } }); } catch (Exception ex) { return StatusCode(503, new { connected = false, error = ex.Message, hint = "Is tunnel_scripta.cmd running and listening on localhost:9999?" }); } } }