shaperail-codegen 0.16.0

YAML parser, validator, and code generator for Shaperail
Documentation
---
source: shaperail-codegen/tests/snapshot_tests.rs
assertion_line: 12
expression: rd
---
resource: users
version: 1
schema:
  id:
    type: uuid
    primary: true
    generated: true
  email:
    type: string
    required: true
    unique: true
    format: email
    sensitive: true
  name:
    type: string
    required: true
    min: 1
    max: 200
  role:
    type: enum
    values:
      - admin
      - member
      - viewer
    default: member
  org_id:
    type: uuid
    required: true
    ref: organizations.id
  avatar_url:
    type: string
    nullable: true
    format: url
  metadata:
    type: json
    nullable: true
  created_at:
    type: timestamp
    generated: true
  updated_at:
    type: timestamp
    generated: true
  deleted_at:
    type: timestamp
    nullable: true
endpoints:
  list:
    method: GET
    path: /users
    auth:
      - member
      - admin
    filters:
      - role
      - org_id
      - created_at
    search:
      - name
      - email
    pagination: cursor
    sort:
      - created_at
      - name
    cache:
      ttl: 60
      invalidate_on:
        - create
        - update
        - delete
  create:
    method: POST
    path: /users
    auth:
      - admin
    input:
      - email
      - name
      - role
      - org_id
    controller:
      before: validate_org
    events:
      - user.created
    jobs:
      - send_welcome_email
  update:
    method: PATCH
    path: "/users/:id"
    auth:
      - admin
      - owner
    input:
      - name
      - role
      - avatar_url
      - metadata
    events:
      - user.updated
  delete:
    method: DELETE
    path: "/users/:id"
    auth:
      - admin
    soft_delete: true
relations:
  organization:
    resource: organizations
    type: belongs_to
    key: org_id
  orders:
    resource: orders
    type: has_many
    foreign_key: user_id
indexes:
  - fields:
      - email
    unique: true
  - fields:
      - org_id
      - role
  - fields:
      - created_at
    order: desc