diff options
| author | physcik <mynameisgennadiy@vk.com> | 2026-04-14 18:27:22 +0500 |
|---|---|---|
| committer | physcik <mynameisgennadiy@vk.com> | 2026-04-14 18:27:22 +0500 |
| commit | a0826ce054d7468444c67306191cc7e2fe734eb0 (patch) | |
| tree | 68e9cc56d433058b650479868ec155f2d940b514 /backend/src/API/WeaponsAPI.zig | |
| parent | e21c194861198f298af34ac07032c04979ac5c1e (diff) | |
ranged weapons CRUD
Diffstat (limited to 'backend/src/API/WeaponsAPI.zig')
| -rw-r--r-- | backend/src/API/WeaponsAPI.zig | 49 |
1 files changed, 44 insertions, 5 deletions
diff --git a/backend/src/API/WeaponsAPI.zig b/backend/src/API/WeaponsAPI.zig index d095944..1b0ae00 100644 --- a/backend/src/API/WeaponsAPI.zig +++ b/backend/src/API/WeaponsAPI.zig @@ -2,12 +2,15 @@ const std = @import("std"); const httpz = @import("httpz"); const model = @import("../Models/RangedWeapon.zig"); const db = @import("../Database/Connection.zig"); +const errDesc = @import("ErrorDescription.zig"); pub fn RegisterEndpoints(router: *httpz.Router(void, *const fn (*httpz.request.Request, *httpz.response.Response) anyerror!void)) void { router.get("/weapons", testEndpoint, .{}); + router.get("/weapons/ranged", getAllRangedWeapons, .{}); router.post("/weapons/ranged", newRangedWeapon, .{}); router.get("/weapons/ranged/:id", getRangedWeaponById, .{}); - router.get("/weapons/ranged", getAllRangedWeapons, .{}); + router.put("/weapons/ranged/:id", updateRangedWeapon, .{}); + router.delete("/weapons/ranged/:id", deleteRangedWeapon, .{}); } fn testEndpoint(_: *httpz.Request, res: *httpz.Response) !void { @@ -57,9 +60,45 @@ fn getRangedWeaponById(req: *httpz.Request, res: *httpz.Response) !void { } fn newRangedWeapon(req: *httpz.Request, res: *httpz.Response) !void { - if (try req.json(model.RangedWeaponType)) |new| { - try res.json(new, .{}); + var body = try req.json(model.RangedWeaponType) orelse { + res.status = 400; + return; + }; + + db.RangedWeapons.Create(&body) catch |err| { + if (err == db.ResultErrors.AlreadyExists) { + res.status = 400; + try res.json(errDesc.ErrorDescriptor { + .Message = "A weapon with that ID already exists" + }, .{}); + return; + } + return err; + }; + + res.status = 201; +} + + +fn updateRangedWeapon(req: *httpz.Request, res: *httpz.Response) !void { + const id = req.param("id") orelse { + res.status = 400; + return; + }; + + var body = try req.json(model.RangedWeaponType) orelse { + res.status = 400; + return; + }; + + try db.RangedWeapons.Update(id, &body); +} + +fn deleteRangedWeapon(req: *httpz.Request, res: *httpz.Response) !void { + const id = req.param("id") orelse { + res.status = 400; return; - } - res.status = 502; + }; + + try db.RangedWeapons.Delete(id); } |
