Files
dashboard/backend/src/services/banner.service.ts
Matthias Hochmeister cf490cc9ad fix: install missing packages and fix TS errors
- Install @mui/x-data-grid in frontend (fixes AuditLog)
- Install jose in backend (fixes authentik service)
- Update .npmrc to use npm.apple.com proxy
- Fix AuditLog localeText to use MUI DataGrid v7 API keys
- Fix banner controller: cast req.params.id to string
- Remove unused logger import in banner.service.ts

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 12:04:54 +01:00

59 lines
1.6 KiB
TypeScript

import pool from '../config/database';
export interface Banner {
id: string;
message: string;
level: 'info' | 'important' | 'critical';
starts_at: string;
ends_at: string | null;
created_by: string | null;
created_at: string;
}
export interface CreateBannerInput {
message: string;
level: 'info' | 'important' | 'critical';
starts_at?: string;
ends_at?: string | null;
}
class BannerService {
async getActive(): Promise<Banner[]> {
const result = await pool.query(
`SELECT * FROM announcement_banners
WHERE starts_at <= NOW()
AND (ends_at IS NULL OR ends_at > NOW())
ORDER BY
CASE level WHEN 'critical' THEN 0 WHEN 'important' THEN 1 ELSE 2 END,
created_at DESC`
);
return result.rows;
}
async getAll(): Promise<Banner[]> {
const result = await pool.query(
'SELECT * FROM announcement_banners ORDER BY created_at DESC'
);
return result.rows;
}
async create(data: CreateBannerInput, userId: string): Promise<Banner> {
const result = await pool.query(
`INSERT INTO announcement_banners (message, level, starts_at, ends_at, created_by)
VALUES ($1, $2, $3, $4, $5) RETURNING *`,
[data.message, data.level, data.starts_at ?? new Date().toISOString(), data.ends_at ?? null, userId]
);
return result.rows[0];
}
async delete(id: string): Promise<boolean> {
const result = await pool.query(
'DELETE FROM announcement_banners WHERE id = $1',
[id]
);
return (result.rowCount ?? 0) > 0;
}
}
export default new BannerService();