Files
traxxx-web/src/web/stashes.js

240 lines
5.1 KiB
JavaScript
Executable File

import Router from 'express-promise-router';
import {
fetchUserStashes,
createStash,
removeStash,
stashActor,
stashScene,
stashMovie,
unstashActor,
unstashScene,
unstashMovie,
updateStash,
fetchStashByUsernameAndSlug,
} from '../stashes.js';
export const stashesSchema = `
extend type Query {
stashes(username: String): [Stash]
stash(
username: String
stash: String!
): Stash
}
extend type Mutation {
createStash(
name: String!
isPublic: Boolean
comment: String
meta: JSON
): Stash
updateStash(
stash: String!
name: String
isPublic: Boolean
comment: String
meta: JSON
): Stash
removeStash(
stash: String!
): Stash
stashScene(
sceneId: Int!
stash: String!
): Stashed
unstashScene(
sceneId: Int!
stash: String!
): Stashed
stashActor(
actorId: Int!
stash: String!
): Stashed
unstashActor(
actorId: Int!
stash: String!
): Stashed
stashMovie(
movieId: Int!
stash: String!
): Stashed
unstashMovie(
movieId: Int!
stash: String!
): Stashed
}
type Stash {
id: Int
name: String
slug: String
isPublic: Boolean
isPrimary: Boolean
createdAt: Date
comment: String
meta: JSON
}
type Stashed {
id: Int
stashId: Int
sceneId: Int
actorId: Int
movieId: Int
serieId: Int
createdAt: Date
}
`;
export async function fetchUserStashesApi(req, res) {
const stashes = await fetchUserStashes(req.user.id, req.user);
res.send(stashes);
}
export async function fetchUserStashesGraphql(query, req) {
const stashes = await fetchUserStashes(query.username || req.user.id, req.user);
return stashes;
}
export async function fetchStashGraphql(query, req) {
const stashes = await fetchStashByUsernameAndSlug(query.username || req.user.id, query.stash, req.user);
return stashes;
}
export async function createStashApi(req, res) {
const stash = await createStash(req.body, req.user);
res.send(stash);
}
export async function createStashGraphql(query, req) {
const stash = await createStash(query, req.user);
return stash;
}
export async function updateStashApi(req, res) {
const stash = await updateStash(Number(req.params.stashId), req.body, req.user);
res.send(stash);
}
export async function updateStashGraphql(query, req) {
const stash = await updateStash(query.stash, query, req.user);
return stash;
}
export async function removeStashApi(req, res) {
await removeStash(Number(req.params.stashId) || req.params.stashId, req.user);
res.status(204).send();
}
export async function removeStashGraphql(query, req) {
const removedId = await removeStash(query.stash, req.user);
return removedId;
}
export async function stashActorApi(req, res) {
const stashed = await stashActor(req.body.actorId, Number(req.params.stashId), req.user);
res.send(stashed);
}
export async function stashActorGraphql(query, req) {
const stashed = await stashActor(query.actorId, query.stash, req.user);
return stashed;
}
export async function unstashActorApi(req, res) {
const unstashed = await unstashActor(Number(req.params.actorId), Number(req.params.stashId), req.user);
res.send(unstashed);
}
export async function unstashActorGraphql(query, req) {
const stashes = await unstashActor(query.actorId, query.stash, req.user);
return stashes;
}
export async function stashSceneApi(req, res) {
const stashed = await stashScene(req.body.sceneId, Number(req.params.stashId), req.user);
res.send(stashed);
}
export async function stashSceneGraphql(query, req) {
const stashed = await stashScene(query.sceneId, query.stash, req.user);
return stashed;
}
export async function unstashSceneApi(req, res) {
const unstashed = await unstashScene(Number(req.params.sceneId), Number(req.params.stashId), req.user);
res.send(unstashed);
}
export async function unstashSceneGraphql(query, req) {
const unstashed = await unstashScene(query.sceneId, query.stash, req.user);
return unstashed;
}
export async function stashMovieApi(req, res) {
const stashed = await stashMovie(req.body.movieId, Number(req.params.stashId), req.user);
res.send(stashed);
}
export async function stashMovieGraphql(query, req) {
const stashed = await stashMovie(query.movieId, query.stash, req.user);
return stashed;
}
export async function unstashMovieApi(req, res) {
const unstashed = await unstashMovie(Number(req.params.movieId), Number(req.params.stashId), req.user);
res.send(unstashed);
}
export async function unstashMovieGraphql(query, req) {
const unstashed = await unstashMovie(query.movieId, query.stash, req.user);
return unstashed;
}
export const router = Router();
router.get('/api/users/:userId/stashes', fetchUserStashesApi);
router.post('/api/stashes', createStashApi);
router.patch('/api/stashes/:stashId', updateStashApi);
router.delete('/api/stashes/:stashId', removeStashApi);
router.post('/api/stashes/:stashId/actors', stashActorApi);
router.post('/api/stashes/:stashId/scenes', stashSceneApi);
router.post('/api/stashes/:stashId/movies', stashMovieApi);
router.delete('/api/stashes/:stashId/actors/:actorId', unstashActorApi);
router.delete('/api/stashes/:stashId/scenes/:sceneId', unstashSceneApi);
router.delete('/api/stashes/:stashId/movies/:movieId', unstashMovieApi);