This commit is contained in:
2021-10-15 02:00:40 +03:00
parent 74316481f1
commit ade92e0493
15 changed files with 884 additions and 0 deletions

17
routes/methods/delete.js Normal file
View File

@@ -0,0 +1,17 @@
import { setResp500 } from '../../helpers/http.js'
import NotesService from '../../services/NotesService.js'
/**
*
* @type {NotesService}
*/
const db = new NotesService()
export const deleteNote = async (req, res) => {
try{
const data = await db.deleteNote(req.validatedData)
res.status(data.code || 200).json(data)
}catch (e) {
res.status(500).json(setResp500())
}
}

65
routes/methods/get.js Normal file
View File

@@ -0,0 +1,65 @@
import { setResp403, setResp500 } from '../../helpers/http.js'
import NotesService from '../../services/NotesService.js'
/**
*
* @type {NotesService}
*/
const db = new NotesService()
/**
*
* @param req
* @param res
* @returns {Promise<void>}
*/
export const setForbidden = async (req, res) => {
const ip = req.headers['x-real-ip'] || req.connection.remoteAddress
res.status(403).json(setResp403(`You are not allowed to access the resource. Your IP is ${ip}`))
}
/**
*
* @param req
* @param res
* @returns {Promise<void>}
*/
export const getAllNotes = async (req, res) => {
try{
const data = await db.getNotes
res.status(data.code || 200).json(data)
}catch (e) {
res.status(500).json(setResp500())
}
}
/**
*
* @param req
* @param res
* @returns {Promise<void>}
*/
export const getSingleNote = async (req, res) => {
try{
const data = await db.getSingle(req.validatedData)
res.status(data.code || 200).json(data)
}catch (e) {
res.status(500).json(setResp500())
}
}
/**
*
* @param req
* @param res
* @returns {Promise<void>}
*/
export const getStats = (req, res) => {
try{
const data = db.getStats
res.status(data.code || 200).json( data )
}catch (e) {
res.status(500).json(setResp500())
}
}

18
routes/methods/patch.js Normal file
View File

@@ -0,0 +1,18 @@
import { setResp500 } from '../../helpers/http.js'
import NotesService from '../../services/NotesService.js'
/**
*
* @type {NotesService}
*/
const db = new NotesService()
export const editNote = async (req, res) => {
try{
const data = await db.updateNote(req.validatedData)
res.status(data.code || 200).json(data)
}catch (e) {
res.status(500).json(setResp500())
}
}

18
routes/methods/post.js Normal file
View File

@@ -0,0 +1,18 @@
import { setResp500 } from '../../helpers/http.js'
import NotesService from '../../services/NotesService.js'
/**
*
* @type {NotesService}
*/
const db = new NotesService()
export const addNote = async (req, res) => {
try{
const data = await db.insertNote(req.validatedData)
res.status(data.code || 200).json(data)
}catch (e) {
res.status(500).json(setResp500())
}
}

20
routes/router.js Normal file
View File

@@ -0,0 +1,20 @@
import { Router } from 'express'
import { addNote } from './methods/post.js'
import { getAllNotes, getSingleNote, getStats, setForbidden } from './methods/get.js'
import { editNote } from './methods/patch.js'
import { deleteNote } from './methods/delete.js'
import { id as validate } from '../services/ValidationService.js'
import { idOnlySchema, newNoteSchema, updateNoteSchema } from '../repositories/schema.js'
const router = new Router()
router.get('/notes(\/|)$/', getAllNotes)
router.get('/notes\/stats(\/|)$/', getStats)
router.get('/notes/:id([0-9]{1,4})$/', validate( idOnlySchema ), getSingleNote) // e.g. also notes with `0x1a` => id = 26 will be affected
router.get('*', setForbidden)
router.post('/notes(\/|)$/', validate( newNoteSchema ), addNote)
router.patch('/notes/:id([0-9]{1,4})$/', validate( updateNoteSchema ), editNote)
router.delete('/notes/:id([0-9]{1,4})$/', validate( idOnlySchema ), deleteNote)
export default router