Advertisement
Guest User

Untitled

a guest
Aug 1st, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. interface SequelizeRequest {
  2.     request: (t: Transaction, params: any, thenRequest: SequelizeRequest[], data?: any) => Promise<any>;
  3.     thenRequest?: SequelizeRequest[];
  4.     catchCallback?: (err: Error) => Promise<any> | never;
  5. }
  6.  
  7. export abstract class AbstractModel {
  8.  
  9.     private readonly sequelize: Sequelize;
  10.  
  11.     constructor(sequelize: Sequelize) {
  12.         this.sequelize = sequelize;
  13.     }
  14.  
  15.     start(params: any): Promise<any> {
  16.         const requestRoot: SequelizeRequest = this.getAllSequelizeRequests();
  17.  
  18.         return this.sequelize.transaction((t: Transaction) => requestRoot
  19.             .request(t, params, requestRoot.thenRequest || [])
  20.             .catch(requestRoot.catchCallback || ((err: Error) => {
  21.                 throw new Error(); //ROOLBACK
  22.             }))
  23.         );
  24.     }
  25.  
  26.     protected abstract getAllSequelizeRequests(): SequelizeRequest;
  27.  
  28. }
  29.  
  30. export class InscriptionModel extends AbstractModel {
  31.  
  32.     protected getAllSequelizeRequests(): SequelizeRequest {
  33.         return {
  34.             request: this.checkUsername,
  35.             thenRequest: [
  36.                 {
  37.                     request: this.checkEmail,
  38.                     thenRequest: [
  39.                         //etc...
  40.                     ]
  41.                 }
  42.             ]
  43.         };
  44.     }
  45.  
  46.     protected checkUsername(t: Transaction, params: any, thenRequest: SequelizeRequest[]): Promise<any> {
  47.         return User.findOne({
  48.             where: {username: params.username},
  49.             transaction: t
  50.         })
  51.             .then((data: any) => {
  52.                 if (data) {
  53.                     throw new Error(); //Provoque un ROLLBACK
  54.                 }
  55.  
  56.                 return Promise.all(
  57.                     thenRequest.map(r => r.request(t, params, r.thenRequest || [], data))
  58.                 );
  59.             });
  60.     }
  61.  
  62.     protected checkEmail(t: Transaction, params: any, thenRequest: SequelizeRequest[]): Promise<any> {
  63.         return User.findOne({
  64.             where: {email: params.email},
  65.             transaction: t
  66.         })
  67.             .then((data: any) => {
  68.                 if (data) {
  69.                     throw new Error(); //Provoque un ROLLBACK
  70.                 }
  71.  
  72.                 return Promise.all(
  73.                     thenRequest.map(r => r.request(t, params, r.thenRequest || [], data))
  74.                 );
  75.             });
  76.     }
  77.  
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement