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 } }