comparison scid/page-api-projects.c @ 22:dd078aea5d02

misc: use project/worker name as primary key
author David Demelier <markand@malikania.fr>
date Thu, 21 Jul 2022 20:23:22 +0200
parents f98ea578b1ef
children 7e10cace67a3
comparison
equal deleted inserted replaced
21:ec30e1b078a9 22:dd078aea5d02
51 51
52 if (!(doc = json_loads(json, 0, &err))) 52 if (!(doc = json_loads(json, 0, &err)))
53 log_warn("api/post: invalid JSON input: %s", err.text); 53 log_warn("api/post: invalid JSON input: %s", err.text);
54 else if (project_from(&res, 1, doc) < 0) 54 else if (project_from(&res, 1, doc) < 0)
55 log_warn("api/post: failed to decode parameters"); 55 log_warn("api/post: failed to decode parameters");
56 else if (db_project_add(&res) < 0) 56 else if (db_project_save(&res) < 0)
57 log_warn("api/post: database save error"); 57 log_warn("api/post: database save error");
58 else 58 else
59 ret = 0; 59 ret = 0;
60 60
61 json_decref(doc); 61 json_decref(doc);
94 project_finish(&project); 94 project_finish(&project);
95 } 95 }
96 } 96 }
97 97
98 static void 98 static void
99 get_one_id(struct kreq *r, intmax_t id)
100 {
101 struct project project = {0};
102
103 if (db_project_find_id(&project, id) < 0)
104 page(r, NULL, KHTTP_500, KMIME_APP_JSON, NULL);
105 else {
106 push(r, &project);
107 project_finish(&project);
108 }
109 }
110
111 static void
112 get_all(struct kreq *r) 99 get_all(struct kreq *r)
113 { 100 {
114 struct project projects[SCI_PROJECT_MAX] = {0}; 101 struct project projects[SCI_PROJECT_MAX] = {0};
115 ssize_t projectsz; 102 ssize_t projectsz;
116 103
127 for (ssize_t i = 0; i < projectsz; ++i) 114 for (ssize_t i = 0; i < projectsz; ++i)
128 project_finish(&projects[i]); 115 project_finish(&projects[i]);
129 } 116 }
130 117
131 /* 118 /*
132 * GET /api/v1/projects[/<name|id>] 119 * GET /api/v1/projects[/<name>]
133 * ------------------------------ 120 * -----------------------------
134 * 121 *
135 * Retrieve one project or a list of projects depending on the presence of 122 * Retrieve one project or a list of projects depending on the presence of
136 * <name> or <id> parameter. 123 * <name> parameter.
137 */ 124 */
138 static void 125 static void
139 get(struct kreq *r) 126 get(struct kreq *r)
140 { 127 {
141 char name[128]; 128 char name[128] = {0};
142 intmax_t id;
143 129
144 if (sscanf(r->path, "v1/projects/%jd", &id) == 1) 130 if (sscanf(r->path, "v1/projects/%127s", name) == 1)
145 get_one_id(r, id);
146 else if (sscanf(r->path, "v1/projects/%127s", name) == 1)
147 get_one(r, name); 131 get_one(r, name);
148 else 132 else
149 get_all(r); 133 get_all(r);
150 } 134 }
151 135