diff options
| author | physcik <mynameisgennadiy@vk.com> | 2026-04-15 13:26:45 +0500 |
|---|---|---|
| committer | physcik <mynameisgennadiy@vk.com> | 2026-04-15 13:26:45 +0500 |
| commit | f8e6072f8713f79926fa97092ee8b269109fc696 (patch) | |
| tree | f9500788ad25cf9eeb493e13082634bb72cae962 | |
| parent | 008de5f8a319f253ed5807160dc288855b1b6207 (diff) | |
Middleware handler
| -rw-r--r-- | backend/src/API/WeaponsAPI.zig | 29 | ||||
| -rw-r--r-- | backend/src/Handler.zig | 9 | ||||
| -rw-r--r-- | backend/src/main.zig | 10 |
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"}, .{}); } |
