@wearesage/schema
Version:
A flexible schema definition and validation system for TypeScript with multi-database support
70 lines (51 loc) ⢠1.99 kB
text/typescript
/**
* 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';
()
class MockSpace {
()
id!: string;
({ required: true })
()
name!: string;
()
description?: string;
({ required: true })
spaceType!: 'chat' | 'project' | 'task' | 'query' | 'cli' | 'board' | 'dependency' | 'other';
({ required: true })
visibility!: 'public' | 'private';
// Recursive relationship - parent space
({ target: () => MockSpace, inverse: 'childSpaces' })
parentSpace?: MockSpace;
// Recursive relationship - child spaces
({ target: () => MockSpace, inverse: 'parentSpace' })
childSpaces!: MockSpace[];
// Code relationships
({ target: () => MockSpace })
imports!: MockSpace[];
({ target: () => MockSpace })
dependencies!: MockSpace[];
({ onCreate: true })
createdAt!: Date;
({ 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 };