/** * Repository fields Baserow — list par tableId. DB token OK. * * Le bridge passe `options` brut (Record) tel que Baserow * l'expose : pour un single_select c'est `{select_options: [...]}`, pour un * link_row c'est `{link_row_table_id, ...}`, etc. Le frontend interpretera. */ import type { Logger } from 'pino'; import type { BaserowClient } from '../adapters/baserow-client.js'; import { Field } from '../domain/field.js'; export interface BaserowFieldsRepoOptions { client: BaserowClient; logger: Logger; } export class BaserowFieldsRepo { protected readonly client: BaserowClient; protected readonly logger: Logger; constructor(opts: BaserowFieldsRepoOptions) { this.client = opts.client; this.logger = opts.logger.child({ repo: 'fields' }); } async list(tableId: number): Promise { const raws = await this.client.listFields(tableId); return raws.map((r) => { const { id, name, type, primary, ...rest } = r; return new Field({ id, name, type, primary: Boolean(primary), // Baserow renvoie les meta type-specifiques au top-level — on les // groupe sous options pour eviter d'exposer la forme exacte cote API. options: Object.keys(rest).length > 0 ? rest : null, }); }); } }