Hi, Devs!
We have two types of transactions using Sequelize: unmanaged and managed transactions.
Wha is transaction on persistence layer?
A transaction is a small unit of a sotfware and it may contain several chunks that are tasks to be commited to the database just all together and could garantee Atomicity, Consistency, Isolation, and Durability.
Example: When we make a bank transfer transaction, we need it to be debited from our account and credited to another. You can't just do one or the other.
Unmanaged Transactions
Unmanaged transactions means that committing and rolling back the transaction should be done manually by the user (by calling the appropriate Sequelize methods).
//Unmanaged transactions
const express = require('express')
const { User, Product } = require('../models')
const router = express.Router()
// ...
router.post('/userBook', (request, response) => {
const transaction = await sequelize.transaction()
try {
const { name, username, nameBook
description, price }= request.body;
const newBook = Book.create(
{ nameBook, description, price },
{ transaction: transaction }
);
const userProduct = Product.create(
{ name, userName, price, newBook.id },
{ transaction: transaction }
);
await transaction.commit()
response.status(200).json({message: 'Success'})
} catch (error) {
await transaction.rollback()
response.status(500).json({ message: 'Wrong' })
}
});
## **Managed Transactions**
> [Managed transactions](https://sequelize.org/master/manual/transactions) handle committing or rolling back the transaction automatically. You start a managed transaction by passing a callback to sequelize.transaction
// Managed Transactions
const express = require('express')
const { User, Product } = require('../models')
const router = express.Router()
// ...
router.post('/userBook', (request, response) => {
try {
const { name, username, nameBook
description, price }= request.body
await sequelize.transaction(async (t) => {
const newUser = User.create({ name, username})
const userProduct = Product.create(
{ nameBook, description, newUser.id })
response.status(200).json({message: 'Success'})
})
} catch (error) {
response.status(500).json({ message: 'Wrong' })
}
})
See you soon!
**Contacts**
Email: luizcalaca@gmail.com
Instagram: https://www.instagram.com/luizcalaca
Linkedin: https://www.linkedin.com/in/luizcalaca/
Twitter: https://twitter.com/luizcalaca
Top comments (0)