index.ts 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. import { Vec, Option, Tuple } from '@polkadot/types'
  2. import { bool, u64, u32, u128, Null, Bytes } from '@polkadot/types/primitive'
  3. import { MemberId } from '../members'
  4. import { JoyStructDecorated, JoyEnum, ChannelId, JoyBTreeSet, DAOId, Url } from '../common'
  5. import { GenericAccountId as AccountId } from '@polkadot/types/generic/AccountId'
  6. export class CuratorId extends u64 {}
  7. export class CuratorGroupId extends u64 {}
  8. export class ChannelCategoryId extends u64 {}
  9. export class VideoId extends u64 {}
  10. export class VideoCategoryId extends u64 {}
  11. export class PlaylistId extends u64 {}
  12. export class PersonId extends u64 {}
  13. export class SeriesId extends u64 {}
  14. export class ChannelOwnershipTransferRequestId extends u64 {}
  15. export class MaxNumber extends u32 {}
  16. export class IsCensored extends bool {}
  17. // TODO: Remove after the storage-content integration.
  18. export class ContentId extends u64 {}
  19. // TODO: Remove after the storage-content integration.
  20. export class ContentParameters extends u64 {}
  21. export class NewAsset extends JoyEnum({
  22. Upload: ContentParameters,
  23. Urls: Vec.with(Url),
  24. }) {}
  25. export class CuratorGroup extends JoyStructDecorated({
  26. curators: JoyBTreeSet(CuratorId),
  27. active: bool,
  28. }) {}
  29. export class ContentActor extends JoyEnum({
  30. Curator: Tuple.with([CuratorGroupId, CuratorId]),
  31. Member: MemberId,
  32. Lead: Null,
  33. }) {}
  34. export class ChannelOwner extends JoyEnum({
  35. Member: MemberId,
  36. Curators: CuratorGroupId,
  37. Dao: DAOId,
  38. }) {}
  39. export class Channel extends JoyStructDecorated({
  40. owner: ChannelOwner,
  41. videos: Vec.with(VideoId),
  42. playlists: Vec.with(PlaylistId),
  43. series: Vec.with(SeriesId),
  44. is_censored: bool,
  45. reward_account: Option.with(AccountId),
  46. }) {}
  47. export class ChannelCreationParameters extends JoyStructDecorated({
  48. assets: Vec.with(NewAsset),
  49. meta: Bytes,
  50. reward_account: Option.with(AccountId),
  51. }) {}
  52. export class ChannelUpdateParameters extends JoyStructDecorated({
  53. assets: Option.with(Vec.with(NewAsset)),
  54. new_meta: Option.with(Bytes),
  55. reward_account: Option.with(Option.with(AccountId)),
  56. }) {}
  57. export class ChannelOwnershipTransferRequest extends JoyStructDecorated({
  58. channel_id: ChannelId,
  59. new_owner: ChannelOwner,
  60. payment: u128,
  61. new_reward_account: Option.with(AccountId),
  62. }) {}
  63. export class ChannelCategory extends JoyStructDecorated({
  64. // No runtime information is currently stored for a Category.
  65. }) {}
  66. export class ChannelCategoryCreationParameters extends JoyStructDecorated({
  67. meta: Bytes,
  68. }) {}
  69. export class ChannelCategoryUpdateParameters extends JoyStructDecorated({
  70. new_meta: Bytes,
  71. }) {}
  72. export class VideoCategory extends JoyStructDecorated({
  73. // No runtime information is currently stored for a Category.
  74. }) {}
  75. export class VideoCategoryCreationParameters extends JoyStructDecorated({
  76. meta: Bytes,
  77. }) {}
  78. export class VideoCategoryUpdateParameters extends JoyStructDecorated({
  79. new_meta: Bytes,
  80. }) {}
  81. export class Video extends JoyStructDecorated({
  82. in_channel: ChannelId,
  83. in_series: Option.with(SeriesId),
  84. is_censored: bool,
  85. }) {}
  86. export class VideoCreationParameters extends JoyStructDecorated({
  87. assets: Vec.with(NewAsset),
  88. meta: Bytes,
  89. }) {}
  90. export class VideoUpdateParameters extends JoyStructDecorated({
  91. assets: Option.with(Vec.with(NewAsset)),
  92. new_meta: Option.with(Bytes),
  93. }) {}
  94. export class Playlist extends JoyStructDecorated({
  95. in_channel: ChannelId,
  96. }) {}
  97. export class PlaylistCreationParameters extends JoyStructDecorated({
  98. meta: Bytes,
  99. }) {}
  100. export class PlaylistUpdateParameters extends JoyStructDecorated({
  101. new_meta: Bytes,
  102. }) {}
  103. export class EpisodeParemters extends JoyEnum({
  104. NewVideo: VideoCreationParameters,
  105. ExistingVideo: VideoId,
  106. }) {}
  107. export class Season extends JoyStructDecorated({
  108. episodes: Vec.with(VideoId),
  109. }) {}
  110. export class SeasonParameters extends JoyStructDecorated({
  111. assets: Option.with(Vec.with(NewAsset)),
  112. episodes: Option.with(Vec.with(Option.with(EpisodeParemters))),
  113. meta: Option.with(Bytes),
  114. }) {}
  115. export class Series extends JoyStructDecorated({
  116. in_channel: ChannelId,
  117. seasons: Vec.with(Season),
  118. }) {}
  119. export class SeriesParameters extends JoyStructDecorated({
  120. assets: Option.with(Vec.with(NewAsset)),
  121. seasons: Option.with(Vec.with(Option.with(SeasonParameters))),
  122. meta: Option.with(Bytes),
  123. }) {}
  124. export class PersonController extends JoyEnum({
  125. Member: MemberId,
  126. Curators: Null,
  127. }) {}
  128. export class Person extends JoyStructDecorated({
  129. controlled_by: PersonController,
  130. }) {}
  131. export class PersonCreationParameters extends JoyStructDecorated({
  132. assets: Vec.with(NewAsset),
  133. meta: Bytes,
  134. }) {}
  135. export class PersonUpdateParameters extends JoyStructDecorated({
  136. assets: Option.with(Vec.with(NewAsset)),
  137. meta: Option.with(Bytes),
  138. }) {}
  139. export class PersonActor extends JoyEnum({
  140. Member: MemberId,
  141. Curator: CuratorId,
  142. }) {}
  143. export const contentTypes = {
  144. CuratorId,
  145. CuratorGroupId,
  146. CuratorGroup,
  147. ContentActor,
  148. NewAsset,
  149. Channel,
  150. ChannelOwner,
  151. ChannelCategoryId,
  152. ChannelCategory,
  153. ChannelCategoryCreationParameters,
  154. ChannelCategoryUpdateParameters,
  155. ChannelCreationParameters,
  156. ChannelUpdateParameters,
  157. ChannelOwnershipTransferRequestId,
  158. ChannelOwnershipTransferRequest,
  159. Video,
  160. VideoId,
  161. VideoCategoryId,
  162. VideoCategory,
  163. VideoCategoryCreationParameters,
  164. VideoCategoryUpdateParameters,
  165. VideoCreationParameters,
  166. VideoUpdateParameters,
  167. Person,
  168. PersonId,
  169. PersonController,
  170. PersonActor,
  171. PersonCreationParameters,
  172. PersonUpdateParameters,
  173. Playlist,
  174. PlaylistId,
  175. PlaylistCreationParameters,
  176. PlaylistUpdateParameters,
  177. SeriesId,
  178. Series,
  179. Season,
  180. SeriesParameters,
  181. SeasonParameters,
  182. EpisodeParemters,
  183. MaxNumber,
  184. IsCensored,
  185. ContentId, // TODO: Remove after the content integration
  186. }
  187. export default contentTypes