126 lines
4.1 KiB
Plaintext
126 lines
4.1 KiB
Plaintext
// Example Masonry DSL definition
|
|
// This demonstrates the comprehensive language structure
|
|
|
|
// Server configuration
|
|
server MyApp host "localhost" port 8080
|
|
|
|
// Entity definitions with various field types and relationships
|
|
entity User desc "User account management"
|
|
id: uuid required unique
|
|
email: string required validate email validate min_length "5"
|
|
name: string default "Anonymous"
|
|
created_at: timestamp default "now()"
|
|
profile_id: uuid relates to Profile as one via "user_id"
|
|
|
|
entity Profile desc "User profile information"
|
|
id: uuid required unique
|
|
user_id: uuid required relates to User as one
|
|
bio: text validate max_length "500"
|
|
avatar_url: string validate url
|
|
updated_at: timestamp
|
|
posts: uuid relates to Post as many
|
|
|
|
entity Post desc "Blog posts"
|
|
id: uuid required unique
|
|
title: string required validate min_length "1" validate max_length "200"
|
|
content: text required
|
|
author_id: uuid required relates to User as one
|
|
published: boolean default "false"
|
|
created_at: timestamp default "now()"
|
|
tags: uuid relates to Tag as many through "post_tags"
|
|
|
|
entity Tag desc "Content tags"
|
|
id: uuid required unique
|
|
name: string required unique validate min_length "1" validate max_length "50"
|
|
slug: string required unique indexed
|
|
created_at: timestamp default "now()"
|
|
|
|
// API Endpoints with different HTTP methods and parameter sources
|
|
endpoint GET "/users" for User desc "List users" auth
|
|
param page: int from query
|
|
param limit: int required from query
|
|
returns list as "json" fields [id, email, name]
|
|
|
|
endpoint POST "/users" for User desc "Create user"
|
|
param user_data: object required from body
|
|
returns object as "json" fields [id, email, name]
|
|
|
|
endpoint PUT "/users/{id}" for User desc "Update user"
|
|
param id: uuid required from path
|
|
param user_data: object required from body
|
|
returns object
|
|
custom "update_user_logic"
|
|
|
|
endpoint DELETE "/users/{id}" for User desc "Delete user" auth
|
|
param id: uuid required from path
|
|
returns object
|
|
|
|
endpoint GET "/posts" for Post desc "List posts"
|
|
param author_id: uuid from query
|
|
param published: boolean from query
|
|
param page: int from query
|
|
returns list as "json" fields [id, title, author_id, published]
|
|
|
|
endpoint POST "/posts" for Post desc "Create post" auth
|
|
param post_data: object required from body
|
|
returns object fields [id, title, content, author_id]
|
|
|
|
// Frontend pages with components
|
|
page UserManagement at "/admin/users" layout AdminLayout title "User Management" auth
|
|
meta description "Manage system users"
|
|
meta keywords "users, admin, management"
|
|
|
|
component Table for User
|
|
fields [email, name, id]
|
|
actions [edit via "/users/{id}", delete via "/users/{id}", create via "/users"]
|
|
data from "/users"
|
|
style modern classes ["table-striped", "table-hover"]
|
|
pagination size 20
|
|
filters [email as text label "Search email", name as text label "Search name"]
|
|
validate
|
|
|
|
component Form for User
|
|
fields [email, name]
|
|
actions [save via "/users", cancel]
|
|
style clean
|
|
validate
|
|
|
|
page UserList at "/users" layout MainLayout title "Users"
|
|
meta description "Browse all users"
|
|
|
|
component Table for User
|
|
fields [email, name]
|
|
data from "/users"
|
|
pagination size 10
|
|
filters [name as text label "Search by name"]
|
|
|
|
page PostManagement at "/admin/posts" layout AdminLayout title "Post Management" auth
|
|
meta description "Manage blog posts"
|
|
meta keywords "posts, blog, content"
|
|
|
|
component Table for Post
|
|
fields [title, author_id, published, created_at]
|
|
actions [edit via "/posts/{id}", delete via "/posts/{id}", create via "/posts"]
|
|
data from "/posts"
|
|
style modern
|
|
pagination size 15
|
|
filters [title as text label "Search title", published as select label "Published status"]
|
|
validate
|
|
|
|
page CreatePost at "/posts/new" layout MainLayout title "Create Post" auth
|
|
component Form for Post
|
|
fields [title, content]
|
|
actions [save via "/posts", cancel]
|
|
style clean
|
|
validate
|
|
|
|
page BlogList at "/blog" layout PublicLayout title "Blog Posts"
|
|
meta description "Read our latest blog posts"
|
|
meta keywords "blog, articles, content"
|
|
|
|
component Table for Post
|
|
fields [title, created_at]
|
|
data from "/posts"
|
|
pagination size 5
|
|
filters [title as text label "Search posts"]
|