feat(cardav): implement PUT /addressbooks/:id endpoint

Adds route to toggle addressbook enabled/disabled state with bool validation.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Ulas Kalayci
2026-05-04 17:47:26 +02:00
parent 749e6ac79b
commit 9ec7fda6b0
3 changed files with 143 additions and 21 deletions
+25 -1
View File
@@ -8,7 +8,7 @@ import { createLogger } from '../logger.js';
import express from 'express';
import * as db from '../db.js';
import * as CardDAVSync from '../services/cardav-sync.js';
import { str, collectErrors, MAX_TITLE } from '../middleware/validate.js';
import { str, bool, collectErrors, MAX_TITLE } from '../middleware/validate.js';
const log = createLogger('CardDAV');
const MAX_URL = 500;
@@ -156,4 +156,28 @@ router.post('/accounts/:id/addressbooks/refresh', async (req, res) => {
}
});
/**
* PUT /api/v1/contacts/cardav/addressbooks/:id
* Toggle Addressbook enabled/disabled.
* Body: { enabled: boolean }
* Response: { data: { updated: true, enabled: boolean } }
*/
router.put('/addressbooks/:id', async (req, res) => {
try {
const id = parseInt(req.params.id, 10);
if (!id || id < 1) return res.status(400).json({ error: 'Invalid ID', code: 400 });
const vEnabled = bool(req.body.enabled, 'enabled');
const errors = collectErrors([vEnabled]);
if (errors.length) return res.status(400).json({ error: errors.join(' '), code: 400 });
CardDAVSync.toggleAddressbook(id, vEnabled.value);
res.json({ data: { updated: true, enabled: vEnabled.value } });
} catch (err) {
log.error('Error toggling addressbook:', err);
res.status(500).json({ error: 'Interner Fehler', code: 500 });
}
});
export default router;