25 lines
		
	
	
		
			566 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			25 lines
		
	
	
		
			566 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								import _ from 'lodash';
							 | 
						||
| 
								 | 
							
								import { isMongoId } from '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 ];
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export default MongoIds;
							 |