UNPKG

@autobe/agent

Version:

AI backend server code generator

150 lines (137 loc) 5.38 kB
import { AutoBeRealizeTransformerSelectMapping, AutoBeRealizeTransformerTransformMapping, } from "@autobe/interface"; import { IAutoBePreliminaryComplete } from "../../common/structures/IAutoBePreliminaryComplete"; import { IAutoBePreliminaryGetDatabaseSchemas } from "../../common/structures/IAutoBePreliminaryGetDatabaseSchemas"; /** * Generates transformer functions that convert Prisma query results to API * response DTOs (DB → API) via plan/draft/revise workflow. */ export interface IAutoBeRealizeTransformerWriteApplication { /** * Process transformer generation task. * * @param props Preliminary data request, write submission, or completion * confirmation */ process(props: IAutoBeRealizeTransformerWriteApplication.IProps): void; } export namespace IAutoBeRealizeTransformerWriteApplication { export interface IProps { /** * Think before you act. * * For preliminary requests: what database schemas are missing and why? * * For write: what you're submitting and key mapping decisions. * * For complete: why you consider the last write final. * * Note: All DTO type information is available transitively from the plan's * DTO type names. You only need to request database schemas. */ thinking: string; /** * Action to perform. Exhausted preliminary types are removed from the * union, physically preventing repeated calls. */ request: | IWrite | IAutoBePreliminaryGetDatabaseSchemas | IAutoBePreliminaryComplete; } /** * Generate transformer module (select + transform functions) via * plan/draft/revise. */ export interface IWrite { /** Type discriminator for write submission. */ type: "write"; /** * Transformer implementation plan. MUST contain four sections: * * 1. Database Schema Field Inventory — ALL fields with exact names from schema * 2. DTO Property Inventory — ALL properties with types * 3. Field-by-Field Mapping Strategy — explicit table for BOTH select() and * transform() * 4. Edge Cases and Special Handling — type casts (Decimal, DateTime), * nullables * * This forces you to READ the actual schema (not imagine it) and creates an * explicit specification for both select() and transform() functions. */ plan: string; /** * Database field-by-field selection mapping for select(). * * MUST include EVERY database field needed by transform() — no exceptions. * Each mapping specifies: * * - `member`: Exact Prisma field/relation name (snake_case) — read from the * Relation Mapping Table and member list, NOT from DTO property names * - `kind`: scalar, belongsTo, hasOne, or hasMany * - `nullable`: true/false for scalar/belongsTo, null for hasMany/hasOne * - `how`: Which DTO property needs it * * The `kind` property forces explicit classification of each member BEFORE * deciding select syntax, preventing confusion between scalars and * relations. * * Missing even a single required field will cause validation failure. */ selectMappings: AutoBeRealizeTransformerSelectMapping[]; /** * DTO property-by-property transformation mapping for transform(). * * MUST include EVERY property from the DTO type definition — no exceptions. * Each mapping specifies: * * - `property`: Exact DTO property name (camelCase) * - `how`: How to obtain from Prisma payload * * **Common transformation patterns**: * * - Direct mapping: snake_case → camelCase * - Type conversion: Decimal → Number, DateTime → ISO string * - Nullable: DateTime? → string | null * - Nested objects: Reuse neighbor transformers * - Arrays: ArrayUtil.asyncMap + neighbor transformer * * Missing even a single property will cause validation failure. */ transformMappings: AutoBeRealizeTransformerTransformMapping[]; /** * Complete implementation following plan's mapping table. EVERY field from * plan Section 3 MUST appear in BOTH select() and transform(). Implement: * * - Transform() first, select() second, Payload last (correct order) * - All field mappings from plan with correct transformations * - Neighbor transformer reuse (NEVER inline when transformer exists) * - ALWAYS use `select`, NEVER use `include` */ draft: string; /** Reviews draft and produces final code. */ revise: IReviseProps; } export interface IReviseProps { /** * MUST systematically verify four checklists: * * 1. Schema Fidelity — cross-check EVERY field name against plan Section 1 * 2. Plan Adherence — verify EVERY mapping from Section 3 in BOTH select() and * transform() * 3. System Rules — neighbor reuse, function order, select (not include) * 4. Type Safety — Decimal→Number, DateTime→ISO, nullable handling * * Identify issues with line numbers. This catches hallucinated fields, * missing transformations, and rule violations. */ review: string; /** * Final transformer code with all review improvements applied, or null if * draft needs no changes. */ final: string | null; } }