feat: add weapon stories import

This commit is contained in:
Nemesis 2023-02-02 00:13:27 +01:00
parent 283b2fbf59
commit 8eec42a307
8 changed files with 208 additions and 1 deletions

2
.env.example Normal file
View File

@ -0,0 +1,2 @@
STRAPI_BASE_API_URL=https://strapi.accords-library.com|http://localhost:1337/api
STRAPI_API_TOKEN=

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
node_modules
.env

11
config.mjs Normal file
View File

@ -0,0 +1,11 @@
export const WEAPON_TYPES_RELATION_IDS = {
SWORD: 7,
BIG_SWORD: 13,
FIST: 3,
GUN: 16,
SPEAR: 10,
STAFF: 11,
};
export const NIERREIN_GUIDE_API_URL = "https://nierrein.guide/api"
export const NIERREIN_GUIDE_CDN_URL = "https://assets.nierrein.guide/"

8
env.mjs Normal file
View File

@ -0,0 +1,8 @@
import { str, envsafe, url } from 'envsafe';
export const env = envsafe({
STRAPI_BASE_API_URL: url({
devDefault: 'http://127.0.01:1337/api/',
}),
STRAPI_API_TOKEN: str(),
});

View File

@ -1 +0,0 @@

View File

@ -0,0 +1,126 @@
import 'dotenv/config';
import { NIERREIN_GUIDE_API_URL, NIERREIN_GUIDE_CDN_URL, WEAPON_TYPES_RELATION_IDS } from '../../config.mjs';
import { env } from '../../env.mjs';
let currentIndex = 1;
let weapons = [];
try {
console.log('Fetching NieR Re[in]carnation weapons...')
weapons = await fetch(`${NIERREIN_GUIDE_API_URL}/weapons`)
.then((response) => response.json())
} catch (error) {
console.error(error)
process.exit(1);
}
weapons = weapons.slice(0, 1);
console.log(`${weapons.length} weapons fetched from "${NIERREIN_GUIDE_API_URL}/weapons"`)
if (weapons.length === 0) {
console.error(`Got 0 weapons from "${NIERREIN_GUIDE_API_URL}/weapons". Their database is probably in the process of being updated. Try again in 10 minutes.`)
process.exit(1);
}
for (const weapon of weapons) {
console.log(`Uploading n°${currentIndex}/${weapons.length} weapons.`);
// Get weapon image blob for the thumbnail
const file = await fetch(`${NIERREIN_GUIDE_CDN_URL}${weapon.image_path}full.png`).then(
(response) => response.blob()
);
const body = new FormData();
// Create the weapon-stories entry
body.append(
"data",
JSON.stringify({
slug: weapon.slug,
name: [
{
name: weapon.name,
language: {
connect: [2], // en
},
},
],
stories: [
{
categories: {
connect: [8], // nier reincarnation
},
translations: [
{
language: {
connect: [2], // en
},
status: "Done",
level_1:
weapon.weapon_story_link[0].weapon_story.story?.replaceAll(
"\\n",
"<br>"
),
level_2:
weapon.weapon_story_link[1].weapon_story.story?.replaceAll(
"\\n",
"<br>"
),
level_3:
weapon.weapon_story_link[2].weapon_story.story?.replaceAll(
"\\n",
"<br>"
),
level_4:
weapon.weapon_story_link[3].weapon_story.story?.replaceAll(
"\\n",
"<br>"
),
},
],
},
],
categories: {
connect: [8], // nier reincarnation
},
type: {
connect: [WEAPON_TYPES_RELATION_IDS[weapon.weapon_type]], // weapon type
},
})
);
// Add the weapon image blob
body.append("files.thumbnail", file, `${weapon.slug}.png`);
const response = await fetch(
`${env.STRAPI_BASE_API_URL}/weapon-stories`,
{
method: "POST",
body,
headers: {
Authorization:
`bearer ${env.STRAPI_API_TOKEN}`,
},
}
)
.then((res) => res.json())
.catch((err) => err?.json());
if (response?.error) {
if (response.error.message === "This attribute must be unique") {
console.warn(
`[DUPLICATE] ${weapon.name} (${weapon.slug}) already exists.`
);
continue
}
console.error(`[ERROR] ${weapon.name} (${weapon.slug}):`, response.error.message)
} else {
console.log(`[ADDED] "${weapon.name}" (${weapon.slug})`);
}
currentIndex++;
}

45
package-lock.json generated Normal file
View File

@ -0,0 +1,45 @@
{
"name": "accords-library-scripts",
"version": "0.1.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "accords-library-scripts",
"version": "0.1.0",
"license": "MIT",
"dependencies": {
"dotenv": "^16.0.3",
"envsafe": "^2.0.3"
}
},
"node_modules/dotenv": {
"version": "16.0.3",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz",
"integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==",
"engines": {
"node": ">=12"
}
},
"node_modules/envsafe": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/envsafe/-/envsafe-2.0.3.tgz",
"integrity": "sha512-51lek8h5btjXhXUDW//Pno7HPydM1WQzltOb1/ONRKdwB2QkfAURnN4Qn0cJ5LzGvX2Km1ReR2O3K3Bqq9sBMg==",
"engines": {
"node": ">=10"
}
}
},
"dependencies": {
"dotenv": {
"version": "16.0.3",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz",
"integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ=="
},
"envsafe": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/envsafe/-/envsafe-2.0.3.tgz",
"integrity": "sha512-51lek8h5btjXhXUDW//Pno7HPydM1WQzltOb1/ONRKdwB2QkfAURnN4Qn0cJ5LzGvX2Km1ReR2O3K3Bqq9sBMg=="
}
}
}

14
package.json Normal file
View File

@ -0,0 +1,14 @@
{
"name": "accords-library-scripts",
"version": "0.1.0",
"type": "module",
"description": "",
"license": "MIT",
"scripts": {
"import:weapon-stories": "node ./nier-reincarnation/weapon-stories/index.mjs"
},
"dependencies": {
"dotenv": "^16.0.3",
"envsafe": "^2.0.3"
}
}