summaryrefslogtreecommitdiff
path: root/src/cmd_invoices.c
diff options
context:
space:
mode:
authorAnders Betts <anders.betts@gmail.com>2026-09-20 21:55:04 +0200
committerAnders Betts <anders.betts@gmail.com>2026-09-20 22:02:57 +0200
commitceff3d26732a7fde2f66df0270269d3bebcfabf7 (patch)
tree4ad6677617cae9de4aa4b5b42352a7a8cf29a3e9 /src/cmd_invoices.c
parent10a535ace098144980d0ffd1593f6384c39cc221 (diff)
downloadbokf-ceff3d26732a7fde2f66df0270269d3bebcfabf7.tar.gz
bokf-ceff3d26732a7fde2f66df0270269d3bebcfabf7.zip
commands: shared DB-error helpers
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Diffstat (limited to 'src/cmd_invoices.c')
-rw-r--r--src/cmd_invoices.c34
1 files changed, 17 insertions, 17 deletions
diff --git a/src/cmd_invoices.c b/src/cmd_invoices.c
index b8d44e3..4bce5ee 100644
--- a/src/cmd_invoices.c
+++ b/src/cmd_invoices.c
@@ -41,7 +41,7 @@ static int invoice_take_number(struct req *r, int64_t *out)
if (sqlite3_prepare_v2(
r->db, "SELECT next_number FROM invoice_sequence WHERE org_id=?1",
-1, &st, NULL) != SQLITE_OK) {
- fail(r, "INTERNAL", "database error");
+ db_error(r);
return -1;
}
sqlite3_bind_int64(st, 1, r->org_id);
@@ -54,7 +54,7 @@ static int invoice_take_number(struct req *r, int64_t *out)
"UPDATE invoice_sequence SET next_number=next_number+1"
" WHERE org_id=?1",
-1, &st, NULL) != SQLITE_OK) {
- fail(r, "INTERNAL", "database error");
+ db_error(r);
return -1;
}
sqlite3_bind_int64(st, 1, r->org_id);
@@ -69,7 +69,7 @@ static int invoice_take_number(struct req *r, int64_t *out)
r->db,
"INSERT INTO invoice_sequence(org_id,next_number) VALUES(?1,2)",
-1, &st, NULL) != SQLITE_OK) {
- fail(r, "INTERNAL", "database error");
+ db_error(r);
return -1;
}
sqlite3_bind_int64(st, 1, r->org_id);
@@ -109,13 +109,13 @@ static yyjson_mut_val *h_invoice_sequence_set(struct req *r)
"INSERT INTO invoice_sequence(org_id,next_number) VALUES(?1,?2)"
" ON CONFLICT(org_id) DO UPDATE SET next_number=excluded.next_number",
-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, next);
int rc = sqlite3_step(st);
sqlite3_finalize(st);
if (rc != SQLITE_DONE)
- return fail(r, "INTERNAL", sqlite3_errmsg(r->db));
+ return db_sqlite_error(r);
char *reqjson = audit_args_json(r->args);
audit_append(r->db, r->org_id, r->sess->user_id, r->sess->token_id,
"invoice.sequence_set", reqjson, "OK", NULL);
@@ -387,7 +387,7 @@ static int invoice_view_fill(struct req *r, const struct invoice_draft *d,
"COALESCE(phone,''),COALESCE(email,''),COALESCE(org_nr,''),"
"COALESCE(vat_nr,'') FROM orgs WHERE id=?1",
-1, &st, NULL) != SQLITE_OK) {
- fail(r, "INTERNAL", "database error");
+ db_error(r);
return -1;
}
sqlite3_bind_int64(st, 1, r->org_id);
@@ -422,7 +422,7 @@ static int invoice_view_fill(struct req *r, const struct invoice_draft *d,
"SELECT name,address,postal_code,city,vat_nr,payment_days,active"
" FROM customers WHERE org_id=?1 AND id=?2",
-1, &st, NULL) != SQLITE_OK) {
- fail(r, "INTERNAL", "database error");
+ db_error(r);
return -1;
}
sqlite3_bind_int64(st, 1, r->org_id);
@@ -591,7 +591,7 @@ static int invoice_store_attachment(struct req *r, const struct invoice_view *v,
"content,created_at,created_by)"
" VALUES(?1,?2,?3,'application/pdf',?4,?5,?6,?7)",
-1, &st, NULL) != SQLITE_OK) {
- fail(r, "INTERNAL", "database error");
+ db_error(r);
return -1;
}
sqlite3_bind_int64(st, 1, r->org_id);
@@ -627,7 +627,7 @@ static int invoice_store_invoice(struct req *r, const struct invoice_draft *d,
" VALUES(?1,?2,?3,?4,?5,?6,?7,?8,?9,?10,?11,?12,?13,?14,?15,?16,"
"?17)",
-1, &st, NULL) != SQLITE_OK) {
- fail(r, "INTERNAL", "database error");
+ db_error(r);
return -1;
}
sqlite3_bind_int64(st, 1, r->org_id);
@@ -673,7 +673,7 @@ static int invoice_store_invoice(struct req *r, const struct invoice_draft *d,
"vat_code,account)"
" VALUES(?1,?2,?3,?4,?5,?6,?7,?8,?9,?10,?11,?12)",
-1, &st, NULL) != SQLITE_OK) {
- fail(r, "INTERNAL", "database error");
+ db_error(r);
return -1;
}
sqlite3_bind_int64(st, 1, r->org_id);
@@ -929,7 +929,7 @@ static yyjson_mut_val *h_invoice_get(struct req *r)
" ON c.org_id=i.org_id AND c.id=i.customer_id"
" WHERE i.org_id=?1 AND i.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, id);
if (sqlite3_step(st) != SQLITE_ROW) {
@@ -1032,7 +1032,7 @@ static yyjson_mut_val *h_invoice_list(struct req *r)
" AND (?3='' OR i.status=?3)"
" ORDER BY i.number DESC, i.id DESC LIMIT ?4",
-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, customer_id);
sqlite3_bind_text(st, 3, status, -1, SQLITE_TRANSIENT);
@@ -1094,7 +1094,7 @@ static yyjson_mut_val *h_invoice_pdf(struct req *r)
r->db,
"SELECT document_id FROM invoices 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, id);
if (sqlite3_step(st) != SQLITE_ROW) {
@@ -1113,7 +1113,7 @@ static yyjson_mut_val *h_invoice_pdf(struct req *r)
r->db,
"SELECT content FROM attachments 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, document_id);
if (sqlite3_step(st) != SQLITE_ROW) {
@@ -1163,7 +1163,7 @@ static yyjson_mut_val *h_invoice_send(struct req *r)
" JOIN orgs o ON o.id=i.org_id"
" WHERE i.org_id=?1 AND i.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, id);
if (sqlite3_step(st) != SQLITE_ROW) {
@@ -1192,7 +1192,7 @@ static yyjson_mut_val *h_invoice_send(struct req *r)
if (sqlite3_prepare_v2(
r->db, "SELECT content FROM attachments 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, document_id);
if (sqlite3_step(st) != SQLITE_ROW) {
@@ -1317,7 +1317,7 @@ static yyjson_mut_val *h_invoice_send(struct req *r)
"UPDATE invoices SET last_sent_at=?1,last_sent_to=?2"
" WHERE org_id=?3 AND id=?4",
-1, &st, NULL) != SQLITE_OK) {
- fail(r, "INTERNAL", "database error");
+ db_error(r);
goto done;
}
sqlite3_bind_text(st, 1, ts, -1, SQLITE_TRANSIENT);