Skip to content

Commit

Permalink
feat: extract a database adapter package for drizzle (#104)
Browse files Browse the repository at this point in the history
* feat: extract a database adapter package for drizzle

* feat: extract a database adapter package for drizzle

* Add core types and adapters, update tsconfig.json and package.json, delete drizzle adapter and auth-drizzle-adapter

* Add core types and adapters, update tsconfig.json and package.json, delete drizzle adapter and auth-drizzle-adapter

* add changesets

* apply CourseBuilderAdapter interface to sqlite and pg to remove `any` from DrizzleAdapter

* Add role column to user table for sqlite & pg

* add a changeset

* fix:build

* fix: remove broken test scripts

* fix: turbo caching outputs for adapter

* fix: prettier

* we ain't trying to test

* Delete .changeset/wet-fans-notice.md

* Update weak-pillows-exist.md

* drizzle-orm as a peer dependency

* fix the package lock

* fix package sorting 🤡

* Update apps/course-builder-web/src/app/tips/page.tsx

* created an initial deepgram provider that handles the initial ordering of a transcript

* providers folder not to be committed

* providers in turbo outputs

* handle deepgram results with provider

* move the adapter and transcriptProvider into a top level config for the app

* sort a package
  • Loading branch information
joelhooks committed Mar 17, 2024
1 parent f871ab8 commit 2def195
Show file tree
Hide file tree
Showing 49 changed files with 5,084 additions and 3,181 deletions.
9 changes: 9 additions & 0 deletions .changeset/weak-pillows-exist.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
"@coursebuilder/adapter-drizzle": patch
"@coursebuilder/core": patch
"create-course-app": patch
---

adding adapter and core packages to extend the pattern that is presented by authjs to include Course Builder `contentResource` schema

this approach will allow us to maintain adapters for mysql, sqlite, and pg, potentially beyond drizzle if needed
12 changes: 11 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,14 @@ dist-ssr
.cache
server/dist
public/dist
.idea
.idea

packages/*/*.js
packages/*/*.d.ts
packages/*/*.d.ts.map
packages/*/lib
packages/**/generated

# Core
packages/core/lib
packages/core/providers
2 changes: 1 addition & 1 deletion .node-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
20.5.0
20.11.1
2 changes: 2 additions & 0 deletions apps/course-builder-web/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
# When adding additional environment variables, the schema in "/src/env.mjs"
# should be updated accordingly.

NEXT_PUBLIC_APP_NAME=app-name

# Drizzle
# Get the Database URL from the "prisma" dropdown selector in PlanetScale
# Change the query params at the end of the URL to "?ssl={"rejectUnauthorized":true}"
Expand Down
2 changes: 1 addition & 1 deletion apps/course-builder-web/drizzle.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { env } from '@/env.mjs'
import { type Config } from 'drizzle-kit'

export default {
schema: './src/db/schema.ts',
schema: ['./src/db/schema.ts'],
driver: 'mysql2',
dbCredentials: {
uri: env.DATABASE_URL,
Expand Down
8 changes: 5 additions & 3 deletions apps/course-builder-web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@
"@codemirror/search": "^6.5.5",
"@codemirror/state": "^6.3.3",
"@codemirror/view": "^6.22.3",
"@coursebuilder/adapter-drizzle": "0.0.1",
"@coursebuilder/core": "0.0.1",
"@coursebuilder/ui": "^1.0.3",
"@fontsource/inter": "^5.0.16",
"@heroicons/react": "^2.0.18",
Expand Down Expand Up @@ -87,7 +89,7 @@
"@types/lodash": "^4.14.200",
"@types/mdx": "^2.0.10",
"@types/shortid": "^0.0.31",
"@types/uuid": "^9.0.6",
"@types/uuid": "9.0.8",
"@uiw/codemirror-themes": "^4.21.24",
"@uploadthing/react": "5.7.1-canary.65ab2fd",
"@upstash/ratelimit": "^1.0.1",
Expand All @@ -102,7 +104,7 @@
"codemirror": "^6.0.1",
"crypto": "^1.0.1",
"date-fns": "^2.30.0",
"drizzle-orm": "^0.29.3",
"drizzle-orm": "0.30.2",
"framer-motion": "^10.16.5",
"groq": "^3.18.1",
"i": "^0.3.7",
Expand All @@ -115,7 +117,7 @@
"memoize-one": "^6.0.0",
"nanoid": "^5.0.2",
"next": "14.2.0-canary.11",
"next-auth": "^4.24.6",
"next-auth": "5.0.0-beta.15",
"next-axiom": "^1.1.1",
"next-mdx-remote": "^4.4.1",
"next-themes": "^0.2.1",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,2 @@
import { authOptions } from '@/server/auth'
import { withSkill } from '@/server/with-skill'
import NextAuth from 'next-auth'

const handler = withSkill(NextAuth(authOptions))
export { handler as GET, handler as POST }
export { GET, POST } from '@/server/auth'
export const runtime = 'edge' // optional
6 changes: 6 additions & 0 deletions apps/course-builder-web/src/app/api/deepgram/webhook/route.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { type NextResponse } from 'next/server'
import { courseBuilderConfig } from '@/coursebuilder/course-builder-config'
import { inngest } from '@/inngest/inngest.server'
import { VIDEO_TRANSCRIPT_READY_EVENT } from '@/inngest/video-processing/events/video-transcript-ready'
import { withSkill, type SkillRequest } from '@/server/with-skill'
Expand All @@ -17,12 +18,17 @@ export const POST = withSkill(async (req: SkillRequest, res: NextResponse) => {

req.log.info(`Received transcript from deepgram for videoResource [${videoResourceId}]: ${results.id}`)

const { srt, wordLevelSrt, transcript } = courseBuilderConfig.transcriptProvider.handleCallback(results)

await inngest.send({
name: VIDEO_TRANSCRIPT_READY_EVENT,
data: {
videoResourceId,
moduleSlug,
results,
srt,
wordLevelSrt,
transcript,
},
})

Expand Down
4 changes: 3 additions & 1 deletion apps/course-builder-web/src/app/login/page.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import { Login } from '@/components/login'
import { authOptions } from '@/server/auth'
import { Provider } from '@auth/core/providers'

export default function LoginPage() {
const providers = authOptions.providers
return (
<Login
providers={providers.map((provider) => {
providers={providers.map((provider: Provider) => {
return {
// @ts-ignore
id: provider.id,
name: provider.name,
}
Expand Down
23 changes: 23 additions & 0 deletions apps/course-builder-web/src/coursebuilder/course-builder-config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { db } from '@/db'
import { mysqlTable } from '@/db/schema'
import { env } from '@/env.mjs'

import { DrizzleAdapter } from '@coursebuilder/adapter-drizzle'
import { type CourseBuilderAdapter } from '@coursebuilder/core/adapters'
import { type TranscriptionConfig } from '@coursebuilder/core/providers'
import DeepgramProvider from '@coursebuilder/core/providers/deepgram'

const callbackBase = env.NODE_ENV === 'production' ? env.UPLOADTHING_URL : env.NEXT_PUBLIC_URL

interface CourseBuilderConfig {
adapter: CourseBuilderAdapter
transcriptProvider: TranscriptionConfig
}

export const courseBuilderConfig: CourseBuilderConfig = {
adapter: DrizzleAdapter(db, mysqlTable),
transcriptProvider: DeepgramProvider({
apiKey: env.DEEPGRAM_API_KEY,
callbackUrl: `${callbackBase}/api/deepgram/webhook`,
}),
}
173 changes: 0 additions & 173 deletions apps/course-builder-web/src/db/auth-drizzle-adapter.ts

This file was deleted.

0 comments on commit 2def195

Please sign in to comment.