mirror of
https://github.com/ArthurDanjou/nuxt-starter.git
synced 2026-01-14 12:14:38 +01:00
Init nuxt-starter
This commit is contained in:
3
server/api/test.ts
Normal file
3
server/api/test.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export default defineEventHandler(() => {
|
||||
return { hello: 'API' }
|
||||
})
|
||||
5
server/database/migrations/0000_hot_thunderball.sql
Normal file
5
server/database/migrations/0000_hot_thunderball.sql
Normal file
@@ -0,0 +1,5 @@
|
||||
CREATE TABLE `users` (
|
||||
`id` integer PRIMARY KEY NOT NULL,
|
||||
`name` text DEFAULT '',
|
||||
`created_at` text DEFAULT (CURRENT_DATE)
|
||||
);
|
||||
49
server/database/migrations/meta/0000_snapshot.json
Normal file
49
server/database/migrations/meta/0000_snapshot.json
Normal file
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"version": "6",
|
||||
"dialect": "sqlite",
|
||||
"id": "ef8e28cd-73a1-4801-9a0b-7e80169a57c0",
|
||||
"prevId": "00000000-0000-0000-0000-000000000000",
|
||||
"tables": {
|
||||
"users": {
|
||||
"name": "users",
|
||||
"columns": {
|
||||
"id": {
|
||||
"name": "id",
|
||||
"type": "integer",
|
||||
"primaryKey": true,
|
||||
"notNull": true,
|
||||
"autoincrement": false
|
||||
},
|
||||
"name": {
|
||||
"name": "name",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false,
|
||||
"autoincrement": false,
|
||||
"default": "''"
|
||||
},
|
||||
"created_at": {
|
||||
"name": "created_at",
|
||||
"type": "text",
|
||||
"primaryKey": false,
|
||||
"notNull": false,
|
||||
"autoincrement": false,
|
||||
"default": "(CURRENT_DATE)"
|
||||
}
|
||||
},
|
||||
"indexes": {},
|
||||
"foreignKeys": {},
|
||||
"compositePrimaryKeys": {},
|
||||
"uniqueConstraints": {}
|
||||
}
|
||||
},
|
||||
"enums": {},
|
||||
"_meta": {
|
||||
"schemas": {},
|
||||
"tables": {},
|
||||
"columns": {}
|
||||
},
|
||||
"internal": {
|
||||
"indexes": {}
|
||||
}
|
||||
}
|
||||
13
server/database/migrations/meta/_journal.json
Normal file
13
server/database/migrations/meta/_journal.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"version": "7",
|
||||
"dialect": "sqlite",
|
||||
"entries": [
|
||||
{
|
||||
"idx": 0,
|
||||
"version": "6",
|
||||
"when": 1721758030188,
|
||||
"tag": "0000_hot_thunderball",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
}
|
||||
8
server/database/schema.ts
Normal file
8
server/database/schema.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
import { integer, sqliteTable, text } from 'drizzle-orm/sqlite-core'
|
||||
import { sql } from 'drizzle-orm'
|
||||
|
||||
export const users = sqliteTable('users', {
|
||||
id: integer('id').primaryKey(),
|
||||
name: text('name').default(''),
|
||||
createdAt: text('created_at').default(sql`(CURRENT_DATE)`)
|
||||
})
|
||||
16
server/plugins/migrations.ts
Normal file
16
server/plugins/migrations.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import { consola } from 'consola'
|
||||
import { migrate } from 'drizzle-orm/d1/migrator'
|
||||
|
||||
export default defineNitroPlugin(async () => {
|
||||
if (!import.meta.dev) return
|
||||
|
||||
onHubReady(async () => {
|
||||
await migrate(useDB(), { migrationsFolder: 'server/database/migrations' })
|
||||
.then(() => {
|
||||
consola.success('Database migrations done')
|
||||
})
|
||||
.catch((err) => {
|
||||
consola.error('Database migrations failed', err)
|
||||
})
|
||||
})
|
||||
})
|
||||
19
server/routes/auth/github.get.ts
Normal file
19
server/routes/auth/github.get.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
export default oauth.githubEventHandler({
|
||||
config: {
|
||||
emailRequired: true
|
||||
},
|
||||
async onSuccess(event, { user }) {
|
||||
await setUserSession(event, {
|
||||
user: {
|
||||
name: user.name,
|
||||
imageUrl: user.avatar_url,
|
||||
email: user.email
|
||||
}
|
||||
})
|
||||
return sendRedirect(event, '/')
|
||||
},
|
||||
onError(event, error) {
|
||||
console.error('GitHub OAuth error:', error)
|
||||
return sendRedirect(event, '/')
|
||||
}
|
||||
})
|
||||
23
server/routes/auth/google.get.ts
Normal file
23
server/routes/auth/google.get.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
export default oauth.googleEventHandler({
|
||||
config: {
|
||||
authorizationParams: {
|
||||
access_type: 'offline'
|
||||
}
|
||||
},
|
||||
async onSuccess(event, { user }) {
|
||||
await setUserSession(event, {
|
||||
user: {
|
||||
name: user.name,
|
||||
imageUrl: user.picture,
|
||||
email: user.email
|
||||
}
|
||||
})
|
||||
|
||||
return sendRedirect(event, '/')
|
||||
},
|
||||
// Optional, will return a json error and 401 status code by default
|
||||
onError(event, error) {
|
||||
console.error('Google OAuth error:', error)
|
||||
return sendRedirect(event, '/')
|
||||
}
|
||||
})
|
||||
10
server/utils/db.ts
Normal file
10
server/utils/db.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { drizzle } from 'drizzle-orm/d1'
|
||||
import * as schema from '../database/schema'
|
||||
|
||||
export { sql, eq, and, or, asc, desc, sum } from 'drizzle-orm'
|
||||
|
||||
export const tables = schema
|
||||
|
||||
export function useDB() {
|
||||
return drizzle(hubDatabase(), { schema })
|
||||
}
|
||||
Reference in New Issue
Block a user