103 lines
1.9KB

  1. import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
  2. import Podcast from 'podcast';
  3. import { ItunesEpisodeTypeEnum } from 'schemas/enum/itunes-episode-type.enum';
  4. import { EpisodeEnclosure } from './episode-enclosure.entity';
  5. import { Document } from 'mongoose';
  6. import { Field, ID, ObjectType } from '@nestjs/graphql';
  7. export type EpisodeDocument = Episode & Document;
  8. @Schema()
  9. @ObjectType()
  10. export class Episode implements Podcast.Item {
  11. @Prop()
  12. @Field(type => ID)
  13. id: string;
  14. @Prop()
  15. @Field({ nullable: true })
  16. title?: string;
  17. @Prop()
  18. @Field({ nullable: true })
  19. description?: string;
  20. @Prop()
  21. @Field()
  22. url: string;
  23. @Prop()
  24. @Field({ nullable: true })
  25. guid?: string;
  26. @Prop([String])
  27. @Field(type => [String], {nullable: true})
  28. categories?: string[];
  29. @Prop()
  30. @Field({ nullable: true })
  31. author?: string;
  32. @Prop()
  33. @Field()
  34. date: Date;
  35. @Prop()
  36. @Field({ nullable: true })
  37. lat?: number;
  38. @Prop()
  39. @Field({ nullable: true })
  40. long?: number;
  41. @Prop(EpisodeEnclosure)
  42. @Field(type => EpisodeEnclosure, {nullable: true})
  43. enclosure?: EpisodeEnclosure;
  44. @Prop()
  45. @Field({ nullable: true })
  46. content?: string;
  47. @Prop()
  48. @Field({ nullable: true })
  49. itunesAuthor?: string;
  50. @Prop()
  51. @Field({ nullable: true })
  52. itunesExplicit?: boolean;
  53. @Prop()
  54. @Field({ nullable: true })
  55. itunesSubtitle?: string;
  56. @Prop()
  57. @Field({ nullable: true })
  58. itunesSummary?: string;
  59. @Prop()
  60. @Field({ nullable: true })
  61. itunesDuration?: number;
  62. @Prop()
  63. @Field({ nullable: true })
  64. itunesImage?: string;
  65. @Prop()
  66. @Field({ nullable: true })
  67. itunesSeason?: number;
  68. @Prop()
  69. @Field({ nullable: true })
  70. itunesEpisode?: number;
  71. @Prop()
  72. @Field({ nullable: true })
  73. itunesTitle?: string;
  74. @Prop(ItunesEpisodeTypeEnum)
  75. @Field(type => ItunesEpisodeTypeEnum, {nullable: true})
  76. itunesEpisodeType?: ItunesEpisodeTypeEnum;
  77. }
  78. export const EpisodeSchema = SchemaFactory.createForClass(Episode);