From: Michal Klobukowski Date: Mon, 23 Jul 2018 13:20:35 +0000 (+0200) Subject: Merge branch 'master' X-Git-Tag: 1.2.0~36^2~2 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/bccb9ca5151f041d8c8b73098a3e1874023e3efa Merge branch 'master' Feature #13840 Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski --- bccb9ca5151f041d8c8b73098a3e1874023e3efa diff --cc src/services/favorite-service/favorite-service.ts index 1b902b07,00000000..d075b796 mode 100644,000000..100644 --- a/src/services/favorite-service/favorite-service.ts +++ b/src/services/favorite-service/favorite-service.ts @@@ -1,68 -1,0 +1,68 @@@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + - import LinkService from "../link-service/link-service"; - import GroupsService, { GroupContentsResource } from "../groups-service/groups-service"; ++import { LinkService } from "../link-service/link-service"; ++import { GroupsService, GroupContentsResource } from "../groups-service/groups-service"; +import { LinkResource, LinkClass } from "../../models/link"; - import FilterBuilder from "../../common/api/filter-builder"; ++import { FilterBuilder } from "../../common/api/filter-builder"; +import { ListArguments, ListResults } from "../../common/api/common-resource-service"; - import OrderBuilder from "../../common/api/order-builder"; ++import { OrderBuilder } from "../../common/api/order-builder"; + +export interface FavoriteListArguments extends ListArguments { + filters?: FilterBuilder; + order?: OrderBuilder; +} - export default class FavoriteService { ++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() + .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> { + const listFilter = FilterBuilder + .create() + .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().addIn('uuid', uuids), + recursive: true + }); + }); + } + + +} diff --cc src/services/link-service/link-service.ts index 2fb75d50,00000000..4c12cd0b mode 100644,000000..100644 --- a/src/services/link-service/link-service.ts +++ b/src/services/link-service/link-service.ts @@@ -1,13 -1,0 +1,13 @@@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + - import CommonResourceService from "../../common/api/common-resource-service"; ++import { CommonResourceService } from "../../common/api/common-resource-service"; +import { LinkResource } from "../../models/link"; +import { AxiosInstance } from "axios"; + - export default class LinkService extends CommonResourceService { ++export class LinkService extends CommonResourceService { + constructor(serverApi: AxiosInstance) { + super(serverApi, "links"); + } +} diff --cc src/services/services.ts index 6f3d3a95,57f07d6c..f0afd76f --- a/src/services/services.ts +++ b/src/services/services.ts @@@ -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);