add new tables

This commit is contained in:
fullgream 2025-08-17 18:50:21 +03:00
parent 8ebd9b78ec
commit 956435ba40
2 changed files with 168 additions and 2 deletions

View File

@ -54,11 +54,13 @@ module.exports = async function (sequelize, dbObj) {
unique: false, unique: false,
comment: "Hash code of password", comment: "Hash code of password",
set: function (value) { set: function (value) {
if (value === "") return this.setDataValue('password', "");
const hash = bcrypt.hashSync(value, getSalt()); const hash = bcrypt.hashSync(value, getSalt());
this.setDataValue('password', hash); this.setDataValue('password', hash);
}, },
get: function () { get: function () {
const checkHash = this.getDataValue("password"); const checkHash = this.getDataValue("password");
if (checkHash === "") return Promise.resolve(false);
return async function (password) { return async function (password) {
return await new Promise((rs, rj) => { return await new Promise((rs, rj) => {
bcrypt.compare(password, checkHash, (err, res) => { bcrypt.compare(password, checkHash, (err, res) => {
@ -87,16 +89,124 @@ module.exports = async function (sequelize, dbObj) {
primaryKey: true, primaryKey: true,
comment: "ID of character", comment: "ID of character",
}, },
ownerId: {
type: DataTypes.INTEGER,
allowNull: false,
comment: "ID of character's owner",
},
name: { name: {
type: DataTypes.STRING, type: DataTypes.STRING,
allowNull: false, allowNull: false,
unique: true, unique: true,
comment: "Name of character", comment: "Name of character",
}, },
ownerId: { nameMasked: {
type: DataTypes.STRING,
allowNull: false,
unique: false,
comment: "Masked name of character",
},
avatar: {
type: DataTypes.BLOB,
allowNull: true,
comment: "Avatar of character",
},
avatarMime: {
type: DataTypes.STRING,
allowNull: true,
comment: "Mimetype of character's avatar",
},
descriptionPrompt: {
type: DataTypes.TEXT,
allowNull: false,
defaultValue: "",
comment: "Description of character",
},
appearancePrompt: {
type: DataTypes.TEXT,
allowNull: false,
defaultValue: "",
comment: "Appearance of character",
},
naturePrompt: {
type: DataTypes.TEXT,
allowNull: false,
defaultValue: "",
comment: "Nature of character",
},
prehistoryPrompt: {
type: DataTypes.TEXT,
allowNull: false,
defaultValue: "",
comment: "Pre-history of character",
},
communicationStylePrompt: {
type: DataTypes.TEXT,
allowNull: false,
defaultValue: "",
comment: "Communication style of character",
},
}),
npcCharacters: sequelize.define("npcCharacters", {
id: {
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
allowNull: false, allowNull: false,
comment: "ID of character's owner", autoIncrement: true,
primaryKey: true,
comment: "ID of character",
},
name: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
comment: "Name of character",
},
nameMasked: {
type: DataTypes.STRING,
allowNull: false,
unique: false,
comment: "Masked name of character",
},
avatar: {
type: DataTypes.BLOB,
allowNull: true,
comment: "Avatar of character",
},
avatarMime: {
type: DataTypes.STRING,
allowNull: true,
comment: "Mimetype of character's avatar",
},
descriptionPrompt: {
type: DataTypes.TEXT,
allowNull: false,
defaultValue: "",
comment: "Description of character",
},
appearancePrompt: {
type: DataTypes.TEXT,
allowNull: false,
defaultValue: "",
comment: "Appearance of character",
},
naturePrompt: {
type: DataTypes.TEXT,
allowNull: false,
defaultValue: "",
comment: "Nature of character",
},
prehistoryPrompt: {
type: DataTypes.TEXT,
allowNull: false,
defaultValue: "",
comment: "Pre-history of character",
},
communicationStylePrompt: {
type: DataTypes.TEXT,
allowNull: false,
defaultValue: "",
comment: "Communication style of character",
}, },
}), }),
}; };

View File

@ -59,6 +59,62 @@ class DatabaseCache {
this.users.byId[addedData.id] = addedData; this.users.byId[addedData.id] = addedData;
} }
} }
async userCharacters (rows, table) {
this.userCharacters.rows = rows;
// Add new character at cache
this.userCharacters.add = async (row, isCreate = false) => {
if (isCreate)
await table.create(row);
let addedData = null;
if (row.name)
addedData = await table.findAll({
where: {
name: row.name
}
})[0];
else if (row.id)
addedData = await table.findAll({
where: {
id: row.id
}
})[0];
if (!addedData) throw new Error("Invalid row information");
this.userCharacters.rows.push(addedData);
// By keys
}
}
async npcCharacters (rows, table) {
this.npcCharacters.rows = rows;
// Add new character at cache
this.npcCharacters.add = async (row, isCreate = false) => {
if (isCreate)
await table.create(row);
let addedData = null;
if (row.name)
addedData = await table.findAll({
where: {
name: row.name
}
})[0];
else if (row.id)
addedData = await table.findAll({
where: {
id: row.id
}
})[0];
if (!addedData) throw new Error("Invalid row information");
this.npcCharacters.rows.push(addedData);
// By keys
}
}
} }
class Database { class Database {