Add article and association with user

This commit is contained in:
D. Scott Boggs 2024-06-06 08:30:46 -04:00
parent f28f399f89
commit b4f2ccd8fe
3 changed files with 95 additions and 7 deletions

View file

@ -0,0 +1,50 @@
'use strict';
/** @type {import('sequelize-cli').Migration} */
module.exports = {
async up(queryInterface, Sequelize) {
await queryInterface.createTable('articles', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
title: {
type: Sequelize.STRING,
allowNull: false,
},
content: {
type: Sequelize.STRING
},
submittedBy: {
type: Sequelize.INTEGER,
references: {
model: 'user',
key: 'id',
onDelete: 'SET NULL',
onUpdate: 'CASCADE'
}
},
reviewedBy: {
type: Sequelize.INTEGER,
references: {
model: 'user',
key: 'id',
onDelete: 'SET NULL',
onUpdate: 'CASCADE'
}
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
async down(queryInterface, Sequelize) {
await queryInterface.dropTable('articles');
}
};

33
models/article.js Normal file
View file

@ -0,0 +1,33 @@
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class article extends Model {
static associate(models) {
Article.belongsTo(models.User, {
foreignKey: 'submitted_by',
onDelete: 'SET NULL',
onUpdate: 'CASCADE',
as: 'submitter',
})
Article.belongsTo(models.User, {
as: 'reviewer',
foreignKey: 'reviewed_by',
onDelete: 'SET NULL',
onUpdate: 'CASCADE',
})
}
}
article.init({
title: DataTypes.STRING,
content: DataTypes.STRING,
submittedBy: DataTypes.STRING,
reviewedBy: DataTypes.STRING
}, {
sequelize,
modelName: 'article',
});
return article;
};

View file

@ -4,13 +4,18 @@ const {
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class user 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) {
// define association here
User.hasMany(models.Article, {
foreignKey: 'submitted_by',
onDelete: 'SET NULL',
onUpdate: 'CASCADE',
})
User.hasMany(models.Article, {
foreignKey: 'reviewed_by',
as: 'reviewedArticles',
onDelete: 'SET NULL',
onUpdate: 'CASCADE',
})
}
}
user.init({
@ -20,4 +25,4 @@ module.exports = (sequelize, DataTypes) => {
modelName: 'user',
});
return user;
};
};