channel.model.ts 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. import {
  2. BaseModel,
  3. BooleanField,
  4. IntField,
  5. Model,
  6. ManyToOne,
  7. OneToMany,
  8. CustomField,
  9. EnumField,
  10. StringField,
  11. } from 'warthog';
  12. import { Membership } from '../membership/membership.model';
  13. import { CuratorGroup } from '../curator-group/curator-group.model';
  14. import { ChannelCategory } from '../channel-category/channel-category.model';
  15. import { DataObject } from '../data-object/data-object.model';
  16. import { Language } from '../language/language.model';
  17. import { Video } from '../video/video.model';
  18. import { AssetAvailability } from '../enums/enums';
  19. export { AssetAvailability };
  20. @Model({ api: {} })
  21. export class Channel extends BaseModel {
  22. @ManyToOne(() => Membership, (param: Membership) => param.channels, {
  23. skipGraphQLField: true,
  24. nullable: true,
  25. cascade: ["insert", "update"],
  26. modelName: 'Channel',
  27. relModelName: 'Membership',
  28. propertyName: 'ownerMember',
  29. })
  30. ownerMember?: Membership;
  31. @ManyToOne(() => CuratorGroup, (param: CuratorGroup) => param.channels, {
  32. skipGraphQLField: true,
  33. nullable: true,
  34. cascade: ["insert", "update"],
  35. modelName: 'Channel',
  36. relModelName: 'CuratorGroup',
  37. propertyName: 'ownerCuratorGroup',
  38. })
  39. ownerCuratorGroup?: CuratorGroup;
  40. @ManyToOne(() => ChannelCategory, (param: ChannelCategory) => param.channels, {
  41. skipGraphQLField: true,
  42. nullable: true,
  43. cascade: ["insert", "update"],
  44. modelName: 'Channel',
  45. relModelName: 'ChannelCategory',
  46. propertyName: 'category',
  47. })
  48. category?: ChannelCategory;
  49. @StringField({
  50. nullable: true,
  51. description: `Reward account where revenue is sent if set.`,
  52. })
  53. rewardAccount?: string;
  54. @StringField({
  55. nullable: true,
  56. description: `The title of the Channel`,
  57. })
  58. title?: string;
  59. @StringField({
  60. nullable: true,
  61. description: `The description of a Channel`,
  62. })
  63. description?: string;
  64. @ManyToOne(() => DataObject, (param: DataObject) => param.channelcoverPhotoDataObject, {
  65. skipGraphQLField: true,
  66. nullable: true,
  67. cascade: ["insert", "update"],
  68. modelName: 'Channel',
  69. relModelName: 'DataObject',
  70. propertyName: 'coverPhotoDataObject',
  71. })
  72. coverPhotoDataObject?: DataObject;
  73. @CustomField({
  74. db: { type: 'text', array: true },
  75. api: { type: 'string', description: `URLs where the asset content can be accessed (if any)` },
  76. })
  77. coverPhotoUrls!: string[];
  78. @EnumField('AssetAvailability', AssetAvailability, {
  79. description: `Availability meta information`,
  80. })
  81. coverPhotoAvailability!: AssetAvailability;
  82. @ManyToOne(() => DataObject, (param: DataObject) => param.channelavatarPhotoDataObject, {
  83. skipGraphQLField: true,
  84. nullable: true,
  85. cascade: ["insert", "update"],
  86. modelName: 'Channel',
  87. relModelName: 'DataObject',
  88. propertyName: 'avatarPhotoDataObject',
  89. })
  90. avatarPhotoDataObject?: DataObject;
  91. @CustomField({
  92. db: { type: 'text', array: true },
  93. api: { type: 'string', description: `URLs where the asset content can be accessed (if any)` },
  94. })
  95. avatarPhotoUrls!: string[];
  96. @EnumField('AssetAvailability', AssetAvailability, {
  97. description: `Availability meta information`,
  98. })
  99. avatarPhotoAvailability!: AssetAvailability;
  100. @BooleanField({
  101. nullable: true,
  102. description: `Flag signaling whether a channel is public.`,
  103. })
  104. isPublic?: boolean;
  105. @BooleanField({
  106. description: `Flag signaling whether a channel is censored.`,
  107. })
  108. isCensored!: boolean;
  109. @ManyToOne(() => Language, (param: Language) => param.channellanguage, {
  110. skipGraphQLField: true,
  111. nullable: true,
  112. cascade: ["insert", "update"],
  113. modelName: 'Channel',
  114. relModelName: 'Language',
  115. propertyName: 'language',
  116. })
  117. language?: Language;
  118. @OneToMany(() => Video, (param: Video) => param.channel, {
  119. cascade: ["insert", "update"],
  120. modelName: 'Channel',
  121. relModelName: 'Video',
  122. propertyName: 'videos',
  123. })
  124. videos?: Video[];
  125. @IntField({})
  126. createdInBlock!: number;
  127. constructor(init?: Partial<Channel>) {
  128. super();
  129. Object.assign(this, init);
  130. }
  131. }