X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/28ded6ac60c1317b5872a22ce827b073f26fa030..42c529f08bbeccaeb0d4c07f639c74504569c621:/src/services/favorite-service/favorite-service.ts diff --git a/src/services/favorite-service/favorite-service.ts b/src/services/favorite-service/favorite-service.ts index f211a385..35dbbaf7 100644 --- a/src/services/favorite-service/favorite-service.ts +++ b/src/services/favorite-service/favorite-service.ts @@ -7,25 +7,29 @@ import { GroupsService, GroupContentsResource } from "../groups-service/groups-s import { LinkResource, LinkClass } from "../../models/link"; import { FilterBuilder } from "../../common/api/filter-builder"; import { ListArguments, ListResults } from "../../common/api/common-resource-service"; +import { FavoriteOrderBuilder } from "./favorite-order-builder"; import { OrderBuilder } from "../../common/api/order-builder"; -export interface FavoriteListArguments extends ListArguments { - filters?: FilterBuilder; - order?: OrderBuilder; +export interface FavoriteListArguments { + limit?: number; + offset?: number; + filters?: FilterBuilder; + order?: FavoriteOrderBuilder; } + export class FavoriteService { constructor( private linkService: LinkService, private groupsService: GroupsService ) { } - create(data: { userUuid: string; resourceUuid: string; }) { + create(data: { userUuid: string; resource: { uuid: string; name: string } }) { return this.linkService.create({ ownerUuid: data.userUuid, tailUuid: data.userUuid, - headUuid: data.resourceUuid, + headUuid: data.resource.uuid, linkClass: LinkClass.STAR, - name: data.resourceUuid + name: data.resource.name }); } @@ -33,7 +37,7 @@ export class FavoriteService { return this.linkService .list({ filters: FilterBuilder - .create() + .create() .addEqual('tailUuid', data.userUuid) .addEqual('headUuid', data.resourceUuid) .addEqual('linkClass', LinkClass.STAR) @@ -42,23 +46,26 @@ export class FavoriteService { results.items.map(item => this.linkService.delete(item.uuid)))); } - list(userUuid: string, args: FavoriteListArguments = {}): Promise> { + list(userUuid: string, { filters, limit, offset, order }: FavoriteListArguments = {}): Promise> { const listFilter = FilterBuilder - .create() + .create() .addEqual('tailUuid', userUuid) .addEqual('linkClass', LinkClass.STAR); return this.linkService .list({ - ...args, - filters: args.filters ? args.filters.concat(listFilter) : listFilter + filters: filters ? filters.concat(listFilter) : listFilter, + limit, + offset, + order: order ? order.getLinkOrder() : OrderBuilder.create() }) .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), + limit, + offset, + order: order ? order.getContentOrder() : OrderBuilder.create(), + filters: FilterBuilder.create().addIn('uuid', uuids), recursive: true }); }); @@ -68,16 +75,15 @@ export class FavoriteService { return this.linkService .list({ filters: FilterBuilder - .create() + .create() .addIn("headUuid", resourceUuids) .addEqual("tailUuid", userUuid) .addEqual("linkClass", LinkClass.STAR) }) - .then(({items}) => resourceUuids.reduce((results, uuid) => { + .then(({ items }) => resourceUuids.reduce((results, uuid) => { const isFavorite = items.some(item => item.headUuid === uuid); - return {...results, [uuid]: isFavorite}; + return { ...results, [uuid]: isFavorite }; }, {})); } - -} \ No newline at end of file +}