diff options
Diffstat (limited to 'src/services/provider.js')
-rw-r--r-- | src/services/provider.js | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/services/provider.js b/src/services/provider.js new file mode 100644 index 0000000..038bf5c --- /dev/null +++ b/src/services/provider.js @@ -0,0 +1,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; + }, + }; +})(); |