HATEOAS-first backend framework.
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import {
  2. application,
  3. resource,
  4. valibot as v,
  5. serializers,
  6. encodings,
  7. } from '../../src';
  8. import {TEXT_SERIALIZER_PAIR} from './serializers';
  9. import {autoIncrement, dataSource} from './data-source';
  10. const Piano = resource(v.object(
  11. {
  12. brand: v.string()
  13. },
  14. v.never()
  15. ))
  16. .name('Piano')
  17. .id('id', {
  18. generationStrategy: autoIncrement,
  19. serialize: (id) => id?.toString() ?? '0',
  20. deserialize: (id) => Number.isFinite(Number(id)) ? Number(id) : 0,
  21. });
  22. // TODO implement authentication and RBAC on each resource
  23. const User = resource(v.object(
  24. {
  25. firstName: v.string(),
  26. middleName: v.string(),
  27. lastName: v.string(),
  28. bio: v.string(),
  29. birthday: v.datelike()
  30. },
  31. v.never()
  32. ))
  33. .name('User')
  34. .fullText('bio')
  35. .id('id', {
  36. generationStrategy: autoIncrement,
  37. serialize: (id) => id?.toString() ?? '0',
  38. deserialize: (id) => Number.isFinite(Number(id)) ? Number(id) : 0,
  39. });
  40. const app = application({
  41. name: 'piano-service',
  42. dataSource,
  43. })
  44. .contentType('application/json', serializers.applicationJson)
  45. .contentType('text/json', serializers.textJson)
  46. .contentType('text/plain', TEXT_SERIALIZER_PAIR)
  47. .encoding('utf-8', encodings.utf8)
  48. .resource(Piano)
  49. .resource(User);
  50. const server = app.createServer({
  51. baseUrl: '/api'
  52. });
  53. server.listen(3000);