Merge branch 'master'
authorMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Mon, 23 Jul 2018 13:20:35 +0000 (15:20 +0200)
committerMichal Klobukowski <michal.klobukowski@contractors.roche.com>
Mon, 23 Jul 2018 13:20:35 +0000 (15:20 +0200)
Feature #13840

Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski <michal.klobukowski@contractors.roche.com>

1  2 
src/services/favorite-service/favorite-service.ts
src/services/link-service/link-service.ts
src/services/services.ts

index 1b902b077c1ac840fc6e2753412447ac66c1b905,0000000000000000000000000000000000000000..d075b79602dc92deba70b116d08b808726eaf620
mode 100644,000000..100644
--- /dev/null
@@@ -1,68 -1,0 +1,68 @@@
- import LinkService from "../link-service/link-service";
- import GroupsService, { GroupContentsResource } from "../groups-service/groups-service";
 +// Copyright (C) The Arvados Authors. All rights reserved.
 +//
 +// SPDX-License-Identifier: AGPL-3.0
 +
- import FilterBuilder from "../../common/api/filter-builder";
++import { LinkService } from "../link-service/link-service";
++import { GroupsService, GroupContentsResource } from "../groups-service/groups-service";
 +import { LinkResource, LinkClass } from "../../models/link";
- import OrderBuilder from "../../common/api/order-builder";
++import { FilterBuilder } from "../../common/api/filter-builder";
 +import { ListArguments, ListResults } from "../../common/api/common-resource-service";
- export default class FavoriteService {
++import { OrderBuilder } from "../../common/api/order-builder";
 +
 +export interface FavoriteListArguments extends ListArguments {
 +    filters?: FilterBuilder<LinkResource>;
 +    order?: OrderBuilder<LinkResource>;
 +}
++export class FavoriteService {
 +    constructor(
 +        private linkService: LinkService,
 +        private groupsService: GroupsService
 +    ) { }
 +
 +    create(data: { userUuid: string; resourceUuid: string; }) {
 +        return this.linkService.create({
 +            ownerUuid: data.userUuid,
 +            tailUuid: data.userUuid,
 +            headUuid: data.resourceUuid,
 +            linkClass: LinkClass.STAR,
 +            name: data.resourceUuid
 +        });
 +    }
 +
 +    delete(data: { userUuid: string; resourceUuid: string; }) {
 +        return this.linkService
 +            .list({
 +                filters: FilterBuilder
 +                    .create<LinkResource>()
 +                    .addEqual('tailUuid', data.userUuid)
 +                    .addEqual('headUuid', data.resourceUuid)
 +                    .addEqual('linkClass', LinkClass.STAR)
 +            })
 +            .then(results => Promise.all(
 +                results.items.map(item => this.linkService.delete(item.uuid))));
 +    }
 +
 +    list(userUuid: string, args: FavoriteListArguments = {}): Promise<ListResults<GroupContentsResource>> {
 +        const listFilter = FilterBuilder
 +            .create<LinkResource>()
 +            .addEqual('tailUuid', userUuid)
 +            .addEqual('linkClass', LinkClass.STAR);
 +
 +        return this.linkService
 +            .list({
 +                ...args,
 +                filters: args.filters ? args.filters.concat(listFilter) : listFilter
 +            })
 +            .then(results => {
 +                const uuids = results.items.map(item => item.headUuid);
 +                return this.groupsService.contents(userUuid, {
 +                    limit: args.limit,
 +                    offset: args.offset,
 +                    filters: FilterBuilder.create<GroupContentsResource>().addIn('uuid', uuids),
 +                    recursive: true
 +                });
 +            });
 +    }
 +
 +
 +}
index 2fb75d50f7b5fec6c4202124e3fc04ce3e6dd35c,0000000000000000000000000000000000000000..4c12cd0ba9911f916b772ffcc3e9da925b6f9302
mode 100644,000000..100644
--- /dev/null
@@@ -1,13 -1,0 +1,13 @@@
- import CommonResourceService from "../../common/api/common-resource-service";
 +// Copyright (C) The Arvados Authors. All rights reserved.
 +//
 +// SPDX-License-Identifier: AGPL-3.0
 +
- export default class LinkService extends CommonResourceService<LinkResource> {
++import { CommonResourceService } from "../../common/api/common-resource-service";
 +import { LinkResource } from "../../models/link";
 +import { AxiosInstance } from "axios";
 +
++export class LinkService extends CommonResourceService<LinkResource> {
 +    constructor(serverApi: AxiosInstance) {
 +        super(serverApi, "links");
 +    }
 +}
index 6f3d3a959665bc65dbae40e6491d4e80253e94e4,57f07d6c6a579550de2ab141fdbace8e0afebe03..f0afd76fc82f7158f3e85aa9ddcb95b0d1c2df65
@@@ -2,12 -2,10 +2,12 @@@
  //
  // SPDX-License-Identifier: AGPL-3.0
  
- import AuthService from "./auth-service/auth-service";
- import GroupsService from "./groups-service/groups-service";
+ import { AuthService } from "./auth-service/auth-service";
+ import { GroupsService } from "./groups-service/groups-service";
  import { serverApi } from "../common/api/server-api";
- import ProjectService from "./project-service/project-service";
- import LinkService from "./link-service/link-service";
- import FavoriteService from "./favorite-service/favorite-service";
+ import { ProjectService } from "./project-service/project-service";
++import { LinkService } from "./link-service/link-service";
++import { FavoriteService } from "./favorite-service/favorite-service";
  
  export const authService = new AuthService(serverApi);
  export const groupsService = new GroupsService(serverApi);