80 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			80 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @license
							 | 
						||
| 
								 | 
							
								 * Copyright Google LLC All Rights Reserved.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Use of this source code is governed by an MIT-style license that can be
							 | 
						||
| 
								 | 
							
								 * found in the LICENSE file at https://angular.io/license
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * This is an example of a Hero-oriented InMemoryDbService.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * For demonstration purposes, it can return the database
							 | 
						||
| 
								 | 
							
								 * synchronously as an object (default),
							 | 
						||
| 
								 | 
							
								 * as an observable, or as a promise.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Add the following line to `AppModule.imports`
							 | 
						||
| 
								 | 
							
								 *   InMemoryWebApiModule.forRoot(HeroInMemDataService) // or HeroInMemDataOverrideService
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								import {Injectable} from '@angular/core';
							 | 
						||
| 
								 | 
							
								import {InMemoryDbService, RequestInfo} from 'angular-in-memory-web-api';
							 | 
						||
| 
								 | 
							
								import {Observable, of} from 'rxjs';
							 | 
						||
| 
								 | 
							
								import {delay} from 'rxjs/operators';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								interface Person {
							 | 
						||
| 
								 | 
							
								  id: string|number;
							 | 
						||
| 
								 | 
							
								  name: string;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								interface PersonResponse {
							 | 
						||
| 
								 | 
							
								  heroes: Person[];
							 | 
						||
| 
								 | 
							
								  stringers: Person[];
							 | 
						||
| 
								 | 
							
								  nobodies: Person[];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@Injectable()
							 | 
						||
| 
								 | 
							
								export class HeroInMemDataService implements InMemoryDbService {
							 | 
						||
| 
								 | 
							
								  createDb(reqInfo?: RequestInfo):
							 | 
						||
| 
								 | 
							
								      Observable<PersonResponse>|Promise<PersonResponse>|PersonResponse {
							 | 
						||
| 
								 | 
							
								    const heroes = [
							 | 
						||
| 
								 | 
							
								      {id: 1, name: 'Windstorm'}, {id: 2, name: 'Bombasto'}, {id: 3, name: 'Magneta'},
							 | 
						||
| 
								 | 
							
								      {id: 4, name: 'Tornado'}
							 | 
						||
| 
								 | 
							
								    ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    const nobodies: any[] = [];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // entities with string ids that look like numbers
							 | 
						||
| 
								 | 
							
								    const stringers = [{id: '10', name: 'Bob String'}, {id: '20', name: 'Jill String'}];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // default returnType
							 | 
						||
| 
								 | 
							
								    let returnType = 'object';
							 | 
						||
| 
								 | 
							
								    // let returnType  = 'observable';
							 | 
						||
| 
								 | 
							
								    // let returnType  = 'promise';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // demonstrate POST commands/resetDb
							 | 
						||
| 
								 | 
							
								    // this example clears the collections if the request body tells it to do so
							 | 
						||
| 
								 | 
							
								    if (reqInfo) {
							 | 
						||
| 
								 | 
							
								      const body = reqInfo.utils.getJsonBody(reqInfo.req) || {};
							 | 
						||
| 
								 | 
							
								      if (body.clear === true) {
							 | 
						||
| 
								 | 
							
								        heroes.length = 0;
							 | 
						||
| 
								 | 
							
								        nobodies.length = 0;
							 | 
						||
| 
								 | 
							
								        stringers.length = 0;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      // 'returnType` can be 'object' | 'observable' | 'promise'
							 | 
						||
| 
								 | 
							
								      returnType = body.returnType || 'object';
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    const db = {heroes, nobodies, stringers};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    switch (returnType) {
							 | 
						||
| 
								 | 
							
								      case 'observable':
							 | 
						||
| 
								 | 
							
								        return of(db).pipe(delay(10));
							 | 
						||
| 
								 | 
							
								      case 'promise':
							 | 
						||
| 
								 | 
							
								        return new Promise(resolve => setTimeout(() => resolve(db), 10));
							 | 
						||
| 
								 | 
							
								      default:
							 | 
						||
| 
								 | 
							
								        return db;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |