This repository has been archived on 2024-02-11. You can view files and clone it, but cannot push or open issues or pull requests.
Files
restful-api-task/routes/router.js

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