diff options
Diffstat (limited to 'src/cmd_org.c')
| -rw-r--r-- | src/cmd_org.c | 117 |
1 files changed, 23 insertions, 94 deletions
diff --git a/src/cmd_org.c b/src/cmd_org.c index 8adaf3b..0fe8601 100644 --- a/src/cmd_org.c +++ b/src/cmd_org.c @@ -17,33 +17,11 @@ static yyjson_mut_val *org_json(struct req *r, sqlite3_stmt *st) { - yyjson_mut_val *o = yyjson_mut_obj(r->rdoc); - 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, "org_nr", sq(sqlite3_column_text(st, 2))); - yyjson_mut_obj_add_strcpy(r->rdoc, o, "vat_nr", sq(sqlite3_column_text(st, 3))); - yyjson_mut_obj_add_strcpy(r->rdoc, o, "address", - sq(sqlite3_column_text(st, 4))); - yyjson_mut_obj_add_strcpy(r->rdoc, o, "postal_code", - sq(sqlite3_column_text(st, 5))); - yyjson_mut_obj_add_strcpy(r->rdoc, o, "city", sq(sqlite3_column_text(st, 6))); - yyjson_mut_obj_add_strcpy(r->rdoc, o, "country", - sq(sqlite3_column_text(st, 7))); - yyjson_mut_obj_add_strcpy(r->rdoc, o, "email", sq(sqlite3_column_text(st, 8))); - yyjson_mut_obj_add_strcpy(r->rdoc, o, "phone", sq(sqlite3_column_text(st, 9))); - yyjson_mut_obj_add_int(r->rdoc, o, "fiscal_year_start_month", - sqlite3_column_int(st, 10)); - yyjson_mut_obj_add_strcpy(r->rdoc, o, "moms_period", - sq(sqlite3_column_text(st, 11))); - yyjson_mut_obj_add_strcpy(r->rdoc, o, "framework", - sq(sqlite3_column_text(st, 12))); - yyjson_mut_obj_add_strcpy(r->rdoc, o, "created_at", - sq(sqlite3_column_text(st, 13))); - yyjson_mut_obj_add_strcpy(r->rdoc, o, "description", - sq(sqlite3_column_text(st, 14))); - yyjson_mut_obj_add_int(r->rdoc, o, "shares", - sqlite3_column_int64(st, 15)); - return o; + return db_row_json(r->rdoc, st, + "id:i,name:s,org_nr:s,vat_nr:s,address:s," + "postal_code:s,city:s,country:s,email:s,phone:s," + "fiscal_year_start_month:i,moms_period:s,framework:s," + "created_at:s,description:s,shares:i"); } #define ORG_COLUMNS \ @@ -313,29 +291,11 @@ static yyjson_mut_val *h_org_update(struct req *r) static yyjson_mut_val *h_org_member_list(struct req *r) { - yyjson_mut_val *items = yyjson_mut_arr(r->rdoc); - sqlite3_stmt *st = NULL; - if (sqlite3_prepare_v2( - r->db, - "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 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, "user_id", sqlite3_column_int64(st, 0)); - yyjson_mut_obj_add_strcpy(r->rdoc, o, "username", - sq(sqlite3_column_text(st, 1))); - yyjson_mut_obj_add_strcpy(r->rdoc, o, "display_name", - sq(sqlite3_column_text(st, 2))); - yyjson_mut_obj_add_strcpy(r->rdoc, o, "role", - sq(sqlite3_column_text(st, 3))); - } - 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, + "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", + "user_id:i,username:s,display_name:s,role:s", "i", + r->org_id); } static int64_t username_to_id(sqlite3 *db, const char *username) @@ -461,17 +421,9 @@ static yyjson_mut_val *h_org_member_remove(struct req *r) return fail(r, "CONFLICT", "cannot remove the last owner"); } free(current); - sqlite3_stmt *st = NULL; - if (sqlite3_prepare_v2( - r->db, "DELETE FROM memberships WHERE org_id=?1 AND user_id=?2", -1, - &st, NULL) != SQLITE_OK) - 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 db_sqlite_error(r); + if (req_exec(r, "DELETE FROM memberships WHERE org_id=?1 AND user_id=?2", + "ii", r->org_id, uid) != 0) + return NULL; char *reqjson = audit_args_json(r->args); audit_append(r->db, r->org_id, r->sess->user_id, 0, "member.remove", reqjson, "OK", NULL); @@ -483,33 +435,19 @@ static yyjson_mut_val *h_org_member_remove(struct req *r) /* board members (årsredovisning signatures) */ /* ------------------------------------------------------------------ */ +#define BOARD_SPEC "id:i,name:s,title:s" + static yyjson_mut_val *board_json(struct req *r, sqlite3_stmt *st) { - yyjson_mut_val *o = yyjson_mut_obj(r->rdoc); - 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, "title", - sq(sqlite3_column_text(st, 2))); - return o; + return db_row_json(r->rdoc, st, BOARD_SPEC); } static yyjson_mut_val *h_board_list(struct req *r) { - yyjson_mut_val *items = yyjson_mut_arr(r->rdoc); - sqlite3_stmt *st = NULL; - if (sqlite3_prepare_v2(r->db, - "SELECT id,name,title FROM board_members" - " WHERE org_id=?1 ORDER BY id", - -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_arr_add_val(items, board_json(r, st)); - sqlite3_finalize(st); - yyjson_mut_val *o = yyjson_mut_obj(r->rdoc); - yyjson_mut_obj_add_val(r->rdoc, o, "items", items); - return o; + return req_list(r, + "SELECT id,name,title FROM board_members" + " WHERE org_id=?1 ORDER BY id", + BOARD_SPEC, "i", r->org_id); } static yyjson_mut_val *board_get(struct req *r, int64_t id) @@ -628,18 +566,9 @@ static yyjson_mut_val *h_board_remove(struct req *r) yyjson_mut_obj_add_int(r->rdoc, o, "id", id); return o; } - sqlite3_stmt *st = NULL; - if (sqlite3_prepare_v2(r->db, - "DELETE FROM board_members" - " WHERE org_id=?1 AND id=?2", - -1, &st, NULL) != SQLITE_OK) - 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 db_sqlite_error(r); + if (req_exec(r, "DELETE FROM board_members WHERE org_id=?1 AND id=?2", + "ii", r->org_id, id) != 0) + return NULL; if (sqlite3_changes(r->db) == 0) return fail(r, "NOT_FOUND", "board member not found"); char *reqjson = audit_args_json(r->args); |
