vibez-core
Version:
Utilities, types and common dependencies.
77 lines (76 loc) • 2.39 kB
TypeScript
import { IndexableCollection, Indexable } from "../common";
import { DeviceStatus } from "../peripherals";
import { Auditable } from "../auditory";
export declare type DeviceSessionAction = "START" | "STOP" | "PAUSE" | "RESUME" | "COMMIT" | "UPDATE";
export declare type SessionRecurrence = "NONE" | "DAILY" | "WEEKLY" | "MONTHLY";
export declare type SubscriptionModel = "FREEMIUM" | "BASIC" | "PREMIUM" | "PRO";
export declare type Collections = "Devices" | "Contacts" | "Customers";
export interface SessionConfiguration {
start: Date;
durationInMinutes: number;
broadcastingUrl: string;
samplingIntervalInMinutes: number;
samplingDurationInSeconds: number;
isBroadcasting: boolean;
isSampling: boolean;
recurrence: SessionRecurrence;
recurrenceDays: Array<number>;
}
export interface Session extends SessionConfiguration {
reason?: string;
status: string;
lastUpdate: string;
lastUpdatedBy: string;
}
export interface Device {
status: DeviceStatus;
uuid: string;
session?: Session;
}
export interface Contact extends Auditable, IndexableCollection<"Contacts"> {
name: string;
surname: string;
email: string;
mobile: string;
}
export interface Location {
lat: number;
long: number;
}
export interface Customer extends Auditable, IndexableCollection<"Customers"> {
subscriptionDate: Date;
subscriptionModel: SubscriptionModel;
subscriptionTerm: number;
placeOfBirth?: Location;
dateOfBirth?: Date;
profile: CustomerProfile;
}
export interface MusicPreference {
genre: string;
hits: number;
}
export interface GenreProfile {
genre: string;
likes: number;
highlights: string;
}
export interface FollowerSubscription extends Auditable {
follower: Indexable;
subscriptionDate: Date;
}
export interface FollowingSubscription {
following: Indexable;
subscriptionDate: Date;
isActive: boolean;
}
export declare type RevealLocationMode = "Off" | "All" | "Followers" | "Following" | "Following & Followers";
export interface CustomerProfile extends Auditable {
musicPreferences: Array<MusicPreference>;
musicProfile: Array<GenreProfile>;
photoUrl?: string;
revealLocation: RevealLocationMode;
location?: Location;
likes: number;
followers: Array<FollowerSubscription>;
following: Array<FollowingSubscription>;
}