diff --git a/src/api/controllers/userController.js b/src/api/controllers/userController.js index abe4330..9ecef4f 100644 --- a/src/api/controllers/userController.js +++ b/src/api/controllers/userController.js @@ -56,7 +56,7 @@ async function exchangeZohoToken(req, res) { const { access_token, refresh_token, expires_in } = data; const expiresAt = expires_in ? new Date(Date.now() + expires_in * 1000) : null; - await userAuthTokenRepo.createToken({ + await userAuthTokenRepo.upsertToken({ userId: id, serviceName: service_name, accessToken: encrypt(access_token), diff --git a/src/data/repositories/userAuthTokenRepository.js b/src/data/repositories/userAuthTokenRepository.js index 191edb9..a709e2e 100644 --- a/src/data/repositories/userAuthTokenRepository.js +++ b/src/data/repositories/userAuthTokenRepository.js @@ -8,6 +8,18 @@ async function findByUserAndService(userId, serviceName) { return UserAuthToken.findOne({ where: { userId, serviceName } }); } -module.exports = { createToken, findByUserAndService }; +async function upsertToken(payload) { + const { userId, serviceName } = payload; + const [token, created] = await UserAuthToken.findOrCreate({ + where: { userId, serviceName }, + defaults: payload + }); + if (!created) { + await token.update(payload); + } + return token; +} + +module.exports = { createToken, findByUserAndService, upsertToken };