import { application, resource, validation as v, mediaTypes, charsets, } 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', }) .mediaType(mediaTypes.applicationJson) .mediaType(mediaTypes.textJson) .mediaType(TEXT_SERIALIZER_PAIR) .charset(charsets.utf8) .resource(Piano) .resource(User); app.create({ dataSource, }).then((backend) => { const server = backend.createServer({ basePath: '/api' }); server.listen(3000); setTimeout(() => { // Allow user operations after 5 seconds from startup User .canFetchItem() .canFetchCollection() .canCreate() .canPatch(); }, 5000); });