@revealui/db 0.3.0 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/dist/cleanup/cross-db-cleanup.d.ts +19 -0
  2. package/dist/cleanup/cross-db-cleanup.d.ts.map +1 -1
  3. package/dist/cleanup/cross-db-cleanup.js +40 -1
  4. package/dist/cleanup/cross-db-cleanup.js.map +1 -1
  5. package/dist/cleanup/index.d.ts +2 -1
  6. package/dist/cleanup/index.d.ts.map +1 -1
  7. package/dist/cleanup/index.js +2 -1
  8. package/dist/cleanup/index.js.map +1 -1
  9. package/dist/cleanup/rag-site-cleanup.d.ts +58 -0
  10. package/dist/cleanup/rag-site-cleanup.d.ts.map +1 -0
  11. package/dist/cleanup/rag-site-cleanup.js +68 -0
  12. package/dist/cleanup/rag-site-cleanup.js.map +1 -0
  13. package/dist/client/index.d.ts +1 -1
  14. package/dist/client/index.d.ts.map +1 -1
  15. package/dist/client/index.js +3 -6
  16. package/dist/client/index.js.map +1 -1
  17. package/dist/client/types.d.ts.map +1 -1
  18. package/dist/pool.d.ts +4 -0
  19. package/dist/pool.d.ts.map +1 -1
  20. package/dist/pool.js +46 -20
  21. package/dist/pool.js.map +1 -1
  22. package/dist/queries/conversations.d.ts +29 -0
  23. package/dist/queries/conversations.d.ts.map +1 -0
  24. package/dist/queries/conversations.js +80 -0
  25. package/dist/queries/conversations.js.map +1 -0
  26. package/dist/queries/orders.d.ts +91 -0
  27. package/dist/queries/orders.d.ts.map +1 -0
  28. package/dist/queries/orders.js +36 -0
  29. package/dist/queries/orders.js.map +1 -0
  30. package/dist/queries/pages.d.ts.map +1 -1
  31. package/dist/queries/pages.js +0 -5
  32. package/dist/queries/pages.js.map +1 -1
  33. package/dist/queries/posts.d.ts +31 -0
  34. package/dist/queries/posts.d.ts.map +1 -1
  35. package/dist/queries/posts.js +21 -0
  36. package/dist/queries/posts.js.map +1 -1
  37. package/dist/queries/products.d.ts +102 -0
  38. package/dist/queries/products.d.ts.map +1 -0
  39. package/dist/queries/products.js +55 -0
  40. package/dist/queries/products.js.map +1 -0
  41. package/dist/queries/ticket-comments.d.ts +25 -0
  42. package/dist/queries/ticket-comments.d.ts.map +1 -1
  43. package/dist/queries/ticket-comments.js +28 -1
  44. package/dist/queries/ticket-comments.js.map +1 -1
  45. package/dist/queries/tickets.d.ts +41 -0
  46. package/dist/queries/tickets.d.ts.map +1 -1
  47. package/dist/queries/tickets.js +24 -0
  48. package/dist/queries/tickets.js.map +1 -1
  49. package/dist/queries/users.d.ts +118 -0
  50. package/dist/queries/users.d.ts.map +1 -1
  51. package/dist/queries/users.js +51 -1
  52. package/dist/queries/users.js.map +1 -1
  53. package/dist/schema/accounts.d.ts.map +1 -1
  54. package/dist/schema/accounts.js +2 -0
  55. package/dist/schema/accounts.js.map +1 -1
  56. package/dist/schema/agents.d.ts +133 -0
  57. package/dist/schema/agents.d.ts.map +1 -1
  58. package/dist/schema/agents.js +28 -2
  59. package/dist/schema/agents.js.map +1 -1
  60. package/dist/schema/circuit-breaker.d.ts +139 -0
  61. package/dist/schema/circuit-breaker.d.ts.map +1 -0
  62. package/dist/schema/circuit-breaker.js +28 -0
  63. package/dist/schema/circuit-breaker.js.map +1 -0
  64. package/dist/schema/crdt-operations.d.ts.map +1 -1
  65. package/dist/schema/crdt-operations.js +5 -2
  66. package/dist/schema/crdt-operations.js.map +1 -1
  67. package/dist/schema/index.d.ts +7 -0
  68. package/dist/schema/index.d.ts.map +1 -1
  69. package/dist/schema/index.js +24 -4
  70. package/dist/schema/index.js.map +1 -1
  71. package/dist/schema/licenses.d.ts +34 -0
  72. package/dist/schema/licenses.d.ts.map +1 -1
  73. package/dist/schema/licenses.js +7 -1
  74. package/dist/schema/licenses.js.map +1 -1
  75. package/dist/schema/marketplace.d.ts.map +1 -1
  76. package/dist/schema/marketplace.js +6 -2
  77. package/dist/schema/marketplace.js.map +1 -1
  78. package/dist/schema/passkeys.d.ts.map +1 -1
  79. package/dist/schema/passkeys.js +1 -0
  80. package/dist/schema/passkeys.js.map +1 -1
  81. package/dist/schema/products.d.ts +536 -0
  82. package/dist/schema/products.d.ts.map +1 -0
  83. package/dist/schema/products.js +104 -0
  84. package/dist/schema/products.js.map +1 -0
  85. package/dist/schema/rest.d.ts +4 -1
  86. package/dist/schema/rest.d.ts.map +1 -1
  87. package/dist/schema/rest.js +6 -3
  88. package/dist/schema/rest.js.map +1 -1
  89. package/dist/schema/revealcoin.d.ts +267 -0
  90. package/dist/schema/revealcoin.d.ts.map +1 -0
  91. package/dist/schema/revealcoin.js +54 -0
  92. package/dist/schema/revealcoin.js.map +1 -0
  93. package/dist/schema/sites.d.ts.map +1 -1
  94. package/dist/schema/sites.js +2 -7
  95. package/dist/schema/sites.js.map +1 -1
  96. package/dist/schema/tenants.d.ts.map +1 -1
  97. package/dist/schema/tenants.js +0 -1
  98. package/dist/schema/tenants.js.map +1 -1
  99. package/dist/schema/tickets.d.ts.map +1 -1
  100. package/dist/schema/tickets.js +5 -2
  101. package/dist/schema/tickets.js.map +1 -1
  102. package/dist/schema/users.d.ts +17 -0
  103. package/dist/schema/users.d.ts.map +1 -1
  104. package/dist/schema/users.js +2 -2
  105. package/dist/schema/users.js.map +1 -1
  106. package/dist/schema/vector.d.ts +10 -4
  107. package/dist/schema/vector.d.ts.map +1 -1
  108. package/dist/schema/vector.js +14 -5
  109. package/dist/schema/vector.js.map +1 -1
  110. package/dist/types/database.d.ts +80 -2
  111. package/dist/types/database.d.ts.map +1 -1
  112. package/dist/types/database.js +17 -1
  113. package/dist/types/database.js.map +1 -1
  114. package/dist/types/generate-contracts.js +1 -1
  115. package/dist/validation/cross-db.d.ts +6 -6
  116. package/dist/validation/cross-db.d.ts.map +1 -1
  117. package/dist/validation/cross-db.js.map +1 -1
  118. package/package.json +38 -9
  119. package/dist/queries/optimized-queries.d.ts +0 -89
  120. package/dist/queries/optimized-queries.d.ts.map +0 -1
  121. package/dist/queries/optimized-queries.js +0 -371
  122. package/dist/queries/optimized-queries.js.map +0 -1
  123. package/dist/queries/todos.d.ts +0 -37
  124. package/dist/queries/todos.d.ts.map +0 -1
  125. package/dist/queries/todos.js +0 -37
  126. package/dist/queries/todos.js.map +0 -1
  127. package/dist/schema/query.d.ts +0 -11
  128. package/dist/schema/query.d.ts.map +0 -1
  129. package/dist/schema/query.js +0 -11
  130. package/dist/schema/query.js.map +0 -1
  131. package/dist/schema/todos.d.ts +0 -98
  132. package/dist/schema/todos.d.ts.map +0 -1
  133. package/dist/schema/todos.js +0 -12
  134. package/dist/schema/todos.js.map +0 -1
  135. package/dist/security-audit-storage.d.ts +0 -54
  136. package/dist/security-audit-storage.d.ts.map +0 -1
  137. package/dist/security-audit-storage.js +0 -100
  138. package/dist/security-audit-storage.js.map +0 -1
package/package.json CHANGED
@@ -1,23 +1,20 @@
1
1
  {
2
2
  "name": "@revealui/db",
3
- "version": "0.3.0",
3
+ "version": "0.3.3",
4
4
  "license": "MIT",
5
- "files": [
6
- "dist"
7
- ],
8
5
  "dependencies": {
9
6
  "@neondatabase/serverless": "^1.0.2",
10
- "drizzle-orm": "^0.45.1",
11
- "drizzle-zod": "^0.8.3",
12
7
  "pg": "^8.18.0",
13
8
  "zod": "^4.3.6",
14
- "@revealui/config": "0.3.0",
15
- "@revealui/utils": "0.3.0"
9
+ "@revealui/utils": "0.3.0",
10
+ "@revealui/config": "0.3.0"
16
11
  },
17
12
  "devDependencies": {
18
13
  "drizzle-kit": "^0.31.8",
14
+ "drizzle-orm": "^0.45.2",
15
+ "drizzle-zod": "^0.8.3",
19
16
  "tsx": "^4.21.0",
20
- "typescript": "^5.9.3",
17
+ "typescript": "^6.0.2",
21
18
  "dev": "0.0.1"
22
19
  },
23
20
  "engines": {
@@ -144,6 +141,26 @@
144
141
  "types": "./dist/queries/pages.d.ts",
145
142
  "import": "./dist/queries/pages.js"
146
143
  },
144
+ "./queries/users": {
145
+ "types": "./dist/queries/users.d.ts",
146
+ "import": "./dist/queries/users.js"
147
+ },
148
+ "./queries/conversations": {
149
+ "types": "./dist/queries/conversations.d.ts",
150
+ "import": "./dist/queries/conversations.js"
151
+ },
152
+ "./queries/products": {
153
+ "types": "./dist/queries/products.d.ts",
154
+ "import": "./dist/queries/products.js"
155
+ },
156
+ "./queries/orders": {
157
+ "types": "./dist/queries/orders.d.ts",
158
+ "import": "./dist/queries/orders.js"
159
+ },
160
+ "./schema/products": {
161
+ "types": "./dist/schema/products.d.ts",
162
+ "import": "./dist/schema/products.js"
163
+ },
147
164
  "./schema/yjs-documents": {
148
165
  "types": "./dist/schema/yjs-documents.d.ts",
149
166
  "import": "./dist/schema/yjs-documents.js"
@@ -165,7 +182,19 @@
165
182
  "import": "./dist/validation/cross-db.js"
166
183
  }
167
184
  },
185
+ "files": [
186
+ "dist"
187
+ ],
168
188
  "main": "./dist/index.js",
189
+ "peerDependencies": {
190
+ "drizzle-orm": "^0.45.2",
191
+ "drizzle-zod": "^0.8.3"
192
+ },
193
+ "peerDependenciesMeta": {
194
+ "drizzle-zod": {
195
+ "optional": true
196
+ }
197
+ },
169
198
  "publishConfig": {
170
199
  "access": "public",
171
200
  "registry": "https://registry.npmjs.org"
@@ -1,89 +0,0 @@
1
- /**
2
- * Optimized Database Queries
3
- *
4
- * Examples of N+1 query elimination and query optimization
5
- * NOTE: This is example/documentation code - not actively used in production
6
- */
7
- /**
8
- * BAD: N+1 Query Pattern
9
- * Fetches posts, then makes separate query for each author
10
- */
11
- export declare function getPostsWithAuthorsN1(): Promise<any>;
12
- /**
13
- * GOOD: Optimized with JOIN
14
- * Single query with all necessary data
15
- */
16
- export declare function getPostsWithAuthorsOptimized(): Promise<any>;
17
- /**
18
- * BETTER: Optimized with caching
19
- */
20
- export declare function getPostsWithAuthorsCached(): Promise<unknown>;
21
- /**
22
- * BAD: OFFSET-based pagination (slow for large offsets)
23
- */
24
- export declare function getPostsPaginatedOffset(page: number, perPage: number): Promise<any>;
25
- /**
26
- * GOOD: Cursor-based pagination (faster for all positions)
27
- */
28
- export declare function getPostsPaginatedCursor(cursor?: string, perPage?: number): Promise<{
29
- items: any;
30
- nextCursor: any;
31
- }>;
32
- /**
33
- * BAD: Multiple count queries
34
- */
35
- export declare function getPostStatsN1(): Promise<{
36
- total: any;
37
- published: any;
38
- draft: any;
39
- }>;
40
- /**
41
- * GOOD: Single aggregation query
42
- */
43
- export declare function getPostStatsOptimized(): Promise<any>;
44
- /**
45
- * BAD: Individual queries in loop
46
- */
47
- export declare function getUsersByIdsN1(ids: string[]): Promise<any[]>;
48
- /**
49
- * GOOD: Single query with IN clause
50
- */
51
- export declare function getUsersByIdsOptimized(ids: string[]): Promise<any>;
52
- /**
53
- * GOOD: Fetch posts with authors and comments in one query
54
- */
55
- export declare function getPostsWithRelations(): Promise<any>;
56
- /**
57
- * BAD: LIKE query without index
58
- */
59
- export declare function searchPostsSlow(query: string): Promise<any>;
60
- /**
61
- * GOOD: Full-text search with GIN index
62
- */
63
- export declare function searchPostsOptimized(query: string): Promise<any>;
64
- /**
65
- * Build dynamic query with proper indexing
66
- */
67
- export declare function getPostsFiltered(filters: {
68
- status?: string;
69
- authorId?: string;
70
- fromDate?: Date;
71
- toDate?: Date;
72
- }): Promise<any>;
73
- /**
74
- * Create materialized view for expensive aggregations
75
- */
76
- export declare function createPostStatsMaterializedView(): Promise<void>;
77
- /**
78
- * Refresh materialized view
79
- */
80
- export declare function refreshPostStats(): Promise<void>;
81
- /**
82
- * Query materialized view (fast)
83
- */
84
- export declare function getPostStatsByDate(fromDate: Date, toDate: Date): Promise<any>;
85
- /**
86
- * Efficient JSON aggregation
87
- */
88
- export declare function getUsersWithPostCounts(): Promise<any>;
89
- //# sourceMappingURL=optimized-queries.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"optimized-queries.d.ts","sourceRoot":"","sources":["../../src/queries/optimized-queries.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAoBH;;;GAGG;AACH,wBAAsB,qBAAqB,iBAW1C;AAED;;;GAGG;AACH,wBAAsB,4BAA4B,iBA0BjD;AAED;;GAEG;AACH,wBAAsB,yBAAyB,qBAO9C;AAMD;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,gBAY1E;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,MAAW;;;GA2BlF;AAMD;;GAEG;AACH,wBAAsB,cAAc;;;;GAUnC;AAED;;GAEG;AACH,wBAAsB,qBAAqB,iBAa1C;AAMD;;GAEG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,kBAOlD;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,gBAMzD;AAMD;;GAEG;AACH,wBAAsB,qBAAqB,iBA0C1C;AAMD;;GAEG;AACH,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,gBASlD;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,MAAM,gBAoBvD;AAMD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,IAAI,CAAA;IACf,MAAM,CAAC,EAAE,IAAI,CAAA;CACd,gBA0CA;AAMD;;GAEG;AACH,wBAAsB,+BAA+B,kBAkBpD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,kBAErC;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,gBASpE;AAMD;;GAEG;AACH,wBAAsB,sBAAsB,iBAqB3C"}
@@ -1,371 +0,0 @@
1
- /* eslint-disable */
2
- // @ts-nocheck
3
- /**
4
- * Optimized Database Queries
5
- *
6
- * Examples of N+1 query elimination and query optimization
7
- * NOTE: This is example/documentation code - not actively used in production
8
- */
9
- import { getClient } from '../client/index.js';
10
- // TODO: Import from @revealui/core package once exports are configured
11
- // import { monitorQuery } from '@revealui/core/monitoring/query-monitor'
12
- // import { cacheQuery, cacheList } from '@revealui/core/cache/query-cache'
13
- // Temporary stubs for build - replace with actual imports once core package exports are set up
14
- const monitorQuery = (_name, fn) => fn();
15
- const _cacheQuery = (_key, fn) => fn();
16
- const cacheList = (_key, fn) => fn();
17
- // Get db client instance
18
- const db = getClient();
19
- // ============================================================================
20
- // N+1 QUERY ELIMINATION
21
- // ============================================================================
22
- /**
23
- * BAD: N+1 Query Pattern
24
- * Fetches posts, then makes separate query for each author
25
- */
26
- export async function getPostsWithAuthorsN1() {
27
- // First query: Get all posts
28
- const posts = await db.query('SELECT * FROM posts WHERE status = $1', ['published']);
29
- // N additional queries: One for each post's author
30
- for (const post of posts.rows) {
31
- const author = await db.query('SELECT * FROM users WHERE id = $1', [post.author_id]);
32
- post.author = author.rows[0];
33
- }
34
- return posts.rows;
35
- }
36
- /**
37
- * GOOD: Optimized with JOIN
38
- * Single query with all necessary data
39
- */
40
- export async function getPostsWithAuthorsOptimized() {
41
- return monitorQuery('getPostsWithAuthors', async () => {
42
- const query = `
43
- SELECT
44
- p.id,
45
- p.title,
46
- p.slug,
47
- p.content,
48
- p.published_at,
49
- p.created_at,
50
- p.updated_at,
51
- json_build_object(
52
- 'id', u.id,
53
- 'name', u.name,
54
- 'email', u.email,
55
- 'avatar', u.avatar
56
- ) as author
57
- FROM posts p
58
- INNER JOIN users u ON u.id = p.author_id
59
- WHERE p.status = 'published'
60
- ORDER BY p.published_at DESC
61
- `;
62
- const result = await db.query(query);
63
- return result.rows;
64
- });
65
- }
66
- /**
67
- * BETTER: Optimized with caching
68
- */
69
- export async function getPostsWithAuthorsCached() {
70
- return cacheList('posts', { status: 'published' }, () => getPostsWithAuthorsOptimized(), 300);
71
- }
72
- // ============================================================================
73
- // PAGINATION OPTIMIZATION
74
- // ============================================================================
75
- /**
76
- * BAD: OFFSET-based pagination (slow for large offsets)
77
- */
78
- export async function getPostsPaginatedOffset(page, perPage) {
79
- const offset = (page - 1) * perPage;
80
- const query = `
81
- SELECT * FROM posts
82
- WHERE status = 'published'
83
- ORDER BY published_at DESC
84
- LIMIT $1 OFFSET $2
85
- `;
86
- const result = await db.query(query, [perPage, offset]);
87
- return result.rows;
88
- }
89
- /**
90
- * GOOD: Cursor-based pagination (faster for all positions)
91
- */
92
- export async function getPostsPaginatedCursor(cursor, perPage = 20) {
93
- return monitorQuery('getPostsPaginated', async () => {
94
- const query = cursor
95
- ? `
96
- SELECT * FROM posts
97
- WHERE status = 'published'
98
- AND published_at < (
99
- SELECT published_at FROM posts WHERE id = $1
100
- )
101
- ORDER BY published_at DESC
102
- LIMIT $2
103
- `
104
- : `
105
- SELECT * FROM posts
106
- WHERE status = 'published'
107
- ORDER BY published_at DESC
108
- LIMIT $1
109
- `;
110
- const params = cursor ? [cursor, perPage] : [perPage];
111
- const result = await db.query(query, params);
112
- return {
113
- items: result.rows,
114
- nextCursor: result.rows.length === perPage ? result.rows[result.rows.length - 1].id : null,
115
- };
116
- });
117
- }
118
- // ============================================================================
119
- // AGGREGATION OPTIMIZATION
120
- // ============================================================================
121
- /**
122
- * BAD: Multiple count queries
123
- */
124
- export async function getPostStatsN1() {
125
- const totalPosts = await db.query('SELECT COUNT(*) FROM posts');
126
- const publishedPosts = await db.query("SELECT COUNT(*) FROM posts WHERE status = 'published'");
127
- const draftPosts = await db.query("SELECT COUNT(*) FROM posts WHERE status = 'draft'");
128
- return {
129
- total: totalPosts.rows[0].count,
130
- published: publishedPosts.rows[0].count,
131
- draft: draftPosts.rows[0].count,
132
- };
133
- }
134
- /**
135
- * GOOD: Single aggregation query
136
- */
137
- export async function getPostStatsOptimized() {
138
- return monitorQuery('getPostStats', async () => {
139
- const query = `
140
- SELECT
141
- COUNT(*) as total,
142
- COUNT(*) FILTER (WHERE status = 'published') as published,
143
- COUNT(*) FILTER (WHERE status = 'draft') as draft
144
- FROM posts
145
- `;
146
- const result = await db.query(query);
147
- return result.rows[0];
148
- });
149
- }
150
- // ============================================================================
151
- // BATCH LOADING
152
- // ============================================================================
153
- /**
154
- * BAD: Individual queries in loop
155
- */
156
- export async function getUsersByIdsN1(ids) {
157
- const users = [];
158
- for (const id of ids) {
159
- const result = await db.query('SELECT * FROM users WHERE id = $1', [id]);
160
- users.push(result.rows[0]);
161
- }
162
- return users;
163
- }
164
- /**
165
- * GOOD: Single query with IN clause
166
- */
167
- export async function getUsersByIdsOptimized(ids) {
168
- return monitorQuery('getUsersByIds', async () => {
169
- const query = 'SELECT * FROM users WHERE id = ANY($1)';
170
- const result = await db.query(query, [ids]);
171
- return result.rows;
172
- });
173
- }
174
- // ============================================================================
175
- // NESTED RELATIONSHIPS
176
- // ============================================================================
177
- /**
178
- * GOOD: Fetch posts with authors and comments in one query
179
- */
180
- export async function getPostsWithRelations() {
181
- return monitorQuery('getPostsWithRelations', async () => {
182
- const query = `
183
- SELECT
184
- p.id,
185
- p.title,
186
- p.slug,
187
- p.content,
188
- p.published_at,
189
- json_build_object(
190
- 'id', u.id,
191
- 'name', u.name,
192
- 'email', u.email
193
- ) as author,
194
- COALESCE(
195
- json_agg(
196
- json_build_object(
197
- 'id', c.id,
198
- 'content', c.content,
199
- 'created_at', c.created_at,
200
- 'author', json_build_object(
201
- 'id', cu.id,
202
- 'name', cu.name
203
- )
204
- )
205
- ORDER BY c.created_at DESC
206
- ) FILTER (WHERE c.id IS NOT NULL),
207
- '[]'
208
- ) as comments
209
- FROM posts p
210
- INNER JOIN users u ON u.id = p.author_id
211
- LEFT JOIN comments c ON c.post_id = p.id AND c.approved_at IS NOT NULL
212
- LEFT JOIN users cu ON cu.id = c.author_id
213
- WHERE p.status = 'published'
214
- GROUP BY p.id, u.id
215
- ORDER BY p.published_at DESC
216
- LIMIT 20
217
- `;
218
- const result = await db.query(query);
219
- return result.rows;
220
- });
221
- }
222
- // ============================================================================
223
- // SEARCH OPTIMIZATION
224
- // ============================================================================
225
- /**
226
- * BAD: LIKE query without index
227
- */
228
- export async function searchPostsSlow(query) {
229
- const sql = `
230
- SELECT * FROM posts
231
- WHERE title ILIKE $1 OR content ILIKE $1
232
- ORDER BY published_at DESC
233
- `;
234
- const result = await db.query(sql, [`%${query}%`]);
235
- return result.rows;
236
- }
237
- /**
238
- * GOOD: Full-text search with GIN index
239
- */
240
- export async function searchPostsOptimized(query) {
241
- return monitorQuery('searchPosts', async () => {
242
- const sql = `
243
- SELECT
244
- p.*,
245
- ts_rank(
246
- to_tsvector('english', coalesce(p.title, '') || ' ' || coalesce(p.content, '')),
247
- plainto_tsquery('english', $1)
248
- ) as rank
249
- FROM posts p
250
- WHERE to_tsvector('english', coalesce(p.title, '') || ' ' || coalesce(p.content, ''))
251
- @@ plainto_tsquery('english', $1)
252
- AND p.status = 'published'
253
- ORDER BY rank DESC, p.published_at DESC
254
- LIMIT 50
255
- `;
256
- const result = await db.query(sql, [query]);
257
- return result.rows;
258
- });
259
- }
260
- // ============================================================================
261
- // CONDITIONAL QUERIES
262
- // ============================================================================
263
- /**
264
- * Build dynamic query with proper indexing
265
- */
266
- export async function getPostsFiltered(filters) {
267
- return monitorQuery('getPostsFiltered', async () => {
268
- const conditions = [];
269
- const params = [];
270
- let paramCount = 1;
271
- if (filters.status) {
272
- conditions.push(`status = $${paramCount}`);
273
- params.push(filters.status);
274
- paramCount++;
275
- }
276
- if (filters.authorId) {
277
- conditions.push(`author_id = $${paramCount}`);
278
- params.push(filters.authorId);
279
- paramCount++;
280
- }
281
- if (filters.fromDate) {
282
- conditions.push(`published_at >= $${paramCount}`);
283
- params.push(filters.fromDate);
284
- paramCount++;
285
- }
286
- if (filters.toDate) {
287
- conditions.push(`published_at <= $${paramCount}`);
288
- params.push(filters.toDate);
289
- paramCount++;
290
- }
291
- const whereClause = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
292
- const query = `
293
- SELECT * FROM posts
294
- ${whereClause}
295
- ORDER BY published_at DESC
296
- LIMIT 100
297
- `;
298
- const result = await db.query(query, params);
299
- return result.rows;
300
- });
301
- }
302
- // ============================================================================
303
- // MATERIALIZED VIEWS
304
- // ============================================================================
305
- /**
306
- * Create materialized view for expensive aggregations
307
- */
308
- export async function createPostStatsMaterializedView() {
309
- const query = `
310
- CREATE MATERIALIZED VIEW IF NOT EXISTS post_stats_mv AS
311
- SELECT
312
- DATE_TRUNC('day', published_at) as date,
313
- COUNT(*) as post_count,
314
- COUNT(DISTINCT author_id) as author_count,
315
- AVG(LENGTH(content)) as avg_content_length
316
- FROM posts
317
- WHERE status = 'published'
318
- GROUP BY DATE_TRUNC('day', published_at)
319
- ORDER BY date DESC;
320
-
321
- CREATE UNIQUE INDEX IF NOT EXISTS idx_post_stats_mv_date
322
- ON post_stats_mv(date);
323
- `;
324
- await db.query(query);
325
- }
326
- /**
327
- * Refresh materialized view
328
- */
329
- export async function refreshPostStats() {
330
- await db.query('REFRESH MATERIALIZED VIEW CONCURRENTLY post_stats_mv');
331
- }
332
- /**
333
- * Query materialized view (fast)
334
- */
335
- export async function getPostStatsByDate(fromDate, toDate) {
336
- const query = `
337
- SELECT * FROM post_stats_mv
338
- WHERE date BETWEEN $1 AND $2
339
- ORDER BY date DESC
340
- `;
341
- const result = await db.query(query, [fromDate, toDate]);
342
- return result.rows;
343
- }
344
- // ============================================================================
345
- // QUERY RESULT TRANSFORMATION
346
- // ============================================================================
347
- /**
348
- * Efficient JSON aggregation
349
- */
350
- export async function getUsersWithPostCounts() {
351
- return monitorQuery('getUsersWithPostCounts', async () => {
352
- const query = `
353
- SELECT
354
- u.id,
355
- u.name,
356
- u.email,
357
- json_build_object(
358
- 'total', COUNT(p.id),
359
- 'published', COUNT(p.id) FILTER (WHERE p.status = 'published'),
360
- 'draft', COUNT(p.id) FILTER (WHERE p.status = 'draft')
361
- ) as post_stats
362
- FROM users u
363
- LEFT JOIN posts p ON p.author_id = u.id
364
- GROUP BY u.id
365
- ORDER BY COUNT(p.id) DESC
366
- `;
367
- const result = await db.query(query);
368
- return result.rows;
369
- });
370
- }
371
- //# sourceMappingURL=optimized-queries.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"optimized-queries.js","sourceRoot":"","sources":["../../src/queries/optimized-queries.ts"],"names":[],"mappings":"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"}
@@ -1,37 +0,0 @@
1
- /**
2
- * Todo database queries
3
- */
4
- import type { DatabaseClient } from '../client/types.js';
5
- export declare function getAllTodos(db: DatabaseClient): Promise<{
6
- id: string;
7
- text: string;
8
- completed: boolean;
9
- createdAt: Date;
10
- updatedAt: Date;
11
- }[]>;
12
- export declare function getTodoById(db: DatabaseClient, id: string): Promise<{
13
- id: string;
14
- text: string;
15
- completed: boolean;
16
- createdAt: Date;
17
- updatedAt: Date;
18
- } | null>;
19
- export declare function createTodo(db: DatabaseClient, text: string): Promise<{
20
- id: string;
21
- createdAt: Date;
22
- updatedAt: Date;
23
- text: string;
24
- completed: boolean;
25
- } | undefined>;
26
- export declare function updateTodo(db: DatabaseClient, id: string, data: {
27
- text?: string;
28
- completed?: boolean;
29
- }): Promise<{
30
- id: string;
31
- text: string;
32
- completed: boolean;
33
- createdAt: Date;
34
- updatedAt: Date;
35
- } | null>;
36
- export declare function deleteTodo(db: DatabaseClient, id: string): Promise<void>;
37
- //# sourceMappingURL=todos.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"todos.d.ts","sourceRoot":"","sources":["../../src/queries/todos.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAGxD,wBAAsB,WAAW,CAAC,EAAE,EAAE,cAAc;;;;;;KAEnD;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM;;;;;;UAG/D;AAED,wBAAsB,UAAU,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM;;;;;;eAUhE;AAED,wBAAsB,UAAU,CAC9B,EAAE,EAAE,cAAc,EAClB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE;;;;;;UAY7C;AAED,wBAAsB,UAAU,CAAC,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,iBAE9D"}
@@ -1,37 +0,0 @@
1
- /**
2
- * Todo database queries
3
- */
4
- import { eq } from 'drizzle-orm';
5
- import { todos } from '../schema/todos.js';
6
- export async function getAllTodos(db) {
7
- return db.select().from(todos).orderBy(todos.createdAt);
8
- }
9
- export async function getTodoById(db, id) {
10
- const result = await db.select().from(todos).where(eq(todos.id, id)).limit(1);
11
- return result[0] ?? null;
12
- }
13
- export async function createTodo(db, text) {
14
- const result = await db
15
- .insert(todos)
16
- .values({
17
- text,
18
- completed: false,
19
- })
20
- .returning();
21
- return result[0];
22
- }
23
- export async function updateTodo(db, id, data) {
24
- const result = await db
25
- .update(todos)
26
- .set({
27
- ...data,
28
- updatedAt: new Date(),
29
- })
30
- .where(eq(todos.id, id))
31
- .returning();
32
- return result[0] ?? null;
33
- }
34
- export async function deleteTodo(db, id) {
35
- await db.delete(todos).where(eq(todos.id, id));
36
- }
37
- //# sourceMappingURL=todos.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"todos.js","sourceRoot":"","sources":["../../src/queries/todos.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAE1C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAkB;IAClD,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAkB,EAAE,EAAU;IAC9D,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC7E,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAkB,EAAE,IAAY;IAC/D,MAAM,MAAM,GAAG,MAAM,EAAE;SACpB,MAAM,CAAC,KAAK,CAAC;SACb,MAAM,CAAC;QACN,IAAI;QACJ,SAAS,EAAE,KAAK;KACjB,CAAC;SACD,SAAS,EAAE,CAAA;IAEd,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,EAAkB,EAClB,EAAU,EACV,IAA4C;IAE5C,MAAM,MAAM,GAAG,MAAM,EAAE;SACpB,MAAM,CAAC,KAAK,CAAC;SACb,GAAG,CAAC;QACH,GAAG,IAAI;QACP,SAAS,EAAE,IAAI,IAAI,EAAE;KACtB,CAAC;SACD,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;SACvB,SAAS,EAAE,CAAA;IAEd,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAkB,EAAE,EAAU;IAC7D,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;AAChD,CAAC"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Query Builder Utilities
3
- *
4
- * Re-exports drizzle-orm query builder functions to ensure all packages
5
- * use the same drizzle instance, avoiding pnpm hoisting issues.
6
- *
7
- * Instead of importing from 'drizzle-orm' directly, import from '@revealui/db/schema/query'
8
- */
9
- export type { SQL } from 'drizzle-orm';
10
- export { and, asc, avg, count, desc, eq, gt, gte, ilike, inArray, isNotNull, isNull, like, lt, lte, max, min, ne, not, notInArray, or, sql, sum, } from 'drizzle-orm';
11
- //# sourceMappingURL=query.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/schema/query.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,YAAY,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAEtC,OAAO,EACL,GAAG,EACH,GAAG,EACH,GAAG,EACH,KAAK,EACL,IAAI,EACJ,EAAE,EACF,EAAE,EACF,GAAG,EACH,KAAK,EACL,OAAO,EACP,SAAS,EACT,MAAM,EACN,IAAI,EACJ,EAAE,EACF,GAAG,EACH,GAAG,EACH,GAAG,EACH,EAAE,EACF,GAAG,EACH,UAAU,EACV,EAAE,EACF,GAAG,EACH,GAAG,GACJ,MAAM,aAAa,CAAA"}
@@ -1,11 +0,0 @@
1
- /**
2
- * Query Builder Utilities
3
- *
4
- * Re-exports drizzle-orm query builder functions to ensure all packages
5
- * use the same drizzle instance, avoiding pnpm hoisting issues.
6
- *
7
- * Instead of importing from 'drizzle-orm' directly, import from '@revealui/db/schema/query'
8
- */
9
- // Re-export commonly used query builder functions
10
- export { and, asc, avg, count, desc, eq, gt, gte, ilike, inArray, isNotNull, isNull, like, lt, lte, max, min, ne, not, notInArray, or, sql, sum, } from 'drizzle-orm';
11
- //# sourceMappingURL=query.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/schema/query.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,kDAAkD;AAClD,OAAO,EACL,GAAG,EACH,GAAG,EACH,GAAG,EACH,KAAK,EACL,IAAI,EACJ,EAAE,EACF,EAAE,EACF,GAAG,EACH,KAAK,EACL,OAAO,EACP,SAAS,EACT,MAAM,EACN,IAAI,EACJ,EAAE,EACF,GAAG,EACH,GAAG,EACH,GAAG,EACH,EAAE,EACF,GAAG,EACH,UAAU,EACV,EAAE,EACF,GAAG,EACH,GAAG,GACJ,MAAM,aAAa,CAAA"}