@@ -118,13 +118,60 @@ export const Project = Entity.Schema(
118118 } ,
119119) ;
120120
121+ export const Person = Entity . Schema (
122+ {
123+ name : Type . String ,
124+ description : Type . optional ( Type . String ) ,
125+ avatar : Type . Relation ( Image ) ,
126+ } ,
127+ {
128+ types : [ Id ( '7ed45f2b-c48b-419e-8e46-64d5ff680b0d' ) ] ,
129+ properties : {
130+ name : Id ( 'a126ca53-0c8e-48d5-b888-82c734c38935' ) ,
131+ description : Id ( '9b1f76ff-9711-404c-861e-59dc3fa7d037' ) ,
132+ avatar : Id ( '1155beff-fad5-49b7-a2e0-da4777b8792c' ) ,
133+ } ,
134+ } ,
135+ ) ;
136+
137+ export const Topic = Entity . Schema (
138+ {
139+ name : Type . optional ( Type . String ) ,
140+ cover : Type . Relation ( Image ) ,
141+ } ,
142+ {
143+ types : [ Id ( '5ef5a586-0f27-4d8e-8f6c-59ae5b3e89e2' ) ] ,
144+ properties : {
145+ name : Id ( 'a126ca53-0c8e-48d5-b888-82c734c38935' ) ,
146+ cover : Id ( '34f53507-2e6b-42c5-a844-43981a77cfa2' ) ,
147+ } ,
148+ } ,
149+ ) ;
150+
151+ // Generic entity for platform links (Apple Podcasts, Spotify, etc.)
152+ // Using Project type since platforms like Apple Podcasts use this type
153+ export const GenericEntity = Entity . Schema (
154+ {
155+ name : Type . String ,
156+ } ,
157+ {
158+ types : [ Id ( '484a18c5-030a-499c-b0f2-ef588ff16d50' ) ] , // Project type
159+ properties : {
160+ name : Id ( 'a126ca53-0c8e-48d5-b888-82c734c38935' ) ,
161+ } ,
162+ } ,
163+ ) ;
164+
121165export const Podcast = Entity . Schema (
122166 {
123167 name : Type . String ,
124168 description : Type . optional ( Type . String ) ,
125169 dateFounded : Type . Date ,
126170 rssFeedUrl : Type . optional ( Type . String ) ,
127- projects : Type . Relation ( Project , {
171+ avatar : Type . Relation ( Image ) ,
172+ hosts : Type . Relation ( Person ) ,
173+ topics : Type . Relation ( Topic ) ,
174+ listenOn : Type . Relation ( GenericEntity , {
128175 properties : {
129176 website : Type . optional ( Type . String ) ,
130177 } ,
@@ -137,7 +184,83 @@ export const Podcast = Entity.Schema(
137184 description : Id ( '9b1f76ff-9711-404c-861e-59dc3fa7d037' ) ,
138185 dateFounded : Id ( '41aa3d98-47b6-4a97-b7ec-427e575b910e' ) ,
139186 rssFeedUrl : Id ( 'a5776138-deb8-436f-8c98-3eccd100d98f' ) ,
140- projects : {
187+ hosts : Id ( 'c72d9abb-bca8-4e86-b7e8-b71e91d2b37e' ) ,
188+ avatar : Id ( '1155beff-fad5-49b7-a2e0-da4777b8792c' ) ,
189+ topics : Id ( '458fbc07-0dbf-4c92-8f57-16f3fdde7c32' ) ,
190+ listenOn : {
191+ propertyId : Id ( '1367bac7-dcea-4b80-86ad-a4a4cdd7c2cb' ) ,
192+ properties : {
193+ website : Id ( 'eed38e74-e679-46bf-8a42-ea3e4f8fb5fb' ) ,
194+ } ,
195+ } ,
196+ } ,
197+ } ,
198+ ) ;
199+
200+ export const Quote = Entity . Schema (
201+ {
202+ name : Type . String ,
203+ } ,
204+ {
205+ types : [ Id ( '043a171c-6918-4dc3-a7db-b8471ca6fcc2' ) ] ,
206+ properties : {
207+ name : Id ( 'a126ca53-0c8e-48d5-b888-82c734c38935' ) ,
208+ } ,
209+ } ,
210+ ) ;
211+
212+ export const Claim = Entity . Schema (
213+ {
214+ name : Type . String ,
215+ } ,
216+ {
217+ types : [ Id ( '043a171c-6918-4dc3-a7db-b8471ca6fcc2' ) ] ,
218+ properties : {
219+ name : Id ( 'a126ca53-0c8e-48d5-b888-82c734c38935' ) ,
220+ } ,
221+ } ,
222+ ) ;
223+
224+ export const Episode = Entity . Schema (
225+ {
226+ name : Type . String ,
227+ description : Type . optional ( Type . String ) ,
228+ airDate : Type . Date ,
229+ avatar : Type . Relation ( Image ) ,
230+ duration : Type . optional ( Type . Number ) , // in seconds
231+ audioUrl : Type . optional ( Type . String ) ,
232+ episodeNumber : Type . optional ( Type . Number ) ,
233+ guests : Type . Relation ( Person ) ,
234+ hosts : Type . Relation ( Person ) ,
235+ podcast : Type . Relation ( Podcast ) ,
236+ contributors : Type . Relation ( Person ) ,
237+ quotes : Type . Relation ( Quote ) ,
238+ claims : Type . Relation ( Claim ) ,
239+ topics : Type . Relation ( Topic ) ,
240+ listenOn : Type . Relation ( GenericEntity , {
241+ properties : {
242+ website : Type . optional ( Type . String ) ,
243+ } ,
244+ } ) ,
245+ } ,
246+ {
247+ types : [ Id ( '972d201a-d780-4568-9e01-543f67b26bee' ) ] ,
248+ properties : {
249+ name : Id ( 'a126ca53-0c8e-48d5-b888-82c734c38935' ) ,
250+ description : Id ( '9b1f76ff-9711-404c-861e-59dc3fa7d037' ) ,
251+ airDate : Id ( '77999397-f78d-44a7-bbc5-d93a617af47c' ) ,
252+ duration : Id ( '76996acc-d10f-4cd5-9ac9-4a705b8e03b4' ) ,
253+ audioUrl : Id ( '87f919d5-560b-408c-be8d-318e2c5c098b' ) ,
254+ episodeNumber : Id ( '9b5eced9-5c30-473b-8404-f474a777db3a' ) ,
255+ hosts : Id ( 'c72d9abb-bca8-4e86-b7e8-b71e91d2b37e' ) ,
256+ guests : Id ( 'cb60a1a6-6fb5-48c9-b936-200c5c271330' ) ,
257+ avatar : Id ( '1155beff-fad5-49b7-a2e0-da4777b8792c' ) ,
258+ podcast : Id ( 'f1873bbc-381f-4604-abad-76fed4f6d73f' ) ,
259+ contributors : Id ( '1ff59132-2d57-4671-934a-7b662e3cf66a' ) ,
260+ quotes : Id ( '8d4ae49c-226d-4086-8ec3-af5d5b2a65d0' ) ,
261+ claims : Id ( 'e1371bcd-a704-4396-adb7-ea7ecc8fe3d4' ) ,
262+ topics : Id ( '458fbc07-0dbf-4c92-8f57-16f3fdde7c32' ) ,
263+ listenOn : {
141264 propertyId : Id ( '1367bac7-dcea-4b80-86ad-a4a4cdd7c2cb' ) ,
142265 properties : {
143266 website : Id ( 'eed38e74-e679-46bf-8a42-ea3e4f8fb5fb' ) ,
0 commit comments