diff --git a/cli/Makefile b/cli/Makefile index 19d3805..07d1eda 100644 --- a/cli/Makefile +++ b/cli/Makefile @@ -4,7 +4,10 @@ FLAGS := -lcurl -g -Wall -Wextra OUTDIR := ./build OUT := tickets -build: +$(OUTDIR)/$(OUT): $(SRC) mkdir -p $(OUTDIR) - $(CC) -o $(OUTDIR)/$(OUT) $(SRC) $(FLAGS) + $(CC) -o $(OUTDIR)/$(OUT) $^ $(FLAGS) + +build: $(OUTDIR)/$(OUT) + \ No newline at end of file diff --git a/cli/dao.cpp b/cli/dao.cpp index 6efb5b2..6237e5d 100644 --- a/cli/dao.cpp +++ b/cli/dao.cpp @@ -66,7 +66,36 @@ ticket_t Dao::fetch_ticket_create(std::string title, std::string description) { vector Dao::fetch_ticket_get_all() { + string response; + string url = this->base_url + "/tickets"; + CURL *handle = curl_easy_init(); + + struct curl_slist* headers = nullptr; + headers = curl_slist_append(headers, "Content-Type: application/json"); + headers = curl_slist_append(headers, ("Authorization: Bearer " + this->api_key).c_str()); + + curl_easy_setopt(handle, CURLOPT_URL, url.c_str()); + curl_easy_setopt(handle, CURLOPT_HTTPHEADER, headers); + + curl_easy_setopt(handle, CURLOPT_FOLLOWLOCATION, 1L); + curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, write_callback); + curl_easy_setopt(handle, CURLOPT_WRITEDATA, &response); + + CURLcode rc = curl_easy_perform(handle); + + curl_slist_free_all(headers); + curl_easy_cleanup(handle); + + if (rc != CURLE_OK) { + throw std::runtime_error(std::string("curl_easy_perform failed: ") + curl_easy_strerror(rc)); + } + + nlohmann::json j = nlohmann::json::parse(response); + + vector t = j.get>(); + + return t; } vector Dao::fetch_ticket_get_by_status(string status) { diff --git a/cli/parser.cpp b/cli/parser.cpp index b47d66a..ab4d494 100644 --- a/cli/parser.cpp +++ b/cli/parser.cpp @@ -10,7 +10,7 @@ using namespace std; void show_usage() { cout << "usage:\n" - "these env vars have to be set: FRONTEND_API_KEY, DB_URL" + "these env vars have to be set: FRONTEND_API_KEY, BASE_API_URL\n" "tickets create <description>\n" "tickets list [-status <status>]\n" "tickets detail <id>" << endl; @@ -33,7 +33,7 @@ int parse_args(Dao *dao, int argc, char *argv[]) { if (strcmp(argv[1], "list") == 0) { // listing tickets (optional filter by status) - if (argc != 2 || argc != 4) { + if (argc != 2 && argc != 4) { show_usage_and_die(); } diff --git a/webserver/handlers.go b/webserver/handlers.go index 788e117..7270511 100644 --- a/webserver/handlers.go +++ b/webserver/handlers.go @@ -140,7 +140,7 @@ func deleteQuote(w http.ResponseWriter, r *http.Request) { // GET /tickets func getTickets(w http.ResponseWriter, r *http.Request) { - rows, err := db.Query(context.Background(), "SELECT id, title, description, status, created_at, updated_at FROM tickets;") + rows, err := db.Query(context.Background(), "SELECT id, title, description, status, created_at, updated_at FROM tickets ORDER BY id;") if err != nil { http.Error(w, err.Error(), 500) return