Profiles: Add user profile model and command
This commit is contained in:
18
commands/profile.js
Normal file
18
commands/profile.js
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
const { SlashCommandBuilder, EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle } = require("discord.js");
|
||||||
|
const { Card, User, Character } = require("../models");
|
||||||
|
const UserUtils = require("../util/users");
|
||||||
|
|
||||||
|
const pageSize = 8;
|
||||||
|
|
||||||
|
//fetch all cards owned by the user and list them
|
||||||
|
module.exports = {
|
||||||
|
data: new SlashCommandBuilder()
|
||||||
|
.setName("profile")
|
||||||
|
.setDescription("View your profile"),
|
||||||
|
async execute(interaction) {
|
||||||
|
let user = await UserUtils.getUserByDiscordId(interaction.member.id);
|
||||||
|
|
||||||
|
let profile = await user.getProfile();
|
||||||
|
await interaction.reply(`json: ${JSON.stringify(profile)}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
68
migrations/20220905204829-create-profile.js
Normal file
68
migrations/20220905204829-create-profile.js
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
'use strict';
|
||||||
|
module.exports = {
|
||||||
|
async up(queryInterface, Sequelize) {
|
||||||
|
await queryInterface.createTable('Profiles', {
|
||||||
|
id: {
|
||||||
|
allowNull: false,
|
||||||
|
autoIncrement: true,
|
||||||
|
primaryKey: true,
|
||||||
|
type: Sequelize.INTEGER
|
||||||
|
},
|
||||||
|
userId: {
|
||||||
|
type: Sequelize.INTEGER,
|
||||||
|
allowNull: false,
|
||||||
|
references: {
|
||||||
|
model: 'Users',
|
||||||
|
key: 'id'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
customStatus: {
|
||||||
|
type: Sequelize.STRING,
|
||||||
|
allowNull: true
|
||||||
|
},
|
||||||
|
slotOne: {
|
||||||
|
type: Sequelize.INTEGER,
|
||||||
|
allowNull: true,
|
||||||
|
references: {
|
||||||
|
model: 'Cards',
|
||||||
|
key: 'id'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
slotTwo: {
|
||||||
|
type: Sequelize.INTEGER,
|
||||||
|
allowNull: true,
|
||||||
|
references: {
|
||||||
|
model: 'Cards',
|
||||||
|
key: 'id'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
slotThree: {
|
||||||
|
type: Sequelize.INTEGER,
|
||||||
|
allowNull: true,
|
||||||
|
references: {
|
||||||
|
model: 'Cards',
|
||||||
|
key: 'id'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
slotFour: {
|
||||||
|
type: Sequelize.INTEGER,
|
||||||
|
allowNull: true,
|
||||||
|
references: {
|
||||||
|
model: 'Cards',
|
||||||
|
key: 'id'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
createdAt: {
|
||||||
|
allowNull: false,
|
||||||
|
type: Sequelize.DATE
|
||||||
|
},
|
||||||
|
updatedAt: {
|
||||||
|
allowNull: false,
|
||||||
|
type: Sequelize.DATE
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
async down(queryInterface, Sequelize) {
|
||||||
|
await queryInterface.dropTable('Profiles');
|
||||||
|
}
|
||||||
|
};
|
||||||
32
models/profile.js
Normal file
32
models/profile.js
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
'use strict';
|
||||||
|
const {
|
||||||
|
Model
|
||||||
|
} = require('sequelize');
|
||||||
|
module.exports = (sequelize, DataTypes) => {
|
||||||
|
class Profile extends Model {
|
||||||
|
/**
|
||||||
|
* Helper method for defining associations.
|
||||||
|
* This method is not a part of Sequelize lifecycle.
|
||||||
|
* The `models/index` file will call this method automatically.
|
||||||
|
*/
|
||||||
|
static associate(models) {
|
||||||
|
Profile.belongsTo(models.User, { foreignKey: 'userId' });
|
||||||
|
Profile.belongsTo(models.Card, { foreignKey: 'slotOne' });
|
||||||
|
Profile.belongsTo(models.Card, { foreignKey: 'slotTwo' });
|
||||||
|
Profile.belongsTo(models.Card, { foreignKey: 'slotThree' });
|
||||||
|
Profile.belongsTo(models.Card, { foreignKey: 'slotFour' });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Profile.init({
|
||||||
|
userId: DataTypes.INTEGER,
|
||||||
|
customStatus: DataTypes.STRING,
|
||||||
|
slotOne: DataTypes.INTEGER,
|
||||||
|
slotTwo: DataTypes.INTEGER,
|
||||||
|
slotThree: DataTypes.INTEGER,
|
||||||
|
slotFour: DataTypes.INTEGER
|
||||||
|
}, {
|
||||||
|
sequelize,
|
||||||
|
modelName: 'Profile',
|
||||||
|
});
|
||||||
|
return Profile;
|
||||||
|
};
|
||||||
@@ -13,6 +13,7 @@ module.exports = (sequelize, DataTypes) => {
|
|||||||
static associate(models) {
|
static associate(models) {
|
||||||
// define association here
|
// define association here
|
||||||
User.hasMany(models.Card);
|
User.hasMany(models.Card);
|
||||||
|
User.hasOne(models.Profile);
|
||||||
}
|
}
|
||||||
//instance methods
|
//instance methods
|
||||||
async getCardsWithCharactersCounted() {
|
async getCardsWithCharactersCounted() {
|
||||||
@@ -26,6 +27,13 @@ module.exports = (sequelize, DataTypes) => {
|
|||||||
});
|
});
|
||||||
return cards;
|
return cards;
|
||||||
}
|
}
|
||||||
|
async getProfile() {
|
||||||
|
return await sequelize.models.Profile.findOne({
|
||||||
|
where: {
|
||||||
|
userId: this.id
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
User.init({
|
User.init({
|
||||||
discordId: DataTypes.BIGINT,
|
discordId: DataTypes.BIGINT,
|
||||||
@@ -35,6 +43,14 @@ module.exports = (sequelize, DataTypes) => {
|
|||||||
nextPull: DataTypes.DATE,
|
nextPull: DataTypes.DATE,
|
||||||
nextDaily: DataTypes.DATE
|
nextDaily: DataTypes.DATE
|
||||||
}, {
|
}, {
|
||||||
|
hooks: {
|
||||||
|
afterCreate: async (user, options) => {
|
||||||
|
//Create new user profile
|
||||||
|
await sequelize.models.Profile.create({
|
||||||
|
userId: user.id
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
sequelize,
|
sequelize,
|
||||||
modelName: 'User',
|
modelName: 'User',
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user