Advertisement
Guest User

Untitled

a guest
Dec 6th, 2016
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /// <reference path="../../typings/tsd.d.ts"/>
  2. import * as Q from 'q';
  3. import User from '../models/User';
  4. import {authService} from './authService';
  5. import {db} from '../db/index';
  6. import {UserRepository, DbUser} from '../db/repositories/UserRepository';
  7.  
  8. export class UserService {
  9.     public saveUser(data: DbUser) {
  10.         const defer = Q.defer();
  11.         const user = this.populate(data);
  12.         if (user.validate()) {
  13.             defer.reject(user.getErrors());
  14.         } else {
  15.             user.setSalt(authService.createSalt());
  16.             user.setPassword(authService.hashPassword(user.getSalt(), data.password));
  17.             const repo = this.getUserRepository();
  18.             repo.count({email: user.getEmail()}).then((count: number) => {
  19.                 if (!count) {
  20.                     repo.insert(user).then(
  21.                         (userId: string) => {
  22.                             defer.resolve(userId);
  23.                         },
  24.                         () => {
  25.                             defer.reject('Error while inserting user.');
  26.                         }
  27.                     );
  28.                 } else {
  29.                     defer.reject(`An user with the ${user.getEmail()} email address already exists in the datbase.`);
  30.                 }
  31.             });
  32.         }
  33.         return defer.promise;
  34.     }
  35.  
  36.     public getUsers() {
  37.         const defer = Q.defer();
  38.         const repo = this.getUserRepository();
  39.  
  40.         repo.getAllUsers().then(
  41.             (users: User[]) => {
  42.                 defer.resolve(users);
  43.             },
  44.             () => {
  45.                 defer.reject('Error while retrieving users.');
  46.             }
  47.         );
  48.  
  49.         return defer.promise;
  50.     }
  51.  
  52.     public getById(id: string) {
  53.         const defer = Q.defer();
  54.         const repo = this.getUserRepository();
  55.  
  56.         repo.getById(id).then(
  57.             (user: User) => {
  58.                 defer.resolve(user);
  59.             },
  60.             () => {
  61.                 defer.reject('Error while retrieving user.');
  62.             }
  63.         );
  64.  
  65.         return defer.promise;
  66.     }
  67.  
  68.     public getByEmail(email: string, allInfo = false) {
  69.         const defer = Q.defer();
  70.         const repo = this.getUserRepository();
  71.  
  72.         repo.getByEmail(email, allInfo).then(
  73.             (user: User) => {
  74.                 defer.resolve(user);
  75.             },
  76.             () => {
  77.                 defer.reject('Error while retrieving user.');
  78.             }
  79.         );
  80.  
  81.         return defer.promise;
  82.     }
  83.  
  84.     public update(id: string, data: DbUser) {
  85.         const defer = Q.defer();
  86.         const repo = this.getUserRepository();
  87.  
  88.         repo.get(id).then(
  89.             (userData: DbUser) => {
  90.                 let user = this.populate(userData);
  91.                 data.password = data.password ? authService.hashPassword(user.getSalt(), data.password) : user.getPassword();
  92.                 user = this.populate(data, user);
  93.                 if (user.validate()) {
  94.                     defer.reject(user.getErrors());
  95.                 } else {
  96.                     repo.update(id, user).then(
  97.                         (updated: number) => {
  98.                             if (updated) {
  99.                                 user.setPassword('');
  100.                                 user.setSalt('');
  101.                                 defer.resolve(user);
  102.                             }
  103.                         },
  104.                         () => {
  105.                             defer.reject('Error while updating users');
  106.                         }
  107.                     );
  108.                 }
  109.             },
  110.             () => {
  111.                 defer.reject('Error while retrieving user.');
  112.             }
  113.         );
  114.  
  115.         return defer.promise;
  116.     }
  117.  
  118.     public delete(id: string) {
  119.         const defer = Q.defer();
  120.         const repo = this.getUserRepository();
  121.  
  122.         repo.delete([id]).then(
  123.             () => {
  124.                 defer.resolve();
  125.             },
  126.             () => {
  127.                 defer.reject('Error while deleting user.');
  128.             }
  129.         );
  130.  
  131.         return defer.promise;
  132.     }
  133.  
  134.     private populate(data: DbUser, user?: User): User {
  135.         const updatedUser = user ? user : new User();
  136.         if (data.id || updatedUser.getId()) {
  137.             updatedUser.setId(data.id || updatedUser.getId());
  138.         }
  139.         updatedUser.setFirstName(data.firstName || updatedUser.getFirstName());
  140.         updatedUser.setLastName(data.lastName || updatedUser.getLastName());
  141.         updatedUser.setEmail(data.email || updatedUser.getEmail());
  142.         updatedUser.setPhoneNumber(data.phoneNumber || updatedUser.getPhoneNumber());
  143.         updatedUser.setPassword(data.password || updatedUser.getPassword());
  144.         updatedUser.setSalt(data.salt || updatedUser.getSalt());
  145.         updatedUser.setRoles(data.roles || updatedUser.getRoles());
  146.         return updatedUser;
  147.     }
  148.  
  149.     private getUserRepository(): UserRepository {
  150.         return db.getRepo('userRepository') as UserRepository;
  151.     }
  152. }
  153.  
  154. export let userService = new UserService();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement