1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
5 import * as _ from "lodash";
6 import { Resource } from "./common-resource-service";
8 export default class OrderBuilder<T extends Resource = Resource> {
10 static create<T extends Resource = Resource>(prefix?: string){
11 return new OrderBuilder<T>([], prefix);
15 private order: string[] = [],
16 private prefix = ""){}
18 private getRule (direction: string, attribute: keyof T) {
19 const prefix = this.prefix ? this.prefix + "." : "";
20 return `${prefix}${_.snakeCase(attribute.toString())} ${direction}`;
23 addAsc(attribute: keyof T) {
24 return new OrderBuilder<T>(
25 [...this.order, this.getRule("asc", attribute)],
30 addDesc(attribute: keyof T) {
31 return new OrderBuilder<T>(
32 [...this.order, this.getRule("desc", attribute)],
37 concat(orderBuilder: OrderBuilder){
38 return new OrderBuilder<T>(
39 this.order.concat(orderBuilder.getOrder()),
45 return this.order.slice();