---
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