From 73630289671c75706e676394cf4e41c641be2f32 Mon Sep 17 00:00:00 2001 From: Alexandra Date: Thu, 22 May 2025 11:07:13 -0600 Subject: [PATCH] incremental commit so I (hopefully) don't go saving API keys in the env file. --- .env | 4 + lib/database.js | 4 + lib/metadataworker.js | 3 + lib/models/file.js | 6 +- lib/models/index.js | 2 +- lib/models/metadata.js | 55 +++++++++ package-lock.json | 110 +++++++++++++++--- package.json | 2 +- views/partials/result.ejs | 2 +- .../images/{ => coverart}/nocoverart.png | Bin .../images/{ => coverart}/testcover.webp | Bin 11 files changed, 168 insertions(+), 20 deletions(-) create mode 100644 lib/metadataworker.js create mode 100644 lib/models/metadata.js rename views/public/images/{ => coverart}/nocoverart.png (100%) rename views/public/images/{ => coverart}/testcover.webp (100%) diff --git a/.env b/.env index 20174f2..ac3e62c 100644 --- a/.env +++ b/.env @@ -24,3 +24,7 @@ POSTGRES_PASSWORD=development # Elasticsearch Configuration ELASTICSEARCH_URL=http://localhost:9200 + +#IGDB Connection Configuration +TWITCH_CLIENT_ID= +TWITCH_APP_ACCESS_TOKEN= \ No newline at end of file diff --git a/lib/database.js b/lib/database.js index 13b78a4..768e588 100644 --- a/lib/database.js +++ b/lib/database.js @@ -4,6 +4,7 @@ import 'dotenv/config'; // Import models import defineFile from './models/file.js'; import defineQueryCount from './models/queryCount.js'; +import defineMetadata from './models/metadata.js' const sequelize = new Sequelize(process.env.POSTGRES_DB, process.env.POSTGRES_USER, process.env.POSTGRES_PASSWORD, { host: process.env.POSTGRES_HOST || 'localhost', @@ -15,6 +16,9 @@ const sequelize = new Sequelize(process.env.POSTGRES_DB, process.env.POSTGRES_US // Initialize models export const File = defineFile(sequelize); export const QueryCount = defineQueryCount(sequelize); +export const Metadata = defineMetadata(sequelize) +Metadata.hasMany(File) +File.belongsTo(Metadata) export async function initDB() { try { diff --git a/lib/metadataworker.js b/lib/metadataworker.js new file mode 100644 index 0000000..77e70c5 --- /dev/null +++ b/lib/metadataworker.js @@ -0,0 +1,3 @@ +import igdb from 'igdb-api-node'; + +function getMetadata() \ No newline at end of file diff --git a/lib/models/file.js b/lib/models/file.js index abccbaf..b3f0467 100644 --- a/lib/models/file.js +++ b/lib/models/file.js @@ -50,6 +50,11 @@ export default function (sequelize) { }, group: { type: DataTypes.TEXT + }, + blockmetadata: { + type: DataTypes.BOOLEAN, + defaultValue: false, + allowNull: false } }, { indexes: [ @@ -59,6 +64,5 @@ export default function (sequelize) { { fields: ['region'] } ] }); - return File; } \ No newline at end of file diff --git a/lib/models/index.js b/lib/models/index.js index 0a7fc26..6a31023 100644 --- a/lib/models/index.js +++ b/lib/models/index.js @@ -1 +1 @@ -export { File, QueryCount } from '../database.js'; \ No newline at end of file +export { File, QueryCount, Metadata } from '../database.js'; \ No newline at end of file diff --git a/lib/models/metadata.js b/lib/models/metadata.js new file mode 100644 index 0000000..f86fa9a --- /dev/null +++ b/lib/models/metadata.js @@ -0,0 +1,55 @@ +import { DataTypes } from "sequelize" + +export default function (sequelize) { + const Metadata = sequelize.define('Metadata', { + id: { + type: DataTypes.INTEGER, + primaryKey: true, + autoIncrement: true + }, + title: { + type: DataTypes.STRING, + allowNull: false + }, + alternatetitles: { + type: DataTypes.STRING + }, + description: { + type: DataTypes.STRING + }, + rating: { + type: DataTypes.STRING + }, + coverarturl: { + type: DataTypes.STRING + }, + releasedate: { + type: DataTypes.DATE + }, + igdbid: { + type: DataTypes.INTEGER + }, + timetobeat: { + type: DataTypes.STRING + }, + genre: { + type: DataTypes.STRING + }, + developers: { + type: DataTypes.STRING + }, + publishers: { + type: DataTypes.STRING + }, + gamemodes:{ + type: DataTypes.STRING + } + }, { + indexes: [ + { fields: ['title'] }, + { fields: ['description'] }//If this slows down the db may want to not index this. + ] + }) + + return Metadata +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 70bdd6a..824ba88 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,8 +12,8 @@ "ejs": "^3.1.10", "express": "^4.21.1", "figlet": "^1.7.0", - "file-older-than": "^1.0.0", "i18n": "^0.15.1", + "igdb-api-node": "^6.0.5", "innertext": "^1.0.3", "jsdom": "^25.0.1", "jszip": "^3.10.1", @@ -614,6 +614,17 @@ "arrow2csv": "bin/arrow2csv.js" } }, + "node_modules/apicalypse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/apicalypse/-/apicalypse-1.0.5.tgz", + "integrity": "sha512-RT6PRNlYrQTrDBdifhlUtww1codmjUH5ZFBxyWS0itkkInzO0z/Xxa8RBV7/TcEOiwIzfkFSt9Hd0Nu3ScVsFQ==", + "license": "MIT", + "dependencies": { + "axios": "^1.7.3", + "better-queue": "^3.8.10", + "better-queue-memory": "^1.0.4" + } + }, "node_modules/array-back": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", @@ -650,12 +661,53 @@ "node": ">= 4.0.0" } }, + "node_modules/axios": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", + "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, + "node_modules/better-queue": { + "version": "3.8.12", + "resolved": "https://registry.npmjs.org/better-queue/-/better-queue-3.8.12.tgz", + "integrity": "sha512-D9KZ+Us+2AyaCz693/9AyjTg0s8hEmkiM/MB3i09cs4MdK1KgTSGJluXRYmOulR69oLZVo2XDFtqsExDt8oiLA==", + "license": "MIT", + "dependencies": { + "better-queue-memory": "^1.0.1", + "node-eta": "^0.9.0", + "uuid": "^9.0.0" + } + }, + "node_modules/better-queue-memory": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/better-queue-memory/-/better-queue-memory-1.0.4.tgz", + "integrity": "sha512-SWg5wFIShYffEmJpI6LgbL8/3Dqhku7xI1oEiy6FroP9DbcZlG0ZDjxvPdP9t7hTGW40IpIcC6zVoGT1oxjOuA==", + "license": "MIT" + }, + "node_modules/better-queue/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -1280,12 +1332,6 @@ "integrity": "sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==", "license": "MIT" }, - "node_modules/duration-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/duration-js/-/duration-js-4.0.0.tgz", - "integrity": "sha512-qoXjOsH97r+NrOa6sK5V2cwBOouVG/LI9jwgwKvjVkyqGpZ72yilWjjzFJYPqqbvNZDwpRMaLEUFE+PTefvOEA==", - "license": "MIT" - }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -1603,15 +1649,6 @@ "node": ">= 0.4.0" } }, - "node_modules/file-older-than": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-older-than/-/file-older-than-1.0.0.tgz", - "integrity": "sha512-OUYyochwjcAdahP6NPc/dMhBjkR9lUjMoJL+J9/woJljCGye7Io4R0Er4scguzZFYb2/tnxp12eqqPRusxZ6DQ==", - "license": "MIT", - "dependencies": { - "duration-js": "^4.0.0" - } - }, "node_modules/filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", @@ -1678,6 +1715,26 @@ "integrity": "sha512-dLVCAISd5mhls514keQzmEG6QHmUUsNuWsb4tFafIUwvvgDjXhtfAYSKOzt5SWOy+qByV5pbsDZ+Vb7HUOBEdA==", "license": "Apache-2.0" }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/foreground-child": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", @@ -2088,6 +2145,15 @@ "node": ">=0.10.0" } }, + "node_modules/igdb-api-node": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/igdb-api-node/-/igdb-api-node-6.0.5.tgz", + "integrity": "sha512-rH45b1vJNOusoTt8KkYlqrz4bqBXfH06uezOL+uIPuExyRnbRGNYUSUsGlcIx8YFs0E5U2FmDrlsRqbe9zHhVA==", + "license": "MIT", + "dependencies": { + "apicalypse": "^1.0.4" + } + }, "node_modules/immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", @@ -2564,6 +2630,12 @@ "node": ">=10.5.0" } }, + "node_modules/node-eta": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-eta/-/node-eta-0.9.0.tgz", + "integrity": "sha512-mTCTZk29tmX1OGfVkPt63H3c3VqXrI2Kvua98S7iUIB/Gbp0MNw05YtUomxQIxnnKMyRIIuY9izPcFixzhSBrA==", + "license": "MIT" + }, "node_modules/node-fetch": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", @@ -2902,6 +2974,12 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", diff --git a/package.json b/package.json index 8ed2d21..39b49b7 100644 --- a/package.json +++ b/package.json @@ -7,8 +7,8 @@ "ejs": "^3.1.10", "express": "^4.21.1", "figlet": "^1.7.0", - "file-older-than": "^1.0.0", "i18n": "^0.15.1", + "igdb-api-node": "^6.0.5", "innertext": "^1.0.3", "jsdom": "^25.0.1", "jszip": "^3.10.1", diff --git a/views/partials/result.ejs b/views/partials/result.ejs index 9be8684..68c6d78 100644 --- a/views/partials/result.ejs +++ b/views/partials/result.ejs @@ -1,6 +1,6 @@
- "> + ">

<%= result.title || result.filename %>

diff --git a/views/public/images/nocoverart.png b/views/public/images/coverart/nocoverart.png similarity index 100% rename from views/public/images/nocoverart.png rename to views/public/images/coverart/nocoverart.png diff --git a/views/public/images/testcover.webp b/views/public/images/coverart/testcover.webp similarity index 100% rename from views/public/images/testcover.webp rename to views/public/images/coverart/testcover.webp