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 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) { console.error(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, message: `Added ${url.url}` }) } catch (err) { console.error(err) return response.status(400).json({ success: false, message: 'Already exist?' }) } 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' }) } const del = await URLModel.findOneAndDelete({ url }) if (del != null) { return response.status(200).json({ success: true, message: `Deleted ${url}`, url }) } else { return response.status(400).json({ success: false, message: 'URL not exist?', url }) } } catch (err) { console.error(err) return response.status(400).json({ success: false, message: 'Error Deleting from DB' }) } default: response.status(200).json({ db: await URLModel.find() }) break } }