Expanded edit fields. Added revision history to scene and user pages.
This commit is contained in:
@@ -20,6 +20,11 @@ function getIp(req) {
|
||||
? ip.slice(ip.lastIndexOf(':') + 1)
|
||||
: ip;
|
||||
|
||||
if (!unmappedIp) {
|
||||
console.log('failed unmapped ip', ip, unmappedIp);
|
||||
return null;
|
||||
}
|
||||
|
||||
// ensure IP is in expanded notation for consistency and matching
|
||||
const expandedIp = unmappedIp.includes(':')
|
||||
? new IPCIDR(`${ip}/128`) // IPv6
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
import Router from 'express-promise-router';
|
||||
import { stringify } from '@brillout/json-serializer/stringify'; /* eslint-disable-line import/extensions */
|
||||
|
||||
import {
|
||||
fetchScenes,
|
||||
fetchScenesById,
|
||||
fetchSceneRevisions,
|
||||
createSceneRevision,
|
||||
reviewSceneRevision,
|
||||
} from '../scenes.js';
|
||||
|
||||
import { parseActorIdentifier } from '../query.js';
|
||||
@@ -48,7 +51,7 @@ export async function curateScenesQuery(query) {
|
||||
};
|
||||
}
|
||||
|
||||
export async function fetchScenesApi(req, res) {
|
||||
async function fetchScenesApi(req, res) {
|
||||
const {
|
||||
scenes,
|
||||
aggYears,
|
||||
@@ -203,11 +206,9 @@ export async function fetchScenesGraphql(query, req) {
|
||||
};
|
||||
}
|
||||
|
||||
export async function fetchSceneApi(req, res) {
|
||||
async function fetchSceneApi(req, res) {
|
||||
const [scene] = await fetchScenesById([Number(req.params.sceneId)], { reqUser: req.user });
|
||||
|
||||
console.log(req.params.sceneId, scene);
|
||||
|
||||
if (!scene) {
|
||||
throw new HttpError(`No scene with ID ${req.params.sceneId} found`, 404);
|
||||
}
|
||||
@@ -228,8 +229,30 @@ export async function fetchScenesByIdGraphql(query, req) {
|
||||
return scenes[0];
|
||||
}
|
||||
|
||||
export async function createSceneRevisionApi(req, res) {
|
||||
await createSceneRevision(Number(req.params.sceneId), req.body, req.user);
|
||||
async function fetchSceneRevisionsApi(req, res) {
|
||||
const revisions = await fetchSceneRevisions(Number(req.params.revisionId) || null, req.query, req.user);
|
||||
|
||||
res.send(revisions);
|
||||
}
|
||||
|
||||
async function createSceneRevisionApi(req, res) {
|
||||
await createSceneRevision(Number(req.body.sceneId), req.body, req.user);
|
||||
|
||||
res.status(204).send();
|
||||
}
|
||||
|
||||
async function reviewSceneRevisionApi(req, res) {
|
||||
await reviewSceneRevision(Number(req.params.revisionId), req.body.isApproved, req.body, req.user);
|
||||
|
||||
res.status(204).send();
|
||||
}
|
||||
|
||||
export const scenesRouter = Router();
|
||||
|
||||
scenesRouter.get('/api/scenes', fetchScenesApi);
|
||||
scenesRouter.get('/api/scenes/:sceneId', fetchSceneApi);
|
||||
|
||||
scenesRouter.get('/api/revisions', fetchSceneRevisionsApi);
|
||||
scenesRouter.get('/api/revisions/:revisionId', fetchSceneRevisionsApi);
|
||||
scenesRouter.post('/api/revisions', createSceneRevisionApi);
|
||||
scenesRouter.post('/api/revisions/:revisionId/reviews', reviewSceneRevisionApi);
|
||||
|
||||
@@ -13,11 +13,7 @@ import redis from '../redis.js';
|
||||
import errorHandler from './error.js';
|
||||
import consentHandler from './consent.js';
|
||||
|
||||
import {
|
||||
fetchScenesApi,
|
||||
fetchSceneApi,
|
||||
createSceneRevisionApi,
|
||||
} from './scenes.js';
|
||||
import { scenesRouter } from './scenes.js';
|
||||
|
||||
import { fetchActorsApi } from './actors.js';
|
||||
import { fetchMoviesApi } from './movies.js';
|
||||
@@ -39,25 +35,8 @@ import {
|
||||
flushUserKeysApi,
|
||||
} from './auth.js';
|
||||
|
||||
import {
|
||||
fetchUserApi,
|
||||
fetchUserTemplatesApi,
|
||||
createTemplateApi,
|
||||
removeTemplateApi,
|
||||
} from './users.js';
|
||||
|
||||
import {
|
||||
fetchUserStashesApi,
|
||||
createStashApi,
|
||||
removeStashApi,
|
||||
stashActorApi,
|
||||
stashSceneApi,
|
||||
stashMovieApi,
|
||||
unstashActorApi,
|
||||
unstashSceneApi,
|
||||
unstashMovieApi,
|
||||
updateStashApi,
|
||||
} from './stashes.js';
|
||||
import { router as userRouter } from './users.js';
|
||||
import { router as stashesRouter } from './stashes.js';
|
||||
|
||||
import {
|
||||
fetchAlertsApi,
|
||||
@@ -145,32 +124,12 @@ export default async function initServer() {
|
||||
router.delete('/api/session', logoutApi);
|
||||
|
||||
// USERS
|
||||
router.get('/api/users/:userId', fetchUserApi);
|
||||
router.post('/api/users', signupApi);
|
||||
|
||||
router.get('/api/users/:userId/notifications', fetchNotificationsApi);
|
||||
router.patch('/api/users/:userId/notifications', updateNotificationsApi);
|
||||
router.patch('/api/users/:userId/notifications/:notificationId', updateNotificationApi);
|
||||
|
||||
// STASHES
|
||||
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);
|
||||
|
||||
// SUMMARY TEMPLATES
|
||||
router.get('/api/users/:userId/templates', fetchUserTemplatesApi);
|
||||
router.post('/api/templates', createTemplateApi);
|
||||
router.delete('/api/templates/:templateId', removeTemplateApi);
|
||||
|
||||
// API KEYS
|
||||
router.get('/api/me/keys', fetchUserKeysApi);
|
||||
router.post('/api/keys', createKeyApi);
|
||||
@@ -182,10 +141,9 @@ export default async function initServer() {
|
||||
router.post('/api/alerts', createAlertApi);
|
||||
router.delete('/api/alerts/:alertId', removeAlertApi);
|
||||
|
||||
// SCENES
|
||||
router.get('/api/scenes', fetchScenesApi);
|
||||
router.get('/api/scenes/:sceneId', fetchSceneApi);
|
||||
router.patch('/api/scenes/:sceneId', createSceneRevisionApi);
|
||||
router.use(userRouter);
|
||||
router.use(stashesRouter);
|
||||
router.use(scenesRouter);
|
||||
|
||||
// ACTORS
|
||||
router.get('/api/actors', fetchActorsApi);
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import Router from 'express-promise-router';
|
||||
|
||||
import {
|
||||
fetchUserStashes,
|
||||
createStash,
|
||||
@@ -70,3 +72,18 @@ export async function unstashMovieApi(req, res) {
|
||||
|
||||
res.send(stashes);
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import Router from 'express-promise-router';
|
||||
import { stringify } from '@brillout/json-serializer/stringify'; /* eslint-disable-line import/extensions */
|
||||
|
||||
import {
|
||||
@@ -5,28 +6,45 @@ import {
|
||||
fetchUserTemplates,
|
||||
createTemplate,
|
||||
removeTemplate,
|
||||
createBan,
|
||||
} from '../users.js';
|
||||
|
||||
export async function fetchUserApi(req, res) {
|
||||
async function fetchUserApi(req, res) {
|
||||
const user = await fetchUser(req.params.userId, {}, req.user);
|
||||
|
||||
res.send(stringify(user));
|
||||
}
|
||||
|
||||
export async function fetchUserTemplatesApi(req, res) {
|
||||
async function fetchUserTemplatesApi(req, res) {
|
||||
const templates = await fetchUserTemplates(req.user);
|
||||
|
||||
res.send(templates);
|
||||
}
|
||||
|
||||
export async function createTemplateApi(req, res) {
|
||||
async function createTemplateApi(req, res) {
|
||||
const template = await createTemplate(req.body, req.user);
|
||||
|
||||
res.send(stringify(template));
|
||||
}
|
||||
|
||||
export async function removeTemplateApi(req, res) {
|
||||
async function removeTemplateApi(req, res) {
|
||||
await removeTemplate(req.params.templateId, req.user);
|
||||
|
||||
res.status(204).send();
|
||||
}
|
||||
|
||||
async function createBanApi(req, res) {
|
||||
await createBan(req.body, req.user);
|
||||
|
||||
res.status(204).send();
|
||||
}
|
||||
|
||||
export const router = Router();
|
||||
|
||||
router.get('/api/users/:userId', fetchUserApi);
|
||||
router.get('/api/users/:userId/templates', fetchUserTemplatesApi);
|
||||
|
||||
router.post('/api/templates', createTemplateApi);
|
||||
router.delete('/api/templates/:templateId', removeTemplateApi);
|
||||
|
||||
router.post('/api/bans', createBanApi);
|
||||
|
||||
Reference in New Issue
Block a user