From e88cf4e3f43c056e76e8e991e57d51b9b71802e9 Mon Sep 17 00:00:00 2001 From: DebaucheryLibrarian Date: Sat, 20 Mar 2021 02:49:17 +0100 Subject: [PATCH] Separated user page stash component. --- assets/components/users/actor-preview.vue | 2 - assets/components/users/stash.vue | 169 ++++++++++++++++++++++ assets/components/users/user.vue | 150 +------------------ assets/js/stashes/actions.js | 7 + src/stashes.js | 25 ++++ src/web/server.js | 2 + src/web/stashes.js | 8 + 7 files changed, 218 insertions(+), 145 deletions(-) create mode 100644 assets/components/users/stash.vue diff --git a/assets/components/users/actor-preview.vue b/assets/components/users/actor-preview.vue index 3a8e513d..0236b76e 100644 --- a/assets/components/users/actor-preview.vue +++ b/assets/components/users/actor-preview.vue @@ -24,8 +24,6 @@ + + diff --git a/assets/components/users/user.vue b/assets/components/users/user.vue index 82aa2ab5..640a471e 100644 --- a/assets/components/users/user.vue +++ b/assets/components/users/user.vue @@ -19,70 +19,11 @@ :key="stash.id" class="stash" > -
- -

{{ stash.name }}

-
- - -
- - - - + @@ -90,9 +31,7 @@ @@ -172,69 +99,6 @@ export default { box-shadow: 0 0 3px var(--shadow-weak); } -.stash-section { - display: flex; - align-items: center; - padding: .5rem; - - &:not(:last-child) { - border-bottom: solid 1px var(--shadow-hint); - } -} - -.stash-header { - justify-content: space-between; - padding: 0; -} - -.stash-link { - flex-grow: 1; - display: inline-block; - text-decoration: none; -} - -.stash-public { - display: flex; - align-items: center; - padding: .5rem; - cursor: pointer; - - .icon { - fill: var(--shadow-strong); - margin: 0 .5rem 0 0; - } -} - -.stash-name { - padding: .5rem; - margin: 0; - color: var(--shadow-strong); -} - -.stash-actors, -.stash-scenes { - display: flex; - overflow-x: auto; - grid-gap: .5rem; - scroll-behavior: smooth; - scrollbar-width: none; - - &::-webkit-scrollbar { - display: none; - } -} - -.stash-scenes { - height: 8rem; -} - -.stash-actor, -.stash-scene { - height: 100%; - flex-shrink: 0; - font-size: 0; -} - @media(max-width: $breakpoint-kilo) { .stashes { grid-template-columns: 1fr; diff --git a/assets/js/stashes/actions.js b/assets/js/stashes/actions.js index 2690efc2..8dd578ed 100644 --- a/assets/js/stashes/actions.js +++ b/assets/js/stashes/actions.js @@ -67,6 +67,12 @@ function initStashesActions(store, _router) { return curateStash(stash); } + async function createStash(context, stash) { + const newStash = await post('/stashes', stash); + + return newStash; + } + async function updateStash(context, { stashId, stash }) { const newStash = await patch(`/stashes/${stashId}`, stash); @@ -98,6 +104,7 @@ function initStashesActions(store, _router) { } return { + createStash, fetchStash, stashActor, stashScene, diff --git a/src/stashes.js b/src/stashes.js index a0951f63..0c83b31d 100644 --- a/src/stashes.js +++ b/src/stashes.js @@ -2,6 +2,7 @@ const knex = require('./knex'); const { HttpError } = require('./errors'); +const slugify = require('./utils/slugify'); function curateStash(stash) { if (!stash) { @@ -17,6 +18,17 @@ function curateStash(stash) { return curatedStash; } +function curateStashEntry(stash, user) { + const curatedStashEntry = { + user_id: user.id, + name: stash.name, + slug: slugify(stash.name), + public: false, + }; + + return curatedStashEntry; +} + async function fetchStash(stashId, sessionUser) { if (!sessionUser) { throw new HttpError('You are not authenthicated', 401); @@ -36,6 +48,18 @@ async function fetchStash(stashId, sessionUser) { return curateStash(stash); } +async function createStash(newStash, sessionUser) { + if (!sessionUser) { + throw new HttpError('You are not authenthicated', 401); + } + + const stash = await knex('stashes') + .insert(curateStashEntry(newStash, sessionUser)) + .returning('*'); + + return curateStash(stash); +} + async function updateStash(stashId, newStash, sessionUser) { if (!sessionUser) { throw new HttpError('You are not authenthicated', 401); @@ -123,6 +147,7 @@ async function unstashMovie(movieId, stashId, sessionUser) { } module.exports = { + createStash, curateStash, stashActor, stashScene, diff --git a/src/web/server.js b/src/web/server.js index d8195ce8..b50e19bd 100644 --- a/src/web/server.js +++ b/src/web/server.js @@ -44,6 +44,7 @@ const { } = require('./tags'); const { + createStash, stashActor, stashScene, stashMovie, @@ -84,6 +85,7 @@ async function initServer() { router.post('/api/users', signup); + router.post('/api/stashes', createStash); router.patch('/api/stashes/:stashId', updateStash); router.post('/api/stashes/:stashId/actors', stashActor); diff --git a/src/web/stashes.js b/src/web/stashes.js index b1030b06..70c52db6 100644 --- a/src/web/stashes.js +++ b/src/web/stashes.js @@ -1,6 +1,7 @@ 'use strict'; const { + createStash, stashActor, stashScene, stashMovie, @@ -10,6 +11,12 @@ const { updateStash, } = require('../stashes'); +async function createStashApi(req, res) { + const stash = await createStash(req.body, req.session.user); + + res.send(stash); +} + async function updateStashApi(req, res) { const stash = await updateStash(req.params.stashId, req.body, req.session.user); @@ -53,6 +60,7 @@ async function unstashMovieApi(req, res) { } module.exports = { + createStash: createStashApi, stashActor: stashActorApi, stashScene: stashSceneApi, stashMovie: stashMovieApi,