opencart-manager
Version:
Node.js package helping to manage your opencart store data easily.
90 lines (89 loc) • 3.91 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const errors_1 = __importDefault(require("./errors"));
const utils_1 = require("./utils");
class Database {
constructor(connection, prefix = "oc_") {
this.connection = connection;
this.prefix = prefix;
}
select(table, criteria) {
return __awaiter(this, void 0, void 0, function* () {
const criteriaSnakeCase = utils_1.snakeCasePropertyNames(criteria);
const result = yield this.connection.query(`
SELECT *
FROM \`${this.prefix + table}\`
WHERE ${Object.keys(criteriaSnakeCase)
.map((key) => `\`${key}\` = '${criteriaSnakeCase[key]}'`)
.join(" AND ")}
`);
return result[0].map((row) => utils_1.camelCasePropertyNames(row));
});
}
insert(table, data) {
return __awaiter(this, void 0, void 0, function* () {
const dataSnakeCase = utils_1.snakeCasePropertyNames(data);
const result = yield this.connection.query(`
INSERT INTO \`${this.prefix + table}\`
(${Object.keys(dataSnakeCase)
.map((key) => `\`${key}\``)
.join(", ")})
VALUES
(${Object.keys(dataSnakeCase)
.map((key) => `'${dataSnakeCase[key]}'`)
.join(", ")})
`);
if (result[0].affectedRows === 0) {
throw new Error(errors_1.default.NO_AFFECTED_ROWS);
}
return result[0];
});
}
update(table, criteria, data) {
return __awaiter(this, void 0, void 0, function* () {
const dataSnakeCase = utils_1.snakeCasePropertyNames(data);
const criteriaSnakeCase = utils_1.snakeCasePropertyNames(criteria);
const result = yield this.connection.query(`
UPDATE \`${this.prefix + table}\`
SET ${Object.keys(dataSnakeCase)
.map((key) => `\`${key}\` = '${dataSnakeCase[key]}'`)
.join(", ")}
WHERE ${Object.keys(criteriaSnakeCase)
.map((key) => `\`${key}\` = '${criteriaSnakeCase[key]}'`)
.join(" AND ")}
`);
if (result[0].affectedRows === 0) {
throw new Error(errors_1.default.NO_AFFECTED_ROWS);
}
return result[0];
});
}
delete(table, criteria) {
return __awaiter(this, void 0, void 0, function* () {
const criteriaSnakeCase = utils_1.snakeCasePropertyNames(criteria);
const result = yield this.connection.query(`
DELETE FROM \`${this.prefix + table}\`
WHERE ${Object.keys(criteriaSnakeCase)
.map((key) => `\`${key}\` = '${criteriaSnakeCase[key]}'`)
.join(" AND ")}
`);
return result[0];
});
}
close() {
this.connection.destroy();
}
}
exports.default = Database;