Added poster to API scene overview.
This commit is contained in:
		
							parent
							
								
									2b808025f9
								
							
						
					
					
						commit
						67ed249239
					
				|  | @ -8,4 +8,5 @@ module.exports = knex({ | ||||||
| 	connection: config.database, | 	connection: config.database, | ||||||
| 	// performance overhead, don't use asyncStackTraces in production
 | 	// performance overhead, don't use asyncStackTraces in production
 | ||||||
| 	asyncStackTraces: process.env.NODE_ENV === 'development', | 	asyncStackTraces: process.env.NODE_ENV === 'development', | ||||||
|  | 	debug: process.env.NODE_ENV === 'development', | ||||||
| }); | }); | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ const logger = require('./logger')(__filename); | ||||||
| const knex = require('./knex'); | const knex = require('./knex'); | ||||||
| const { flushOrphanedMedia } = require('./media'); | const { flushOrphanedMedia } = require('./media'); | ||||||
| 
 | 
 | ||||||
| function curateRelease(release, withMedia = false) { | function curateRelease(release, withMedia = false, withPoster = true) { | ||||||
| 	if (!release) { | 	if (!release) { | ||||||
| 		return null; | 		return null; | ||||||
| 	} | 	} | ||||||
|  | @ -43,29 +43,35 @@ function curateRelease(release, withMedia = false) { | ||||||
| 			name: tag.name, | 			name: tag.name, | ||||||
| 			slug: tag.slug, | 			slug: tag.slug, | ||||||
| 		})), | 		})), | ||||||
| 		...(withMedia && { | 		...((withMedia || withPoster) && { | ||||||
| 			poster: release.poster ? { | 			poster: release.poster ? { | ||||||
| 				id: release.poster.id, | 				id: release.poster.id, | ||||||
| 				path: release.poster.path, | 				path: release.poster.path, | ||||||
|  | 				thumbnail: release.poster.thumbnail, | ||||||
| 				width: release.poster.width, | 				width: release.poster.width, | ||||||
| 				height: release.poster.height, | 				height: release.poster.height, | ||||||
| 				size: release.poster.size, | 				size: release.poster.size, | ||||||
| 				source: release.poster.source, |  | ||||||
| 			} : null, | 			} : null, | ||||||
|  | 		}), | ||||||
|  | 		...(withMedia && { | ||||||
| 			photos: (release.photos || []).map(photo => ({ | 			photos: (release.photos || []).map(photo => ({ | ||||||
| 				id: photo.id, | 				id: photo.id, | ||||||
| 				path: photo.path, | 				path: photo.path, | ||||||
|  | 				thumbnail: release.poster.thumbnail, | ||||||
| 				width: photo.width, | 				width: photo.width, | ||||||
| 				height: photo.height, | 				height: photo.height, | ||||||
| 				size: photo.size, | 				size: photo.size, | ||||||
| 				source: photo.source, |  | ||||||
| 			})), | 			})), | ||||||
|  | 			trailer: release.trailer ? { | ||||||
|  | 				id: release.trailer.id, | ||||||
|  | 				path: release.trailer.path, | ||||||
|  | 			} : null, | ||||||
| 		}), | 		}), | ||||||
| 		createdAt: release.created_at, | 		createdAt: release.created_at, | ||||||
| 	}; | 	}; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function withRelations(queryBuilder, withMedia = false) { | function withRelations(queryBuilder, withMedia = false, withPoster = true) { | ||||||
| 	queryBuilder | 	queryBuilder | ||||||
| 		.select(knex.raw(` | 		.select(knex.raw(` | ||||||
| 			releases.id, releases.entry_id, releases.shoot_id, releases.title, releases.url, releases.date, releases.description, releases.duration, releases.created_at, | 			releases.id, releases.entry_id, releases.shoot_id, releases.title, releases.url, releases.date, releases.description, releases.duration, releases.created_at, | ||||||
|  | @ -85,24 +91,34 @@ function withRelations(queryBuilder, withMedia = false) { | ||||||
| 			entities.id, parents.id | 			entities.id, parents.id | ||||||
| 		`));
 | 		`));
 | ||||||
| 
 | 
 | ||||||
| 	if (withMedia) { | 	if (withMedia || withPoster) { | ||||||
| 		queryBuilder | 		queryBuilder | ||||||
| 			.select(knex.raw(` | 			.select(knex.raw(` | ||||||
| 				row_to_json(posters) as poster, | 				row_to_json(posters) as poster | ||||||
| 				COALESCE(json_agg(DISTINCT photos) FILTER (WHERE photos.id IS NOT NULL), '[]') as photos |  | ||||||
| 			`))
 | 			`))
 | ||||||
| 			.leftJoin('releases_posters', 'releases_posters.release_id', 'releases.id') | 			.leftJoin('releases_posters', 'releases_posters.release_id', 'releases.id') | ||||||
| 			.leftJoin('media as posters', 'posters.id', 'releases_posters.media_id') | 			.leftJoin('media as posters', 'posters.id', 'releases_posters.media_id') | ||||||
|  | 			.groupBy('posters.id'); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if (withMedia) { | ||||||
|  | 		queryBuilder | ||||||
|  | 			.select(knex.raw(` | ||||||
|  | 				row_to_json(trailers) as trailer, | ||||||
|  | 				COALESCE(json_agg(DISTINCT photos) FILTER (WHERE photos.id IS NOT NULL), '[]') as photos | ||||||
|  | 			`))
 | ||||||
| 			.leftJoin('releases_photos', 'releases_photos.release_id', 'releases.id') | 			.leftJoin('releases_photos', 'releases_photos.release_id', 'releases.id') | ||||||
| 			.leftJoin('media as photos', 'photos.id', 'releases_photos.media_id') | 			.leftJoin('media as photos', 'photos.id', 'releases_photos.media_id') | ||||||
| 			.groupBy('posters.id'); | 			.leftJoin('releases_trailers', 'releases_trailers.release_id', 'releases.id') | ||||||
|  | 			.leftJoin('media as trailers', 'trailers.id', 'releases_trailers.media_id') | ||||||
|  | 			.groupBy('posters.id', 'trailers.id'); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| async function fetchScene(releaseId) { | async function fetchScene(releaseId) { | ||||||
| 	const release = await knex('releases') | 	const release = await knex('releases') | ||||||
| 		.where('releases.id', releaseId) | 		.where('releases.id', releaseId) | ||||||
| 		.modify(withRelations, true) | 		.modify(withRelations, true, true) | ||||||
| 		.first(); | 		.first(); | ||||||
| 
 | 
 | ||||||
| 	return curateRelease(release, true); | 	return curateRelease(release, true); | ||||||
|  | @ -110,7 +126,7 @@ async function fetchScene(releaseId) { | ||||||
| 
 | 
 | ||||||
| async function fetchScenes(limit = 100) { | async function fetchScenes(limit = 100) { | ||||||
| 	const releases = await knex('releases') | 	const releases = await knex('releases') | ||||||
| 		.modify(withRelations, false) | 		.modify(withRelations, false, true) | ||||||
| 		.limit(Math.min(limit, 1000000)); | 		.limit(Math.min(limit, 1000000)); | ||||||
| 
 | 
 | ||||||
| 	return releases.map(release => curateRelease(release)); | 	return releases.map(release => curateRelease(release)); | ||||||
|  | @ -119,7 +135,7 @@ async function fetchScenes(limit = 100) { | ||||||
| async function searchScenes(query, limit = 100) { | async function searchScenes(query, limit = 100) { | ||||||
| 	const releases = await knex | 	const releases = await knex | ||||||
| 		.from(knex.raw('search_releases(?) as releases', [query])) | 		.from(knex.raw('search_releases(?) as releases', [query])) | ||||||
| 		.modify(withRelations, false) | 		.modify(withRelations, false, true) | ||||||
| 		.limit(Math.min(limit, 1000000)); | 		.limit(Math.min(limit, 1000000)); | ||||||
| 
 | 
 | ||||||
| 	return releases.map(release => curateRelease(release)); | 	return releases.map(release => curateRelease(release)); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue