import {
buildManifest,
entity,
string,
int,
bool,
datetime,
id,
relation,
query,
action,
policy,
} from "@pylonsync/sdk";
const User = entity("User", {
email: string({ unique: true }),
displayName: string(),
passwordHash: string({ optional: true }),
createdAt: datetime(),
});
const Todo = entity("Todo", {
title: string(),
done: bool({ default: false }),
authorId: id("User"),
createdAt:datetime(),
}, {
indexes: [{ name: "by_author", fields: ["authorId"] }],
});
const todosByAuthor = query("todosByAuthor", { authorId: id("User") });
const createTodo = action("createTodo", {
title: string(),
authorId: id("User"),
});
const todoPolicy = policy({
match: "Todo",
read: "auth.userId != null && data.authorId == auth.userId",
write: "auth.userId == data.authorId",
});
export default buildManifest({
name: "todo-app",
version: "0.1.0",
entities: [User, Todo],
queries: [todosByAuthor],
actions: [createTodo],
policies: [todoPolicy],
});