db-models-nc
Version:
Database models for NextUp Comedy Website
229 lines (228 loc) • 6.94 kB
TypeScript
import Big from 'big.js';
import { InferAttributes, InferCreationAttributes, Model } from 'sequelize';
interface IDatabase {
DATABASE_URL: string;
ENCRYPTION_SECRET_KEY: string;
}
interface IBasicContent {
type?: string;
id: string;
userId?: number;
title: string;
publishDate: number;
permalink: string;
nextUpAccRevenue: string;
owedAccRevenue: string;
launchDate?: string;
advance?: number;
feePaid?: number;
filmingCosts?: number;
paidToOwedAmount?: number;
freeToBePaid?: number;
createdBy: number;
updatedBy: number;
runtime: number;
}
interface IVLContent extends IBasicContent {
primaryCategory: {
title: string;
};
}
interface ISubscription {
planIdentifier: string;
offersApplied: [];
}
interface IPurchase {
subscription: ISubscription;
}
interface IVLUser {
email: string[];
purchases: IPurchase[];
}
interface IWatchedStream {
streamId: string;
contentId: string;
duration: number;
content: IVLContent;
user?: IVLUser;
}
interface IDbWatches extends Pick<IWatchedStream, 'streamId' | 'contentId' | 'duration'> {
createdBy: number;
updatedBy: number;
}
interface IAccumulatedWatchesDurationPerContent {
contentId: string;
watchedSeconds: number;
watches: IDbWatches[];
revenue: string | Big;
reportId?: number;
createdBy: number;
updatedBy: number;
tvodTicketsCount: number;
tvodSeconds: number;
title?: string;
nextupRevenue?: string | Big | null;
owedRevenue?: string | Big | null;
beforeExpiryReportDaysPercentage?: string | Big | null;
beforeExpRevenue?: string | Big | null;
splittableBeforeExpRevenue?: string | Big | null;
reimbursementBeforeExpRevenue?: string | Big | null;
afterExpRevenue?: string | Big | null;
}
interface IContent extends Model<InferAttributes<IContent>, InferCreationAttributes<IContent>> {
id: string;
userId?: number | null;
title: string;
publishDate: number;
permalink: string;
nextUpAccRevenue: string;
owedAccRevenue: string;
launchDate?: string;
advance?: string;
feePaid?: string;
filmingCosts?: string;
createdBy: number;
updatedBy: number;
runtime: number;
primaryCategory: string;
recoveredCosts: string;
contentReports?: IContentReport[];
createdAt?: string;
updatedAt?: string;
}
interface IContentReport extends Model<InferAttributes<IContentReport>, InferCreationAttributes<IContentReport>> {
id?: number;
contentId: string;
reportId?: number;
watchedSeconds: number;
revenue: string | Big;
createdBy: number;
updatedBy: number;
tvodTicketsCount: number;
tvodSeconds: number;
watches?: IWatchedStream[] | IDbWatches[];
nextupRevenue: string | Big | null;
owedRevenue: string | Big | null;
beforeExpiryReportDaysPercentage: string | Big | null;
beforeExpRevenue: string | Big | null;
splittableBeforeExpRevenue: string | Big | null;
reimbursementBeforeExpRevenue: string | null;
afterExpRevenue: string | Big | null;
report?: IReport;
createdAt?: string;
updatedAt?: string;
}
interface IReport extends Model<InferAttributes<IReport>, InferCreationAttributes<IReport>> {
id?: number;
watchTimeFrom: string;
watchTimeTo: string;
overallWatchedSeconds?: number;
totalRevenue?: number;
nextUpToOwedSplitPercentage: string;
createdBy: number;
updatedBy: number;
contentReports?: IAccumulatedWatchesDurationPerContent[];
createdAt?: string;
updatedAt?: string;
}
interface IUserRole extends Model<InferAttributes<IUserRole>, InferCreationAttributes<IUserRole>> {
id?: number;
name: string;
}
interface IVariables {
regularVariables: {
nextupToOwedSplitPercentage: string;
systemActivationDate: string;
fetchMaxCount: string;
expiredAfterInYears: string;
viewliftEmail: string;
viewliftEndpoint: string;
viewliftWatchesFetchLimit: string;
calculatorEndpoint: string;
};
encryptedVariables: {
viewliftPassword: string;
stripeKey: string;
};
}
interface IDashboardSettings {
nextUpToOwedSplitPercentage: string;
systemActivationDate: string;
maxCount: number;
expiredAfterInYears: number;
email: string;
viewliftEndpoint: string;
limit: number;
password: string;
stripeKey: string;
calculatorEndpoint: string;
}
interface ISettings extends Model<InferAttributes<ISettings>, InferCreationAttributes<ISettings>> {
id?: number;
name: string;
value: unknown;
}
interface IUser extends Model<InferAttributes<IUser>, InferCreationAttributes<IUser>> {
id?: number;
name: string;
email: string;
password: string;
googleId?: string;
userRoleId: number;
userStatusId?: number;
totalRevenue: number | Big | string;
paidRevenue: number | Big | string;
image?: string;
rejectionReason?: string;
stripeAccount?: string;
createdBy: number;
updatedBy?: number;
createdAt?: string;
updatedAt?: string;
}
declare type ICustomUser = Pick<IUser, 'id' | 'name' | 'email' | 'password' | 'googleId' | 'userRoleId' | 'userStatusId' | 'totalRevenue' | 'paidRevenue' | 'image' | 'rejectionReason' | 'createdBy' | 'updatedBy'>;
interface IWatches extends Model<InferAttributes<IWatches>, InferCreationAttributes<IWatches>> {
id?: number;
streamId: string;
duration: number;
contentId: string;
contentReportId: number;
createdBy: number;
updatedBy: number;
}
interface IUserStatus extends Model<InferAttributes<IUserStatus>, InferCreationAttributes<IUserStatus>> {
id?: number;
name: string;
}
interface IPayout extends Model<InferAttributes<IPayout>, InferCreationAttributes<IPayout>> {
id?: number;
userId: number;
payoutStatusId: number;
amount: number | Big | string;
rejectionReason?: string;
createdBy: number;
updatedBy: number;
createdAt?: string;
updatedAt?: string;
user?: IUser;
}
interface IPayoutStatus extends Model<InferAttributes<IPayoutStatus>, InferCreationAttributes<IPayoutStatus>> {
id?: number;
name: string;
}
interface ITransactions extends Model<InferAttributes<ITransactions>, InferCreationAttributes<ITransactions>> {
id?: number;
contentId: string;
nextUpAccRevenue: number;
owedAccRevenue: number;
prevNextUpAccRevenue: number;
prevOwedAccRevenue: number;
recoveredCosts: number;
prevRecoveredCosts: number;
contentReportId: number;
revenue: number;
nextUpToOwedSplitPercentage: number;
createdAt?: string;
updatedAt?: string;
}
export { IContent, IContentReport, IUserRole, ISettings, IUser, IWatches, IReport, IDatabase, IUserStatus, ITransactions, IVariables, IDashboardSettings, IPayout, IPayoutStatus, ICustomUser, };