summaryrefslogtreecommitdiff
path: root/src/cmd_bank.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd_bank.c')
-rw-r--r--src/cmd_bank.c58
1 files changed, 23 insertions, 35 deletions
diff --git a/src/cmd_bank.c b/src/cmd_bank.c
index b1ab2e3..82d5574 100644
--- a/src/cmd_bank.c
+++ b/src/cmd_bank.c
@@ -301,7 +301,7 @@ static yyjson_mut_val *h_bank_import(struct req *r)
free(setting);
free(rows);
free(csv);
- return fail(r, "INTERNAL", "database error");
+ return db_error(r);
}
if (!found) {
yyjson_mut_val *res =
@@ -337,7 +337,7 @@ static yyjson_mut_val *h_bank_import(struct req *r)
free(setting);
free(rows);
free(csv);
- return fail(r, "INTERNAL", "database error");
+ return db_error(r);
}
sqlite3_bind_int64(q, 1, r->org_id);
sqlite3_bind_blob(q, 2, sorted[i], 32, SQLITE_TRANSIENT);
@@ -394,7 +394,7 @@ static yyjson_mut_val *h_bank_import(struct req *r)
free(setting);
free(rows);
free(csv);
- return fail(r, "INTERNAL", "database error");
+ return db_error(r);
}
if (db_exec(r->db, "COMMIT", NULL) != 0) {
db_exec(r->db, "ROLLBACK", NULL);
@@ -402,7 +402,7 @@ static yyjson_mut_val *h_bank_import(struct req *r)
free(setting);
free(rows);
free(csv);
- return fail(r, "INTERNAL", "database error");
+ return db_error(r);
}
}
int64_t duplicates = (int64_t)nrows - imported;
@@ -476,20 +476,11 @@ static yyjson_mut_val *h_bank_list(struct req *r)
" WHERE m.org_id=t.org_id AND m.transaction_id=t.id)))"
" ORDER BY t.booked_at,t.id LIMIT ?6",
-1, &st, NULL) != SQLITE_OK)
- return fail(r, "INTERNAL", "database error");
+ return db_error(r);
sqlite3_bind_int64(st, 1, r->org_id);
- if (account)
- sqlite3_bind_text(st, 2, account, -1, SQLITE_TRANSIENT);
- else
- sqlite3_bind_null(st, 2);
- if (from)
- sqlite3_bind_text(st, 3, from, -1, SQLITE_TRANSIENT);
- else
- sqlite3_bind_null(st, 3);
- if (to)
- sqlite3_bind_text(st, 4, to, -1, SQLITE_TRANSIENT);
- else
- sqlite3_bind_null(st, 4);
+ bind_text_or_null(st, 2, account);
+ bind_text_or_null(st, 3, from);
+ bind_text_or_null(st, 4, to);
sqlite3_bind_int64(st, 5, status_code);
sqlite3_bind_int64(st, 6, limit);
@@ -533,7 +524,7 @@ static yyjson_mut_val *h_bank_list(struct req *r)
" GROUP BY v.id,v.series,v.number,v.date ORDER BY v.id",
-1, &ms, NULL) != SQLITE_OK) {
sqlite3_finalize(st);
- return fail(r, "INTERNAL", "database error");
+ return db_error(r);
}
sqlite3_bind_int64(ms, 1, r->org_id);
sqlite3_bind_text(ms, 2, tx_account, -1, SQLITE_TRANSIENT);
@@ -576,7 +567,7 @@ static yyjson_mut_val *h_bank_list(struct req *r)
"v.id LIMIT 3",
-1, &ss, NULL) != SQLITE_OK) {
sqlite3_finalize(st);
- return fail(r, "INTERNAL", "database error");
+ return db_error(r);
}
sqlite3_bind_int64(ss, 1, r->org_id);
sqlite3_bind_text(ss, 2, tx_account, -1, SQLITE_TRANSIENT);
@@ -616,10 +607,7 @@ static yyjson_mut_val *h_bank_list(struct req *r)
" WHERE t.org_id=?1 AND (?2 IS NULL OR t.account=?2)",
-1, &sum, NULL) == SQLITE_OK) {
sqlite3_bind_int64(sum, 1, r->org_id);
- if (account)
- sqlite3_bind_text(sum, 2, account, -1, SQLITE_TRANSIENT);
- else
- sqlite3_bind_null(sum, 2);
+ bind_text_or_null(sum, 2, account);
if (sqlite3_step(sum) == SQLITE_ROW) {
int64_t total = sqlite3_column_int64(sum, 0);
matched = sqlite3_column_int64(sum, 1);
@@ -678,7 +666,7 @@ static yyjson_mut_val *h_bank_match(struct req *r)
"SELECT account,amount_ore FROM bank_transactions"
" WHERE org_id=?1 AND id=?2",
-1, &st, NULL) != SQLITE_OK)
- return fail(r, "INTERNAL", "database error");
+ return db_error(r);
sqlite3_bind_int64(st, 1, r->org_id);
sqlite3_bind_int64(st, 2, tx_id);
if (sqlite3_step(st) != SQLITE_ROW) {
@@ -693,7 +681,7 @@ static yyjson_mut_val *h_bank_match(struct req *r)
if (sqlite3_prepare_v2(
r->db, "SELECT 1 FROM vouchers WHERE org_id=?1 AND id=?2", -1,
&st, NULL) != SQLITE_OK)
- return fail(r, "INTERNAL", "database error");
+ return db_error(r);
sqlite3_bind_int64(st, 1, r->org_id);
sqlite3_bind_int64(st, 2, voucher_id);
found = sqlite3_step(st) == SQLITE_ROW;
@@ -708,7 +696,7 @@ static yyjson_mut_val *h_bank_match(struct req *r)
" JOIN accounts a ON a.org_id=r.org_id AND a.id=r.account_id"
" WHERE r.org_id=?1 AND r.voucher_id=?2 AND a.number=?3",
-1, &st, NULL) != SQLITE_OK)
- return fail(r, "INTERNAL", "database error");
+ return db_error(r);
sqlite3_bind_int64(st, 1, r->org_id);
sqlite3_bind_int64(st, 2, voucher_id);
sqlite3_bind_text(st, 3, account, -1, SQLITE_TRANSIENT);
@@ -724,7 +712,7 @@ static yyjson_mut_val *h_bank_match(struct req *r)
"SELECT 1 FROM bank_matches WHERE org_id=?1 AND transaction_id=?2"
" AND voucher_id=?3",
-1, &st, NULL) != SQLITE_OK)
- return fail(r, "INTERNAL", "database error");
+ return db_error(r);
sqlite3_bind_int64(st, 1, r->org_id);
sqlite3_bind_int64(st, 2, tx_id);
sqlite3_bind_int64(st, 3, voucher_id);
@@ -736,7 +724,7 @@ static yyjson_mut_val *h_bank_match(struct req *r)
int64_t legs = 0;
if (bank_legs_sum(r->db, r->org_id, tx_id, account, &legs) != 0)
- return fail(r, "INTERNAL", "database error");
+ return db_error(r);
if (r->dry_run) {
sqlite3_stmt *vs = NULL;
int64_t voucher_leg = 0;
@@ -747,7 +735,7 @@ static yyjson_mut_val *h_bank_match(struct req *r)
" JOIN accounts a ON a.org_id=r.org_id AND a.id=r.account_id"
" WHERE r.org_id=?1 AND r.voucher_id=?2 AND a.number=?3",
-1, &vs, NULL) != SQLITE_OK)
- return fail(r, "INTERNAL", "database error");
+ return db_error(r);
sqlite3_bind_int64(vs, 1, r->org_id);
sqlite3_bind_int64(vs, 2, voucher_id);
sqlite3_bind_text(vs, 3, account, -1, SQLITE_TRANSIENT);
@@ -770,7 +758,7 @@ static yyjson_mut_val *h_bank_match(struct req *r)
"INSERT INTO bank_matches(org_id,transaction_id,voucher_id,"
"matched_at,matched_by,kind) VALUES(?1,?2,?3,?4,?5,'manual')",
-1, &st, NULL) != SQLITE_OK)
- return fail(r, "INTERNAL", "database error");
+ return db_error(r);
sqlite3_bind_int64(st, 1, r->org_id);
sqlite3_bind_int64(st, 2, tx_id);
sqlite3_bind_int64(st, 3, voucher_id);
@@ -779,7 +767,7 @@ static yyjson_mut_val *h_bank_match(struct req *r)
int rc = sqlite3_step(st);
sqlite3_finalize(st);
if (rc != SQLITE_DONE)
- return fail(r, "INTERNAL", "database error");
+ return db_error(r);
char *reqjson = audit_args_json(r->args);
audit_append(r->db, r->org_id, r->sess->user_id, r->sess->token_id,
@@ -787,7 +775,7 @@ static yyjson_mut_val *h_bank_match(struct req *r)
free(reqjson);
if (bank_legs_sum(r->db, r->org_id, tx_id, account, &legs) != 0)
- return fail(r, "INTERNAL", "database error");
+ return db_error(r);
yyjson_mut_val *o = yyjson_mut_obj(r->rdoc);
yyjson_mut_obj_add_int(r->rdoc, o, "transaction_id", tx_id);
yyjson_mut_obj_add_int(r->rdoc, o, "voucher_id", voucher_id);
@@ -808,7 +796,7 @@ static yyjson_mut_val *h_bank_unmatch(struct req *r)
"SELECT 1 FROM bank_matches WHERE org_id=?1 AND transaction_id=?2"
" AND voucher_id=?3",
-1, &st, NULL) != SQLITE_OK)
- return fail(r, "INTERNAL", "database error");
+ return db_error(r);
sqlite3_bind_int64(st, 1, r->org_id);
sqlite3_bind_int64(st, 2, tx_id);
sqlite3_bind_int64(st, 3, voucher_id);
@@ -822,14 +810,14 @@ static yyjson_mut_val *h_bank_unmatch(struct req *r)
"DELETE FROM bank_matches WHERE org_id=?1"
" AND transaction_id=?2 AND voucher_id=?3",
-1, &st, NULL) != SQLITE_OK)
- return fail(r, "INTERNAL", "database error");
+ return db_error(r);
sqlite3_bind_int64(st, 1, r->org_id);
sqlite3_bind_int64(st, 2, tx_id);
sqlite3_bind_int64(st, 3, voucher_id);
int rc = sqlite3_step(st);
sqlite3_finalize(st);
if (rc != SQLITE_DONE)
- return fail(r, "INTERNAL", "database error");
+ return db_error(r);
if (sqlite3_changes(r->db) == 0)
return fail(r, "NOT_FOUND", "match not found");
char *reqjson = audit_args_json(r->args);