UNPKG

pockybot

Version:

Spark bot that handles team recognition

121 lines (120 loc) 4.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const logger_1 = require("../logger"); const db_constants_1 = require("../db-constants"); class DbUsers { constructor(webexService, queryHandler) { this.webex = webexService; this.queryHandler = queryHandler; this.sqlUpdate = this.queryHandler.readFile('../../../database/queries/update_pocky_user.sql'); this.sqlGetUsers = this.queryHandler.readFile('../../../database/queries/select_all_users.sql'); this.sqlGetUser = this.queryHandler.readFile('../../../database/queries/select_user.sql'); this.sqlCreateUser = this.queryHandler.readFile('../../../database/queries/create_pocky_user.sql'); this.sqlExists = this.queryHandler.readFile('../../../database/queries/exists.sql'); this.sqlDeleteUser = this.queryHandler.readFile('../../../database/queries/delete_pocky_user.sql'); } async createUser(userid) { let user; try { user = await this.webex.people.get(userid); } catch (error) { logger_1.Logger.error(`[DbUsers.createUser] Error getting user from userid ${userid}: ${error.message}`); throw new Error(`Error getting ${userid} user in createUser`); } logger_1.Logger.information(`[DbUsers.createUser] Creating a new user with userid ${userid} and username ${user.displayName}`); let query = { name: 'createUserQuery', text: this.sqlCreateUser, values: [userid, user.displayName] }; try { return await this.queryHandler.executeNonQuery(query); } catch (error) { logger_1.Logger.error(`[DbUsers.createUser] Error creating new user ${user.displayName}: ${error.message}`); throw new Error(`Error creating new user ${user.displayName}`); } } async updateUser(username, userid) { try { await this.existsOrCanBeCreated(userid); } catch (error) { logger_1.Logger.error(`[DbUsers.updateUser] Error checking if user exists or can be created for ${userid}: ${error.message}`); return db_constants_1.default.updateUserError; } let query = { name: 'updateUserQuery', text: this.sqlUpdate, values: [username, userid] }; try { await this.queryHandler.executeNonQuery(query); return db_constants_1.default.updateUserSuccess; } catch (error) { logger_1.Logger.error(`[DbUsers.updateUser] Error executing update query for ${userid}: ${error.message}`); return db_constants_1.default.updateUserError; } } async getUsers() { let query = { name: 'getUsersQuery', text: this.sqlGetUsers }; return await this.queryHandler.executeQuery(query); } async getUser(userid) { let query = { name: 'getUserQuery', text: this.sqlGetUser, values: [userid] }; let user = await this.queryHandler.executeQuery(query); if (user.length === 1) { return user[0]; } else if (user.length === 0) { // should not occur in normal circumstances logger_1.Logger.error(`[DbUsers.getUser] Query returned no users for userid ${userid}`); throw new Error(`No user entities returned by getUser ${userid}`); } else { // should NEVER occur but shouldn't be harmful if it does logger_1.Logger.warn(`[DbUsers.getUser] More than one user returned by getUser ${userid}`); return user[0]; } } async existsOrCanBeCreated(userid) { let exists = await this.exists(userid); if (exists) { logger_1.Logger.debug(`[DbUsers.existsOrCanBeCreated] User ${userid} already exists`); return true; } let newUser = await this.createUser(userid); logger_1.Logger.information(`[DbUsers.existsOrCanBeCreated] User ${userid} created`); logger_1.Logger.debug(`[DbUsers.existsOrCanBeCreated] Created user ${userid} with data: ${newUser}`); return true; } async exists(userid) { let query = { name: 'existsQuery', text: this.sqlExists, values: [userid] }; logger_1.Logger.debug(`[DbUsers.exists] Checking if user ${userid} exists`); let existingUser = await this.queryHandler.executeQuery(query); return existingUser[0]['exists']; } async deleteUser(userid) { let query = { name: 'deleteUserQuery', text: this.sqlDeleteUser, values: [userid] }; logger_1.Logger.debug(`[DbUsers.deleteUser] Deleting user ${userid}`); await this.queryHandler.executeNonQuery(query); } } exports.default = DbUsers;