38 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			38 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								const router = require('express').Router();
							 | 
						||
| 
								 | 
							
								const { PR } = require('../models');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const createPareto = reportObj =>
							 | 
						||
| 
								 | 
							
								  Object.keys(reportObj)
							 | 
						||
| 
								 | 
							
								    .reduce((arr, filename) => {
							 | 
						||
| 
								 | 
							
								      const { count, prs } = reportObj[filename];
							 | 
						||
| 
								 | 
							
								      if (count > 1) {
							 | 
						||
| 
								 | 
							
								        arr.push({ filename, count, prs });
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return arr;
							 | 
						||
| 
								 | 
							
								    }, [])
							 | 
						||
| 
								 | 
							
								    .sort((a, b) => b.count - a.count);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								router.get('/', async (reqeust, response) => {
							 | 
						||
| 
								 | 
							
								  const prs = await PR.find({}).then(data => data);
							 | 
						||
| 
								 | 
							
								  prs.sort((a, b) => a._id - b._id);
							 | 
						||
| 
								 | 
							
								  const reportObj = prs.reduce((obj, pr) => {
							 | 
						||
| 
								 | 
							
								    const { _id: number, filenames, username, title } = pr;
							 | 
						||
| 
								 | 
							
								    filenames.forEach(filename => {
							 | 
						||
| 
								 | 
							
								      if (obj[filename]) {
							 | 
						||
| 
								 | 
							
								        const { count, prs } = obj[filename];
							 | 
						||
| 
								 | 
							
								        obj[filename] = {
							 | 
						||
| 
								 | 
							
								          count: count + 1,
							 | 
						||
| 
								 | 
							
								          prs: prs.concat({ number, username, title })
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								      } else {
							 | 
						||
| 
								 | 
							
								        obj[filename] = { count: 1, prs: [{ number, username, title }] };
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								    return obj;
							 | 
						||
| 
								 | 
							
								  }, {});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  response.json({ ok: true, pareto: createPareto(reportObj) });
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = router;
							 |