diff options
Diffstat (limited to 'src/cmd_org.c')
| -rw-r--r-- | src/cmd_org.c | 78 |
1 files changed, 30 insertions, 48 deletions
diff --git a/src/cmd_org.c b/src/cmd_org.c index 4776491..8adaf3b 100644 --- a/src/cmd_org.c +++ b/src/cmd_org.c @@ -88,13 +88,10 @@ static yyjson_mut_val *h_org_create(struct req *r) -1, &st, NULL); if (rc != SQLITE_OK) { db_exec(r->db, "ROLLBACK", NULL); - return fail(r, "INTERNAL", sqlite3_errmsg(r->db)); + return db_sqlite_error(r); } sqlite3_bind_text(st, 1, name, -1, SQLITE_TRANSIENT); - if (org_nr) - sqlite3_bind_text(st, 2, org_nr, -1, SQLITE_TRANSIENT); - else - sqlite3_bind_null(st, 2); + bind_text_or_null(st, 2, org_nr); sqlite3_bind_int64(st, 3, fy_month); sqlite3_bind_text(st, 4, moms, -1, SQLITE_TRANSIENT); sqlite3_bind_text(st, 5, framework, -1, SQLITE_TRANSIENT); @@ -104,7 +101,7 @@ static yyjson_mut_val *h_org_create(struct req *r) sqlite3_finalize(st); if (rc != SQLITE_DONE) { db_exec(r->db, "ROLLBACK", NULL); - return fail(r, "INTERNAL", sqlite3_errmsg(r->db)); + return db_sqlite_error(r); } int64_t org_id = db_last_id(r->db); @@ -115,7 +112,7 @@ static yyjson_mut_val *h_org_create(struct req *r) -1, &st, NULL); if (rc != SQLITE_OK) { db_exec(r->db, "ROLLBACK", NULL); - return fail(r, "INTERNAL", sqlite3_errmsg(r->db)); + return db_sqlite_error(r); } sqlite3_bind_int64(st, 1, org_id); sqlite3_bind_int64(st, 2, r->sess->user_id); @@ -124,7 +121,7 @@ static yyjson_mut_val *h_org_create(struct req *r) sqlite3_finalize(st); if (rc != SQLITE_DONE) { db_exec(r->db, "ROLLBACK", NULL); - return fail(r, "INTERNAL", sqlite3_errmsg(r->db)); + return db_sqlite_error(r); } int64_t fy_id = 0; char *seed_err = NULL; @@ -148,7 +145,7 @@ static yyjson_mut_val *h_org_create(struct req *r) st = NULL; if (sqlite3_prepare_v2(r->db, "SELECT " ORG_COLUMNS " FROM orgs WHERE id=?1", -1, &st, NULL) != SQLITE_OK) - return fail(r, "INTERNAL", "database error"); + return db_error(r); sqlite3_bind_int64(st, 1, org_id); yyjson_mut_val *o = NULL; if (sqlite3_step(st) == SQLITE_ROW) @@ -169,7 +166,7 @@ static yyjson_mut_val *h_org_list(struct req *r) "SELECT o.id,o.name,o.org_nr,m.role FROM memberships m" " JOIN orgs o ON o.id=m.org_id WHERE m.user_id=?1 ORDER BY o.id", -1, &st, NULL) != SQLITE_OK) - return fail(r, "INTERNAL", "database error"); + return db_error(r); sqlite3_bind_int64(st, 1, r->sess->user_id); while (sqlite3_step(st) == SQLITE_ROW) { yyjson_mut_val *o = yyjson_mut_arr_add_obj(r->rdoc, items); @@ -192,7 +189,7 @@ static yyjson_mut_val *h_org_get(struct req *r) sqlite3_stmt *st = NULL; if (sqlite3_prepare_v2(r->db, "SELECT " ORG_COLUMNS " FROM orgs WHERE id=?1", -1, &st, NULL) != SQLITE_OK) - return fail(r, "INTERNAL", "database error"); + return db_error(r); sqlite3_bind_int64(st, 1, r->org_id); yyjson_mut_val *o = NULL; if (sqlite3_step(st) == SQLITE_ROW) @@ -280,28 +277,19 @@ static yyjson_mut_val *h_org_update(struct req *r) " shares=CASE WHEN ?15<0 THEN shares ELSE ?15 END" " WHERE id=?1", -1, &st, NULL) != SQLITE_OK) - return fail(r, "INTERNAL", "database error"); + return db_error(r); sqlite3_bind_int64(st, 1, r->org_id); for (int i = 0; i < 10; i++) { - if (texts[i]) - sqlite3_bind_text(st, i + 2, texts[i], -1, SQLITE_TRANSIENT); - else - sqlite3_bind_null(st, i + 2); + bind_text_or_null(st, i + 2, texts[i]); } sqlite3_bind_int64(st, 12, fy_month); - if (moms) - sqlite3_bind_text(st, 13, moms, -1, SQLITE_TRANSIENT); - else - sqlite3_bind_null(st, 13); - if (framework) - sqlite3_bind_text(st, 14, framework, -1, SQLITE_TRANSIENT); - else - sqlite3_bind_null(st, 14); + bind_text_or_null(st, 13, moms); + bind_text_or_null(st, 14, framework); sqlite3_bind_int64(st, 15, shares); 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, @@ -312,7 +300,7 @@ static yyjson_mut_val *h_org_update(struct req *r) if (sqlite3_prepare_v2(r->db, "SELECT " ORG_COLUMNS " FROM orgs WHERE id=?1", -1, &st, NULL) != SQLITE_OK) - return fail(r, "INTERNAL", "database error"); + return db_error(r); sqlite3_bind_int64(st, 1, r->org_id); yyjson_mut_val *o = NULL; if (sqlite3_step(st) == SQLITE_ROW) @@ -332,7 +320,7 @@ static yyjson_mut_val *h_org_member_list(struct req *r) "SELECT u.id,u.username,u.display_name,m.role FROM memberships m" " JOIN users u ON u.id=m.user_id WHERE m.org_id=?1 ORDER BY u.id", -1, &st, NULL) != SQLITE_OK) - return fail(r, "INTERNAL", "database error"); + 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); @@ -403,7 +391,7 @@ static yyjson_mut_val *h_org_member_add(struct req *r) "INSERT INTO memberships(org_id,user_id,role,created_at)" " VALUES(?1,?2,?3,?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, uid); sqlite3_bind_text(st, 3, role, -1, SQLITE_TRANSIENT); @@ -442,14 +430,14 @@ static yyjson_mut_val *h_org_member_set_role(struct req *r) r->db, "UPDATE memberships SET role=?1 WHERE org_id=?2 AND user_id=?3", -1, &st, NULL) != SQLITE_OK) - return fail(r, "INTERNAL", "database error"); + return db_error(r); sqlite3_bind_text(st, 1, role, -1, SQLITE_TRANSIENT); sqlite3_bind_int64(st, 2, r->org_id); sqlite3_bind_int64(st, 3, uid); 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, 0, "member.set_role", reqjson, "OK", NULL); @@ -477,13 +465,13 @@ static yyjson_mut_val *h_org_member_remove(struct req *r) if (sqlite3_prepare_v2( r->db, "DELETE FROM memberships WHERE org_id=?1 AND user_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, uid); 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, 0, "member.remove", reqjson, "OK", NULL); @@ -514,7 +502,7 @@ static yyjson_mut_val *h_board_list(struct req *r) "SELECT id,name,title FROM board_members" " WHERE org_id=?1 ORDER BY id", -1, &st, NULL) != SQLITE_OK) - return fail(r, "INTERNAL", "database error"); + return db_error(r); sqlite3_bind_int64(st, 1, r->org_id); while (sqlite3_step(st) == SQLITE_ROW) yyjson_mut_arr_add_val(items, board_json(r, st)); @@ -531,7 +519,7 @@ static yyjson_mut_val *board_get(struct req *r, int64_t id) "SELECT id,name,title FROM board_members" " 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); yyjson_mut_val *o = NULL; @@ -565,7 +553,7 @@ static yyjson_mut_val *h_board_add(struct req *r) "INSERT INTO board_members(org_id,name,title," "created_at) VALUES(?1,?2,?3,?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_text(st, 2, name, -1, SQLITE_TRANSIENT); sqlite3_bind_text(st, 3, title, -1, SQLITE_TRANSIENT); @@ -573,7 +561,7 @@ static yyjson_mut_val *h_board_add(struct req *r) 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); int64_t id = db_last_id(r->db); char *reqjson = audit_args_json(r->args); audit_append(r->db, r->org_id, r->sess->user_id, r->sess->token_id, @@ -611,21 +599,15 @@ static yyjson_mut_val *h_board_update(struct req *r) " title=COALESCE(?4,title)" " 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 (name) - sqlite3_bind_text(st, 3, name, -1, SQLITE_TRANSIENT); - else - sqlite3_bind_null(st, 3); - if (title) - sqlite3_bind_text(st, 4, title, -1, SQLITE_TRANSIENT); - else - sqlite3_bind_null(st, 4); + bind_text_or_null(st, 3, name); + bind_text_or_null(st, 4, title); 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); if (sqlite3_changes(r->db) == 0) return fail(r, "NOT_FOUND", "board member not found"); char *reqjson = audit_args_json(r->args); @@ -651,13 +633,13 @@ static yyjson_mut_val *h_board_remove(struct req *r) "DELETE FROM board_members" " 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); 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); if (sqlite3_changes(r->db) == 0) return fail(r, "NOT_FOUND", "board member not found"); char *reqjson = audit_args_json(r->args); |
