mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-11-04 03:17:00 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			40 lines
		
	
	
		
			1021 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1021 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const { DataTypes, Model } = require('sequelize')
 | 
						|
 | 
						|
module.exports = (sequelize) => {
 | 
						|
  class BookAuthor extends Model {
 | 
						|
    static removeByIds(authorId = null, bookId = null) {
 | 
						|
      const where = {}
 | 
						|
      if (authorId) where.authorId = authorId
 | 
						|
      if (bookId) where.bookId = bookId
 | 
						|
      return this.destroy({
 | 
						|
        where
 | 
						|
      })
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  BookAuthor.init({
 | 
						|
    id: {
 | 
						|
      type: DataTypes.UUID,
 | 
						|
      defaultValue: DataTypes.UUIDV4,
 | 
						|
      primaryKey: true
 | 
						|
    }
 | 
						|
  }, {
 | 
						|
    sequelize,
 | 
						|
    modelName: 'bookAuthor',
 | 
						|
    timestamps: false
 | 
						|
  })
 | 
						|
 | 
						|
  // Super Many-to-Many
 | 
						|
  // ref: https://sequelize.org/docs/v6/advanced-association-concepts/advanced-many-to-many/#the-best-of-both-worlds-the-super-many-to-many-relationship
 | 
						|
  const { book, author } = sequelize.models
 | 
						|
  book.belongsToMany(author, { through: BookAuthor })
 | 
						|
  author.belongsToMany(book, { through: BookAuthor })
 | 
						|
 | 
						|
  book.hasMany(BookAuthor)
 | 
						|
  BookAuthor.belongsTo(book)
 | 
						|
 | 
						|
  author.hasMany(BookAuthor)
 | 
						|
  BookAuthor.belongsTo(author)
 | 
						|
 | 
						|
  return BookAuthor
 | 
						|
} |