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