From 1b9693401c6f09b734d38f0fb89cc864b5afc045 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Gro=C3=9F?= Date: Mon, 17 Apr 2023 14:31:12 +0200 Subject: [PATCH] API: Add routes to fetch groups and characters --- api/jsonApi.js | 65 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 63 insertions(+), 2 deletions(-) diff --git a/api/jsonApi.js b/api/jsonApi.js index c491099..20f08c2 100644 --- a/api/jsonApi.js +++ b/api/jsonApi.js @@ -1,4 +1,5 @@ require("dotenv").config(); +const Sequelize = require('sequelize'); const express = require('express'); const bodyParser = require('body-parser'); const { Card, User, DropHistory, Character, Group } = require("../models"); @@ -16,7 +17,7 @@ function isAuthorized(req, res=null) { const providedToken = req.headers['apikey']; if (providedToken !== ACCESS_TOKEN) { if(res) { - res.status(401).json({ error: 'Unauthorized' }); + res.status(401).json({ error: 'Unauthorized' }); } return false; } @@ -88,7 +89,67 @@ router.get('/most-recent-drop', async (req, res) => { console.error(error); res.status(500).send('Error fetching most recent drop'); } -}).needsAuth= true; +}); + +/** + * Groups + */ +router.get('/groups', async (req, res) => { + let condition = { + where: { + [Sequelize.Op.or]: [ + {enabled: 1} + ] + } + } + + if(isAuthorized && req.query.include_disabled) { + condition['where'][Sequelize.Op.or].push({enabled: 0}); + } + + let groups = await Group.findAll(condition); + res.json(groups); +}); + +router.get('/groups/:group_id', async (req, res) => { + let group = await Group.findByPk(req.params.group_id); + + if (!group.enabled && !isAuthorized(req)) { + res.status(404).json({ error: 'Group not found' }); + return; + } + res.json(group); +}); + +/** + * Characters + */ +router.get('/characters', async (req, res) => { + let condition = { + where: { + [Sequelize.Op.or]: [ + {enabled: 1} + ] + } + } + + if(isAuthorized && req.query.include_disabled) { + condition['where'][Sequelize.Op.or].push({enabled: 0}); + } + + let characters = await Character.findAll(condition); + res.json(characters); +}); + +router.get('/characters/:character_id', async (req, res) => { + let character = await Character.findByPk(req.params.character_id); + + if (!character.enabled && !isAuthorized(req)) { + res.status(404).json({ error: 'Character not found' }); + return; + } + res.json(character); +}); app.use(PREFIX, router); module.exports = app;