#pragma once #include #include #include /* * command parsing */ enum klist_command { USER, LIST, TASK, }; struct klist { sqlite3 *db; sqlite3_stmt **stmts; u_int cmd; void *cmd_ctx; int error; }; typedef struct klist klist; klist *klist_init(char *db); void klist_deinit(klist *list); enum klist_user_command { USER_GET, USER_DELETE }; struct klist_user_context { enum klist_command cmd; }; typedef struct klist_user_context klist_user_context; klist_user_context *klist_user_context_init(klist *list); void klist_user_context_deinit(klist_user_context *ctx); enum klist_list_command { LIST_ADD, LIST_EDIT, LIST_GET, LIST_DELETE, }; struct klist_list_context { enum klist_list_command cmd; char *name; char **stages; size_t stages_len; }; typedef struct klist_list_context klist_list_context; klist_list_context *klist_list_context_init(klist *list); klist_list_context *klist_list_context_get_by_id(klist_list_context *ctx, u_int id); void klist_list_context_deinit(klist_list_context *ctx); enum klist_task_command { TASK_ADD, TASK_EDIT, TASK_GET, TASK_DELETE, }; struct klist_task_context { enum klist_task_command cmd; char *list; char *name; char *stage; }; typedef struct klist_task_context klist_task_context; klist_task_context *klist_task_context_init(klist *list); void klist_task_context_deinit(klist_task_context *ctx); /* * sql preparations */ void klist_sql_prepare(klist *, char *); /* * assuring things */ bool klist_assure_user(klist *, __uid_t, char *); void klist_assure_list(klist *, char *); void klist_assure_task(klist *, char *);