UNPKG

hud-ai

Version:
111 lines (96 loc) 3.21 kB
import * as Promise from 'bluebird'; import * as _ from 'lodash'; import { HudAiCreateAttributes, HudAiListAttributes, Resource } from '../utils/Resource'; import { RequestManager } from '../RequestManager'; import { UserDigestSubscription } from '../entities'; export interface UserDigestSubscriptionListAttributes extends HudAiListAttributes { userId?: string; dayOfWeek?: string; isoHour?: string; } export interface UserDigestSubscriptionCreateAttributes extends HudAiCreateAttributes { userId?: string; dayOfWeek: string; isoHour: string; } export interface UserDigestSubscriptionGetAttributes { userId?: string; id: string; } export interface UserDigestSubscriptionDestroyAttributes { userId?: string; id: string; } export interface UserDigestSubscriptionUnsubscribeAttributes extends HudAiCreateAttributes { userId?: string; dayOfWeek: string; } export class UserDigestSubscriptionResource extends Resource< UserDigestSubscription, UserDigestSubscriptionListAttributes, UserDigestSubscriptionCreateAttributes, any > { constructor(requestManager: RequestManager) { super('/users/digest-subscriptions', requestManager); } /** * Creates a subscription for a user on a particular day of the week, or updates one if it * already exists. */ public subscribe(upsertArgs: UserDigestSubscriptionCreateAttributes) { return this.makeRequest({ method: 'PUT', data: upsertArgs, url: `${this.basePath}` }); } /** * Unsubscribes a user for a particular day of the week. Does not throw errors if the user is * not currently subscribed for that day. */ public unsubscribe(unsubscribeArgs: UserDigestSubscriptionUnsubscribeAttributes) { return this.makeRequest({ method: 'DELETE', data: unsubscribeArgs, url: `${this.basePath}` }); } public list(listArgs: UserDigestSubscriptionListAttributes): Promise<{ count: number, rows: UserDigestSubscription[] }> { return this.makeRequest({ method: 'GET', params: listArgs, url: `${this.basePath}` }) } public create(createArgs: UserDigestSubscriptionCreateAttributes): Promise<UserDigestSubscription> { return this.makeRequest({ method: 'POST', data: createArgs, url: `${this.basePath}` }) } public get(getArgs: UserDigestSubscriptionGetAttributes): Promise<UserDigestSubscription> { return this.makeRequest({ method: 'GET', params: getArgs, url: `${this.basePath}/{id}` }) } public del(destroyArgs: UserDigestSubscriptionDestroyAttributes): Promise<void> { return this.destroy(destroyArgs) } public destroy(destroyArgs: UserDigestSubscriptionDestroyAttributes): Promise<void> { return this.makeRequest({ method: 'DELETE', params: _.pick(destroyArgs, 'userId'), data: _.omit(destroyArgs, 'userId'), url: `${this.basePath}/{id}` }) } }