Files
oikos/server/routes/family.js
T
Rafael Foster 22ec13e559 feat: add housekeeping module for household staff management
* Adding flexible reminder options to birthdays

* Fix database migration merge conflict

* Truncate calendar popup descriptions

* Log app version on backend startup

* Add host-mounted data and backup folders

* feat: add housekeeping module

* fix: align housekeeping UI and add task creation

* refactor: rebuild housekeeping experience

* feat: support multiple housekeeping staff

* feat: integrate housekeeping visits with calendar

* feat: refine housekeeping visits and payments

* feat: add housekeeping staff visit logs

* feat: add housekeeping receipts and document folders

* feat: localize housekeeping folders and chores

* feat: refine housekeeping tabs and document folders

* fix: sync housekeeping tab active state

* feat: use configured app name in onboarding and manifest
2026-05-08 20:14:51 +02:00

42 lines
1.1 KiB
JavaScript

/**
* Module: Family
* Purpose: Read-only family member API.
* Dependencies: express, server/db.js
*/
import express from 'express';
import * as db from '../db.js';
import { createLogger } from '../logger.js';
const log = createLogger('Family');
const router = express.Router();
router.get('/members', (req, res) => {
try {
const members = db.get().prepare(`
SELECT u.id,
u.display_name,
u.avatar_color,
u.avatar_data,
u.family_role,
c.phone,
c.email,
b.birth_date,
u.created_at
FROM users u
LEFT JOIN contacts c ON c.family_user_id = u.id
LEFT JOIN birthdays b ON b.family_user_id = u.id
WHERE NOT EXISTS (
SELECT 1 FROM housekeeping_workers hw WHERE hw.user_id = u.id
)
ORDER BY u.display_name COLLATE NOCASE ASC
`).all();
res.json({ data: members });
} catch (err) {
log.error('GET /members error:', err);
res.status(500).json({ error: 'Internal server error.', code: 500 });
}
});
export default router;