forked from DebaucheryLibrarian/traxxx
				
			
		
			
				
	
	
		
			301 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			301 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| import { graphql } from '../api';
 | |
| import {
 | |
| 	releasesFragment,
 | |
| 	releaseFragment,
 | |
| 	releaseFields,
 | |
| 	movieFields,
 | |
| 	mediaFragment,
 | |
| 	mediaFields,
 | |
| } from '../fragments';
 | |
| import { curateRelease } from '../curate';
 | |
| import getDateRange from '../get-date-range';
 | |
| 
 | |
| function initReleasesActions(store, router) {
 | |
| 	async function fetchReleases({ _commit }, { limit = 10, pageNumber = 1, range = 'latest' }) {
 | |
| 		const { before, after, orderBy } = getDateRange(range);
 | |
| 
 | |
| 		const { connection: { releases, totalCount } } = await graphql(`
 | |
|             query Releases(
 | |
| 				$hasAuth: Boolean!
 | |
| 				$userId: Int
 | |
|                 $limit:Int = 1000,
 | |
|                 $offset:Int = 0,
 | |
|                 $after:Datetime = "1900-01-01 00:00:00",
 | |
|                 $before:Datetime = "2100-01-01 00:00:00",
 | |
|                 $orderBy: [ReleasesOrderBy!],
 | |
|                 $exclude: [String!]
 | |
|             ) {
 | |
|                 ${releasesFragment}
 | |
|             }
 | |
|         `, {
 | |
| 			hasAuth: !!store.state.auth.user,
 | |
| 			userId: store.state.auth.user?.id,
 | |
| 			limit,
 | |
| 			offset: Math.max(0, (pageNumber - 1)) * limit,
 | |
| 			after,
 | |
| 			before,
 | |
| 			orderBy,
 | |
| 			exclude: store.state.ui.tagFilter,
 | |
| 		});
 | |
| 
 | |
| 		return {
 | |
| 			releases: releases.map((release) => curateRelease(release)),
 | |
| 			totalCount,
 | |
| 		};
 | |
| 	}
 | |
| 
 | |
| 	async function fetchReleaseById({ _commit }, releaseId) {
 | |
| 		// const release = await get(`/releases/${releaseId}`);
 | |
| 
 | |
| 		const { release } = await graphql(`
 | |
|             query Release(
 | |
| 				$releaseId: Int!
 | |
| 				$hasAuth: Boolean!
 | |
| 				$userId: Int
 | |
| 			) {
 | |
|                 ${releaseFragment}
 | |
|             }
 | |
|         `, {
 | |
| 			releaseId: Number(releaseId),
 | |
| 			hasAuth: !!store.state.auth.user,
 | |
| 			userId: store.state.auth.user?.id,
 | |
| 		});
 | |
| 
 | |
| 		if (!release) {
 | |
| 			router.replace('/not-found');
 | |
| 			return null;
 | |
| 		}
 | |
| 
 | |
| 		return curateRelease(release);
 | |
| 	}
 | |
| 
 | |
| 	async function fetchMovies({ _commit }, { limit = 10, pageNumber = 1 }) {
 | |
| 		const { connection: { movies, totalCount } } = await graphql(`
 | |
|             query Movies(
 | |
|                 $limit:Int = 1000,
 | |
|                 $offset:Int = 0,
 | |
| 				$hasAuth: Boolean!
 | |
| 				$userId: Int
 | |
|             ) {
 | |
| 				connection: moviesConnection(
 | |
| 					first: $limit
 | |
| 					offset: $offset
 | |
| 					orderBy: DATE_DESC
 | |
| 					filter: {
 | |
| 						date: {
 | |
| 							isNull: false
 | |
| 						}
 | |
| 					}
 | |
| 				) {
 | |
| 					movies: nodes {
 | |
| 						${movieFields}
 | |
| 					}
 | |
| 					totalCount
 | |
| 				}
 | |
| 			}
 | |
|         `, {
 | |
| 			hasAuth: !!store.state.auth.user,
 | |
| 			userId: store.state.auth.user?.id,
 | |
| 			limit,
 | |
| 			offset: Math.max(0, (pageNumber - 1)) * limit,
 | |
| 		});
 | |
| 
 | |
| 		return {
 | |
| 			movies: movies.map((release) => curateRelease(release)),
 | |
| 			totalCount,
 | |
| 		};
 | |
| 	}
 | |
| 
 | |
| 	async function searchMovies({ _commit }, { query, limit = 20, pageNumber = 1 }) {
 | |
| 		const { connection: { movies, totalCount } } = await graphql(`
 | |
|             query SearchMovies(
 | |
|                 $query: String!
 | |
|                 $limit:Int = 20
 | |
|                 $offset:Int = 0
 | |
| 				$hasAuth: Boolean!
 | |
| 				$userId: Int
 | |
|             ) {
 | |
| 				connection: searchMoviesConnection(
 | |
|                     query: $query
 | |
|                     first: $limit
 | |
| 					offset: $offset
 | |
| 					orderBy: RANK_DESC
 | |
|                 ) {
 | |
| 					movies: nodes {
 | |
| 						movie {
 | |
| 							${movieFields}
 | |
| 						}
 | |
| 					}
 | |
| 					totalCount
 | |
|                 }
 | |
|             }
 | |
|         `, {
 | |
| 			hasAuth: !!store.state.auth.user,
 | |
| 			userId: store.state.auth.user?.id,
 | |
| 			query,
 | |
| 			limit,
 | |
| 			offset: Math.max(0, (pageNumber - 1)) * limit,
 | |
| 		});
 | |
| 
 | |
| 		return {
 | |
| 			movies: movies.map(({ movie }) => curateRelease(movie)),
 | |
| 			totalCount,
 | |
| 		};
 | |
| 	}
 | |
| 
 | |
| 	async function fetchCollectionById({ _commit }, movieId, type = 'movie') {
 | |
| 		// const release = await get(`/releases/${releaseId}`);
 | |
| 
 | |
| 		const result = await graphql(`
 | |
| 			query Movie(
 | |
| 				$movieId: Int!
 | |
| 				$hasAuth: Boolean!
 | |
| 				$userId: Int
 | |
| 			) {
 | |
| 				${type}(id: $movieId) {
 | |
| 					id
 | |
| 					title
 | |
| 					description
 | |
| 					slug
 | |
| 					url
 | |
| 					date
 | |
| 					createdBatchId
 | |
| 					actors {
 | |
| 						id
 | |
| 						name
 | |
| 						slug
 | |
| 						age
 | |
| 						ageFromBirth
 | |
| 						dateOfBirth
 | |
| 						birthCountry: countryByBirthCountryAlpha2 {
 | |
| 						  alpha2
 | |
| 						  name
 | |
| 						  alias
 | |
| 						}
 | |
| 						avatar: avatarMedia {
 | |
| 							id
 | |
| 							path
 | |
| 							thumbnail
 | |
| 							width
 | |
| 							height
 | |
| 							thumbnailWidth
 | |
| 							thumbnailHeight
 | |
| 							lazy
 | |
| 							isS3
 | |
| 						}
 | |
| 					}
 | |
| 					poster: ${type === 'series' ? 'seriesPosterBySerieId' : 'moviesPoster'} {
 | |
| 						media {
 | |
| 							id
 | |
| 							path
 | |
| 							thumbnail
 | |
| 							lazy
 | |
| 							width
 | |
| 							height
 | |
| 							thumbnailWidth
 | |
| 							thumbnailHeight
 | |
| 							isS3
 | |
| 						}
 | |
| 					}
 | |
| 					covers: ${type === 'series' ? 'seriesCoversBySerieId' : 'moviesCovers'}(orderBy: MEDIA_BY_MEDIA_ID__INDEX_ASC) {
 | |
| 						media {
 | |
| 							id
 | |
| 							path
 | |
| 							thumbnail
 | |
| 							width
 | |
| 							height
 | |
| 							thumbnailWidth
 | |
| 							thumbnailHeight
 | |
| 							lazy
 | |
| 							isS3
 | |
| 						}
 | |
| 					}
 | |
| 					trailer: ${type === 'series' ? 'seriesTrailerBySerieId' : 'moviesTrailer'} {
 | |
| 						media {
 | |
| 							id
 | |
| 							path
 | |
| 							isS3
 | |
| 						}
 | |
| 					}
 | |
| 					scenes: ${type === 'series' ? 'seriesScenesBySerieId' : 'moviesScenes'} {
 | |
| 						scene {
 | |
| 							${releaseFields}
 | |
| 						}
 | |
| 					}
 | |
| 					tags {
 | |
| 						id
 | |
| 						slug
 | |
| 						name
 | |
| 					}
 | |
| 					photos: ${type === 'series' ? 'seriesPhotosBySerieId' : 'moviesPhotos'} {
 | |
| 						${mediaFragment}
 | |
| 					}
 | |
| 					scenesPhotos {
 | |
| 						${mediaFields}
 | |
| 					}
 | |
| 					entity {
 | |
| 						id
 | |
| 						name
 | |
| 						slug
 | |
| 						type
 | |
| 						hasLogo
 | |
| 						parent {
 | |
| 							id
 | |
| 							name
 | |
| 							slug
 | |
| 							type
 | |
| 							hasLogo
 | |
| 						}
 | |
| 					}
 | |
| 					stashes: ${type === 'series' ? 'stashesSeriesBySerieId' : 'stashesMovies'}(
 | |
| 						filter: {
 | |
| 							stash: {
 | |
| 								userId: {
 | |
| 									equalTo: $userId
 | |
| 								}
 | |
| 							}
 | |
| 						}
 | |
| 					) @include(if: $hasAuth) {
 | |
| 						stash {
 | |
| 							id
 | |
| 							name
 | |
| 							slug
 | |
| 							primary
 | |
| 						}
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 		`, {
 | |
| 			movieId: Number(movieId),
 | |
| 			hasAuth: !!store.state.auth.user,
 | |
| 			userId: store.state.auth.user?.id,
 | |
| 		});
 | |
| 
 | |
| 		if (!result[type]) {
 | |
| 			router.replace('/not-found');
 | |
| 			return null;
 | |
| 		}
 | |
| 
 | |
| 		return curateRelease(result[type]);
 | |
| 	}
 | |
| 
 | |
| 	async function fetchMovieById(context, movieId) {
 | |
| 		return fetchCollectionById(context, movieId, 'movie');
 | |
| 	}
 | |
| 
 | |
| 	async function fetchSerieById(context, serieId) {
 | |
| 		return fetchCollectionById(context, serieId, 'series');
 | |
| 	}
 | |
| 
 | |
| 	return {
 | |
| 		fetchReleases,
 | |
| 		fetchReleaseById,
 | |
| 		fetchMovies,
 | |
| 		fetchMovieById,
 | |
| 		fetchSerieById,
 | |
| 		searchMovies,
 | |
| 	};
 | |
| }
 | |
| 
 | |
| export default initReleasesActions;
 |