This commit is contained in:
Medzik 2021-09-17 19:38:34 +00:00
parent 8c6b02b340
commit 4197fb3cf0
7 changed files with 57 additions and 65 deletions

View File

@ -1,5 +1,6 @@
import { VercelRequest, VercelResponse } from '@vercel/node' import { VercelRequest, VercelResponse } from '@vercel/node'
import axios from 'axios' import axios from 'axios'
import dbConnect from '../lib/dbConnect' import dbConnect from '../lib/dbConnect'
import URLModel from '../lib/schema' import URLModel from '../lib/schema'
@ -10,24 +11,20 @@ export default async (request: VercelRequest, response: VercelResponse) => {
switch (method) { switch (method) {
case 'POST': case 'POST':
if (!request.body || !request.body.url) { if (!request.body || !request.body.url) {
return response.status(400).json( return response.status(400).json({
{
success: false, success: false,
message: 'Invalid body' message: 'Invalid body'
} })
)
} }
try { try {
await axios.get(request.body.url) await axios.get(request.body.url)
} catch (err) { } catch (err) {
console.error(err) console.error(err)
return response.status(400).json( return response.status(400).json({
{
success: false, success: false,
message: 'Invalid URL' message: 'Invalid URL'
} })
)
} }
try { try {
@ -37,62 +34,59 @@ export default async (request: VercelRequest, response: VercelResponse) => {
await url.save() await url.save()
return response.status(200).json( return response.status(200).json({
{
success: true, success: true,
url: request.body.url url,
} message: `Added ${url.url}`
) })
} catch (err) { } catch (err) {
console.error(err) console.error(err)
return response.status(400).json( return response.status(400).json({
{
success: false, success: false,
message: 'Error Inserting to DB' message: 'Already exist?'
} })
)
} }
case 'DELETE': case 'DELETE':
if (!request.query.url) { if (!request.query.url) {
return response.status(400).json( return response.status(400).json({
{
success: false, success: false,
message: 'Invalid body' message: 'Invalid body'
} })
)
} }
try { try {
const url = request.query.url const url = request.query.url
if (typeof url != 'string') { if (typeof url != 'string') {
return response.status(400).json( return response.status(400).json({
{
success: false, success: false,
message: 'Query URL isn\'t string' message: 'Query URL isn\'t string'
} })
)
} }
await URLModel.deleteOne({ const del = await URLModel.findOneAndDelete({
url url
}) })
return response.status(200).json( if (del != null) {
{ return response.status(200).json({
success: true, success: true,
message: 'Deleted!', message: `Deleted ${url}`,
url url
})
} else {
return response.status(400).json({
success: false,
message: 'URL not exist?',
url
})
} }
)
} catch (err) { } catch (err) {
console.error(err) console.error(err)
return response.status(400).json( return response.status(400).json({
{
success: false, success: false,
message: 'Error Deleting from DB' message: 'Error Deleting from DB'
} })
)
} }
default: default:
response.status(200).json({ response.status(200).json({

View File

@ -1,7 +1,5 @@
import { model, models, Schema } from 'mongoose' import { model, models, Schema } from 'mongoose'
const { MONGODB_COLLECTION } = process.env
interface URL { interface URL {
url: string url: string
} }
@ -14,12 +12,16 @@ const schema = new Schema<URL>({
} }
}) })
schema.path(MONGODB_COLLECTION).validate(async function(value) { schema.path('url').validate(async function(value) {
const count = await models.URL.countDocuments({ url: value }) if (models.url) {
return true
}
const count = await models.url.countDocuments({ url: value })
return !count return !count
}, 'URL already exists') }, 'URL already exists')
const URLModel = model<URL>(MONGODB_COLLECTION, schema) const URLModel = model<URL>('url', schema)
export = URLModel export = URLModel

View File

@ -3,7 +3,7 @@ $fonts: "-apple-system, Roboto, sans-serif, serif"
body body
color: #fff color: #fff
background-color: #111 background-color: #111
background: url("../images/blob.svg") no-repeat center center fixed background: url("../images/background.svg") no-repeat center center fixed
background-size: cover background-size: cover
margin: 0 margin: 0

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -39,21 +39,17 @@ const AddURLPage = () => {
success: { success: {
delay: 500, delay: 500,
render({ data: { data } }) { render({ data: { data } }) {
return `Added ${data.url}!` return data.message
} }
}, },
error: { error: {
delay: 500, delay: 500,
render(err) { render(err) {
let e = ''
if (err.data.response && err.data.response.data.message) { if (err.data.response && err.data.response.data.message) {
e = err.data.response.data.message return err.data.response.data.message
} else { } else {
e = err.data.toString() return err.data.toString()
} }
return `${e}`
} }
} }
} }

View File

@ -36,7 +36,7 @@ const DeleteURLPage = () => {
success: { success: {
delay: 500, delay: 500,
render({ data: { data } }) { render({ data: { data } }) {
return `If URL: ${data.url} existed, it has been deleted!` return data.message
} }
}, },
error: { error: {

View File

@ -3,7 +3,7 @@ import AniLink from 'gatsby-plugin-transition-link/AniLink'
import Seo from '../components/seo' import Seo from '../components/seo'
const LoginPage = () => { const HomePage = () => {
return ( return (
<> <>
<Seo <Seo
@ -25,4 +25,4 @@ const LoginPage = () => {
) )
} }
export default LoginPage export default HomePage