Mercurial > sci
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 |