UNPKG

@wearesage/schema

Version:

A flexible schema definition and validation system for TypeScript with multi-database support

70 lines (51 loc) • 1.99 kB
/** * Example: Generate service for Space entity */ import "reflect-metadata"; import { ServiceGenerator, MetadataExtractor } from '../core/ServiceGenerator'; // Mock Space entity for testing (simplified version) import { Entity, Property, Id, OneToMany, ManyToOne, ManyToMany, Index, Timestamp } from '../core/decorators'; @Entity() class MockSpace { @Id() id!: string; @Property({ required: true }) @Index() name!: string; @Property() description?: string; @Property({ required: true }) spaceType!: 'chat' | 'project' | 'task' | 'query' | 'cli' | 'board' | 'dependency' | 'other'; @Property({ required: true }) visibility!: 'public' | 'private'; // Recursive relationship - parent space @ManyToOne({ target: () => MockSpace, inverse: 'childSpaces' }) parentSpace?: MockSpace; // Recursive relationship - child spaces @OneToMany({ target: () => MockSpace, inverse: 'parentSpace' }) childSpaces!: MockSpace[]; // Code relationships @ManyToMany({ target: () => MockSpace }) imports!: MockSpace[]; @ManyToMany({ target: () => MockSpace }) dependencies!: MockSpace[]; @Timestamp({ onCreate: true }) createdAt!: Date; @Timestamp({ onUpdate: true }) updatedAt!: Date; } // Generate service console.log('šŸ” Extracting metadata from MockSpace...'); const metadata = MetadataExtractor.extractEntityMetadata(MockSpace); console.log('šŸ“Š Entity Metadata:'); console.log(JSON.stringify(metadata, null, 2)); console.log('\n⚔ Generated CRUD Operations:'); const crud = ServiceGenerator.generateCRUDOperations(metadata); console.log(JSON.stringify(crud, null, 2)); console.log('\nšŸ”— Generated Relationship Operations:'); const relationships = ServiceGenerator.generateRelationshipOperations(metadata); console.log(JSON.stringify(relationships, null, 2)); console.log('\nšŸ—ļø Generated Service Class:'); const serviceClass = ServiceGenerator.generateServiceClass(MockSpace); console.log(serviceClass); export { MockSpace };