aboutsummaryrefslogblamecommitdiffhomepage
path: root/server/typings/models/video/video-channels.ts
blob: 2be7dd7ed01cbfbbf610a9aeeecba05de0583f3c (plain) (tree)
1
2
3
4
5
6
7
8
9
                                                                       



                                                                       
                  
                      
                
                        
                             




                         
                     
                    
              

                          


                                


                                                                                  


                                                                                                 








                                                                               
                                                          



                                      


                                        




                                                                               

                                      
                                  
 

                                           
 


                                             
 
                                                                               
 
                       

                                             




                                               
 






                                                                               
                                       
                         
 







                                                                               
 

                                                             
                             
 

                                                      
 


                                    















                                                                                         
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<K extends keyof VideoChannelModel, M> = PickWith<VideoChannelModel, K, M>

// ############################################################################

export type MChannel = Omit<VideoChannelModel, 'Actor' | 'Account' | 'Videos' | 'VideoPlaylists'>

// ############################################################################

export type MChannelId = Pick<MChannel, 'id'>

// ############################################################################

export type MChannelIdActor = MChannelId &
  Use<'Actor', MActorAccountChannelId>

export type MChannelUserId = Pick<MChannel, 'accountId'> &
  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<MChannel> &
  Pick<MChannel, 'id' | 'name' | 'description' | 'actorId'> &
  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<MChannel> &
  Pick<MChannel, 'id' | 'name'> &
  Use<'Actor', MActorSummaryFormattable>

export type MChannelAccountSummaryFormattable = MChannelSummaryFormattable &
  Use<'Account', MAccountSummaryFormattable>

export type MChannelFormattable = FunctionProperties<MChannel> &
  Pick<MChannel, 'id' | 'name' | 'description' | 'createdAt' | 'updatedAt' | 'support'> &
  Use<'Actor', MActorFormattable> &
  PickWithOpt<VideoChannelModel, 'Account', MAccountFormattable>