summaryrefslogtreecommitdiff
path: root/backend/src/API/WeaponsAPI.zig
diff options
context:
space:
mode:
Diffstat (limited to 'backend/src/API/WeaponsAPI.zig')
-rw-r--r--backend/src/API/WeaponsAPI.zig49
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);
}