Functions
Functions are reusable logic blocks called from routes or events.
json
{
"name": "CreateUser",
"params": {
"email": "string",
"name": "string"
},
"steps": [
{
"type": "create",
"model": "User",
"data": { "email": "$email", "name": "$name" }
},
{ "type": "return", "value": "$result" }
]
}Step types
| Type | Description |
|---|---|
create | Create a model instance |
update | Update a model instance |
delete | Delete a model instance |
query | Query model instances |
condition | Conditional branch (if/else) |
return | Return a value |
call | Call another function |
Parameter references
Inside data and where objects, use $paramName to reference a function parameter and $result to reference the last step's output.
json
{ "type": "create", "model": "User", "data": { "email": "$email" } }Generated output
For each function Codabra generates src/lib/functions/<Name>.ts:
Drizzle
ts
// Auto-generated by Codabra — do not edit manually
import { db } from '../db';
import * as schema from '../../drizzle/schema';
import { eq } from 'drizzle-orm';
export async function CreateUser(params: {
email: string;
name: string;
}): Promise<unknown> {
let result: unknown;
result = await db
.insert(schema.users)
.values({ email: params.email, name: params.name })
.returning()
.then((r) => r[0]);
return result;
}Prisma
ts
// Auto-generated by Codabra — do not edit manually
import { prisma } from '../prisma';
export async function CreateUser(params: {
email: string;
name: string;
}): Promise<unknown> {
let result: unknown;
result = await prisma.user.create({
data: { email: params.email, name: params.name },
});
return result;
}Calling a function from a route
Add "function": "CreateUser" to a route definition:
json
{
"method": "POST",
"path": "/api/users",
"function": "CreateUser",
"body": { "email": "string", "name": "string" }
}The generated route will import and call the function instead of writing a raw Prisma query.
