This commit is contained in:
Medzik 2021-09-18 17:01:48 +00:00
parent a3befce3b2
commit 1e34b047cd
5 changed files with 160 additions and 67 deletions

View File

@ -1,12 +1,12 @@
import { VercelRequest, VercelResponse } from '@vercel/node'
import axios from 'axios'
import addURL from '../lib/api/add'
import deleteURL from '../lib/api/delete'
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':
@ -17,34 +17,7 @@ export default async (request: VercelRequest, response: VercelResponse) => {
})
}
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,
message: `Added ${url.url}`
})
} catch (err) {
console.error(err)
return response.status(400).json({
success: false,
message: 'Already exist?'
})
}
return addURL(request.body.url, response)
case 'DELETE':
if (!request.query.url) {
return response.status(400).json({
@ -53,41 +26,17 @@ export default async (request: VercelRequest, response: VercelResponse) => {
})
}
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)
if (typeof request.query.url != 'string') {
return response.status(400).json({
success: false,
message: 'Error Deleting from DB'
message: 'Query URL isn\'t string'
})
}
return deleteURL(request.query.url, response)
default:
await dbConnect()
response.status(200).json({
db: await URLModel.find()
})

36
lib/api/add.ts Normal file
View File

@ -0,0 +1,36 @@
import { VercelResponse } from '@vercel/node'
import axios from 'axios'
import dbConnect from '../dbConnect'
import URLModel from '../schema'
export default async function addURL(url: string, response: VercelResponse) {
// fetch url (e.g. check domain exist)
try {
await axios.get(url)
} catch (err) {
return response.status(400).json({
success: false,
message: 'Invalid URL'
})
}
await dbConnect()
try {
const dbURL = new URLModel({ url })
await dbURL.save()
return response.status(200).json({
success: true,
message: `Added ${url}`
})
} catch (err) {
console.error(err)
return response.status(400).json({
success: false,
message: 'Already exist?'
})
}
}

31
lib/api/delete.ts Normal file
View File

@ -0,0 +1,31 @@
import { VercelResponse } from '@vercel/node'
import dbConnect from '../dbConnect'
import URLModel from '../schema'
export default async function deleteURL(url: string, response: VercelResponse) {
await dbConnect()
try {
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'
})
}
}

View File

@ -1,16 +1,16 @@
{
"name": "pingbot",
"name": "gatsby-pingbot",
"version": "0.0.0",
"private": true,
"description": "Keep your apps alive on replit.com or glitch.com",
"author": "Medzik",
"author": "MedzikUser <nivua1fn@duck.com>",
"keywords": [
"gatsby",
"pingbot"
],
"scripts": {
"dev": "gatsby develop",
"start": "gatsby develop",
"dev": "vc dev",
"dev:web": "gatsby develop",
"build": "gatsby build",
"serve": "gatsby serve",
"clean": "gatsby clean",
@ -38,6 +38,7 @@
"@typescript-eslint/parser": "4.31.1",
"@vercel/node": "1.12.1",
"eslint": "7.32.0",
"eslint-plugin-react": "7.25.2"
"eslint-plugin-react": "7.25.2",
"vercel": "^23.1.2"
}
}

View File

@ -2262,6 +2262,16 @@
"@typescript-eslint/types" "4.31.1"
eslint-visitor-keys "^2.0.0"
"@vercel/build-utils@2.12.2":
version "2.12.2"
resolved "https://registry.yarnpkg.com/@vercel/build-utils/-/build-utils-2.12.2.tgz#285a3bb0b78864fb6f44478257bd275c57aa8651"
integrity sha512-KbSgG2ZCVXhUsdbnpv6gC7buygd31jaKiKhrd4Lzv1NwjnoeDZAXlm4hzvSPYHVtCY2jirKJWP2rFtMW8iAh9g==
"@vercel/go@1.2.3":
version "1.2.3"
resolved "https://registry.yarnpkg.com/@vercel/go/-/go-1.2.3.tgz#6f2bdba5681f9d64ee17060c5d63589e2d45e2d8"
integrity sha512-BZCHRz43Qfr0DwZlZQCcofR+3cr+H+HK72/ZPkZy1Uq0NYjJMlmZ3ahuMgvJxT9lfC1RA6eOEUlUsZ+gqKcMCg==
"@vercel/node@1.12.1":
version "1.12.1"
resolved "https://registry.yarnpkg.com/@vercel/node/-/node-1.12.1.tgz#15f42f64690f904f8a52a387123ce0958657060f"
@ -2271,6 +2281,16 @@
ts-node "8.9.1"
typescript "4.3.4"
"@vercel/python@2.0.5":
version "2.0.5"
resolved "https://registry.yarnpkg.com/@vercel/python/-/python-2.0.5.tgz#76c09280febfac863c39651edffafbb0838a1df8"
integrity sha512-WCSTTw6He2COaSBiGDk2q5Q1ue+z5usRZcvUHCpsK6KvNkkV/PrY8JT73XQysMWKiXh6yQy19IUFAOqK/xwhig==
"@vercel/ruby@1.2.7":
version "1.2.7"
resolved "https://registry.yarnpkg.com/@vercel/ruby/-/ruby-1.2.7.tgz#516d1c45f4961619338f3d3bb518ee43b863a5da"
integrity sha512-ZG2VxMHHSKocL57UWsfNc9UsblwYGm55/ujqGIBnkNUURnRgtUrwtWlEts1eJ4VHD754Lc/0/R1pfJXoN5SbRw==
"@vercel/webpack-asset-relocator-loader@^1.6.0":
version "1.7.0"
resolved "https://registry.yarnpkg.com/@vercel/webpack-asset-relocator-loader/-/webpack-asset-relocator-loader-1.7.0.tgz#d3b707e0aba3111719f941dacb2408eff3c27319"
@ -5680,6 +5700,13 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.6, glob@^7.1.7:
once "^1.3.0"
path-is-absolute "^1.0.0"
global-dirs@^2.0.1:
version "2.1.0"
resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d"
integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==
dependencies:
ini "1.3.7"
global-dirs@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686"
@ -6166,6 +6193,11 @@ inherits@2.0.3:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
ini@1.3.7:
version "1.3.7"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84"
integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==
ini@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5"
@ -6443,6 +6475,14 @@ is-hexadecimal@^1.0.0:
resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7"
integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==
is-installed-globally@^0.3.1:
version "0.3.2"
resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141"
integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==
dependencies:
global-dirs "^2.0.1"
is-path-inside "^3.0.1"
is-installed-globally@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520"
@ -6463,6 +6503,11 @@ is-negative-zero@^2.0.1:
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"
integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==
is-npm@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d"
integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==
is-npm@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8"
@ -6892,7 +6937,7 @@ language-tags@^1.0.5:
dependencies:
language-subtag-registry "~0.3.2"
latest-version@5.1.0, latest-version@^5.1.0:
latest-version@5.1.0, latest-version@^5.0.0, latest-version@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face"
integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==
@ -8660,7 +8705,7 @@ punycode@^2.1.0, punycode@^2.1.1:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
pupa@^2.1.1:
pupa@^2.0.1, pupa@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62"
integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==
@ -10616,6 +10661,25 @@ unset-value@^1.0.0:
has-value "^0.3.1"
isobject "^3.0.0"
update-notifier@4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.0.tgz#4866b98c3bc5b5473c020b1250583628f9a328f3"
integrity sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew==
dependencies:
boxen "^4.2.0"
chalk "^3.0.0"
configstore "^5.0.1"
has-yarn "^2.1.0"
import-lazy "^2.1.0"
is-ci "^2.0.0"
is-installed-globally "^0.3.1"
is-npm "^4.0.0"
is-yarn-global "^0.3.0"
latest-version "^5.0.0"
pupa "^2.0.1"
semver-diff "^3.1.1"
xdg-basedir "^4.0.0"
update-notifier@^5.0.1:
version "5.1.0"
resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9"
@ -10727,6 +10791,18 @@ vendors@^1.0.3:
resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e"
integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==
vercel@^23.1.2:
version "23.1.2"
resolved "https://registry.yarnpkg.com/vercel/-/vercel-23.1.2.tgz#7f36772970c7c56f10de89983f03b3c0c72d294e"
integrity sha512-uS1k7wuXI6hbxiW+kn9vdAWL0bBi4jjVxc7Jwp8NhJjcRuzlydtt3gUEnhnC9AOIKQ4LxoAgmg50lSyYkrC8Hg==
dependencies:
"@vercel/build-utils" "2.12.2"
"@vercel/go" "1.2.3"
"@vercel/node" "1.12.1"
"@vercel/python" "2.0.5"
"@vercel/ruby" "1.2.7"
update-notifier "4.1.0"
vfile-location@^2.0.0:
version "2.0.6"
resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e"