Fixed queries.
This commit is contained in:
		
							parent
							
								
									ce92d13327
								
							
						
					
					
						commit
						577c03f9b7
					
				|  | @ -6,7 +6,7 @@ function curateRelease(release) { | |||
|         actors: release.actors.map(({ actor }) => ({ | ||||
|             ...actor, | ||||
|             avatar: actor.avatar[0], | ||||
|             origin: { | ||||
|             origin: actor.originCountry && { | ||||
|                 country: actor.originCountry, | ||||
|             }, | ||||
|         })), | ||||
|  | @ -31,7 +31,7 @@ function initReleasesActions(_store, _router) { | |||
|         */ | ||||
| 
 | ||||
|         const { releases } = await graphql(` | ||||
|             query Releases($limit:Int) { | ||||
|             query Releases($limit:Int!) { | ||||
|               releases(first:$limit, orderBy: DATE_DESC) { | ||||
|                 id | ||||
|                 title | ||||
|  | @ -63,7 +63,7 @@ function initReleasesActions(_store, _router) { | |||
|                   thumbnail | ||||
|                 } | ||||
|                 tags: releasesTagsByTargetId { | ||||
|                   tag { | ||||
|                   tag: releaseTag { | ||||
|                     name | ||||
|                     priority | ||||
|                     slug | ||||
|  | @ -137,7 +137,7 @@ function initReleasesActions(_store, _router) { | |||
|                   thumbnail | ||||
|                 } | ||||
|                 tags: releasesTagsByTargetId { | ||||
|                   tag { | ||||
|                   tag: releaseTag { | ||||
|                     name | ||||
|                     priority | ||||
|                     slug | ||||
|  |  | |||
|  | @ -300,7 +300,7 @@ exports.up = knex => Promise.resolve() | |||
|         COMMENT ON VIEW actors_media IS E'@foreignKey (target_id) references actors (id)|@fieldName actorMedia'; | ||||
|         COMMENT ON VIEW tags_media IS E'@foreignKey (target_id) references tags (id)|@fieldName tagMedia'; | ||||
| 
 | ||||
|         COMMENT ON VIEW releases_tags IS E'@foreignKey (target_id) references releases (id)\n@foreignKey (tag_id) references tags (id)|@fieldName releaseTags'; | ||||
|         COMMENT ON VIEW releases_tags IS E'@foreignKey (target_id) references releases (id)\n@foreignKey (tag_id) references tags (id)|@fieldName releaseTag'; | ||||
|     `));
 | ||||
| 
 | ||||
| exports.down = knex => Promise.resolve() | ||||
|  |  | |||
							
								
								
									
										1403
									
								
								public/css/style.css
								
								
								
								
							
							
						
						
									
										1403
									
								
								public/css/style.css
								
								
								
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										311
									
								
								src/releases.js
								
								
								
								
							
							
						
						
									
										311
									
								
								src/releases.js
								
								
								
								
							|  | @ -49,223 +49,102 @@ function commonQuery(queryBuilder, { | |||
|         .limit(limit); | ||||
| } | ||||
| 
 | ||||
| async function curateMovie(release, deep = true) { | ||||
|     const [scenes, actors, tags, media] = await Promise.all([ | ||||
|         knex('releases') | ||||
|             .where('releases.parent_id', release.id) | ||||
|             .modify(commonQuery, {}), | ||||
|         knex('actors_associated') | ||||
|             .select( | ||||
|                 'actors.id', 'actors.name', 'actors.gender', 'actors.slug', 'actors.birthdate', | ||||
|                 'birth_countries.alpha2 as birth_country_alpha2', 'birth_countries.name as birth_country_name', 'birth_countries.alias as birth_country_alias', | ||||
|                 'media.thumbnail as avatar', | ||||
|             ) | ||||
|             .where({ release_id: release.id }) | ||||
|             .leftJoin('actors', 'actors.id', 'actors_associated.actor_id') | ||||
|             .leftJoin('countries as birth_countries', 'actors.birth_country_alpha2', 'birth_countries.alpha2') | ||||
|             .leftJoin('media', (builder) => { | ||||
|                 builder | ||||
|                     .on('media.target_id', 'actors.id') | ||||
|                     .andOnVal('media.domain', 'actors') | ||||
|                     .andOnVal('media.index', '0'); | ||||
|             }) | ||||
|             .orderBy('actors.gender'), | ||||
|         knex('tags_associated') | ||||
|             .select('tags.name', 'tags.slug') | ||||
|             .where({ | ||||
|                 domain: 'releases', | ||||
|                 target_id: release.id, | ||||
|             }) | ||||
|             .leftJoin('tags', 'tags.id', 'tags_associated.tag_id') | ||||
|             .orderBy('tags.priority', 'desc'), | ||||
|         knex('media') | ||||
|             .where({ | ||||
|                 target_id: release.id, | ||||
|                 domain: 'releases', | ||||
|             }) | ||||
|             .orderBy(['role', 'index']), | ||||
|     ]); | ||||
| 
 | ||||
|     const curatedRelease = { | ||||
|         id: release.id, | ||||
|         type: release.type, | ||||
|         title: release.title, | ||||
|         date: release.date, | ||||
|         dateAdded: release.created_at, | ||||
|         description: release.description, | ||||
|         url: release.url, | ||||
|         shootId: release.shoot_id, | ||||
|         entryId: release.entry_id, | ||||
|         actors: actors.map(actor => ({ | ||||
|             id: actor.id, | ||||
|             slug: actor.slug, | ||||
|             name: actor.name, | ||||
|             gender: actor.gender, | ||||
|             birthdate: actor.birthdate, | ||||
|             age: moment().diff(actor.birthdate, 'years'), | ||||
|             ageThen: moment(release.date).diff(actor.birthdate, 'years'), | ||||
|             avatar: actor.avatar, | ||||
|             origin: actor.birth_country_alpha2 | ||||
|                 ? { | ||||
|                     country: { | ||||
|                         name: actor.birth_country_alias, | ||||
|                         alpha2: actor.birth_country_alpha2, | ||||
|                     }, | ||||
|                 } | ||||
|                 : null, | ||||
|         })), | ||||
|         director: release.director, | ||||
|         tags, | ||||
|         duration: release.duration, | ||||
|         photos: media.filter(item => item.role === 'photo'), | ||||
|         poster: media.filter(item => item.role === 'poster')[0], | ||||
|         covers: media.filter(item => item.role === 'cover'), | ||||
|         trailer: media.filter(item => item.role === 'trailer')[0], | ||||
|         site: { | ||||
|             id: release.site_id, | ||||
|             name: release.site_name, | ||||
|             independent: release.site_parameters | ||||
|                 ? (JSON.parse(release.site_parameters).independent || false) | ||||
|                 : false, | ||||
|             slug: release.site_slug, | ||||
|             url: release.site_url, | ||||
|         }, | ||||
|         studio: release.studio_id | ||||
|             ? { | ||||
|                 id: release.studio_id, | ||||
|                 name: release.studio_name, | ||||
|                 slug: release.studio_slug, | ||||
|                 url: release.studio_url, | ||||
|             } | ||||
|             : null, | ||||
|         network: { | ||||
|             id: release.network_id, | ||||
|             name: release.network_name, | ||||
|             description: release.network_description, | ||||
|             slug: release.network_slug, | ||||
|             url: release.network_url, | ||||
|         }, | ||||
|     }; | ||||
| 
 | ||||
|     if (scenes && scenes.length > 0 && deep) { | ||||
|         curatedRelease.scenes = await Promise.map(scenes, scene => curateRelease(scene, false)); | ||||
|     } | ||||
| 
 | ||||
|     return curatedRelease; | ||||
| } | ||||
| 
 | ||||
| async function curateScene(release, deep = true) { | ||||
|     const [movie, actors, tags, media] = await Promise.all([ | ||||
|         knex('releases') | ||||
|             .where('releases.id', release.parent_id) | ||||
|             .modify(commonQuery, {}) | ||||
|             .first(), | ||||
|         knex('actors_associated') | ||||
|             .select( | ||||
|                 'actors.id', 'actors.name', 'actors.gender', 'actors.slug', 'actors.birthdate', | ||||
|                 'birth_countries.alpha2 as birth_country_alpha2', 'birth_countries.name as birth_country_name', 'birth_countries.alias as birth_country_alias', | ||||
|                 'media.thumbnail as avatar', | ||||
|             ) | ||||
|             .where({ release_id: release.id }) | ||||
|             .leftJoin('actors', 'actors.id', 'actors_associated.actor_id') | ||||
|             .leftJoin('countries as birth_countries', 'actors.birth_country_alpha2', 'birth_countries.alpha2') | ||||
|             .leftJoin('media', (builder) => { | ||||
|                 builder | ||||
|                     .on('media.target_id', 'actors.id') | ||||
|                     .andOnVal('media.domain', 'actors') | ||||
|                     .andOnVal('media.index', '0'); | ||||
|             }) | ||||
|             .orderBy('actors.gender'), | ||||
|         knex('tags_associated') | ||||
|             .select('tags.name', 'tags.slug') | ||||
|             .where({ | ||||
|                 domain: 'releases', | ||||
|                 target_id: release.id, | ||||
|             }) | ||||
|             .leftJoin('tags', 'tags.id', 'tags_associated.tag_id') | ||||
|             .orderBy('tags.priority', 'desc'), | ||||
|         knex('media') | ||||
|             .where({ | ||||
|                 target_id: release.id, | ||||
|                 domain: 'releases', | ||||
|             }) | ||||
|             .orderBy(['role', 'index']), | ||||
|     ]); | ||||
| 
 | ||||
|     const curatedRelease = { | ||||
|         id: release.id, | ||||
|         type: release.type, | ||||
|         title: release.title, | ||||
|         date: release.date, | ||||
|         dateAdded: release.created_at, | ||||
|         description: release.description, | ||||
|         url: release.url, | ||||
|         shootId: release.shoot_id, | ||||
|         entryId: release.entry_id, | ||||
|         actors: actors.map(actor => ({ | ||||
|             id: actor.id, | ||||
|             slug: actor.slug, | ||||
|             name: actor.name, | ||||
|             gender: actor.gender, | ||||
|             birthdate: actor.birthdate, | ||||
|             age: moment().diff(actor.birthdate, 'years'), | ||||
|             ageThen: moment(release.date).diff(actor.birthdate, 'years'), | ||||
|             avatar: actor.avatar, | ||||
|             origin: actor.birth_country_alpha2 | ||||
|                 ? { | ||||
|                     country: { | ||||
|                         name: actor.birth_country_alias, | ||||
|                         alpha2: actor.birth_country_alpha2, | ||||
|                     }, | ||||
|                 } | ||||
|                 : null, | ||||
|         })), | ||||
|         director: release.director, | ||||
|         tags, | ||||
|         duration: release.duration, | ||||
|         photos: media.filter(item => item.role === 'photo'), | ||||
|         poster: media.filter(item => item.role === 'poster')[0], | ||||
|         covers: media.filter(item => item.role === 'cover'), | ||||
|         trailer: media.filter(item => item.role === 'trailer')[0], | ||||
|         site: { | ||||
|             id: release.site_id, | ||||
|             name: release.site_name, | ||||
|             independent: release.site_parameters | ||||
|                 ? (JSON.parse(release.site_parameters).independent || false) | ||||
|                 : false, | ||||
|             slug: release.site_slug, | ||||
|             url: release.site_url, | ||||
|         }, | ||||
|         studio: release.studio_id | ||||
|             ? { | ||||
|                 id: release.studio_id, | ||||
|                 name: release.studio_name, | ||||
|                 slug: release.studio_slug, | ||||
|                 url: release.studio_url, | ||||
|             } | ||||
|             : null, | ||||
|         network: { | ||||
|             id: release.network_id, | ||||
|             name: release.network_name, | ||||
|             description: release.network_description, | ||||
|             slug: release.network_slug, | ||||
|             url: release.network_url, | ||||
|         }, | ||||
|     }; | ||||
| 
 | ||||
|     if (movie && deep) { | ||||
|         curatedRelease.movie = await curateMovie(movie, false); | ||||
|     } | ||||
| 
 | ||||
|     return curatedRelease; | ||||
| } | ||||
| 
 | ||||
| async function curateRelease(release) { | ||||
|     if (release.type === 'movie') { | ||||
|         return curateMovie(release); | ||||
|     } | ||||
|     const [actors, tags, media] = await Promise.all([ | ||||
|         knex('actors_associated') | ||||
|             .select( | ||||
|                 'actors.id', 'actors.name', 'actors.gender', 'actors.slug', 'actors.birthdate', | ||||
|                 'birth_countries.alpha2 as birth_country_alpha2', 'birth_countries.name as birth_country_name', 'birth_countries.alias as birth_country_alias', | ||||
|                 'media.thumbnail as avatar', | ||||
|             ) | ||||
|             .where({ release_id: release.id }) | ||||
|             .leftJoin('actors', 'actors.id', 'actors_associated.actor_id') | ||||
|             .leftJoin('countries as birth_countries', 'actors.birth_country_alpha2', 'birth_countries.alpha2') | ||||
|             .leftJoin('media', (builder) => { | ||||
|                 builder | ||||
|                     .on('media.target_id', 'actors.id') | ||||
|                     .andOnVal('media.domain', 'actors') | ||||
|                     .andOnVal('media.index', '0'); | ||||
|             }) | ||||
|             .orderBy('actors.gender'), | ||||
|         knex('tags_associated') | ||||
|             .select('tags.name', 'tags.slug') | ||||
|             .where({ | ||||
|                 domain: 'releases', | ||||
|                 target_id: release.id, | ||||
|             }) | ||||
|             .leftJoin('tags', 'tags.id', 'tags_associated.tag_id') | ||||
|             .orderBy('tags.priority', 'desc'), | ||||
|         knex('media') | ||||
|             .where({ | ||||
|                 target_id: release.id, | ||||
|                 domain: 'releases', | ||||
|             }) | ||||
|             .orderBy(['role', 'index']), | ||||
|     ]); | ||||
| 
 | ||||
|     return curateScene(release); | ||||
|     const curatedRelease = { | ||||
|         id: release.id, | ||||
|         type: release.type, | ||||
|         title: release.title, | ||||
|         date: release.date, | ||||
|         dateAdded: release.created_at, | ||||
|         description: release.description, | ||||
|         url: release.url, | ||||
|         shootId: release.shoot_id, | ||||
|         entryId: release.entry_id, | ||||
|         actors: actors.map(actor => ({ | ||||
|             id: actor.id, | ||||
|             slug: actor.slug, | ||||
|             name: actor.name, | ||||
|             gender: actor.gender, | ||||
|             birthdate: actor.birthdate, | ||||
|             age: moment().diff(actor.birthdate, 'years'), | ||||
|             ageThen: moment(release.date).diff(actor.birthdate, 'years'), | ||||
|             avatar: actor.avatar, | ||||
|             origin: actor.birth_country_alpha2 | ||||
|                 ? { | ||||
|                     country: { | ||||
|                         name: actor.birth_country_alias, | ||||
|                         alpha2: actor.birth_country_alpha2, | ||||
|                     }, | ||||
|                 } | ||||
|                 : null, | ||||
|         })), | ||||
|         director: release.director, | ||||
|         tags, | ||||
|         duration: release.duration, | ||||
|         photos: media.filter(item => item.role === 'photo'), | ||||
|         poster: media.filter(item => item.role === 'poster')[0], | ||||
|         covers: media.filter(item => item.role === 'cover'), | ||||
|         trailer: media.filter(item => item.role === 'trailer')[0], | ||||
|         site: { | ||||
|             id: release.site_id, | ||||
|             name: release.site_name, | ||||
|             independent: release.site_parameters | ||||
|                 ? (JSON.parse(release.site_parameters).independent || false) | ||||
|                 : false, | ||||
|             slug: release.site_slug, | ||||
|             url: release.site_url, | ||||
|         }, | ||||
|         studio: release.studio_id | ||||
|             ? { | ||||
|                 id: release.studio_id, | ||||
|                 name: release.studio_name, | ||||
|                 slug: release.studio_slug, | ||||
|                 url: release.studio_url, | ||||
|             } | ||||
|             : null, | ||||
|         network: { | ||||
|             id: release.network_id, | ||||
|             name: release.network_name, | ||||
|             description: release.network_description, | ||||
|             slug: release.network_slug, | ||||
|             url: release.network_url, | ||||
|         }, | ||||
|     }; | ||||
| 
 | ||||
|     return curatedRelease; | ||||
| } | ||||
| 
 | ||||
| function curateReleases(releases) { | ||||
|  | @ -274,7 +153,7 @@ function curateReleases(releases) { | |||
| 
 | ||||
| async function attachChannelSite(release) { | ||||
|     if (!release.site.isFallback) { | ||||
|         return release.site; | ||||
|         return release; | ||||
|     } | ||||
| 
 | ||||
|     if (!release.channel) { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue