diff options
| author | Anders Betts <anders.betts@gmail.com> | 2026-09-21 09:47:50 +0200 |
|---|---|---|
| committer | Anders Betts <anders.betts@gmail.com> | 2026-09-21 11:01:07 +0200 |
| commit | b1956aa73a533702ccbc3d7713ea90dd5ae44b9b (patch) | |
| tree | 7d3d4c8db28cbe15cfdf916f74ea7d77a5666414 /src/cmd_templates.c | |
| parent | e25a8c9ae70e5a310c1a82be55d0dbf58ba71250 (diff) | |
| download | bokf-b1956aa73a533702ccbc3d7713ea90dd5ae44b9b.tar.gz bokf-b1956aa73a533702ccbc3d7713ea90dd5ae44b9b.zip | |
commands: db_row_json and db_exec_bound helpers
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Diffstat (limited to 'src/cmd_templates.c')
| -rw-r--r-- | src/cmd_templates.c | 67 |
1 files changed, 16 insertions, 51 deletions
diff --git a/src/cmd_templates.c b/src/cmd_templates.c index 7e40886..eb98ea4 100644 --- a/src/cmd_templates.c +++ b/src/cmd_templates.c @@ -93,25 +93,14 @@ static int parse_template_rows(struct req *r, yyjson_val *rowsv, static yyjson_mut_val *tpl_rows_json(struct req *r, sqlite3_stmt *st) { - yyjson_mut_val *o = yyjson_mut_obj(r->rdoc); - yyjson_mut_obj_add_int(r->rdoc, o, "line_no", sqlite3_column_int64(st, 0)); - yyjson_mut_obj_add_strcpy(r->rdoc, o, "account", - sq(sqlite3_column_text(st, 1))); - yyjson_mut_obj_add_strcpy(r->rdoc, o, "name", - sq(sqlite3_column_text(st, 2))); - yyjson_mut_obj_add_strcpy(r->rdoc, o, "formula", - sq(sqlite3_column_text(st, 3))); - yyjson_mut_obj_add_strcpy(r->rdoc, o, "description", - sq(sqlite3_column_text(st, 4))); - return o; + return db_row_json(r->rdoc, st, + "line_no:i,account:s,name:s,formula:s,description:s"); } static yyjson_mut_val *h_template_list(struct req *r) { int active_only = 0; arg_bool(r->args, "active_only", &active_only); - yyjson_mut_val *items = yyjson_mut_arr(r->rdoc); - sqlite3_stmt *st = NULL; const char *sql = active_only ? "SELECT t.id,t.name,t.series,t.description,t.active," @@ -123,27 +112,9 @@ static yyjson_mut_val *h_template_list(struct req *r) "(SELECT count(*) FROM voucher_template_rows tr" " WHERE tr.org_id=t.org_id AND tr.template_id=t.id)" " FROM voucher_templates t WHERE t.org_id=?1 ORDER BY t.name"; - if (sqlite3_prepare_v2(r->db, sql, -1, &st, NULL) != SQLITE_OK) - return db_error(r); - sqlite3_bind_int64(st, 1, r->org_id); - while (sqlite3_step(st) == SQLITE_ROW) { - yyjson_mut_val *o = yyjson_mut_arr_add_obj(r->rdoc, items); - yyjson_mut_obj_add_int(r->rdoc, o, "id", sqlite3_column_int64(st, 0)); - yyjson_mut_obj_add_strcpy(r->rdoc, o, "name", - sq(sqlite3_column_text(st, 1))); - yyjson_mut_obj_add_strcpy(r->rdoc, o, "series", - sq(sqlite3_column_text(st, 2))); - yyjson_mut_obj_add_strcpy(r->rdoc, o, "description", - sq(sqlite3_column_text(st, 3))); - yyjson_mut_obj_add_bool(r->rdoc, o, "active", - sqlite3_column_int(st, 4) != 0); - yyjson_mut_obj_add_int(r->rdoc, o, "row_count", - sqlite3_column_int64(st, 5)); - } - sqlite3_finalize(st); - yyjson_mut_val *out = yyjson_mut_obj(r->rdoc); - yyjson_mut_obj_add_val(r->rdoc, out, "items", items); - return out; + return req_list(r, sql, + "id:i,name:s,series:s,description:s,active:b,row_count:i", + "i", r->org_id); } static yyjson_mut_val *h_template_get(struct req *r) @@ -450,23 +421,17 @@ static yyjson_mut_val *h_template_archive(struct req *r) const char *name = arg_str(r->args, "name"); if (id <= 0 && !name) return fail(r, "INVALID_ARGS", "id or name is required"); - sqlite3_stmt *st = NULL; - const char *sql = - id > 0 ? "UPDATE voucher_templates SET active=0 WHERE org_id=?1" - " AND id=?2" - : "UPDATE voucher_templates SET active=0 WHERE org_id=?1" - " AND name=?2"; - if (sqlite3_prepare_v2(r->db, sql, -1, &st, NULL) != SQLITE_OK) - return db_error(r); - sqlite3_bind_int64(st, 1, r->org_id); - if (id > 0) - sqlite3_bind_int64(st, 2, id); - else - sqlite3_bind_text(st, 2, name, -1, SQLITE_TRANSIENT); - int rc = sqlite3_step(st); - sqlite3_finalize(st); - if (rc != SQLITE_DONE) - return db_sqlite_error(r); + int rc = id > 0 + ? req_exec(r, + "UPDATE voucher_templates SET active=0 WHERE org_id=?1" + " AND id=?2", + "ii", r->org_id, id) + : req_exec(r, + "UPDATE voucher_templates SET active=0 WHERE org_id=?1" + " AND name=?2", + "is", r->org_id, name); + if (rc != 0) + return NULL; if (sqlite3_changes(r->db) == 0) return fail(r, "NOT_FOUND", "template not found"); char *reqjson = audit_args_json(r->args); |
