From e00f0382427362076c437a86b3fb327723866c06 Mon Sep 17 00:00:00 2001
From: Wolfgang Knopki <wolfgang.knopki@hft-stuttgart.de>
Date: Fri, 24 Sep 2021 10:50:40 +0200
Subject: [PATCH] pick connection from pool before transaction

---
 functions/methods.ts | 81 +++++++++++++++++++++++---------------------
 1 file changed, 42 insertions(+), 39 deletions(-)

diff --git a/functions/methods.ts b/functions/methods.ts
index cebfcb21..79416aee 100644
--- a/functions/methods.ts
+++ b/functions/methods.ts
@@ -3,62 +3,65 @@ import dbconn = require('../config/dbconn')
 var methods = {
     // ===================== user db =====================
     registerNewUser: function(data:any, callback:any) {
-        dbconn.user.beginTransaction(function(err:any) { // START TRANSACTION
-            if (err) { throw err }
-            // insert profile
-            dbconn.user.query('INSERT INTO user SET ?', data.profile, function (err:any, results:any, fields:any) {
-                if (err) {
-                  return dbconn.user.rollback(function() {
-                    throw err
-                  });
-                }
-                let newUserId:number = results.insertId
-                // set password
-                var credentialData:any = {
-                    user_id: newUserId,
-                    password: data.password
-                }
-                dbconn.user.query('INSERT INTO credential SET ?', credentialData, function (err:any, results:any, fields:any) {
+	dbconn.user.getConnection(function(err:any, thisconn){
+            thisconn.beginTransaction(function(err:any) { // START TRANSACTION
+                if (err) { throw err }
+                 // insert profile
+                thisconn.query('INSERT INTO user SET ?', data.profile, function (err:any, results:any, fields:any) {
                     if (err) {
-                        return dbconn.user.rollback(function() {
-                            throw err
-                        });
+                      return thisconn.rollback(function() {
+                        throw err
+                      });
                     }
-                    // set default user-project-role
-                    var projectRoleData:any = {
-                        project_id: 1,  //M4_LAB
-                        role_id: 2,     // USER
-                        user_id: newUserId
+                    let newUserId:number = results.insertId
+                    // set password
+                    var credentialData:any = {
+                        user_id: newUserId,
+                        password: data.password
                     }
-                    dbconn.user.query('INSERT INTO user_project_role SET ?', projectRoleData, function (err:any, results:any, fields:any) {
+                    thisconn.query('INSERT INTO credential SET ?', credentialData, function (err:any, results:any, fields:any) {
                         if (err) {
-                            return dbconn.user.rollback(function() {
+                            return thisconn.rollback(function() {
                                 throw err
                             });
                         }
-                        // MLAB-129: INSERT verification token
-                        let verificationData:any = {
-                            user_id: newUserId,
-                            token: data.verificationToken
+                        // set default user-project-role
+                        var projectRoleData:any = {
+                            project_id: 1,  //M4_LAB
+                            role_id: 2,     // USER
+                            user_id: newUserId
                         }
-                        dbconn.user.query('INSERT INTO verification SET ?', verificationData, function (err:any, results:any, fields:any) {
+                        thisconn.query('INSERT INTO user_project_role SET ?', projectRoleData, function (err:any, results:any, fields:any) {
                             if (err) {
-                                return dbconn.user.rollback(function() {
+                                return thisconn.rollback(function() {
                                     throw err
                                 });
                             }
-                            // COMMIT
-                            dbconn.user.commit(function(err:any) {
+                            // MLAB-129: INSERT verification token
+                            let verificationData:any = {
+                                user_id: newUserId,
+                                token: data.verificationToken
+                            }
+                            thisconn.query('INSERT INTO verification SET ?', verificationData, function (err:any, results:any, fields:any) {
                                 if (err) {
-                                    return dbconn.user.rollback(function() {
+                                    return thisconn.rollback(function() {
                                         throw err
-                                    })
+                                    });
                                 }
+                                // COMMIT
+                                thisconn.commit(function(err:any) {
+                                    if (err) {
+                                        return thisconn.rollback(function() {
+                                            throw err
+                                        })
+                                    }
+                                })
                             })
                         })
-                    })
+                    });
                 });
-            });
+                callback(err)
+	    });
             callback(err)
         })
     },
@@ -208,4 +211,4 @@ var methods = {
     }
 };
 
-export = methods
\ No newline at end of file
+export = methods
-- 
GitLab