Add modpack-related database functions

This commit is contained in:
2023-09-26 16:03:05 -04:00
parent 16a0e33296
commit 5faa0b37bf
6 changed files with 104 additions and 6 deletions

View File

@@ -6,8 +6,8 @@
# (Read the README.md file for more detailed instructions)
# (REQUIRED) The connection string for your MongoDB instance (including the database)
# Ex. (No SSL): mongodb://myDatabaseUser:D1fficultP%40ssw0rd@127.0.0.1/myDatabaseName
# Ex. (SSL): mongodb+srv://myDatabaseUser:D1fficultP%40ssw0rd@server.example.com/myDatabaseName
# Ex. (No SSL): mongodb://myDatabaseUser:myPassword@127.0.0.1/myDatabaseName
# Ex. (SSL): mongodb+srv://myDatabaseUser:myPassword@server.example.com/myDatabaseName
# See https://www.mongodb.com/docs/manual/reference/connection-string/
MONGODB_CONN_STRING="mongodb://localhost:27017/technicflux"
@@ -24,7 +24,7 @@ HOST="example.com"
# (REQUIRED) Solder API Key
# 1. Go to https://www.technicpack.net/
# 2. Sign into your account and navigate to My Profile
# 2. Sign into your account and navigate to Edit My Profile
# 3. Go to Solder Configuration and put your API key here
# 4. Put your solder API URL (http[s]://example.com/api/) in and link it.
API_KEY=""

View File

@@ -1,3 +1,4 @@
const debug = require('debug')('technicflux:server');
const mongoose = require('mongoose')
const { SchemaTypes } = require('mongoose')
const bcrypt = require('bcryptjs')
@@ -56,7 +57,9 @@ const Build = mongoose.model('technicflux_builds', buildSchema)
// --- Functions ---
exports.connectToDB = (connectionString) => {
debug("Connecting to MongoDB database...")
mongoose.connect(connectionString)
debug("Connected to database.")
}
// --- User-Related Functions ---
@@ -223,10 +226,99 @@ exports.updateUser = (u_username, object) => {
}
// --- Modpack-Related Functions ---
exports.createModpack = (m_slug, m_display_name, m_owner) => {
// Create a modpack object
const newModpack = new Modpack({
name: m_slug,
display_name: m_display_name,
owners: [m_owner]
})
// Commit it to the database
return newModpack.save().then((modpack) => {
// Modpack successfully created
debug(`Successfully added new project ${modpack.display_name}: ${modpack.name}\n`)
return modpack
}).catch((reason) => {
// Modpack failed to create
debug(`ERROR (DB: when saving new modpack): ${reason}\n`)
return false
})
}
exports.getModpackBySlug = (m_slug) => {
return Modpack.findOne({ name: m_slug }).populate('owners').populate('collaborators').exec().then((modpack) => {
// Modpack found
return modpack
}).catch((reason) => {
// No modpack found with this slug
debug(`ERROR (DB): Failed to find a modpack with this slug because of: ${reason}`)
return false
})
}
exports.getModpacksByOwner = (m_owner) => {
return Modpack.find({ owners: m_owner }).populate('owners').populate('collaborators').exec().then((modpacks) => {
// Modpacks found.
return modpacks
}).catch((reason) => {
// No modpacks found for this owner.
debug(`ERROR (DB): Failed to find any modpacks with this owner because of: ${reason}`)
return false
})
}
exports.getModpacksByCollaborator = (m_collaborator) => {
return Modpack.find({ collaborators: m_collaborator }).populate('owners').populate('collaborators').exec().then((modpacks) => {
// Modpacks found.
return modpacks
}).catch((reason) => {
// No modpacks found for this collaborator.
debug(`ERROR (DB): Failed to find any modpacks with this collaborator because of: ${reason}`)
return false
})
}
exports.getAllModpacks = () => {
// Fetch an array of all modpacks
return Modpack.find({}).populate('owners').populate('collaborators').exec().then((modpacks) => {
// Modpacks found
return modpacks
}).catch((reason) => {
// Failed to get any modpacks.
debug(`ERROR (DB): Failed to fetch any modpacks because of: ${reason}`)
return false
})
}
exports.updateModpack = (m_slug, m_object) => {
return Modpack.updateOne(
{ name: m_slug },
{ $set: m_object }
).exec().then(() => {
// Successfully updated the modpack
return true
}).catch((reason) => {
// Failed to update the modpack
debug(`ERROR (DB): Failed to update modpack '${m_slug}' because of: ${reason}`)
return false
})
}
exports.deleteModpack = (m_slug) => {
return Modpack.deleteOne({ name: m_slug }).exec().then(() => {
// Successfully deleted this modpack
return true
}).catch((reason) => {
// Failed to delete the modpack
debug(`ERROR (DB): Failed to delete modpack '${m_slug}' because of: ${reason}`)
return false
})
}
// --- Mod-Related Functions ---
// --- Build-Related Functions ---

View File

@@ -32,7 +32,7 @@
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node ./bin/www"
"start": "set DEBUG=technicflux:* && node ./bin/www"
},
"dependencies": {
"bcryptjs": "^2.4.3",

View File

@@ -0,0 +1,6 @@
======================INTERNAL FILE======================
This is just a placeholder file within the modloaders
route. The file itself is just used to keep the folder on
Git before any other files are added. This file is located
in the base route for modloaders in the system.
=========================================================

View File

@@ -3,4 +3,4 @@ This is just a placeholder file within the mods route.
The file itself is just used to keep the folder on Git
before any other files are added. This file is located in
the base route for mods in the system.
=========================================================
=========================================================

View File

@@ -3,4 +3,4 @@ This is just a placeholder file within the other route.
The file itself is just used to keep the folder on Git
before any other files are added. This file is located in
the base route for other files in the system.
=========================================================
=========================================================