Adding .agent support in addition to .claude

This commit is contained in:
2026-04-01 11:29:13 -04:00
parent 1ea0d232a4
commit ae35600822
32 changed files with 3438 additions and 315 deletions

View File

@@ -0,0 +1,109 @@
# Rules for working with AshJsonApi
## Understanding AshJsonApi
AshJsonApi is a package for integrating Ash Framework with the JSON:API specification. It provides tools for generating JSON:API compliant endpoints from your Ash resources. AshJsonApi allows you to expose your Ash resources through a standardized RESTful API, supporting all JSON:API features like filtering, sorting, pagination, includes, and relationships.
## Domain Configuration
AshJsonApi works by extending your Ash domains and resources with JSON:API capabilities. First, add the AshJsonApi extension to your domain.
### Setting Up Your Domain
```elixir
defmodule MyApp.Blog do
use Ash.Domain,
extensions: [
AshJsonApi.Domain
]
json_api do
# Define JSON:API-specific settings for this domain
authorize? true
# You can define routes at the domain level
routes do
base_route "/posts", MyApp.Blog.Post do
get :read
index :read
post :create
patch :update
delete :destroy
end
end
end
resources do
resource MyApp.Blog.Post
resource MyApp.Blog.Comment
end
end
```
## Resource Configuration
Each resource that you want to expose via JSON:API needs to include the AshJsonApi.Resource extension.
### Setting Up Resources
```elixir
defmodule MyApp.Blog.Post do
use Ash.Resource,
domain: MyApp.Blog,
extensions: [AshJsonApi.Resource]
attributes do
uuid_primary_key :id
attribute :title, :string
attribute :body, :string
attribute :published, :boolean
end
relationships do
belongs_to :author, MyApp.Accounts.User
has_many :comments, MyApp.Blog.Comment
end
json_api do
# The JSON:API type name (required)
type "post"
end
actions do
defaults [:create, :read, :update, :destroy]
read :list_published do
filter expr(published == true)
end
update :publish do
accept []
change set_attribute(:published, true)
end
end
end
```
## Route Types
AshJsonApi supports various route types according to the JSON:API spec:
- `get` - Fetch a single resource by ID
- `index` - List resources, with support for filtering, sorting, and pagination
- `post` - Create a new resource
- `patch` - Update an existing resource
- `delete` - Destroy an existing resource
- `related` - Fetch related resources (e.g., `/posts/123/comments`)
- `relationship` - Fetch relationship data (e.g., `/posts/123/relationships/comments`)
- `post_to_relationship` - Add to a relationship
- `patch_relationship` - Replace a relationship
- `delete_from_relationship` - Remove from a relationship
## JSON:API Pagination, Filtering, and Sorting
AshJsonApi supports standard JSON:API query parameters:
- Filter: `?filter[attribute]=value`
- Sort: `?sort=attribute,-other_attribute` (descending with `-`)
- Pagination: `?page[number]=2&page[size]=10`
- Includes: `?include=author,comments.author`