forked from DebaucheryLibrarian/traxxx
				
			
		
			
				
	
	
		
			63 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
const config = require('config');
 | 
						|
 | 
						|
exports.up = async function up(knex) {
 | 
						|
	await knex.raw(`
 | 
						|
		CREATE MATERIALIZED VIEW actors_meta AS (
 | 
						|
			SELECT
 | 
						|
				actors.id as actor_id,
 | 
						|
				COUNT(DISTINCT stashes_actors)::integer as stashed,
 | 
						|
				COUNT(DISTINCT releases_actors)::integer as scenes,
 | 
						|
				row_to_json(avatars) as avatar
 | 
						|
			FROM actors
 | 
						|
			LEFT JOIN stashes_actors ON stashes_actors.actor_id = actors.id
 | 
						|
			LEFT JOIN releases_actors ON releases_actors.actor_id = actors.id
 | 
						|
			LEFT JOIN media AS avatars ON avatars.id = actors.avatar_media_id
 | 
						|
			GROUP BY
 | 
						|
				actors.id,
 | 
						|
				avatars.id
 | 
						|
		);
 | 
						|
 | 
						|
		CREATE MATERIALIZED VIEW scenes_meta AS (
 | 
						|
			SELECT
 | 
						|
				releases.id as scene_id,
 | 
						|
				COUNT(DISTINCT stashes_scenes)::integer as stashed
 | 
						|
			FROM releases
 | 
						|
			LEFT JOIN stashes_scenes ON stashes_scenes.scene_id = releases.id
 | 
						|
			GROUP BY releases.id
 | 
						|
		);
 | 
						|
 | 
						|
		CREATE MATERIALIZED VIEW movies_meta AS (
 | 
						|
			SELECT
 | 
						|
				movie_id,
 | 
						|
				stashed,
 | 
						|
				stashed_scenes,
 | 
						|
				stashed + stashed_scenes as stashed_total
 | 
						|
			FROM (
 | 
						|
				SELECT
 | 
						|
					movies.id as movie_id,
 | 
						|
					COUNT(DISTINCT stashes_movies)::integer as stashed,
 | 
						|
					COUNT(DISTINCT stashes_scenes)::integer as stashed_scenes
 | 
						|
				FROM movies
 | 
						|
				LEFT JOIN stashes_movies ON stashes_movies.movie_id = movies.id
 | 
						|
				LEFT JOIN movies_scenes ON movies_scenes.movie_id = movies.id
 | 
						|
				LEFT JOIN stashes_scenes ON stashes_scenes.scene_id = movies_scenes.scene_id
 | 
						|
				GROUP BY movies.id
 | 
						|
			) AS meta
 | 
						|
		);
 | 
						|
 | 
						|
		GRANT ALL ON actors_meta TO :visitor;
 | 
						|
		GRANT ALL ON scenes_meta TO :visitor;
 | 
						|
		GRANT ALL ON movies_meta TO :visitor;
 | 
						|
	`, {
 | 
						|
		visitor: knex.raw(config.database.query.user),
 | 
						|
	});
 | 
						|
};
 | 
						|
 | 
						|
exports.down = async function down(knex) {
 | 
						|
	await knex.raw(`
 | 
						|
		DROP MATERIALIZED VIEW IF EXISTS actors_meta;
 | 
						|
		DROP MATERIALIZED VIEW IF EXISTS scenes_meta;
 | 
						|
		DROP MATERIALIZED VIEW IF EXISTS movies_meta;
 | 
						|
	`);
 | 
						|
};
 |