gatsby-pingbot/api/index.ts

112 lines
2.2 KiB
TypeScript
Raw Normal View History

2021-09-15 19:39:07 +00:00
import { VercelRequest, VercelResponse } from '@vercel/node'
import axios from 'axios'
import dbConnect from '../lib/dbConnect'
import URLModel from '../lib/schema'
export default async (request: VercelRequest, response: VercelResponse) => {
const { method } = request
const db = await dbConnect()
switch (method) {
case 'POST':
if (!request.body || !request.body.url) {
return response.status(400).json(
{
success: false,
message: 'Invalid body'
}
)
}
try {
await axios.get(request.body.url)
} catch (err) {
return response.status(400).json(
{
success: false,
message: 'Invalid URL'
}
)
}
try {
const url = new URLModel({
url: request.body.url
})
await url.save()
return response.status(200).json(
{
success: true,
url: request.body.url
}
)
} catch (err) {
console.log(err)
return response.status(400).json(
{
success: false,
message: 'Error Inserting to DB'
}
)
}
break
case 'DELETE':
if (!request.query.url) {
return response.status(400).json(
{
success: false,
message: 'Invalid body'
}
)
}
try {
const url = request.query.url
if (typeof url != "string") {
return response.status(400).json(
{
success: false,
message: 'Query URL isn\'t string'
}
)
}
await URLModel.deleteOne({
url
})
return response.status(200).json(
{
success: true,
message: 'Deleted!',
url
}
)
} catch (err) {
console.log(err)
return response.status(400).json(
{
success: false,
message: 'Error Deleting from DB'
}
)
}
break
default:
const urls = await URLModel.find()
response.status(200).json(
{
db: urls
}
)
break
}
}