summaryrefslogtreecommitdiff
path: root/src/services/provider.js
blob: 038bf5cdf3a35ffa71b0c46ccea26a37d2582921 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
export const UserServiceProvider = (function () {
  let instance;

  async function createInstance(user) {
    switch (user.role) {
      case 'STUDENT':
        const studentService = await import('./student');
        if (studentService) {
          return new studentService.default(user);
        }
        break;
      case 'PROFESSOR':
        const professorService = await import('./professor');
        if (professorService) {
          return new professorService.default(user);
        }
        break;
      default:
        throw new Error('Invalid Role!');
    }
  }

  return {
    getInstance: async function (user) {
      if (!instance) {
        instance = await createInstance(user);
      }
      return instance;
    },
  };
})();