Как мне перейти к преобразованию данных из MongoDB, чтобы они соответствовали объекту DataCache данных ngrx? Сейчас данные есть, но форматирование отключено, поскольку объекты, вложенные в свойство entity, не определены.
group-data.service:
import { Injectable } from '@angular/core';
import { DefaultDataService, HttpUrlGenerator, QueryParams } from '@ngrx/data';
import { Group } from 'src/app/models/group.model';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { map, tap } from 'rxjs/operators';
interface GroupData {
count: number;
groups: Group[];
}
@Injectable()
export class GroupDataService extends DefaultDataService<Group> {
constructor(http: HttpClient, httpUrl: HttpUrlGenerator) {
super('Group', http, httpUrl);
}
getWithQuery(params: QueryParams): Observable<any> {
return this.http.get<GroupData>('http://localhost:3000/api/groups?' + params)
.pipe(
tap(data => console.log(data)),
map(data => data.groups)
);
}
}
преобразователь:
import { Injectable } from '@angular/core';
import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Observable, of } from 'rxjs';
import { tap, filter, first, map } from 'rxjs/operators';
import { GroupEntityService } from './group-entity.service';
@Injectable()
export class GroupResolver implements Resolve<boolean> {
constructor(private groupService: GroupEntityService) { }
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
const topic = route.queryParams.topic;
return this.groupService.loaded$
.pipe(
tap(loaded => {
if (!loaded) {
this.groupService.getWithQuery(`topic=${topic.toLowerCase()}&PageSize=2¤tPage=1`);
}
}),
filter(loaded => !!loaded),
first()
);
}
}
group-entity.service:
import { Injectable } from '@angular/core';
import { EntityCollectionServiceBase, EntityCollectionServiceElementsFactory } from '@ngrx/data';
import { Group } from 'src/app/models/group.model';
@Injectable()
export class GroupEntityService extends EntityCollectionServiceBase<Group> {
constructor(serviceElFac: EntityCollectionServiceElementsFactory) {
super('Group', serviceElFac);
}
}