From a0826ce054d7468444c67306191cc7e2fe734eb0 Mon Sep 17 00:00:00 2001 From: physcik Date: Tue, 14 Apr 2026 18:27:22 +0500 Subject: ranged weapons CRUD --- backend/src/API/ErrorDescription.zig | 3 +++ backend/src/API/WeaponsAPI.zig | 49 ++++++++++++++++++++++++++++++++---- 2 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 backend/src/API/ErrorDescription.zig (limited to 'backend/src/API') diff --git a/backend/src/API/ErrorDescription.zig b/backend/src/API/ErrorDescription.zig new file mode 100644 index 0000000..922eb6f --- /dev/null +++ b/backend/src/API/ErrorDescription.zig @@ -0,0 +1,3 @@ +pub const ErrorDescriptor = struct { + Message: []const u8 +}; 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); } -- cgit v1.3