25 lines
		
	
	
		
			576 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			25 lines
		
	
	
		
			576 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const _ = require('lodash');
 | |
| const { isMongoId } = require('validator');
 | |
| 
 | |
| class MongoIds {
 | |
|   constructor() {
 | |
|     this.knownIds = [];
 | |
|   }
 | |
|   check(id, title) {
 | |
|     if (!isMongoId(id)) {
 | |
|       throw new Error(`Expected a valid ObjectId for ${title}, but got ${id}`);
 | |
|     }
 | |
|     const idIndex = _.findIndex(this.knownIds, existing => id === existing);
 | |
|     if (idIndex !== -1) {
 | |
|       throw new Error(`
 | |
|     All challenges must have a unique id.
 | |
| 
 | |
|     The id for ${title} is already assigned
 | |
|     `);
 | |
|     }
 | |
|     this.knownIds = [...this.knownIds, id];
 | |
|   }
 | |
| }
 | |
| 
 | |
| module.exports = MongoIds;
 |