Created
May 17, 2016 13:33
-
-
Save bookercodes/f651cd0290605257a64022424ee2f72b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// @flow | |
import db from 'sequelize-connect' | |
/** | |
* Creates and returns a Sequelize screencast model. (This function is to be | |
* called internally by the sequelize-connect module.) | |
* | |
* @param sequelize - A Sequelize connection | |
* @param DataTypes - A quasi enumeration of SQL data types | |
*/ | |
const createScreencastModel = function (sequelize: any, DataTypes: any) : any { | |
const screencast: any = sequelize.define('screencast', { | |
id: { | |
primaryKey: true, | |
type: DataTypes.STRING | |
}, | |
url: DataTypes.TEXT, | |
title: DataTypes.STRING, | |
description: DataTypes.TEXT, | |
durationInSeconds: DataTypes.INTEGER | |
}, { | |
classMethods: { | |
associate (models: any): any { | |
screencast.belongsTo(models.channel) | |
screencast.belongsToMany(models.tag, { | |
through: models.screencastTag, | |
foreignKey: 'screencastId' | |
}) | |
}, | |
async findAllScreencasts (): any { | |
const foundScreencasts = await db | |
.models | |
.screencast | |
.findAll({ | |
include: [ | |
{ model: db.models.channel }, | |
{ model: db.models.tag } | |
] | |
}) | |
return foundScreencasts | |
}, | |
async createScreencast (screencast): any { | |
await db.sequelize.transaction(async transaction => { | |
const createdChannel = await db.models.channel.create({ | |
id: screencast.channel.id, | |
name: screencast.channel.title | |
}) | |
await createdChannel.createScreencast({ | |
...screencast, | |
url: screencast.url | |
}, { | |
transaction | |
}) | |
await db.models.tag.bulkCreate(screencast.tags, { | |
transaction | |
}) | |
const screencastTags = screencast.tags.map(tag => { | |
return { | |
screencastId: screencast.id, | |
tagId: tag.id | |
} | |
}) | |
await db.models.screencastTag.bulkCreate(screencastTags, { | |
transaction | |
}) | |
}) | |
} | |
} | |
}) | |
return screencast | |
} | |
export default createScreencastModel |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment