diff --git a/src/server/api/suggestion.post.ts b/src/server/api/suggestion.post.ts
index 6957b35..60a4d4a 100644
--- a/src/server/api/suggestion.post.ts
+++ b/src/server/api/suggestion.post.ts
@@ -1,11 +1,22 @@
import { z } from 'zod'
const SuggestionValidator = z.object({
- author: z.string().trim(),
content: z.string(),
}).parse
export default defineEventHandler(async (event) => {
- const { author, content } = await getValidatedQuery(event, SuggestionValidator)
+ const { content } = await readValidatedBody(event, SuggestionValidator)
const { user } = await requireUserSession(event)
+ return await usePrisma().suggestion.upsert({
+ where: {
+ author: user.email,
+ },
+ update: {
+ content,
+ },
+ create: {
+ author: user.email,
+ content,
+ },
+ })
})
diff --git a/src/server/api/talents.get.ts b/src/server/api/talents.get.ts
index b43eb36..51c0f10 100644
--- a/src/server/api/talents.get.ts
+++ b/src/server/api/talents.get.ts
@@ -28,7 +28,7 @@ export default defineEventHandler(async (event) => {
return await prisma.talent.findMany({
where: whereClause,
orderBy: {
- createdAt: 'desc',
+ name: 'asc',
},
include: {
categories: {
diff --git a/src/server/routes/auth/github.get.ts b/src/server/routes/auth/github.get.ts
new file mode 100644
index 0000000..cb56d33
--- /dev/null
+++ b/src/server/routes/auth/github.get.ts
@@ -0,0 +1,18 @@
+export default oauth.githubEventHandler({
+ config: {
+ emailRequired: true,
+ },
+ async onSuccess(event: any, { user }: any) {
+ await setUserSession(event, {
+ user: {
+ email: user.email,
+ picture: user.avatar_url,
+ username: String(user.name).trim(),
+ },
+ })
+ return sendRedirect(event, '/')
+ },
+ onError(error: any) {
+ console.error('GitHub OAuth error:', error)
+ },
+})
diff --git a/src/server/routes/auth/google.get.ts b/src/server/routes/auth/google.get.ts
new file mode 100644
index 0000000..bf87009
--- /dev/null
+++ b/src/server/routes/auth/google.get.ts
@@ -0,0 +1,12 @@
+export default oauth.githubEventHandler({
+ async onSuccess(event: any, { user }: any) {
+ await setUserSession(event, {
+ user: {
+ email: user.email,
+ picture: user.photoUrl,
+ username: String(user.displayName).trim(),
+ },
+ })
+ return sendRedirect(event, '/')
+ },
+})
diff --git a/types.ts b/types.ts
index b84199b..b88b58c 100644
--- a/types.ts
+++ b/types.ts
@@ -1,3 +1,4 @@
+import exp from 'node:constants'
import type { MarkdownParsedContent, ParsedContent } from '@nuxt/content/dist/runtime/types'
export enum ColorsTheme {
@@ -69,3 +70,27 @@ export interface Skill extends ParsedContent {
}
color: string
}
+
+export const providers = [
+ {
+ slug: 'github',
+ label: 'Use Github',
+ icon: 'i-ph-github-logo-bold',
+ link: '/auth/github',
+ color: 'black',
+ },
+ /* {
+ slug: 'twitter',
+ label: 'Use Twitter',
+ icon: 'i-ph-twitter-logo-bold',
+ link: '/auth/twitter',
+ color: 'cyan',
+ }, */
+ {
+ slug: 'google',
+ label: 'Use Google',
+ icon: 'i-ph-google-logo-bold',
+ link: '/auth/google',
+ color: 'red',
+ },
+]