Skip to content

Commit

Permalink
feat: add algolia webook api route
Browse files Browse the repository at this point in the history
  • Loading branch information
Pierniki committed Sep 4, 2023
1 parent 905e42e commit b6d65e0
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 0 deletions.
31 changes: 31 additions & 0 deletions app/api/algolia-webhook/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import algolia from "algoliasearch"
import { env } from "env.mjs"
import { NextRequest, NextResponse } from "next/server"
import { z } from "zod"

const client = algolia(env.ALGOLIA_API_ID, env.ALGOLIA_API_KEY)
const index = client.initIndex("articles")

export async function POST(req: NextRequest, res: NextResponse) {
const authHeader = req.headers.get("authorization")
if (!authHeader || authHeader !== env.HYGRAPH_WEBOOK_SECRET)
return NextResponse.json({ message: "Unauthorized" }, { status: 401 })
try {
const publishedData = await req.json()

const parseResult = bodySchema.safeParse(publishedData)
if (!parseResult.success) return NextResponse.json({ message: "Bad Request" }, { status: 400 })

const { id: objectID, ...data } = parseResult.data.data.PUBLISHED

await index.saveObject({ objectID, ...data })

return NextResponse.json({ message: "ok" }, { status: 201 })
} catch (err) {
return NextResponse.json({ message: "Unexpected Error" }, { status: 500 })
}
}

const bodySchema = z.object({
data: z.object({ PUBLISHED: z.record(z.string(), z.any()).and(z.object({ id: z.string() })) }),
})
6 changes: 6 additions & 0 deletions env.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,16 @@ export const env = createEnv({
.optional()
.transform((value) => value === "true"),
HYGRAPH_CONTENT_API_URL: z.string(),
HYGRAPH_WEBOOK_SECRET: z.string(),
ALGOLIA_API_ID: z.string(),
ALGOLIA_API_KEY: z.string(),
},
client: {},
runtimeEnv: {
ANALYZE: process.env.ANALYZE,
HYGRAPH_CONTENT_API_URL: process.env.HYGRAPH_CONTENT_API_URL,
HYGRAPH_WEBOOK_SECRET: process.env.HYGRAPH_WEBOOK_SECRET,
ALGOLIA_API_ID: process.env.ALGOLIA_API_ID,
ALGOLIA_API_KEY: process.env.ALGOLIA_API_KEY,
},
})

0 comments on commit b6d65e0

Please sign in to comment.