import { application, resource, validation as v, serializers, encodings, } from '../../src'; import {TEXT_SERIALIZER_PAIR} from './serializers'; import {autoIncrement, dataSource} from './data-source'; const Piano = resource(v.object( { brand: v.string() }, v.never() )) .name('Piano') .id('id', { generationStrategy: autoIncrement, serialize: (id) => id?.toString() ?? '0', deserialize: (id) => Number.isFinite(Number(id)) ? Number(id) : 0, schema: v.number(), }) .canFetchItem() .canFetchCollection() .canCreate() .canEmplace() .canPatch() .canDelete(); const User = resource(v.object( { firstName: v.string(), middleName: v.string(), lastName: v.string(), bio: v.string(), birthday: v.datelike() }, v.never() )) .id('id' as const, { generationStrategy: autoIncrement, serialize: (id) => id?.toString() ?? '0', deserialize: (id) => Number.isFinite(Number(id)) ? Number(id) : 0, schema: v.number(), }) .name('User') .fullText('bio'); const app = application({ name: 'piano-service', dataSource, }) .contentType(serializers.applicationJson) .contentType(serializers.textJson) .contentType(TEXT_SERIALIZER_PAIR) .encoding(encodings.utf8) .resource(Piano) .resource(User); const backend = app.createBackend(); const server = backend.createServer({ baseUrl: '/api' }); server.listen(3000); setTimeout(() => { // Allow user operations after 5 seconds from startup User .canFetchItem() .canFetchCollection() .canCreate() .canPatch(); }, 5000);