gatsby-pingbot/api/index.ts

98 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'
2021-09-17 19:38:34 +00:00
2021-09-15 19:39:07 +00:00
import dbConnect from '../lib/dbConnect'
import URLModel from '../lib/schema'
export default async (request: VercelRequest, response: VercelResponse) => {
const { method } = request
2021-09-16 20:47:50 +00:00
await dbConnect()
2021-09-15 19:39:07 +00:00
switch (method) {
case 'POST':
if (!request.body || !request.body.url) {
2021-09-17 19:38:34 +00:00
return response.status(400).json({
success: false,
message: 'Invalid body'
})
2021-09-15 19:39:07 +00:00
}
try {
await axios.get(request.body.url)
} catch (err) {
2021-09-16 20:47:50 +00:00
console.error(err)
2021-09-17 19:38:34 +00:00
return response.status(400).json({
success: false,
message: 'Invalid URL'
})
2021-09-15 19:39:07 +00:00
}
try {
const url = new URLModel({
url: request.body.url
})
await url.save()
2021-09-17 19:38:34 +00:00
return response.status(200).json({
success: true,
message: `Added ${url.url}`
})
2021-09-15 19:39:07 +00:00
} catch (err) {
2021-09-16 20:47:50 +00:00
console.error(err)
2021-09-17 19:38:34 +00:00
return response.status(400).json({
success: false,
message: 'Already exist?'
})
2021-09-15 19:39:07 +00:00
}
case 'DELETE':
if (!request.query.url) {
2021-09-17 19:38:34 +00:00
return response.status(400).json({
success: false,
message: 'Invalid body'
})
2021-09-15 19:39:07 +00:00
}
try {
const url = request.query.url
2021-09-16 20:47:50 +00:00
if (typeof url != 'string') {
2021-09-17 19:38:34 +00:00
return response.status(400).json({
success: false,
message: 'Query URL isn\'t string'
})
2021-09-15 19:39:07 +00:00
}
2021-09-17 19:38:34 +00:00
const del = await URLModel.findOneAndDelete({
2021-09-15 19:39:07 +00:00
url
})
2021-09-17 19:38:34 +00:00
if (del != null) {
return response.status(200).json({
2021-09-15 19:39:07 +00:00
success: true,
2021-09-17 19:38:34 +00:00
message: `Deleted ${url}`,
url
})
} else {
return response.status(400).json({
success: false,
message: 'URL not exist?',
2021-09-15 19:39:07 +00:00
url
2021-09-17 19:38:34 +00:00
})
}
2021-09-15 19:39:07 +00:00
} catch (err) {
2021-09-16 20:47:50 +00:00
console.error(err)
2021-09-17 19:38:34 +00:00
return response.status(400).json({
success: false,
message: 'Error Deleting from DB'
})
2021-09-15 19:39:07 +00:00
}
default:
2021-09-16 20:47:50 +00:00
response.status(200).json({
2021-09-17 19:38:34 +00:00
db: await URLModel.find()
2021-09-16 20:47:50 +00:00
})
2021-09-15 19:39:07 +00:00
break
}
}