| 1 | package mk.finki.roomreservation.service;
|
|---|
| 2 |
|
|---|
| 3 | import mk.finki.roomreservation.model.DashboardStats;
|
|---|
| 4 | import mk.finki.roomreservation.model.HealthStatus;
|
|---|
| 5 | import org.springframework.jdbc.core.JdbcTemplate;
|
|---|
| 6 | import org.springframework.stereotype.Service;
|
|---|
| 7 |
|
|---|
| 8 | @Service
|
|---|
| 9 | public class DashboardService {
|
|---|
| 10 |
|
|---|
| 11 | private final JdbcTemplate jdbcTemplate;
|
|---|
| 12 |
|
|---|
| 13 | public DashboardService(JdbcTemplate jdbcTemplate) {
|
|---|
| 14 | this.jdbcTemplate = jdbcTemplate;
|
|---|
| 15 | }
|
|---|
| 16 |
|
|---|
| 17 | public HealthStatus health() {
|
|---|
| 18 | Long roomCount = jdbcTemplate.queryForObject(
|
|---|
| 19 | "SELECT COUNT(*) FROM project.rooms",
|
|---|
| 20 | Long.class
|
|---|
| 21 | );
|
|---|
| 22 |
|
|---|
| 23 | return new HealthStatus(
|
|---|
| 24 | "UP",
|
|---|
| 25 | "PostgreSQL",
|
|---|
| 26 | "project",
|
|---|
| 27 | roomCount == null ? 0 : roomCount
|
|---|
| 28 | );
|
|---|
| 29 | }
|
|---|
| 30 |
|
|---|
| 31 | public DashboardStats getDashboardStats() {
|
|---|
| 32 | return new DashboardStats(
|
|---|
| 33 | count("SELECT COUNT(*) FROM project.rooms"),
|
|---|
| 34 | count("SELECT COUNT(*) FROM project.equipment"),
|
|---|
| 35 | count("SELECT COUNT(*) FROM project.users"),
|
|---|
| 36 | count("SELECT COUNT(*) FROM project.reservations WHERE status = 'pending'"),
|
|---|
| 37 | count("SELECT COUNT(*) FROM project.reservations WHERE status = 'approved'")
|
|---|
| 38 | );
|
|---|
| 39 | }
|
|---|
| 40 |
|
|---|
| 41 | private long count(String sql) {
|
|---|
| 42 | Long value = jdbcTemplate.queryForObject(sql, Long.class);
|
|---|
| 43 | return value == null ? 0 : value;
|
|---|
| 44 | }
|
|---|
| 45 | } |
|---|