Advertisement
masquitos

Untitled

Sep 8th, 2020 (edited)
1,507
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 1) Корректно ли я разнес фремворк и бизнес логику
  2. 2) Корректно ли я вызываю методы логики по отдельности?
  3. 3) Корреткно ли я выбрасываю исключения?
  4.  
  5. // Express router
  6. const express = require("express");
  7. const router = express.Router();
  8. const requester = require("../../../../helper/requester");
  9. const AuthLogic = require("./auth-logic");
  10.  
  11. router.route("/").post(auth);
  12.  
  13. async function auth(req, res) {
  14.   let authData = req.body;
  15.   let body;
  16.   try {
  17.     console.log("Авторизация", authData.email);
  18.     const authLogic = new AuthLogic(authData);
  19.     const token = await authLogic.getToken();
  20.     body = requester.createBody({ token });
  21.   } catch (error) {
  22.     body = requester.createError(error);
  23.   }
  24.  
  25.   res.json(body);
  26. }
  27.  
  28. module.exports = router;
  29.  
  30.  
  31. // Logic Class
  32. class AuthLogic {
  33.   /**
  34.    *
  35.    * @param authData
  36.    */
  37.   constructor(authData) {
  38.     this.authData = authData;
  39.   }
  40.  
  41.   validate() {
  42.     const isEmail = validator.isEmail(this.authData.email);
  43.     const isEmailLength = validator.isLength(this.authData.email, {
  44.       min: myConstants.MIN_EMAIL_LENGTH,
  45.       max: myConstants.MAX_EMAIL_LENGTH
  46.     });
  47.  
  48.     const isPasswordLength = validator.isLength(this.authData.password, {
  49.       min: myConstants.MIN_PASSWORD_LENGTH,
  50.       max: myConstants.MAX_PASSWORD_LENGTH
  51.     });
  52.  
  53.     if (!isEmail && !isEmailLength && !isPasswordLength) {
  54.       throw new MyError(errorCodes.INVALID_DATA);
  55.     }
  56.   }
  57.  
  58.   async checkIsUserExist() {
  59.     try {
  60.       const dbUser = await db_helper.getUserByEmail(this.authData.email);
  61.       if (!dbUser) {
  62.         console.log("Не существует юзера", this.authData.email);
  63.         throw new MyError(errorCodes.INVALID_USER_OR_PASSWORD);
  64.       }
  65.       this.user = myParser.parseUser(dbUser);
  66.     } catch (e) {
  67.       console.error(e);
  68.       throw e;
  69.     }
  70.   }
  71.  
  72.   checkRole() {
  73.     if (this.user.role !== myRoles.SERVICE_SUPPORT) {
  74.       throw new MyError(errorCodes.INVALID_USER_ROLE);
  75.     } else {
  76.     }
  77.   }
  78.  
  79.   async comparePassword() {
  80.     try {
  81.       await bcrypt.compare(this.authData.password, this.user.password);
  82.     } catch (e) {
  83.       console.log(e);
  84.       throw e;
  85.     }
  86.   }
  87.  
  88.   async updateLastEnter() {
  89.     try {
  90.       const dbUser = await db_helper.updateUserIdentity(this.user.id);
  91.       this.user = myParser.parseUser(dbUser);
  92.     } catch (e) {
  93.       console.error(e);
  94.       throw e;
  95.     }
  96.   }
  97.  
  98.   async getToken() {
  99.     try {
  100.       this.validate();
  101.       await this.checkIsUserExist();
  102.       this.checkRole();
  103.       await this.comparePassword();
  104.       await this.updateLastEnter();
  105.       return tokenGenerator.getToken(this.user);
  106.     } catch (e) {
  107.       throw e;
  108.     }
  109.   }
  110. }
  111.  
  112. module.exports = AuthLogic;
  113.  
  114. // Мой класс ошибок
  115. class MyError extends Error {
  116.   constructor(errorcode) {
  117.     super();
  118.     this.code = errorcode.code;
  119.     this.text = errorcode.text;
  120.   }
  121. }
  122.  
  123. module.exports = MyError;
  124.  
  125. // Типы ошибок
  126. module.exports = {
  127.   UNKNOWN_SERVER_ERROR: {
  128.     code: 2,
  129.     text: "UNKNOWN_SERVER_ERROR"
  130.   },
  131.   USER_EXIST: {
  132.     code: 10,
  133.     text: "USER_EXIST"
  134.   },.....
  135. }
  136.  
  137.  
  138. // Ебертка всех ошибок которые летят пользователю
  139.  
  140. class Requester {
  141.   /**
  142.    * @param {Object} error {code, text}
  143.    *  @param {any} data
  144.    * @param {Object} errorObect errorCodes
  145.    * @returns {Object}
  146.    * @memberof Requester
  147.    */
  148.   createError(error, data) {
  149.     return {
  150.       success: false,
  151.       data: data ? data : null,
  152.       error: {
  153.         code: error ? error.code : 0,
  154.         text: error ? error.text : "Server error"
  155.       }
  156.     };
  157.   }
  158. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement