MCPcopy Create free account
hub / github.com/zenstackhq/zenstack / main

Function main

samples/orm/main.ts:7–119  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

5import { schema } from './zenstack/schema';
6
7async function main() {
8 const db = new ZenStackClient(schema, {
9 dialect: new SqliteDialect({ database: new SQLite('./zenstack/dev.db') }),
10 computedFields: {
11 user: {
12 postCount: (eb, { modelAlias }) =>
13 eb
14 .selectFrom('Post')
15 .whereRef('Post.authorId', '=', sql.ref(`${modelAlias}.id`))
16 .select(({ fn }) => fn.countAll<number>().as('postCount')),
17 },
18 },
19 procedures: {
20 signUp: ({ client, args }) =>
21 client.user.create({
22 data: { ...args },
23 }),
24 listPublicPosts: ({}) => [],
25 },
26 }).$use({
27 id: 'cost-logger',
28 onQuery: async ({ model, operation, args, proceed }) => {
29 const start = Date.now();
30 const result = await proceed(args as any);
31 console.log(`[cost] ${model} ${operation} took ${Date.now() - start}ms`);
32 return result;
33 },
34 });
35
36 // clean up existing data
37 await db.post.deleteMany();
38 await db.profile.deleteMany();
39 await db.user.deleteMany();
40
41 db.user.findMany({ where: { id: '1' } });
42
43 // create users and some posts
44 const user1 = await db.user.create({
45 data: {
46 email: 'yiming@gmail.com',
47 role: 'ADMIN',
48 posts: {
49 create: [
50 {
51 title: 'Post1',
52 content: 'An unpublished post',
53 published: false,
54 },
55 {
56 title: 'Post2',
57 content: 'A published post',
58 published: true,
59 },
60 ],
61 },
62 },
63 include: { posts: true },
64 });

Callers 1

main.tsFile · 0.70

Calls 4

proceedFunction · 0.85
$useMethod · 0.80
$setAuthMethod · 0.80
logMethod · 0.65

Tested by

no test coverage detected