diff --git a/server/models/Post.js b/server/models/Post.js index ee79dc6..1a9e7f1 100644 --- a/server/models/Post.js +++ b/server/models/Post.js @@ -21,11 +21,19 @@ module.exports = (sequelize, DataTypes) => { userId: { type: DataTypes.UUID, allowNull: false, - }, + }, }, { tableName: 'posts', timestamps: true, }); - + + Post.associate = (models) => { + Post.belongsToMany(models.Tag, { + through: models.PostTag, + foreignKey: 'postId', + otherKey: 'tagId', + }); + }; + return Post; -} \ No newline at end of file +}; \ No newline at end of file diff --git a/server/models/PostTag.js b/server/models/PostTag.js new file mode 100644 index 0000000..bc84058 --- /dev/null +++ b/server/models/PostTag.js @@ -0,0 +1,30 @@ +// handle the relationship between Post and Tag +// Purely join table + +module.exports = (sequelize, DataTypes) => { + const PostTag = sequelize.define("PostTag", { + postId: { + type: DataTypes.UUID, + allowNull: false, + references: { + model: 'posts', // refers to table name + key: 'id' + }, + onDelete: 'CASCADE', + }, + tagId: { + type: DataTypes.UUID, + allowNull: false, + references: { + model: 'tags', // refers to table name + key: 'id' + }, + onDelete: 'CASCADE', + }, + }, { + tableName: 'post_tags', + timestamps: false, + }); + + return PostTag; +}; \ No newline at end of file diff --git a/server/models/Tag.js b/server/models/Tag.js new file mode 100644 index 0000000..31bf177 --- /dev/null +++ b/server/models/Tag.js @@ -0,0 +1,28 @@ +module.exports = (sequelize, DataTypes) => { + const Tag = sequelize.define("Tag", { + id: { + type: DataTypes.UUID, + defaultValue: DataTypes.UUIDV4, + allowNull: false, + primaryKey: true, + }, + tag: { + type: DataTypes.STRING(30), + allowNull: false, + unique: true, // Ensure tags are unique + }, + }, { + tableName: 'tags', + timestamps: false, + }); + + Tag.associate = (models) => { + Tag.belongsToMany(models.Post, { + through: models.PostTag, + foreignKey: 'tagId', + otherKey: 'postId', + }); + }; + + return Tag; +}; \ No newline at end of file