Improved SFW and tag media seed file to allow updates.
This commit is contained in:
parent
bba73c4f31
commit
c96e10b33d
|
@ -41,7 +41,7 @@ function initTagsActions(store, _router) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
photos: tagsPhotos {
|
photos: tagsPhotos(orderBy: MEDIA_BY_MEDIA_ID__INDEX_ASC) {
|
||||||
media {
|
media {
|
||||||
id
|
id
|
||||||
thumbnail
|
thumbnail
|
||||||
|
|
|
@ -45,26 +45,21 @@ exports.up = knex => Promise.resolve()
|
||||||
table.text('comment');
|
table.text('comment');
|
||||||
table.text('group');
|
table.text('group');
|
||||||
|
|
||||||
|
table.boolean('is_sfw')
|
||||||
|
.defaultTo(false);
|
||||||
|
|
||||||
table.unique('hash');
|
table.unique('hash');
|
||||||
table.unique('source');
|
table.unique('source');
|
||||||
|
|
||||||
table.datetime('created_at')
|
table.datetime('created_at')
|
||||||
.defaultTo(knex.fn.now());
|
.defaultTo(knex.fn.now());
|
||||||
}))
|
}))
|
||||||
.then(() => knex.schema.createTable('media_sfw', (table) => {
|
|
||||||
table.text('id', 21)
|
|
||||||
.primary();
|
|
||||||
|
|
||||||
table.text('media_id', 21)
|
|
||||||
.references('id')
|
|
||||||
.inTable('media')
|
|
||||||
.unique();
|
|
||||||
}))
|
|
||||||
.then(() => { // eslint-disable-line arrow-body-style
|
.then(() => { // eslint-disable-line arrow-body-style
|
||||||
// allow vim fold
|
// allow vim fold
|
||||||
return knex.raw(`
|
return knex.raw(`
|
||||||
CREATE FUNCTION get_random_sfw_media_id() RETURNS varchar AS $$
|
CREATE FUNCTION get_random_sfw_media_id() RETURNS varchar AS $$
|
||||||
SELECT media_id FROM media_sfw
|
SELECT id FROM media
|
||||||
|
WHERE is_sfw = true
|
||||||
ORDER BY random()
|
ORDER BY random()
|
||||||
LIMIT 1;
|
LIMIT 1;
|
||||||
$$ LANGUAGE sql STABLE;
|
$$ LANGUAGE sql STABLE;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
const nanoid = require('nanoid/non-secure');
|
// const nanoid = require('nanoid/non-secure');
|
||||||
const upsert = require('../src/utils/upsert');
|
const upsert = require('../src/utils/upsert');
|
||||||
|
|
||||||
const sfw = Object.entries({
|
const sfw = Object.entries({
|
||||||
|
@ -577,6 +577,7 @@ const sfw = Object.entries({
|
||||||
thumbnail: `sfw/${category}/thumbs/${photo}.jpeg`,
|
thumbnail: `sfw/${category}/thumbs/${photo}.jpeg`,
|
||||||
lazy: `sfw/${category}/lazy/${photo}.jpeg`,
|
lazy: `sfw/${category}/lazy/${photo}.jpeg`,
|
||||||
mime: 'image/jpeg',
|
mime: 'image/jpeg',
|
||||||
|
is_sfw: true,
|
||||||
sfw_media_id: null,
|
sfw_media_id: null,
|
||||||
group: category,
|
group: category,
|
||||||
index,
|
index,
|
||||||
|
@ -649,12 +650,12 @@ const tagPosters = [
|
||||||
['trainbang', 'poster', 'Kali Roses in "Passing Me Around" for Blacked'],
|
['trainbang', 'poster', 'Kali Roses in "Passing Me Around" for Blacked'],
|
||||||
['tap', 'poster', 'Kristy Black in SZ1986 for LegalPorno'],
|
['tap', 'poster', 'Kristy Black in SZ1986 for LegalPorno'],
|
||||||
]
|
]
|
||||||
.map(([slug, filename, comment], index) => ({
|
.map(([slug, fileIndex, comment], index) => ({
|
||||||
id: nanoid(),
|
id: `${slug}-${fileIndex}`,
|
||||||
tagSlug: slug,
|
tagSlug: slug,
|
||||||
path: `tags/${slug}/${filename}.jpeg`,
|
path: `tags/${slug}/${fileIndex}.jpeg`,
|
||||||
thumbnail: `tags/${slug}/thumbs/${filename}.jpeg`,
|
thumbnail: `tags/${slug}/thumbs/${fileIndex}.jpeg`,
|
||||||
lazy: `tags/${slug}/lazy/${filename}.jpeg`,
|
lazy: `tags/${slug}/lazy/${fileIndex}.jpeg`,
|
||||||
mime: 'image/jpeg',
|
mime: 'image/jpeg',
|
||||||
index,
|
index,
|
||||||
comment,
|
comment,
|
||||||
|
@ -755,18 +756,9 @@ const tagPhotos = [
|
||||||
/* eslint-disable max-len */
|
/* eslint-disable max-len */
|
||||||
exports.seed = knex => Promise.resolve()
|
exports.seed = knex => Promise.resolve()
|
||||||
.then(async () => {
|
.then(async () => {
|
||||||
const { inserted } = await upsert('media', sfw, 'id');
|
await upsert('media', sfw, 'id');
|
||||||
|
|
||||||
const sfwMediaIds = inserted.map(mediaEntry => ({
|
|
||||||
id: nanoid(),
|
|
||||||
media_id: mediaEntry.id,
|
|
||||||
}));
|
|
||||||
|
|
||||||
await upsert('media_sfw', sfwMediaIds, 'media_id');
|
|
||||||
})
|
|
||||||
.then(async () => {
|
|
||||||
const tagMedia = tagPosters.concat(tagPhotos);
|
const tagMedia = tagPosters.concat(tagPhotos);
|
||||||
|
|
||||||
const tags = await knex('tags').whereIn('slug', tagMedia.map(item => item.tagSlug));
|
const tags = await knex('tags').whereIn('slug', tagMedia.map(item => item.tagSlug));
|
||||||
|
|
||||||
const { inserted, updated } = await upsert('media', tagMedia.map(({
|
const { inserted, updated } = await upsert('media', tagMedia.map(({
|
||||||
|
@ -788,8 +780,18 @@ exports.seed = knex => Promise.resolve()
|
||||||
media_id: mediaIdsByPath[photo.path],
|
media_id: mediaIdsByPath[photo.path],
|
||||||
}));
|
}));
|
||||||
|
|
||||||
return Promise.all([
|
await Promise.all([
|
||||||
upsert('tags_posters', tagPosterEntries, 'tag_id', knex),
|
upsert('tags_posters', tagPosterEntries, 'tag_id', knex),
|
||||||
upsert('tags_photos', tagPhotoEntries, ['tag_id', 'media_id'], knex),
|
upsert('tags_photos', tagPhotoEntries, ['tag_id', 'media_id'], knex),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
// clean up (re)moved tag media
|
||||||
|
await Promise.all([
|
||||||
|
knex('tags_posters')
|
||||||
|
.whereNotIn('media_id', tagPosters.map(photo => photo.id))
|
||||||
|
.delete(),
|
||||||
|
knex('tags_photos')
|
||||||
|
.whereNotIn('media_id', tagPhotos.map(photo => photo.id))
|
||||||
|
.delete(),
|
||||||
|
]);
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue