audiobookshelf/server/models/UserFavorite.js

66 lines
1.4 KiB
JavaScript

const { DataTypes, Model } = require('sequelize')
class UserFavorite extends Model {
constructor(values, options) {
super(values, options)
/** @type {UUIDV4} */
this.id
/** @type {UUIDV4} */
this.libraryItemId
/** @type {UUIDV4} */
this.userId
}
static init(sequelize) {
super.init(
{
id: {
type: DataTypes.UUID,
defaultValue: DataTypes.UUIDV4,
primaryKey: true
},
libraryItemId: DataTypes.UUID,
userId: DataTypes.UUID
},
{
sequelize,
modelName: 'userFavorite',
indexes: [
{
fields: ['userId']
},
{
fields: ['libraryItemId']
},
{
unique: true,
fields: ['libraryItemId', 'userId'],
}
]
}
)
const { libraryItem, user } = sequelize.models
libraryItem.hasMany(UserFavorite, {
foreignKey: 'libraryItemId',
onDelete: 'CASCADE'
})
UserFavorite.belongsTo(libraryItem, { foreignKey: 'libraryItemId' })
user.hasMany(UserFavorite, {
foreignKey: 'userId',
onDelete: 'CASCADE'
})
user.belongsToMany(libraryItem, {
through: UserFavorite,
foreignKey: 'userId',
otherKey: 'libraryItemId',
as: 'favorites'
})
UserFavorite.belongsTo(user, { foreignKey: 'userId' })
}
}
module.exports = UserFavorite