32 lines
1.2 KiB
JavaScript
32 lines
1.2 KiB
JavaScript
import { Router } from 'express'
|
|
import { addNote } from './methods/post.js'
|
|
import { notesIndex, getSingleNote, getStats } from './methods/get.js'
|
|
import { editNote } from './methods/patch.js'
|
|
import { deleteNote } from './methods/delete.js'
|
|
import validate from '../services/ValidationService.js'
|
|
import { idOnlySchema, newNoteSchema, updateNoteSchema } from '../repositories/schema.js'
|
|
import { setResp403 } from '../helpers/http.js'
|
|
|
|
/**
|
|
*
|
|
* @param req
|
|
* @param res
|
|
* @returns {Promise<void>}
|
|
*/
|
|
const setForbidden = async (req, res) => {
|
|
const ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress
|
|
res.status(403).json(setResp403(`You are not allowed to access the resource. Your IP is ${ip}`))
|
|
}
|
|
|
|
const router = new Router()
|
|
|
|
router.get('/notes(\/|)$/', notesIndex)
|
|
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 |