From 4513c86b388f4e22f167e10ab8444b35ece99baa Mon Sep 17 00:00:00 2001 From: JP100099 Date: Wed, 13 Aug 2025 23:05:19 +0200 Subject: [PATCH 1/3] refactor: insertServerData() now uses structs to write json files --- src/main.zig | 85 +++++++++++++++++++--------------------------------- 1 file changed, 30 insertions(+), 55 deletions(-) diff --git a/src/main.zig b/src/main.zig index d947c5f..1109dad 100644 --- a/src/main.zig +++ b/src/main.zig @@ -10,6 +10,16 @@ const dbFlags = zqlite.OpenFlags.Create | zqlite.OpenFlags.EXResCode; var connPtr: *const zqlite.Conn = undefined; var gpa = std.heap.GeneralPurposeAllocator(.{}){}; +//maybe a better name +const responseInfo = struct { + info: responseStatus = .{}, +}; + +const responseStatus = struct { + status: u16 = 0, + description: []const u8 = "", +}; + pub fn main() !void { var conn = try zqlite.open("./nutone.db", dbFlags); connPtr = &conn; @@ -52,7 +62,8 @@ fn insertServerData(req: *httpz.Request, res: *httpz.Response) !void { var conn = connPtr.*; var serverToken: ?[]const u8 = null; const allocator = gpa.allocator(); - var writeStream = std.json.writeStream(res.writer(), .{}); + // var writeStream = std.json.writeStream(res.writer(), .{}); + var responseBody: responseInfo = .{}; var parsedData: ?std.json.Parsed(KillData) = null; defer if (parsedData) |pD| pD.deinit(); @@ -60,29 +71,17 @@ fn insertServerData(req: *httpz.Request, res: *httpz.Response) !void { serverToken = req.header("token").?; if (req.body()) |kill| { parsedData = utility.readKillData(allocator, kill) catch { - try writeStream.beginObject(); - try writeStream.objectField("info"); - try writeStream.beginObject(); - try writeStream.objectField("status"); - try writeStream.write(400); - try writeStream.objectField("description"); - try writeStream.write("BAD REQUEST"); - try writeStream.endObject(); - try writeStream.endObject(); + responseBody.info.description = "BAD REQUEST"; + responseBody.info.status = 400; + try std.json.stringify(responseBody, .{}, res.writer()); res.status = 400; res.content_type = httpz.ContentType.JSON; return; }; } else { - try writeStream.beginObject(); - try writeStream.objectField("info"); - try writeStream.beginObject(); - try writeStream.objectField("status"); - try writeStream.write(418); - try writeStream.objectField("description"); - try writeStream.write("I'M A TEAPOT"); - try writeStream.endObject(); - try writeStream.endObject(); + responseBody.info.description = "I'M A TEAPOT"; + responseBody.info.status = 418; + try std.json.stringify(responseBody, .{}, res.writer()); res.status = 418; res.content_type = httpz.ContentType.JSON; return; @@ -92,15 +91,9 @@ fn insertServerData(req: *httpz.Request, res: *httpz.Response) !void { data.attacker_name = utility.processPlayerName(data.attacker_name); data.victim_name = utility.processPlayerName(data.victim_name); if (!try utility.isValidServer(conn, serverToken.?, data.server_id)) { - try writeStream.beginObject(); - try writeStream.objectField("info"); - try writeStream.beginObject(); - try writeStream.objectField("status"); - try writeStream.write(403); - try writeStream.objectField("description"); - try writeStream.write("FORBIDDEN"); - try writeStream.endObject(); - try writeStream.endObject(); + responseBody.info.description = "FORBIDDEN"; + responseBody.info.status = 403; + try std.json.stringify(responseBody, .{}, res.writer()); res.status = 403; res.content_type = httpz.ContentType.JSON; return; @@ -122,41 +115,23 @@ fn insertServerData(req: *httpz.Request, res: *httpz.Response) !void { .{ data.match_id, data.server_id, data.game_time, data.attacker_uid, data.attacker_weapon, data.attacker_titan, data.attacker_x, data.attacker_y, data.attacker_z, data.victim_uid, data.victim_weapon, data.victim_x, data.victim_y, data.victim_z, data.cause_of_death, data.distance }, ); } else { - try writeStream.beginObject(); - try writeStream.objectField("info"); - try writeStream.beginObject(); - try writeStream.objectField("status"); - try writeStream.write(418); - try writeStream.objectField("description"); - try writeStream.write("I'M A TEAPOT"); - try writeStream.endObject(); - try writeStream.endObject(); + responseBody.info.description = "I'M A TEAPOT"; + responseBody.info.status = 418; + try std.json.stringify(responseBody, .{}, res.writer()); res.status = 418; res.content_type = httpz.ContentType.JSON; return; } - try writeStream.beginObject(); - try writeStream.objectField("info"); - try writeStream.beginObject(); - try writeStream.objectField("status"); - try writeStream.write(200); - try writeStream.objectField("description"); - try writeStream.write("OK"); - try writeStream.endObject(); - try writeStream.endObject(); + responseBody.info.description = "OK"; + responseBody.info.status = 200; + try std.json.stringify(responseBody, .{}, res.writer()); res.status = 200; res.content_type = httpz.ContentType.JSON; return; } else { - try writeStream.beginObject(); - try writeStream.objectField("info"); - try writeStream.beginObject(); - try writeStream.objectField("status"); - try writeStream.write(401); - try writeStream.objectField("description"); - try writeStream.write("UNAUTHORIZED"); - try writeStream.endObject(); - try writeStream.endObject(); + responseBody.info.description = "UNAUTHORIZED"; + responseBody.info.status = 401; + try std.json.stringify(responseBody, .{}, res.writer()); res.status = 401; res.content_type = httpz.ContentType.JSON; return; From 9af6cd2311a1598a292bd2750574f719a7b10152 Mon Sep 17 00:00:00 2001 From: JP100099 Date: Fri, 15 Aug 2025 13:57:59 +0200 Subject: [PATCH 2/3] added test step to build file --- build.zig | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/build.zig b/build.zig index 524ce8e..a69f229 100644 --- a/build.zig +++ b/build.zig @@ -1,5 +1,17 @@ const std = @import("std"); +const test_targets = [_]std.Target.Query{ + .{}, + .{ + .cpu_arch = .x86_64, + .os_tag = .linux, + }, + .{ + .cpu_arch = .x86_64, + .os_tag = .windows, + }, +}; + pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{}); @@ -51,4 +63,15 @@ pub fn build(b: *std.Build) void { } const run_step = b.step("run", "Run the app"); run_step.dependOn(&run_cmd.step); + + const test_step = b.step("test", "Run unit tests"); + for (test_targets) |t_target| { + const unit_tests = b.addTest(.{ + .root_module = exe_mod, + .target = b.resolveTargetQuery(t_target), + }); + + const run_unit_tests = b.addRunArtifact(unit_tests); + test_step.dependOn(&run_unit_tests.step); + } } From 3c8aae8aeab26181f07d8a38749622d89b82c322 Mon Sep 17 00:00:00 2001 From: JP100099 Date: Fri, 15 Aug 2025 14:00:39 +0200 Subject: [PATCH 3/3] added test test --- src/main.zig | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main.zig b/src/main.zig index d947c5f..2bbb7ca 100644 --- a/src/main.zig +++ b/src/main.zig @@ -34,6 +34,10 @@ pub fn main() !void { try server.listen(); } +test "example Test" { + try std.testing.expect(true); +} + fn initDB() !void { var conn = connPtr.*; try conn.exec(queries.Create.Table.Tokens, .{});