import { FunctionProperties, PickWith, PickWithOpt } from '../../utils' import { VideoChannelModel } from '../../../models/video/video-channel' import { MAccountActor, MAccountAPI, MAccountDefault, MAccountFormattable, MAccountLight, MAccountSummaryBlocks, MAccountSummaryFormattable, MAccountUserId, MActor, MActorAccountChannelId, MActorAPI, MActorDefault, MActorDefaultLight, MActorFormattable, MActorLight, MActorSummary, MActorSummaryFormattable } from '../account' import { MVideo } from './video' type Use = PickWith // ############################################################################ export type MChannel = Omit // ############################################################################ export type MChannelId = Pick // ############################################################################ export type MChannelIdActor = MChannelId & Use<'Actor', MActorAccountChannelId> export type MChannelUserId = Pick & Use<'Account', MAccountUserId> export type MChannelActor = MChannel & Use<'Actor', MActor> // Default scope export type MChannelDefault = MChannel & Use<'Actor', MActorDefault> // ############################################################################ // Not all association attributes export type MChannelLight = MChannel & Use<'Actor', MActorDefaultLight> export type MChannelActorLight = MChannel & Use<'Actor', MActorLight> export type MChannelAccountLight = MChannel & Use<'Actor', MActorDefaultLight> & Use<'Account', MAccountLight> // ############################################################################ // Account associations export type MChannelAccountActor = MChannel & Use<'Account', MAccountActor> export type MChannelAccountDefault = MChannel & Use<'Actor', MActorDefault> & Use<'Account', MAccountDefault> export type MChannelActorAccountActor = MChannel & Use<'Account', MAccountActor> & Use<'Actor', MActor> // ############################################################################ // Videos associations export type MChannelVideos = MChannel & Use<'Videos', MVideo[]> export type MChannelActorAccountDefaultVideos = MChannel & Use<'Actor', MActorDefault> & Use<'Account', MAccountDefault> & Use<'Videos', MVideo[]> // ############################################################################ // For API export type MChannelSummary = FunctionProperties & Pick & Use<'Actor', MActorSummary> export type MChannelSummaryAccount = MChannelSummary & Use<'Account', MAccountSummaryBlocks> export type MChannelAPI = MChannel & Use<'Actor', MActorAPI> & Use<'Account', MAccountAPI> // ############################################################################ // Format for API or AP object export type MChannelSummaryFormattable = FunctionProperties & Pick & Use<'Actor', MActorSummaryFormattable> export type MChannelAccountSummaryFormattable = MChannelSummaryFormattable & Use<'Account', MAccountSummaryFormattable> export type MChannelFormattable = FunctionProperties & Pick & Use<'Actor', MActorFormattable> & PickWithOpt