traxxx/assets/js/releases/actions.js

300 lines
5.6 KiB
JavaScript
Raw Normal View History

import { graphql } from '../api';
import {
releasesFragment,
releaseFragment,
releaseFields,
movieFields,
} from '../fragments';
import { curateRelease } from '../curate';
import getDateRange from '../get-date-range';
2020-09-10 01:17:19 +00:00
function initReleasesActions(store, router) {
2020-05-22 02:32:16 +00:00
async function fetchReleases({ _commit }, { limit = 10, pageNumber = 1, range = 'latest' }) {
const { before, after, orderBy } = getDateRange(range);
2020-05-22 02:32:16 +00:00
const { connection: { releases, totalCount } } = await graphql(`
2019-12-18 01:42:55 +00:00
query Releases(
$hasAuth: Boolean!
$userId: Int
2019-12-18 01:42:55 +00:00
$limit:Int = 1000,
2020-05-22 02:32:16 +00:00
$offset:Int = 0,
2020-08-19 19:48:55 +00:00
$after:Datetime = "1900-01-01 00:00:00",
$before:Datetime = "2100-01-01 00:00:00",
$orderBy: [ReleasesOrderBy!],
2020-01-30 22:41:10 +00:00
$exclude: [String!]
2019-12-18 01:42:55 +00:00
) {
${releasesFragment}
}
2019-12-15 22:01:48 +00:00
`, {
hasAuth: !!store.state.auth.user,
userId: store.state.auth.user?.id,
limit,
2020-05-22 02:32:16 +00:00
offset: Math.max(0, (pageNumber - 1)) * limit,
after,
before,
orderBy,
2021-01-03 21:53:51 +00:00
exclude: store.state.ui.tagFilter,
});
2020-05-22 02:32:16 +00:00
return {
2021-11-20 22:59:15 +00:00
releases: releases.map((release) => curateRelease(release)),
2020-05-22 02:32:16 +00:00
totalCount,
};
}
async function fetchReleaseById({ _commit }, releaseId) {
// const release = await get(`/releases/${releaseId}`);
const { release } = await graphql(`
2021-03-17 01:09:34 +00:00
query Release(
$releaseId: Int!
$hasAuth: Boolean!
$userId: Int
) {
${releaseFragment}
}
`, {
releaseId: Number(releaseId),
2021-03-17 01:09:34 +00:00
hasAuth: !!store.state.auth.user,
userId: store.state.auth.user?.id,
});
2020-09-10 01:17:19 +00:00
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
2021-02-02 03:03:36 +00:00
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 {
2021-11-20 22:59:15 +00:00
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
) {
connection: searchMoviesConnection(
query: $query
first: $limit
offset: $offset
orderBy: RANK_DESC
) {
movies: nodes {
movie {
${movieFields}
}
}
totalCount
}
}
`, {
query,
limit,
offset: Math.max(0, (pageNumber - 1)) * limit,
});
return {
movies: movies.map(({ movie }) => curateRelease(movie)),
totalCount,
};
}
async function fetchMovieById({ _commit }, movieId) {
// const release = await get(`/releases/${releaseId}`);
const { movie } = await graphql(`
query Movie(
$movieId: Int!
$hasAuth: Boolean!
$userId: Int
) {
movie(id: $movieId) {
id
title
description
slug
url
date
createdBatchId
actors {
id
name
2020-09-08 00:20:15 +00:00
slug
age
2020-12-17 02:48:38 +00:00
ageFromBirth
dateOfBirth
birthCountry: countryByBirthCountryAlpha2 {
alpha2
name
alias
}
avatar: avatarMedia {
id
path
thumbnail
width
height
thumbnailWidth
thumbnailHeight
lazy
2021-02-23 00:30:38 +00:00
isS3
}
}
poster: moviesPosterByMovieId {
2021-02-23 00:30:38 +00:00
media {
id
path
thumbnail
lazy
width
height
thumbnailWidth
thumbnailHeight
2021-02-23 00:30:38 +00:00
isS3
}
}
covers: moviesCovers {
media {
id
path
thumbnail
width
height
thumbnailWidth
thumbnailHeight
2020-09-08 00:20:15 +00:00
lazy
2021-02-23 00:30:38 +00:00
isS3
}
}
trailer: moviesTrailerByMovieId {
media {
id
path
2021-02-23 00:30:38 +00:00
isS3
}
}
scenes: moviesScenes {
scene {
${releaseFields}
}
}
tags {
id
slug
name
}
2020-09-08 00:20:15 +00:00
photos {
id
index
path
thumbnail
lazy
width
height
thumbnailWidth
thumbnailHeight
2021-02-23 00:30:38 +00:00
isS3
2020-09-08 00:20:15 +00:00
comment
sfw: sfwMedia {
id
thumbnail
lazy
path
comment
}
}
entity {
id
name
slug
type
hasLogo
parent {
id
name
slug
type
hasLogo
}
}
stashes: 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,
});
2020-09-10 01:17:19 +00:00
if (!movie) {
router.replace('/not-found');
return null;
}
return curateRelease(movie);
}
return {
fetchReleases,
fetchReleaseById,
fetchMovies,
fetchMovieById,
searchMovies,
};
}
export default initReleasesActions;