From 47f5d0c55bd1b6077dab9ba9e2bff6c095ce612d Mon Sep 17 00:00:00 2001 From: Fairpost Date: Thu, 18 Jun 2026 21:28:08 +0200 Subject: [PATCH] feat: Support platform mapping AND settings mapping --- src/mappers/PlatformMapper.ts | 2 +- src/models/Operator.ts | 26 +++++++++++--------------- src/services/Fairpost.ts | 21 ++++++++------------- 3 files changed, 20 insertions(+), 29 deletions(-) diff --git a/src/mappers/PlatformMapper.ts b/src/mappers/PlatformMapper.ts index 2691d93..7967d11 100644 --- a/src/mappers/PlatformMapper.ts +++ b/src/mappers/PlatformMapper.ts @@ -5,7 +5,7 @@ import Platform from "../models/Platform.ts"; export default class PlatformMapper extends AbstractMapper { private platform: Platform; - private static platformMapping: FieldMapping = { + static platformMapping: FieldMapping = { model: { type: "string", label: "Model", diff --git a/src/models/Operator.ts b/src/models/Operator.ts index 83af827..83585ed 100644 --- a/src/models/Operator.ts +++ b/src/models/Operator.ts @@ -1,9 +1,9 @@ import User from "./User.ts"; import { FieldMapping, ProcessedFieldMapping } from "../types/index.ts"; -import Platform from "../models/Platform.ts"; import UserMapper from "../mappers/UserMapper.ts"; import FeedMapper from "../mappers/FeedMapper.ts"; import SourceMapper from "../mappers/SourceMapper.ts"; +import PlatformMapper from "../mappers/PlatformMapper.ts"; import PostMapper from "../mappers/PostMapper.ts"; /** @@ -86,13 +86,8 @@ export default class Operator { return permissions; } - public getFieldMapping( - user: User, - model: string, - instance?: object, - ): ProcessedFieldMapping { + public getFieldMapping(user: User, model: string): ProcessedFieldMapping { let rawFieldMapping: FieldMapping | undefined = undefined; - let processedFieldMapping: ProcessedFieldMapping = {}; switch (model) { case "user": rawFieldMapping = UserMapper.userMapping; @@ -107,14 +102,7 @@ export default class Operator { break; case "platform": - if (!instance || !(instance instanceof Platform)) { - throw user.log.error( - "Operator.getFieldMapping", - "Platform is required", - ); - } - const platform = instance as Platform; - rawFieldMapping = platform.mapper.mapping; + rawFieldMapping = PlatformMapper.platformMapping; break; case "post": @@ -124,6 +112,14 @@ export default class Operator { if (!rawFieldMapping) { throw user.log.error("Operator.getFieldMapping: no such mapping", model); } + return this.processFieldMapping(user, rawFieldMapping); + } + + public processFieldMapping( + user: User, + rawFieldMapping: FieldMapping, + ): ProcessedFieldMapping { + let processedFieldMapping: ProcessedFieldMapping = {}; const permissions = this.getPermissions(user); for (const fieldName of Object.keys(rawFieldMapping)) { const rawField = rawFieldMapping[fieldName]; diff --git a/src/services/Fairpost.ts b/src/services/Fairpost.ts index d40c73e..5013998 100644 --- a/src/services/Fairpost.ts +++ b/src/services/Fairpost.ts @@ -175,24 +175,19 @@ class Fairpost { if (!user) { throw new Error("user is required for command " + command); } - if (!args.model) { + if (!args.model && !args.platform) { throw user.log.error( "CommandHandler " + command, - "Missing argument: model", + "Missing argument: model or platform", ); } - let instance: object | undefined = undefined; - if (args.model === "platform") { - if (!args.platform) { - throw user.log.error( - "CommandHandler " + command, - "Missing argument: platform", - ); - } - instance = user.getPlatform(args.platform); + if (args.platform) { + const platform = user.getPlatform(args.platform); + const rawFieldMapping = platform.settings; + output = operator.processFieldMapping(user, rawFieldMapping); + } else if (args.model) { + output = operator.getFieldMapping(user, args.model); } - - output = operator.getFieldMapping(user, args.model, instance); break; }