176 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			176 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
"use strict";
 | 
						|
 | 
						|
// modules
 | 
						|
const express = require('express');
 | 
						|
const logger = require('debug')('cc:wars');
 | 
						|
 | 
						|
// HTTP status codes by name
 | 
						|
const codes = require('./http-codes');
 | 
						|
 | 
						|
const routerHandling = require('../middleware/router-handling');
 | 
						|
 | 
						|
// Mongoose Model using mongoDB
 | 
						|
const LogBudgetModel = require('../models/logs/budget');
 | 
						|
const LogRespawnModel = require('../models/logs/respawn');
 | 
						|
const LogReviveModel = require('../models/logs/revive');
 | 
						|
const LogKillModel = require('../models/logs/kill');
 | 
						|
const LogTransportModel = require('../models/logs/transport');
 | 
						|
const LogFlagModel = require('../models/logs/flag');
 | 
						|
const LogPointsModel = require('../models/logs/points');
 | 
						|
 | 
						|
 | 
						|
const notFoundError = new Error('No logs found');
 | 
						|
 | 
						|
const logsRouter = express.Router();
 | 
						|
 | 
						|
// routes **********************
 | 
						|
logsRouter.route('/:warId/budget')
 | 
						|
  .get((req, res, next) => {
 | 
						|
    const filter = {war: req.params.warId};
 | 
						|
    if (req.query.fraction) filter['fraction'] = req.query.fraction;
 | 
						|
    LogBudgetModel.find(filter, {}, {sort: {time: 1}}, (err, logBudget) => {
 | 
						|
      if (err) return next(err);
 | 
						|
      if (!logBudget || logBudget.length === 0) {
 | 
						|
        const err = notFoundError;
 | 
						|
        err.status = codes.notfound;
 | 
						|
        return next(err)
 | 
						|
      }
 | 
						|
      res.locals.items = logBudget;
 | 
						|
      next();
 | 
						|
    })
 | 
						|
  })
 | 
						|
  .all(
 | 
						|
    routerHandling.httpMethodNotAllowed
 | 
						|
  );
 | 
						|
 | 
						|
logsRouter.route('/:warId/respawn')
 | 
						|
  .get((req, res, next) => {
 | 
						|
    const filter = {war: req.params.warId};
 | 
						|
    if (req.query.player) filter['player'] = req.query.player;
 | 
						|
    LogRespawnModel.find(filter, {}, {sort: {time: 1}}, (err, logRespawn) => {
 | 
						|
      if (err) return next(err);
 | 
						|
      if (!logRespawn || logRespawn.length === 0) {
 | 
						|
        const err = notFoundError;
 | 
						|
        err.status = codes.notfound;
 | 
						|
        return next(err)
 | 
						|
      }
 | 
						|
      res.locals.items = logRespawn;
 | 
						|
      next();
 | 
						|
    })
 | 
						|
  })
 | 
						|
  .all(
 | 
						|
    routerHandling.httpMethodNotAllowed
 | 
						|
  );
 | 
						|
 | 
						|
logsRouter.route('/:warId/revive')
 | 
						|
  .get((req, res, next) => {
 | 
						|
    const filter = {war: req.params.warId};
 | 
						|
    if (req.query.medic) filter['medic'] = req.query.medic;
 | 
						|
    if (req.query.patient) filter['patient'] = req.query.patient;
 | 
						|
    if (req.query.stabilized) filter['stabilized'] = true;
 | 
						|
    if (req.query.revive) filter['stabilized'] = false;
 | 
						|
    if (req.query.fraction) filter['fraction'] = req.query.fraction;
 | 
						|
    LogReviveModel.find(filter, {}, {sort: {time: 1}}, (err, logRevive) => {
 | 
						|
      if (err) return next(err);
 | 
						|
      if (!logRevive || logRevive.length === 0) {
 | 
						|
        const err = notFoundError;
 | 
						|
        err.status = codes.notfound;
 | 
						|
        return next(err)
 | 
						|
      }
 | 
						|
      res.locals.items = logRevive;
 | 
						|
      next();
 | 
						|
    })
 | 
						|
  })
 | 
						|
  .all(
 | 
						|
    routerHandling.httpMethodNotAllowed
 | 
						|
  );
 | 
						|
 | 
						|
logsRouter.route('/:warId/kills')
 | 
						|
  .get((req, res, next) => {
 | 
						|
    const filter = {war: req.params.warId};
 | 
						|
    if (req.query.shooter) filter['shooter'] = req.query.shooter;
 | 
						|
    if (req.query.target) filter['target'] = req.query.target;
 | 
						|
    if (req.query.friendlyFire) filter['friendlyFire'] = true;
 | 
						|
    if (req.query.noFriendlyFire) filter['friendlyFire'] = false;
 | 
						|
    if (req.query.fraction) filter['fraction'] = req.query.fraction;
 | 
						|
    LogKillModel.find(filter, {}, {sort: {time: 1}}, (err, logKill) => {
 | 
						|
      if (err) return next(err);
 | 
						|
      if (!logKill || logKill.length === 0) {
 | 
						|
        const err = notFoundError;
 | 
						|
        err.status = codes.notfound;
 | 
						|
        return next(err)
 | 
						|
      }
 | 
						|
      res.locals.items = logKill;
 | 
						|
      next();
 | 
						|
    })
 | 
						|
  })
 | 
						|
  .all(
 | 
						|
    routerHandling.httpMethodNotAllowed
 | 
						|
  );
 | 
						|
 | 
						|
logsRouter.route('/:warId/transport')
 | 
						|
  .get((req, res, next) => {
 | 
						|
    const filter = {war: req.params.warId};
 | 
						|
    if (req.query.driver) filter['driver'] = req.query.driver;
 | 
						|
    if (req.query.passenger) filter['passenger'] = req.query.passenger;
 | 
						|
    if (req.query.fraction) filter['fraction'] = req.query.fraction;
 | 
						|
    LogTransportModel.find(filter, {}, {sort: {time: 1}}, (err, logTransport) => {
 | 
						|
      if (err) return next(err);
 | 
						|
      if (!logTransport || logTransport.length === 0) {
 | 
						|
        const err = notFoundError;
 | 
						|
        err.status = codes.notfound;
 | 
						|
        return next(err)
 | 
						|
      }
 | 
						|
      res.locals.items = logTransport;
 | 
						|
      next();
 | 
						|
    })
 | 
						|
  })
 | 
						|
  .all(
 | 
						|
    routerHandling.httpMethodNotAllowed
 | 
						|
  );
 | 
						|
 | 
						|
logsRouter.route('/:warId/flag')
 | 
						|
  .get((req, res, next) => {
 | 
						|
    const filter = {war: req.params.warId};
 | 
						|
    if (req.query.player) filter['player'] = req.query.player;
 | 
						|
    if (req.query.capture) filter['capture'] = true;
 | 
						|
    if (req.query.defend) filter['capture'] = false;
 | 
						|
    if (req.query.fraction) filter['fraction'] = req.query.fraction;
 | 
						|
    LogFlagModel.find(filter, {}, {sort: {time: 1}}, (err, logFlag) => {
 | 
						|
      if (err) return next(err);
 | 
						|
      if (!logFlag || logFlag.length === 0) {
 | 
						|
        const err = notFoundError;
 | 
						|
        err.status = codes.notfound;
 | 
						|
        return next(err)
 | 
						|
      }
 | 
						|
      res.locals.items = logFlag;
 | 
						|
      next();
 | 
						|
    })
 | 
						|
  })
 | 
						|
  .all(
 | 
						|
    routerHandling.httpMethodNotAllowed
 | 
						|
  );
 | 
						|
 | 
						|
logsRouter.route('/:warId/points')
 | 
						|
  .get((req, res, next) => {
 | 
						|
    const filter = {war: req.params.warId};
 | 
						|
    if (req.query.fraction) filter['fraction'] = req.query.fraction;
 | 
						|
    LogPointsModel.find(filter, {}, {sort: {time: 1}}, (err, logPoints) => {
 | 
						|
      if (err) return next(err);
 | 
						|
      if (!logPoints || logPoints.length === 0) {
 | 
						|
        const err = notFoundError;
 | 
						|
        err.status = codes.notfound;
 | 
						|
        return next(err)
 | 
						|
      }
 | 
						|
      res.locals.items = logPoints;
 | 
						|
      next();
 | 
						|
    })
 | 
						|
  })
 | 
						|
  .all(
 | 
						|
    routerHandling.httpMethodNotAllowed
 | 
						|
  );
 | 
						|
 | 
						|
logsRouter.use(routerHandling.emptyResponse);
 | 
						|
 | 
						|
module.exports = logsRouter;
 |