85 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import { isAlphanumeric, isMongoId } from 'validator';
 | |
| import debug from 'debug';
 | |
| 
 | |
| const log = debug('fcc:models:promo');
 | |
| 
 | |
| export default function promo(Promo) {
 | |
|   Promo.getButton = function getButton(id, code, type = 'isNot') {
 | |
|     const Job = Promo.app.models.Job;
 | |
|     if (!id || !isMongoId('' + id)) {
 | |
|       return Promise.reject(new Error(
 | |
|         'Must include job id'
 | |
|       ));
 | |
|     }
 | |
| 
 | |
|     if (
 | |
|       !isAlphanumeric('' + code) &&
 | |
|       type &&
 | |
|       !isAlphanumeric('' + type)
 | |
|     ) {
 | |
|       return Promise.reject(new Error(
 | |
|         'Code or Type should be an alphanumeric'
 | |
|       ));
 | |
|     }
 | |
| 
 | |
|     const query = {
 | |
|       where: {
 | |
|         and: [{
 | |
|           code: type === 'isNot' ? type : 'isHighlighted'
 | |
|         },
 | |
|         {
 | |
|           type: type.replace(/^\$/g, '')
 | |
|         }]
 | |
|       }
 | |
|     };
 | |
| 
 | |
|     return Promo.findOne(query)
 | |
|       .then(function(promo) {
 | |
|         // turn promo model to plain js object;
 | |
|         promo = promo.toJSON();
 | |
|         return Job.updateAll({ id: id }, { promoCodeUsed: code })
 | |
|           .then(function({ count = 0 } = {}) {
 | |
|             log('job', count);
 | |
|             if (count) {
 | |
|               return {
 | |
|                 ...promo,
 | |
|                 name: `${code} Discount`
 | |
|               };
 | |
|             }
 | |
|             return Promise.reject(new Error(
 | |
|               `Job ${id} not found`
 | |
|             ));
 | |
|           });
 | |
|       });
 | |
|   };
 | |
| 
 | |
|   Promo.remoteMethod(
 | |
|     'getButton',
 | |
|     {
 | |
|       description: 'Get button id for promocode',
 | |
|       accepts: [
 | |
|         {
 | |
|           arg: 'id',
 | |
|           type: 'string',
 | |
|           required: true
 | |
|         },
 | |
|         {
 | |
|           arg: 'code',
 | |
|           type: 'string',
 | |
|           required: true
 | |
|         },
 | |
|         {
 | |
|           arg: 'type',
 | |
|           type: 'string'
 | |
|         }
 | |
|       ],
 | |
|       returns: [
 | |
|         {
 | |
|           arg: 'promo',
 | |
|           type: 'object'
 | |
|         }
 | |
|       ]
 | |
|     }
 | |
|   );
 | |
| }
 |