fix eventdb/model, fix static-create command, many small fixes

This commit is contained in:
Rene Kievits
2024-09-17 06:08:23 +02:00
parent a065618cdb
commit 2732ce6c2b
11 changed files with 231 additions and 166 deletions

View File

@@ -1,25 +1,51 @@
const { const {
event_schedule: EventTimes, event_schedule: EventSchedule,
event_role_view: EventRoleView, event_roles: EventRoles,
event_roles: EventRoles, event: Event,
} = require('./models') } = require('./models')
const ReadEvents = async () => { const ReadEvents = async () => {
try { try {
const events = await EventTimes.findAll() const events = await EventSchedule.findAll({
return events include: [{
model: Event,
as: 'event'
}]
})
const eventsMap = events.map(event => ({
schedule_id: event.id,
event_name: event.event.name,
start_time: event.start_time,
end_time: event.end_time,
day_of_week: event.day_of_week
}))
return eventsMap
} catch (error) { } catch (error) {
console.error('Error reading event entries:', error) console.error('Error reading event entries:', error)
return false return false
} }
} }
const GetEventRole = async () => { const GetEventRole = async () => {
try { try {
const eventRoles = await EventRoleView.findAll() const eventRoles = await EventRoles.findAll({
include: [{
model: Event,
as: 'event'
}],
attributes: [
'role', 'event.name'
]
})
const rolesEventMap = new Map() const rolesEventMap = new Map()
eventRoles.forEach(row => rolesEventMap.set(row.event_name, row.role)) eventRoles.forEach(row => {
if (!row.event) return
rolesEventMap.set(row.event.name, row.role)
})
return rolesEventMap return rolesEventMap
} catch (error) { } catch (error) {
@@ -28,6 +54,7 @@ const GetEventRole = async () => {
} }
} }
const GetIconRole = async () => { const GetIconRole = async () => {
try { try {
const eventIcons = await EventRoles.findAll({ const eventIcons = await EventRoles.findAll({

View File

@@ -1,24 +1,24 @@
const Sequelize = require('sequelize') const Sequelize = require('sequelize');
module.exports = function(sequelize, DataTypes) { module.exports = function(sequelize, DataTypes) {
return sequelize.define('birthday', { return sequelize.define('birthday', {
id: { id: {
autoIncrement: true, autoIncrement: true,
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
allowNull: false, allowNull: false,
primaryKey: true, primaryKey: true
}, },
date: { date: {
type: DataTypes.DATEONLY, type: DataTypes.DATEONLY,
allowNull: false, allowNull: false
}, },
discorduser: { discorduser: {
type: DataTypes.STRING(100), type: DataTypes.STRING(100),
allowNull: false, allowNull: false,
references: { references: {
model: 'discorduser', model: 'discorduser',
key: 'name', key: 'name'
}, }
}, }
}, { }, {
sequelize, sequelize,
tableName: 'birthday', tableName: 'birthday',
@@ -26,12 +26,12 @@ module.exports = function(sequelize, DataTypes) {
timestamps: false, timestamps: false,
indexes: [ indexes: [
{ {
name: 'birthday_pkey', name: "birthday_pkey",
unique: true, unique: true,
fields: [ fields: [
{ name: 'id' }, { name: "id" },
], ]
}, },
], ]
}) });
} };

View File

@@ -1,23 +1,23 @@
const Sequelize = require('sequelize') const Sequelize = require('sequelize');
module.exports = function(sequelize, DataTypes) { module.exports = function(sequelize, DataTypes) {
return sequelize.define('blacklist', { return sequelize.define('blacklist', {
name: { name: {
type: DataTypes.STRING(100), type: DataTypes.STRING(100),
allowNull: false, allowNull: false,
primaryKey: true, primaryKey: true
}, },
reason: { reason: {
type: DataTypes.TEXT, type: DataTypes.TEXT,
allowNull: false, allowNull: false
}, },
reportedby: { reportedby: {
type: DataTypes.STRING(100), type: DataTypes.STRING(100),
allowNull: true, allowNull: true,
references: { references: {
model: 'discorduser', model: 'discorduser',
key: 'name', key: 'name'
}, }
}, }
}, { }, {
sequelize, sequelize,
tableName: 'blacklist', tableName: 'blacklist',
@@ -25,12 +25,12 @@ module.exports = function(sequelize, DataTypes) {
timestamps: false, timestamps: false,
indexes: [ indexes: [
{ {
name: 'blacklist_pkey', name: "blacklist_pkey",
unique: true, unique: true,
fields: [ fields: [
{ name: 'name' }, { name: "name" },
], ]
}, },
], ]
}) });
} };

View File

@@ -1,11 +1,11 @@
const Sequelize = require('sequelize') const Sequelize = require('sequelize');
module.exports = function(sequelize, DataTypes) { module.exports = function(sequelize, DataTypes) {
return sequelize.define('discorduser', { return sequelize.define('discorduser', {
name: { name: {
type: DataTypes.STRING(100), type: DataTypes.STRING(100),
allowNull: false, allowNull: false,
primaryKey: true, primaryKey: true
}, }
}, { }, {
sequelize, sequelize,
tableName: 'discorduser', tableName: 'discorduser',
@@ -13,12 +13,12 @@ module.exports = function(sequelize, DataTypes) {
timestamps: false, timestamps: false,
indexes: [ indexes: [
{ {
name: 'discorduser_pkey', name: "discorduser_pkey",
unique: true, unique: true,
fields: [ fields: [
{ name: 'name' }, { name: "name" },
], ]
}, },
], ]
}) });
} };

View File

@@ -1,17 +1,18 @@
const Sequelize = require('sequelize') const Sequelize = require('sequelize');
module.exports = function(sequelize, DataTypes) {
return sequelize.define('event', { module.exports = function (sequelize, DataTypes) {
const Event = sequelize.define('event', {
id: { id: {
autoIncrement: true, autoIncrement: true,
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
allowNull: false, allowNull: false,
primaryKey: true, primaryKey: true
}, },
name: { name: {
type: DataTypes.STRING(255), type: DataTypes.STRING(255),
allowNull: false, allowNull: false,
unique: 'event_name_key', unique: 'event_name_key'
}, }
}, { }, {
sequelize, sequelize,
tableName: 'event', tableName: 'event',
@@ -21,17 +22,23 @@ module.exports = function(sequelize, DataTypes) {
{ {
name: 'event_name_key', name: 'event_name_key',
unique: true, unique: true,
fields: [ fields: [{ name: 'name' }]
{ name: 'name' },
],
}, },
{ {
name: 'event_pkey', name: 'event_pkey',
unique: true, unique: true,
fields: [ fields: [{ name: 'id' }]
{ name: 'id' }, }
], ]
}, });
],
}) Event.associate = function (models) {
} Event.hasMany(models.event_schedule, { as: 'event_schedules', foreignKey: 'event_id' });
};
Event.associate = function (models) {
Event.hasMany(models.event_roles, { as: 'event_roles', foreignKey: 'event_id' })
}
return Event;
};

View File

@@ -1,28 +1,28 @@
const Sequelize = require('sequelize') const Sequelize = require('sequelize');
module.exports = function(sequelize, DataTypes) { module.exports = function (sequelize, DataTypes) {
return sequelize.define('event_roles', { const EventRole = sequelize.define('event_roles', {
event_id: { event_id: {
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
allowNull: true, allowNull: true,
references: { references: {
model: 'event', model: 'event',
key: 'id', key: 'id'
}, }
}, },
role: { role: {
type: DataTypes.STRING(50), type: DataTypes.STRING(50),
allowNull: false, allowNull: false
}, },
icon_name: { icon_name: {
type: DataTypes.STRING(50), type: DataTypes.STRING(50),
allowNull: true, allowNull: true
}, },
role_id: { role_id: {
autoIncrement: true, autoIncrement: true,
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
allowNull: false, allowNull: false,
primaryKey: true, primaryKey: true
}, }
}, { }, {
sequelize, sequelize,
tableName: 'event_roles', tableName: 'event_roles',
@@ -30,12 +30,18 @@ module.exports = function(sequelize, DataTypes) {
timestamps: false, timestamps: false,
indexes: [ indexes: [
{ {
name: 'event_roles_pkey', name: "event_roles_pkey",
unique: true, unique: true,
fields: [ fields: [
{ name: 'role_id' }, { name: "role_id" },
], ]
}, },
], ]
}) });
}
EventRole.associate = function (models) {
EventRole.belongsTo(models.event, { as: 'event', foreignKey: 'event_id' })
}
return EventRole
};

View File

@@ -1,32 +1,33 @@
const Sequelize = require('sequelize') const Sequelize = require('sequelize');
module.exports = function(sequelize, DataTypes) {
return sequelize.define('event_schedule', { module.exports = function (sequelize, DataTypes) {
const EventSchedule = sequelize.define('event_schedule', {
id: { id: {
autoIncrement: true, autoIncrement: true,
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
allowNull: false, allowNull: false,
primaryKey: true, primaryKey: true
}, },
event_id: { event_id: {
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
allowNull: false, allowNull: false,
references: { references: {
model: 'event', model: 'event',
key: 'id', key: 'id'
}, }
}, },
day_of_week: { day_of_week: {
type: DataTypes.STRING(9), type: DataTypes.STRING(9),
allowNull: true, allowNull: true
}, },
start_time: { start_time: {
type: DataTypes.TIME, type: DataTypes.TIME,
allowNull: true, allowNull: true
}, },
end_time: { end_time: {
type: DataTypes.TIME, type: DataTypes.TIME,
allowNull: true, allowNull: true
}, }
}, { }, {
sequelize, sequelize,
tableName: 'event_schedule', tableName: 'event_schedule',
@@ -36,10 +37,14 @@ module.exports = function(sequelize, DataTypes) {
{ {
name: 'event_schedule_pkey', name: 'event_schedule_pkey',
unique: true, unique: true,
fields: [ fields: [{ name: 'id' }]
{ name: 'id' }, }
], ]
}, });
],
}) EventSchedule.associate = function (models) {
} EventSchedule.belongsTo(models.event, { as: 'event', foreignKey: 'event_id' });
};
return EventSchedule;
};

View File

@@ -1,37 +1,38 @@
var DataTypes = require('sequelize').DataTypes var DataTypes = require("sequelize").DataTypes;
var _birthday = require('./birthday') var _birthday = require("./birthday");
var _blacklist = require('./blacklist') var _blacklist = require("./blacklist");
var _discorduser = require('./discorduser') var _discorduser = require("./discorduser");
var _event = require('./event') var _event = require("./event");
var _event_roles = require('./event_roles') var _event_roles = require("./event_roles");
var _event_schedule = require('./event_schedule') var _event_schedule = require("./event_schedule");
var _static = require('./static') var _static = require("./static");
var _static_members = require('./static_members') var _static_members = require("./static_members");
function initModels(sequelize) { function initModels(sequelize) {
var birthday = _birthday(sequelize, DataTypes) var birthday = _birthday(sequelize, DataTypes);
var blacklist = _blacklist(sequelize, DataTypes) var blacklist = _blacklist(sequelize, DataTypes);
var discorduser = _discorduser(sequelize, DataTypes) var discorduser = _discorduser(sequelize, DataTypes);
var event = _event(sequelize, DataTypes) var event = _event(sequelize, DataTypes);
var event_roles = _event_roles(sequelize, DataTypes) var event_roles = _event_roles(sequelize, DataTypes);
var event_schedule = _event_schedule(sequelize, DataTypes) var event_schedule = _event_schedule(sequelize, DataTypes);
var static = _static(sequelize, DataTypes) var static = _static(sequelize, DataTypes);
var static_members = _static_members(sequelize, DataTypes) var static_members = _static_members(sequelize, DataTypes);
discorduser.belongsToMany(static, { as: 'static_id_statics', through: static_members, foreignKey: 'username', otherKey: 'static_id' }) discorduser.belongsToMany(static, { as: 'static_id_statics', through: static_members, foreignKey: "username", otherKey: "static_id" });
static.belongsToMany(discorduser, { as: 'username_discordusers', through: static_members, foreignKey: 'static_id', otherKey: 'username' }) static.belongsToMany(discorduser, { as: 'username_discordusers', through: static_members, foreignKey: "static_id", otherKey: "username" });
birthday.belongsTo(discorduser, { as: 'discorduser_discorduser', foreignKey: 'discorduser'}) birthday.belongsTo(discorduser, { as: "discorduser_discorduser", foreignKey: "discorduser" });
discorduser.hasMany(birthday, { as: 'birthdays', foreignKey: 'discorduser'}) discorduser.hasMany(birthday, { as: "birthdays", foreignKey: "discorduser" });
blacklist.belongsTo(discorduser, { as: 'reportedby_discorduser', foreignKey: 'reportedby'}) blacklist.belongsTo(discorduser, { as: "reportedby_discorduser", foreignKey: "reportedby" });
discorduser.hasMany(blacklist, { as: 'blacklists', foreignKey: 'reportedby'}) discorduser.hasMany(blacklist, { as: "blacklists", foreignKey: "reportedby" });
static_members.belongsTo(discorduser, { as: 'username_discorduser', foreignKey: 'username'}) static_members.belongsTo(discorduser, { as: "username_discorduser", foreignKey: "username" });
discorduser.hasMany(static_members, { as: 'static_members', foreignKey: 'username'}) discorduser.hasMany(static_members, { as: "static_members", foreignKey: "username" });
event_roles.belongsTo(event, { as: 'event', foreignKey: 'event_id'}) event_roles.belongsTo(event, { as: "event", foreignKey: "event_id" });
event.hasMany(event_roles, { as: 'event_roles', foreignKey: 'event_id'}) event.hasMany(event_roles, { as: "event_roles", foreignKey: "event_id" });
event_schedule.belongsTo(event, { as: 'event', foreignKey: 'event_id'}) event_schedule.belongsTo(event, { as: 'event', foreignKey: 'event_id' })
event.hasMany(event_schedule, { as: 'event_schedules', foreignKey: 'event_id'}) event.hasMany(event_schedule, { as: 'event_schedules', foreignKey: 'event_id' })
static_members.belongsTo(static, { as: 'static', foreignKey: 'static_id'}) static_members.belongsTo(static, { as: "static", foreignKey: "static_id" });
static.hasMany(static_members, { as: 'static_members', foreignKey: 'static_id'}) static.hasMany(static_members, { as: "static_members", foreignKey: "static_id" });
return { return {
birthday, birthday,
@@ -42,8 +43,9 @@ function initModels(sequelize) {
event_schedule, event_schedule,
static, static,
static_members, static_members,
} };
} }
module.exports = initModels
module.exports.initModels = initModels module.exports = initModels;
module.exports.default = initModels module.exports.initModels = initModels;
module.exports.default = initModels;

View File

@@ -1,29 +1,41 @@
const Sequelize = require('sequelize') const Sequelize = require('sequelize');
module.exports = function(sequelize, DataTypes) { module.exports = function (sequelize, DataTypes) {
return sequelize.define('static', { return sequelize.define('static', {
id: { id: {
autoIncrement: true, autoIncrement: true,
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
allowNull: false, allowNull: false,
primaryKey: true, primaryKey: true
}, },
name: { name: {
type: DataTypes.STRING(12), type: DataTypes.STRING(12),
allowNull: false, allowNull: false,
unique: 'unique_name', unique: "unique_name"
}, },
creator: { creator: {
type: DataTypes.STRING(255), type: DataTypes.STRING(255),
allowNull: false, allowNull: false
}, },
size: { size: {
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
allowNull: true, allowNull: true
}, },
time: { time: {
type: DataTypes.DATE, type: DataTypes.DATE,
allowNull: true, allowNull: true
}, },
role_id: {
type: DataTypes.INTEGER,
allowNull: true // or false depending on your requirements
},
text_channel_id: {
type: DataTypes.STRING, // or INTEGER if IDs are numeric
allowNull: true // or false depending on your requirements
},
voice_channel_id: {
type: DataTypes.STRING, // or INTEGER if IDs are numeric
allowNull: true // or false depending on your requirements
}
}, { }, {
sequelize, sequelize,
tableName: 'static', tableName: 'static',
@@ -31,19 +43,19 @@ module.exports = function(sequelize, DataTypes) {
timestamps: false, timestamps: false,
indexes: [ indexes: [
{ {
name: 'static_pkey', name: "static_pkey",
unique: true, unique: true,
fields: [ fields: [
{ name: 'id' }, { name: "id" },
], ]
}, },
{ {
name: 'unique_name', name: "unique_name",
unique: true, unique: true,
fields: [ fields: [
{ name: 'name' }, { name: "name" },
], ]
}, },
], ]
}) });
} };

View File

@@ -1,5 +1,5 @@
const Sequelize = require('sequelize') const Sequelize = require('sequelize');
module.exports = function(sequelize, DataTypes) { module.exports = function (sequelize, DataTypes) {
return sequelize.define('static_members', { return sequelize.define('static_members', {
static_id: { static_id: {
type: DataTypes.INTEGER, type: DataTypes.INTEGER,
@@ -7,8 +7,8 @@ module.exports = function(sequelize, DataTypes) {
primaryKey: true, primaryKey: true,
references: { references: {
model: 'static', model: 'static',
key: 'id', key: 'id'
}, }
}, },
username: { username: {
type: DataTypes.STRING(100), type: DataTypes.STRING(100),
@@ -16,9 +16,9 @@ module.exports = function(sequelize, DataTypes) {
primaryKey: true, primaryKey: true,
references: { references: {
model: 'discorduser', model: 'discorduser',
key: 'name', key: 'name'
}, }
}, }
}, { }, {
sequelize, sequelize,
tableName: 'static_members', tableName: 'static_members',
@@ -26,13 +26,13 @@ module.exports = function(sequelize, DataTypes) {
timestamps: false, timestamps: false,
indexes: [ indexes: [
{ {
name: 'static_members_pkey', name: "static_members_pkey",
unique: true, unique: true,
fields: [ fields: [
{ name: 'static_id' }, { name: "static_id" },
{ name: 'username' }, { name: "username" },
], ]
}, },
], ]
}) });
} };

View File

@@ -1,33 +1,39 @@
const { const {
static: Static, static: Static,
static_members: StaticMembers, static_members: StaticMembers,
discorduser: DiscordUser, discorduser: DiscordUser,
} = require('./models') } = require('./models')
const CreateStatic = async (name, creator, members, size) => { const CreateStatic = async (name, creator, members, size, role_id, text_channel_id, voice_channel_id) => {
try { try {
console.log(role_id, text_channel_id, voice_channel_id)
const staticEntry = await Static.create({ const staticEntry = await Static.create({
name, name,
creator, creator,
size, size,
role_id,
text_channel_id,
voice_channel_id,
}) })
const staticId = staticEntry.id const staticId = staticEntry.id
await Promise.all( await Promise.all(
members.map(async member => { members.map(async member => {
if (!member.username) return;
const [user] = await DiscordUser.findOrCreate({ const [user] = await DiscordUser.findOrCreate({
where: { where: {
name: member, name: member.username,
}, },
defaults: { defaults: {
name: member, name: member.username,
}, },
}) })
await StaticMembers.create({ await StaticMembers.create({
static_id: staticId, static_id: staticId,
member: user.name, username: user.name,
}) })
}) })
) )
@@ -60,8 +66,8 @@ const DeleteStatic = async (name) => {
if (!staticEntry) return false if (!staticEntry) return false
await StaticMembers.destroy({ await StaticMembers.destroy({
where: { where: {
static_id: staticEntry.id, static_id: staticEntry.id,
}, },
}) })