feat(backend): Added skeleton for a database learning object/path provider.
This commit is contained in:
		
							parent
							
								
									cc6947dd3c
								
							
						
					
					
						commit
						2d9f17484c
					
				
					 5 changed files with 103 additions and 6 deletions
				
			
		|  | @ -0,0 +1,42 @@ | ||||||
|  | import {LearningObjectProvider} from "./learning-object-provider"; | ||||||
|  | import { | ||||||
|  |     FilteredLearningObject, | ||||||
|  |     LearningObjectIdentifier, | ||||||
|  |     LearningPathIdentifier | ||||||
|  | } from "../../interfaces/learning-content"; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Service providing access to data about learning objects from the database | ||||||
|  |  */ | ||||||
|  | const databaseLearningObjectProvider: LearningObjectProvider = { | ||||||
|  |     /** | ||||||
|  |      * Fetches a single learning object by its HRUID | ||||||
|  |      */ | ||||||
|  |     getLearningObjectById(id: LearningObjectIdentifier): Promise<FilteredLearningObject | null> { | ||||||
|  |         return Promise.resolve(null); // TODO
 | ||||||
|  |     }, | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Fetch full learning object data (metadata) | ||||||
|  |      */ | ||||||
|  |     getLearningObjectHTML(id: LearningObjectIdentifier): Promise<string | null> { | ||||||
|  |         return Promise.resolve(null); // TODO
 | ||||||
|  |     }, | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Fetch only learning object HRUIDs | ||||||
|  |      */ | ||||||
|  |     getLearningObjectIdsFromPath(id: LearningPathIdentifier): Promise<string[]> { | ||||||
|  |         return Promise.resolve([]);// TODO
 | ||||||
|  |     }, | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Obtain a HTML-rendering of the learning object with the given identifier (as a string). | ||||||
|  |      */ | ||||||
|  |     getLearningObjectsFromPath(id: LearningPathIdentifier): Promise<FilteredLearningObject[]> { | ||||||
|  |         return Promise.resolve([]); // TODO
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export default databaseLearningObjectProvider; | ||||||
|  | @ -5,9 +5,15 @@ import { | ||||||
| } from "../../interfaces/learning-content"; | } from "../../interfaces/learning-content"; | ||||||
| import dwengoApiLearningObjectProvider from "./dwengo-api-learning-object-provider"; | import dwengoApiLearningObjectProvider from "./dwengo-api-learning-object-provider"; | ||||||
| import {LearningObjectProvider} from "./learning-object-provider"; | import {LearningObjectProvider} from "./learning-object-provider"; | ||||||
|  | import {EnvVars, getEnvVar} from "../../util/envvars"; | ||||||
|  | import databaseLearningObjectProvider from "./database-learning-object-provider"; | ||||||
| 
 | 
 | ||||||
| function getProvider(id: LearningObjectIdentifier): LearningObjectProvider { | function getProvider(id: LearningObjectIdentifier): LearningObjectProvider { | ||||||
|     return dwengoApiLearningObjectProvider |     if (id.hruid.startsWith(getEnvVar(EnvVars.UserContentPrefix))) { | ||||||
|  |         return databaseLearningObjectProvider; | ||||||
|  |     } else { | ||||||
|  |         return dwengoApiLearningObjectProvider; | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  |  | ||||||
|  | @ -0,0 +1,23 @@ | ||||||
|  | import {LearningPathProvider} from "./learning-path-provider"; | ||||||
|  | import {LearningPath, LearningPathResponse} from "../../interfaces/learning-content"; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Service providing access to data about learning paths from the database. | ||||||
|  |  */ | ||||||
|  | const databaseLearningPathProvider: LearningPathProvider = { | ||||||
|  |     /** | ||||||
|  |      * Fetch the learning paths with the given hruids from the database. | ||||||
|  |      */ | ||||||
|  |     fetchLearningPaths(hruids: string[], language: string, source: string): Promise<LearningPathResponse> { | ||||||
|  |         throw new Error("Not yet implemented"); // TODO
 | ||||||
|  |     }, | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Search learning paths in the database using the given search string. | ||||||
|  |      */ | ||||||
|  |     searchLearningPaths(query: string, language: string): Promise<LearningPath[]> { | ||||||
|  |         return Promise.resolve([]); // TODO
 | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | export default databaseLearningPathProvider; | ||||||
|  | @ -1,5 +1,13 @@ | ||||||
| import {LearningPath, LearningPathResponse} from "../../interfaces/learning-content"; | import { | ||||||
|  |     LearningPath, | ||||||
|  |     LearningPathResponse | ||||||
|  | } from "../../interfaces/learning-content"; | ||||||
| import dwengoApiLearningPathProvider from "./dwengo-api-learning-path-provider"; | import dwengoApiLearningPathProvider from "./dwengo-api-learning-path-provider"; | ||||||
|  | import databaseLearningPathProvider from "./database-learning-path-provider"; | ||||||
|  | import {EnvVars, getEnvVar} from "../../util/envvars"; | ||||||
|  | 
 | ||||||
|  | const userContentPrefix = getEnvVar(EnvVars.UserContentPrefix); | ||||||
|  | const allProviders = [dwengoApiLearningPathProvider, databaseLearningPathProvider] | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * Service providing access to data about learning paths from the appropriate data source (database or Dwengo-api) |  * Service providing access to data about learning paths from the appropriate data source (database or Dwengo-api) | ||||||
|  | @ -8,15 +16,32 @@ const learningPathService = { | ||||||
|     /** |     /** | ||||||
|      * Fetch the learning paths with the given hruids from the data source. |      * Fetch the learning paths with the given hruids from the data source. | ||||||
|      */ |      */ | ||||||
|     fetchLearningPaths(hruids: string[], language: string, source: string): Promise<LearningPathResponse> { |     async fetchLearningPaths(hruids: string[], language: string, source: string): Promise<LearningPathResponse> { | ||||||
|         return dwengoApiLearningPathProvider.fetchLearningPaths(hruids, language, source); |         const userContentHruids = hruids.filter(hruid => hruid.startsWith(userContentPrefix)); | ||||||
|  |         const nonUserContentHruids = hruids.filter(hruid => !hruid.startsWith(userContentPrefix)); | ||||||
|  | 
 | ||||||
|  |         const userContentLearningPaths = | ||||||
|  |             await databaseLearningPathProvider.fetchLearningPaths(userContentHruids, language, source); | ||||||
|  |         const nonUserContentLearningPaths | ||||||
|  |             = await databaseLearningPathProvider.fetchLearningPaths(nonUserContentHruids, language, source); | ||||||
|  | 
 | ||||||
|  |         return { | ||||||
|  |             data: (userContentLearningPaths.data || []).concat(nonUserContentLearningPaths.data || []), | ||||||
|  |             source: source, | ||||||
|  |             success: userContentLearningPaths.success || nonUserContentLearningPaths.success | ||||||
|  |         }; | ||||||
|     }, |     }, | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * Search learning paths in the data source using the given search string. |      * Search learning paths in the data source using the given search string. | ||||||
|      */ |      */ | ||||||
|     searchLearningPaths(query: string, language: string): Promise<LearningPath[]> { |     async searchLearningPaths(query: string, language: string): Promise<LearningPath[]> { | ||||||
|         return dwengoApiLearningPathProvider.searchLearningPaths(query, language); |         const providerResponses = await Promise.all( | ||||||
|  |             allProviders.map( | ||||||
|  |                 provider => provider.searchLearningPaths(query, language) | ||||||
|  |             ) | ||||||
|  |         ); | ||||||
|  |         return providerResponses.flat(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -13,6 +13,7 @@ export const EnvVars: { [key: string]: EnvVar } = { | ||||||
|     DbUpdate: { key: DB_PREFIX + 'UPDATE', defaultValue: false }, |     DbUpdate: { key: DB_PREFIX + 'UPDATE', defaultValue: false }, | ||||||
|     LearningContentRepoApiBaseUrl: { key: PREFIX + "LEARNING_CONTENT_REPO_API_BASE_URL", defaultValue: "https://dwengo.org/backend/api"}, |     LearningContentRepoApiBaseUrl: { key: PREFIX + "LEARNING_CONTENT_REPO_API_BASE_URL", defaultValue: "https://dwengo.org/backend/api"}, | ||||||
|     FallbackLanguage: { key: PREFIX + "FALLBACK_LANGUAGE", defaultValue: "nl" }, |     FallbackLanguage: { key: PREFIX + "FALLBACK_LANGUAGE", defaultValue: "nl" }, | ||||||
|  |     UserContentPrefix: { key: DB_PREFIX + 'USER_CONTENT_PREFIX', defaultValue: "u_" }, | ||||||
| } as const; | } as const; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  |  | ||||||
		Reference in a new issue
	
	 Gerald Schmittinger
						Gerald Schmittinger