summaryrefslogtreecommitdiff
path: root/backend/src
diff options
context:
space:
mode:
Diffstat (limited to 'backend/src')
-rw-r--r--backend/src/API/WeaponsAPI.zig29
-rw-r--r--backend/src/Handler.zig9
-rw-r--r--backend/src/main.zig10
3 files changed, 31 insertions, 17 deletions
diff --git a/backend/src/API/WeaponsAPI.zig b/backend/src/API/WeaponsAPI.zig
index b9fd532..c15738e 100644
--- a/backend/src/API/WeaponsAPI.zig
+++ b/backend/src/API/WeaponsAPI.zig
@@ -3,8 +3,9 @@ const httpz = @import("httpz");
const model = @import("../Models/RangedWeapon.zig");
const db = @import("../Database/Connection.zig");
const errDesc = @import("ErrorDescription.zig");
+const Handler = @import("../Handler.zig");
-pub fn RegisterEndpoints(router: *httpz.Router(void, *const fn (*httpz.request.Request, *httpz.response.Response) anyerror!void)) void {
+pub fn RegisterEndpoints(router: *httpz.Router(*Handler.Handler,*const fn (*Handler.Handler, *httpz.request.Request, *httpz.response.Response) anyerror!void)) void {
router.get("/weapons/ranged", getAllRangedWeapons, .{});
router.post("/weapons/ranged", newRangedWeapon, .{});
router.get("/weapons/ranged/:id", getRangedWeaponById, .{});
@@ -12,23 +13,23 @@ pub fn RegisterEndpoints(router: *httpz.Router(void, *const fn (*httpz.request.R
router.delete("/weapons/ranged/:id", deleteRangedWeapon, .{});
}
-fn getAllRangedWeapons(req: *httpz.Request, res: *httpz.Response) !void {
+fn getAllRangedWeapons(_: *Handler.Handler, req: *httpz.Request, res: *httpz.Response) !void {
var found = try db.RangedWeapons.GetAll(req.arena);
defer found.deinit(req.arena);
try res.json(found.items, .{});
}
-fn getRangedWeaponById(req: *httpz.Request, res: *httpz.Response) !void {
+fn getRangedWeaponById(_: *Handler.Handler, req: *httpz.Request, res: *httpz.Response) !void {
const id = req.param("id") orelse {
- res.status = 400;
+ res.setStatus(.bad_request);
return;
};
const found = db.RangedWeapons.GetByDisplayName(req.arena, id) catch |err| {
// Empty result handling
if (err == db.ResultErrors.NotFound) {
- res.status = 204;
+ res.setStatus(.no_content);
try res.json(errDesc.NotFoundDescriptor, .{});
return;
}
@@ -38,9 +39,9 @@ fn getRangedWeaponById(req: *httpz.Request, res: *httpz.Response) !void {
try res.json(found, .{});
}
-fn newRangedWeapon(req: *httpz.Request, res: *httpz.Response) !void {
+fn newRangedWeapon(_: *Handler.Handler, req: *httpz.Request, res: *httpz.Response) !void {
var body = try req.json(model.RequestBody) orelse {
- res.status = 400;
+ res.setStatus(.bad_request);
return;
};
@@ -56,24 +57,24 @@ fn newRangedWeapon(req: *httpz.Request, res: *httpz.Response) !void {
return err;
};
- res.status = 201;
+ res.setStatus(.created);
}
-fn updateRangedWeapon(req: *httpz.Request, res: *httpz.Response) !void {
+fn updateRangedWeapon(_: *Handler.Handler, req: *httpz.Request, res: *httpz.Response) !void {
const id = req.param("id") orelse {
- res.status = 400;
+ res.setStatus(.no_content);
return;
};
var body = try req.json(model.RequestBody) orelse {
- res.status = 400;
+ res.setStatus(.no_content);
return;
};
var weapon = body.ToModel();
db.RangedWeapons.Update(id, &weapon) catch |err| {
if (err == db.ResultErrors.NotFound) {
- res.status = 204;
+ res.setStatus(.no_content);
try res.json(errDesc.NotFoundDescriptor, .{});
return;
}
@@ -81,9 +82,9 @@ fn updateRangedWeapon(req: *httpz.Request, res: *httpz.Response) !void {
};
}
-fn deleteRangedWeapon(req: *httpz.Request, res: *httpz.Response) !void {
+fn deleteRangedWeapon(_: *Handler.Handler, req: *httpz.Request, res: *httpz.Response) !void {
const id = req.param("id") orelse {
- res.status = 400;
+ res.setStatus(.bad_request);
return;
};
diff --git a/backend/src/Handler.zig b/backend/src/Handler.zig
new file mode 100644
index 0000000..0cee922
--- /dev/null
+++ b/backend/src/Handler.zig
@@ -0,0 +1,9 @@
+const std = @import("std");
+const httpz = @import("httpz");
+
+pub const Handler = struct {
+ pub fn dispatch(self: *Handler, action: httpz.Action(*Handler), req: *httpz.Request, res: *httpz.Response) !void {
+ try action(self, req, res);
+ std.debug.print("{any} {s}\n", .{req.method, req.url.raw});
+ }
+};
diff --git a/backend/src/main.zig b/backend/src/main.zig
index 836efe1..a949b4d 100644
--- a/backend/src/main.zig
+++ b/backend/src/main.zig
@@ -2,14 +2,18 @@ const std = @import("std");
const backend = @import("backend");
const httpz = @import("httpz");
const db = @import("Database/Connection.zig");
+const handler = @import("Handler.zig");
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
const allocator = gpa.allocator();
+
+ var httpHandler = handler.Handler {
+ };
- var server = try httpz.Server(void).init(allocator, .{
+ var server = try httpz.Server(*handler.Handler).init(allocator, .{
.address = .all(6969),
- }, {});
+ }, &httpHandler);
defer {
server.stop();
@@ -31,7 +35,7 @@ pub fn main() !void {
try server.listen();
}
-fn index(_: *httpz.Request, res: *httpz.Response) !void {
+fn index(_: *handler.Handler, _: *httpz.Request, res: *httpz.Response) !void {
res.status = 200;
try res.json(.{.status = "OK"}, .{});
}