aboutsummaryrefslogtreecommitdiff
path: root/src/cmd_org.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd_org.c')
-rw-r--r--src/cmd_org.c78
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);