server/src/routes/users.ts
Rama main · réplica de lectura del repositorio original.
import { Router, Request, Response } from 'express';
import plexUsersRepo, { type PlexUser } from '../db/repositories/plexUsers';
import settingsRepo from '../db/repositories/settings';
import { PlexUsersService } from '../services/plexUsers';
import logger from '../utils/logger';
const router = Router();
interface PlexUserResponse {
id: number;
plexUserId: string;
username: string;
email: string | null;
thumbUrl: string | null;
isHomeUser: boolean;
isOwner: boolean;
lastSyncedAt: string | null;
createdAt: string;
updatedAt: string;
}
function toResponse(user: PlexUser): PlexUserResponse {
return {
id: user.id,
plexUserId: user.plex_user_id,
username: user.username,
email: user.email,
thumbUrl: user.thumb_url,
isHomeUser: user.is_home_user === 1,
isOwner: user.is_owner === 1,
lastSyncedAt: user.last_synced_at,
createdAt: user.created_at,
updatedAt: user.updated_at,
};
}
// GET /api/users - List all known Plex users
router.get('/', (_req: Request, res: Response) => {
try {
const users = plexUsersRepo.findAll();
res.json({
success: true,
data: users.map(toResponse),
});
} catch (error) {
logger.error('Failed to list Plex users:', error);
res.status(500).json({
success: false,
error: 'Failed to list Plex users',
});
}
});
// POST /api/users/sync - Sync users from Plex
router.post('/sync', async (_req: Request, res: Response) => {
try {
const plexUrl = settingsRepo.getValue('plex_url');
const plexToken = settingsRepo.getValue('plex_token');
if (!plexUrl || !plexToken) {
res.status(400).json({
success: false,
error: 'Plex is not configured',
});
return;
}
const service = new PlexUsersService(plexUrl, plexToken);
const users = await service.syncUsers();
res.json({
success: true,
data: users.map(toResponse),
message: `Synced ${users.length} Plex user(s)`,
});
} catch (error) {
logger.error('Failed to sync Plex users:', error);
res.status(500).json({
success: false,
error: `Failed to sync Plex users: ${error instanceof Error ? error.message : 'unknown error'}`,
});
}
});
export default router;