viplist.service.ts 2.55 KB

import {forkJoin as observableForkJoin, Observable} from 'rxjs';

import {Injectable} from '@angular/core';
import {Vip, VipFragmentsCombined} from './models/vip.model';
import {User} from '../../shared/models/user.model';
import {UserService} from '../../shared/services/user.service';




import {HttpClient} from '@angular/common/http';
import {MOYA_BASE_URL, MOYA_REST_URL} from '../../shared/config/moya.config';
import gql from 'graphql-tag';
import {EventUser} from '../../shared/models/event-user.model';
import {Apollo} from 'apollo-angular';
import 'rxjs-compat/add/operator/map';
import {first, map} from 'rxjs/operators';
import {Error} from 'tslint/lib/error';


export const Q_VIPS_N_DATA = gql`
    {
      vips {
        ...vipPrimitives
        products {
           ...vipProductPrimitives
           deliveries {
           ...vipProductDeliveryPrimitives
           }
        }
        creator {
           ...eventUserPrimitives
           user {
              ...userPrimitives
           }
        }
        host {
           ...eventUserPrimitives
           user {
              ...userPrimitives
           }
        }
      }
    }

    ${VipFragmentsCombined}
    ${EventUser.fragments}
    ${User.fragments}
  `;

class VipsQueryRoot {
  vips: Array<Vip>;
}



@Injectable()
export class ViplistService {



  constructor(private apollo: Apollo, private http: HttpClient, private userService: UserService) {

  }


  /**
   * get vips
   */
  public get(): Observable<Array<Vip>> {
    return this.apollo.watchQuery<VipsQueryRoot>({query: Q_VIPS_N_DATA}).valueChanges.pipe(map(x => { console.log(x.data.vips); return x.data.vips; }));
    // return this.apollo.query<vipsQueryRoot>({query: Q_VIPS_N_DATA}).pipe(map(x => x.data.vips));
  }


  /**
   * Delete vip.
   *
   * @param vip
   * @return Promise
   */
  public async delete(vip: Vip): Promise<boolean> {

    if (!vip.id) {
      throw new Error('TODO: errori, tyhmä vippi');
    }

    const res: any = await this.http.delete(MOYA_BASE_URL + 'v3/vip/' + vip.id).pipe(first()).toPromise();

    return res.ok;
  }


  public getWithId(id: number): Observable<Vip> {
    return this.http.get(MOYA_BASE_URL + 'v3/vip/' + id).pipe(map(x => x as Vip));
  }


  public create(vip: Vip): Observable<Vip> {
    return this.http.post(MOYA_BASE_URL + 'v3/vip/create', vip).pipe(map(x => x as Vip));
  }
/*
  private hostPopulator(rawVip: any): Observable<Vip> {
    return this.userService.get(rawVip.hostId).pipe(
      map((u: User) => {rawVip.host = u; return <Vip> rawVip; }),map(x => x as Vip),);
  }*/


}