import { Response } from '@angular/http'; import { Observable } from 'rxjs'; import { AuthHttp } from 'angular2-jwt'; import { Member } from './member.model'; import { MemberSerializer } from './member.serializer'; import { MemberConverter } from './member.converter'; import { MemberCollection } from './member.collection'; import { MemberCollectionConverter } from './member.collection.converter'; import { UrlParamBuilderService } from '../service/url-param-builder.service'; import { IErrorHandler } from '../error/error-handler.interface'; import { ApiPathComponent } from '../api-path-component'; import { MemberPerformance } from './member-performance.model'; import { MemberPerformanceDeserializer } from './member-performance.deserializer'; import { MemberIsadminDeserializer } from './member-isadmin.deserializer'; import { MemberIsAdmin } from './member-isadmin.model'; export class MemberService { public constructor( private authHttp: AuthHttp, private memberConverter: MemberConverter, private collectionConverter: MemberCollectionConverter, private performanceDeserializer: MemberPerformanceDeserializer, private serializer: MemberSerializer, private baseUrl: string, private urlParamBuilderService: UrlParamBuilderService, private errorHandler: IErrorHandler, private memberIsAdminDeserializer: MemberIsadminDeserializer ) {} public getMany(organizationId: string, filters?: {[key: string]: any}, sort?: string[], page?: number, limit?: number): Observable { const url: string = this.baseUrl + '/' + ApiPathComponent.organizations + '/' + organizationId + '/' + ApiPathComponent.members + '?' + this.urlParamBuilderService.build(filters, sort, page, limit) ; return this.authHttp.get(url) .catch((error?: any) => this.errorHandler.handle(error)) .map((res: Response) => this.collectionConverter.toCollection(res.json())); } public getOne(organizationId: string, userId: string): Observable { const url: string = this.baseUrl + '/' + ApiPathComponent.organizations + '/' + organizationId + '/' + ApiPathComponent.members + '/' + userId; return this.authHttp.get(url) .catch((error?: any) => this.errorHandler.handle(error)) .map((res: Response) => this.memberConverter.toOne(res.json())); } public create(member: Member): Observable { const url: string = this.baseUrl + '/' + ApiPathComponent.organizations + '/' + member.organization.id + '/' + ApiPathComponent.members; return this.authHttp.post(url, this.serializer.serialize(member)) .catch((error?: any) => this.errorHandler.handle(error)) .map((res: Response) => this.memberConverter.toOne(res.json())); } public update(member: Member): Observable { const url: string = this.baseUrl + '/' + ApiPathComponent.organizations + '/' + member.organization.id + '/' + ApiPathComponent.members + '/' + member.userId; return this.authHttp.put(url, this.serializer.serialize(member)) .catch((error?: any) => this.errorHandler.handle(error)) .map((res: Response) => this.memberConverter.toOne(res.json())); } public delete(organizationId: string, userId: string): Observable { const url: string = this.baseUrl + '/' + ApiPathComponent.organizations + '/' + organizationId + '/' + ApiPathComponent.members + '/' + userId; return this.authHttp.delete(url) .catch((error?: any) => this.errorHandler.handle(error)) .map(() => undefined); } public getMemberPerformance(filters?: {[key: string]: any}): Observable { const url: string = this.baseUrl + '/' + ApiPathComponent.metrics + '/' + ApiPathComponent.performance + '?' + this.urlParamBuilderService.build(filters); return this.authHttp.get(url) .catch((error?: any) => this.errorHandler.handle(error)) .map((res: Response) => this.performanceDeserializer.deserialize(res.json())); } public isAdminUser(): Observable { const url: string = this.baseUrl + '/member/is_admin'; return this.authHttp.get(url) .catch((error?: any) => this.errorHandler.handle(error)) .map((res: Response) => this.memberIsAdminDeserializer.deserialize(res.json())); } }