@coursebuilder/adapter-drizzle 0.0.2 → 0.0.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.
@@ -1 +1 @@
1
- {"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../src/lib/mysql.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,aAAa,EAEb,YAAY,EAIb,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAExE,wBAAgB,YAAY,CAAC,UAAU,EAAE,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2HpD;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAA;AAE3D,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,YAAY,CAAC,OAAO,aAAa,CAAC,EAC1C,OAAO,0BAAsB,GAC5B,oBAAoB,CAkMtB"}
1
+ {"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../src/lib/mysql.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,aAAa,EAEb,YAAY,EAIb,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAGxE,wBAAgB,YAAY,CAAC,UAAU,EAAE,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2HpD;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAA;AAE3D,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,YAAY,CAAC,OAAO,aAAa,CAAC,EAC1C,OAAO,0BAAsB,GAC5B,oBAAoB,CA2PtB"}
package/lib/mysql.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { addSeconds, isAfter } from 'date-fns';
2
2
  import { and, eq, sql } from 'drizzle-orm';
3
3
  import { mysqlTable as defaultMySqlTableFn, double, index, int, json, mysqlEnum, primaryKey, timestamp, varchar, } from 'drizzle-orm/mysql-core';
4
+ import { VideoResourceSchema } from '@coursebuilder/core/schemas/video-resource';
4
5
  export function createTables(mySqlTable) {
5
6
  const users = mySqlTable('user', {
6
7
  id: varchar('id', { length: 255 }).notNull().primaryKey(),
@@ -102,6 +103,61 @@ export function createTables(mySqlTable) {
102
103
  export function mySqlDrizzleAdapter(client, tableFn = defaultMySqlTableFn) {
103
104
  const { users, accounts, sessions, verificationTokens, contentResource } = createTables(tableFn);
104
105
  return {
106
+ async updateContentResourceFields(options) {
107
+ const setFields = Object.entries(options.fields)
108
+ .map(([fieldName, fieldValue], index, array) => {
109
+ const comma = index < array.length - 1 ? ',' : '';
110
+ return sql `${fieldName} = ${fieldValue}${comma}`;
111
+ })
112
+ .join(' ');
113
+ const query = sql `
114
+ UPDATE ${contentResource}
115
+ SET ${setFields}
116
+ WHERE
117
+ id = ${options.id};
118
+ `;
119
+ return client
120
+ .execute(query)
121
+ .then((_) => {
122
+ return this.getContentResource(options.id);
123
+ })
124
+ .catch((error) => {
125
+ console.error(error);
126
+ throw error;
127
+ });
128
+ },
129
+ async getVideoResource(id) {
130
+ if (!id) {
131
+ throw new Error('videoResourceId is required');
132
+ }
133
+ const query = sql `
134
+ SELECT
135
+ id as _id,
136
+ CAST(updatedAt AS DATETIME) as _updatedAt,
137
+ CAST(createdAt AS DATETIME) as _createdAt,
138
+ JSON_EXTRACT (${contentResource.fields}, "$.state") AS state,
139
+ JSON_EXTRACT (${contentResource.fields}, "$.duration") AS duration,
140
+ JSON_EXTRACT (${contentResource.fields}, "$.muxPlaybackId") AS muxPlaybackId,
141
+ JSON_EXTRACT (${contentResource.fields}, "$.muxAssetId") AS muxAssetId,
142
+ JSON_EXTRACT (${contentResource.fields}, "$.transcript") AS transcript
143
+ FROM
144
+ ${contentResource}
145
+ WHERE
146
+ type = 'videoResource'
147
+ AND (id = ${id});
148
+
149
+ `;
150
+ return client
151
+ .execute(query)
152
+ .then((result) => {
153
+ const parsedResource = VideoResourceSchema.safeParse(result.rows[0]);
154
+ return parsedResource.success ? parsedResource.data : null;
155
+ })
156
+ .catch((error) => {
157
+ console.error(error);
158
+ return error;
159
+ });
160
+ },
105
161
  async createContentResource(data) {
106
162
  const id = crypto.randomUUID();
107
163
  await client.insert(contentResource).values({ ...data, id });
package/lib/pg.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pg.d.ts","sourceRoot":"","sources":["../src/lib/pg.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,UAAU,EAEV,SAAS,EAKV,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAExE,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuG9C;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAA;AAE3D,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,CAAC,OAAO,UAAU,CAAC,EACvC,OAAO,uBAAmB,GACzB,oBAAoB,CA8ItB"}
1
+ {"version":3,"file":"pg.d.ts","sourceRoot":"","sources":["../src/lib/pg.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,UAAU,EAEV,SAAS,EAKV,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAExE,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuG9C;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAA;AAE3D,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,CAAC,OAAO,UAAU,CAAC,EACvC,OAAO,uBAAmB,GACzB,oBAAoB,CAqJtB"}
package/lib/pg.js CHANGED
@@ -89,6 +89,13 @@ export function createTables(pgTable) {
89
89
  export function pgDrizzleAdapter(client, tableFn = defaultPgTableFn) {
90
90
  const { users, accounts, sessions, verificationTokens, contentResource } = createTables(tableFn);
91
91
  return {
92
+ async updateContentResourceFields(options) {
93
+ return null;
94
+ },
95
+ async getVideoResource(id) {
96
+ // TODO Implement
97
+ return null;
98
+ },
92
99
  async createContentResource(resource) {
93
100
  return client
94
101
  .insert(contentResource)
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../src/lib/sqlite.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,kBAAkB,EAIlB,aAAa,EAEd,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAIxE,wBAAgB,YAAY,CAAC,WAAW,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2FtD;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAA;AAE3D,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,CAAC,OAAO,kBAAkB,CAAC,EAC/C,OAAO,2BAAuB,GAC7B,oBAAoB,CA0GtB"}
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../src/lib/sqlite.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,kBAAkB,EAIlB,aAAa,EAEd,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAIxE,wBAAgB,YAAY,CAAC,WAAW,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2FtD;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAA;AAE3D,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,CAAC,OAAO,kBAAkB,CAAC,EAC/C,OAAO,2BAAuB,GAC7B,oBAAoB,CAiHtB"}
package/lib/sqlite.js CHANGED
@@ -78,6 +78,13 @@ export function createTables(sqliteTable) {
78
78
  export function SQLiteDrizzleAdapter(client, tableFn = defaultSqliteTableFn) {
79
79
  const { users, accounts, sessions, verificationTokens, contentResource } = createTables(tableFn);
80
80
  return {
81
+ async updateContentResourceFields(options) {
82
+ return null;
83
+ },
84
+ async getVideoResource(id) {
85
+ // TODO Implement
86
+ return null;
87
+ },
81
88
  async createContentResource(resource) {
82
89
  return client
83
90
  .insert(contentResource)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coursebuilder/adapter-drizzle",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "Drizzle adapter for Course Builder.",
5
5
  "keywords": [
6
6
  "coursebuilder",
@@ -31,7 +31,7 @@
31
31
  },
32
32
  "devDependencies": {
33
33
  "@auth/core": "^0.28.0",
34
- "@coursebuilder/core": "0.0.2",
34
+ "@coursebuilder/core": "0.0.3",
35
35
  "@libsql/client": "0.5.6",
36
36
  "@types/better-sqlite3": "7.6.9",
37
37
  "@types/uuid": "9.0.8",
package/src/lib/mysql.ts CHANGED
@@ -16,6 +16,7 @@ import {
16
16
  } from 'drizzle-orm/mysql-core'
17
17
 
18
18
  import { type CourseBuilderAdapter } from '@coursebuilder/core/adapters'
19
+ import { VideoResourceSchema } from '@coursebuilder/core/schemas/video-resource'
19
20
 
20
21
  export function createTables(mySqlTable: MySqlTableFn) {
21
22
  const users = mySqlTable('user', {
@@ -151,6 +152,63 @@ export function mySqlDrizzleAdapter(
151
152
  const { users, accounts, sessions, verificationTokens, contentResource } = createTables(tableFn)
152
153
 
153
154
  return {
155
+ async updateContentResourceFields(options) {
156
+ const setFields = Object.entries(options.fields)
157
+ .map(([fieldName, fieldValue], index, array) => {
158
+ const comma = index < array.length - 1 ? ',' : ''
159
+ return sql`${fieldName} = ${fieldValue}${comma}`
160
+ })
161
+ .join(' ')
162
+
163
+ const query = sql`
164
+ UPDATE ${contentResource}
165
+ SET ${setFields}
166
+ WHERE
167
+ id = ${options.id};
168
+ `
169
+ return client
170
+ .execute(query)
171
+ .then((_) => {
172
+ return this.getContentResource(options.id)
173
+ })
174
+ .catch((error) => {
175
+ console.error(error)
176
+ throw error
177
+ })
178
+ },
179
+ async getVideoResource(id) {
180
+ if (!id) {
181
+ throw new Error('videoResourceId is required')
182
+ }
183
+
184
+ const query = sql`
185
+ SELECT
186
+ id as _id,
187
+ CAST(updatedAt AS DATETIME) as _updatedAt,
188
+ CAST(createdAt AS DATETIME) as _createdAt,
189
+ JSON_EXTRACT (${contentResource.fields}, "$.state") AS state,
190
+ JSON_EXTRACT (${contentResource.fields}, "$.duration") AS duration,
191
+ JSON_EXTRACT (${contentResource.fields}, "$.muxPlaybackId") AS muxPlaybackId,
192
+ JSON_EXTRACT (${contentResource.fields}, "$.muxAssetId") AS muxAssetId,
193
+ JSON_EXTRACT (${contentResource.fields}, "$.transcript") AS transcript
194
+ FROM
195
+ ${contentResource}
196
+ WHERE
197
+ type = 'videoResource'
198
+ AND (id = ${id});
199
+
200
+ `
201
+ return client
202
+ .execute(query)
203
+ .then((result: any) => {
204
+ const parsedResource = VideoResourceSchema.safeParse(result.rows[0])
205
+ return parsedResource.success ? parsedResource.data : null
206
+ })
207
+ .catch((error) => {
208
+ console.error(error)
209
+ return error
210
+ })
211
+ },
154
212
  async createContentResource(data) {
155
213
  const id = crypto.randomUUID()
156
214
 
package/src/lib/pg.ts CHANGED
@@ -129,6 +129,13 @@ export function pgDrizzleAdapter(
129
129
  const { users, accounts, sessions, verificationTokens, contentResource } = createTables(tableFn)
130
130
 
131
131
  return {
132
+ async updateContentResourceFields(options) {
133
+ return null
134
+ },
135
+ async getVideoResource(id) {
136
+ // TODO Implement
137
+ return null
138
+ },
132
139
  async createContentResource(resource) {
133
140
  return client
134
141
  .insert(contentResource)
package/src/lib/sqlite.ts CHANGED
@@ -115,6 +115,13 @@ export function SQLiteDrizzleAdapter(
115
115
  const { users, accounts, sessions, verificationTokens, contentResource } = createTables(tableFn)
116
116
 
117
117
  return {
118
+ async updateContentResourceFields(options) {
119
+ return null
120
+ },
121
+ async getVideoResource(id) {
122
+ // TODO Implement
123
+ return null
124
+ },
118
125
  async createContentResource(resource) {
119
126
  return client
120
127
  .insert(contentResource)