pockybot
Version:
Spark bot that handles team recognition
121 lines (120 loc) • 4.99 kB
JavaScript
;
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;