calendar and vehicle booking rework
This commit is contained in:
105
backend/src/services/buchungskategorie.service.ts
Normal file
105
backend/src/services/buchungskategorie.service.ts
Normal file
@@ -0,0 +1,105 @@
|
||||
// =============================================================================
|
||||
// BuchungsKategorie (Booking Category) Service
|
||||
// =============================================================================
|
||||
|
||||
import pool from '../config/database';
|
||||
import logger from '../utils/logger';
|
||||
|
||||
interface CreateKategorieData {
|
||||
bezeichnung: string;
|
||||
farbe?: string;
|
||||
sort_order?: number;
|
||||
}
|
||||
|
||||
interface UpdateKategorieData {
|
||||
bezeichnung?: string;
|
||||
farbe?: string;
|
||||
aktiv?: boolean;
|
||||
sort_order?: number;
|
||||
}
|
||||
|
||||
async function getAll() {
|
||||
try {
|
||||
const result = await pool.query(
|
||||
`SELECT * FROM buchungs_kategorien ORDER BY sort_order, bezeichnung`
|
||||
);
|
||||
return result.rows;
|
||||
} catch (error) {
|
||||
logger.error('BuchungsKategorieService.getAll failed', { error });
|
||||
throw new Error('Buchungskategorien konnten nicht geladen werden');
|
||||
}
|
||||
}
|
||||
|
||||
async function getActive() {
|
||||
try {
|
||||
const result = await pool.query(
|
||||
`SELECT * FROM buchungs_kategorien WHERE aktiv = TRUE ORDER BY sort_order, bezeichnung`
|
||||
);
|
||||
return result.rows;
|
||||
} catch (error) {
|
||||
logger.error('BuchungsKategorieService.getActive failed', { error });
|
||||
throw new Error('Buchungskategorien konnten nicht geladen werden');
|
||||
}
|
||||
}
|
||||
|
||||
async function create(data: CreateKategorieData) {
|
||||
try {
|
||||
const result = await pool.query(
|
||||
`INSERT INTO buchungs_kategorien (bezeichnung, farbe, sort_order)
|
||||
VALUES ($1, $2, $3)
|
||||
RETURNING *`,
|
||||
[data.bezeichnung, data.farbe || '#607D8B', data.sort_order || 0]
|
||||
);
|
||||
return result.rows[0];
|
||||
} catch (error) {
|
||||
logger.error('BuchungsKategorieService.create failed', { error });
|
||||
throw new Error('Buchungskategorie konnte nicht erstellt werden');
|
||||
}
|
||||
}
|
||||
|
||||
async function update(id: number, data: UpdateKategorieData) {
|
||||
try {
|
||||
const result = await pool.query(
|
||||
`UPDATE buchungs_kategorien
|
||||
SET bezeichnung = COALESCE($1, bezeichnung),
|
||||
farbe = COALESCE($2, farbe),
|
||||
aktiv = COALESCE($3, aktiv),
|
||||
sort_order = COALESCE($4, sort_order)
|
||||
WHERE id = $5
|
||||
RETURNING *`,
|
||||
[data.bezeichnung, data.farbe, data.aktiv, data.sort_order, id]
|
||||
);
|
||||
return result.rows[0] || null;
|
||||
} catch (error) {
|
||||
logger.error('BuchungsKategorieService.update failed', { error, id });
|
||||
throw new Error('Buchungskategorie konnte nicht aktualisiert werden');
|
||||
}
|
||||
}
|
||||
|
||||
async function deactivate(id: number) {
|
||||
try {
|
||||
const result = await pool.query(
|
||||
`UPDATE buchungs_kategorien SET aktiv = FALSE WHERE id = $1 RETURNING *`,
|
||||
[id]
|
||||
);
|
||||
return result.rows[0] || null;
|
||||
} catch (error) {
|
||||
logger.error('BuchungsKategorieService.deactivate failed', { error, id });
|
||||
throw new Error('Buchungskategorie konnte nicht deaktiviert werden');
|
||||
}
|
||||
}
|
||||
|
||||
async function remove(id: number) {
|
||||
try {
|
||||
const result = await pool.query(
|
||||
`DELETE FROM buchungs_kategorien WHERE id = $1 RETURNING *`,
|
||||
[id]
|
||||
);
|
||||
return result.rows[0] || null;
|
||||
} catch (error) {
|
||||
logger.error('BuchungsKategorieService.remove failed', { error, id });
|
||||
throw new Error('Buchungskategorie konnte nicht gelöscht werden');
|
||||
}
|
||||
}
|
||||
|
||||
export default { getAll, getActive, create, update, deactivate, remove };
|
||||
Reference in New Issue
Block a user