- 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);
-
- const backend = app.createBackend({
- dataSource,
- });
-
- const server = backend.createServer({
- basePath: '/api'
- });
-
- server.listen(3000);
-
- setTimeout(() => {
- // Allow user operations after 5 seconds from startup
- User
- .canFetchItem()
- .canFetchCollection()
- .canCreate()
- .canPatch();
- }, 5000);
|