From 8d018d996c1eddb882dc64ebbd228bb0135944f3 Mon Sep 17 00:00:00 2001 From: sadbeast Date: Sun, 23 Jun 2024 15:36:59 -0700 Subject: wtf --- src/web/drafts/pick.zig | 41 ++++++++++++++++++++++++++++++++++++ src/web/drafts/show.zig | 55 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 src/web/drafts/pick.zig create mode 100644 src/web/drafts/show.zig (limited to 'src/web/drafts') diff --git a/src/web/drafts/pick.zig b/src/web/drafts/pick.zig new file mode 100644 index 0000000..f710845 --- /dev/null +++ b/src/web/drafts/pick.zig @@ -0,0 +1,41 @@ +const Team = struct { + team_id: i16, + rank: ?i16, + name: []const u8, + division: []const u8, + league_user_id: ?i32, + pick_user: ?[]const u8, +}; + +pub fn handler(env: *Env, req: *httpz.Request, res: *httpz.Response) !void { + const query = try req.query(); + if (query.get("team_id")) |team_id| { + if (req.params.get("id")) |draft_id| { + _ = try env.app.pool.exec("CALL auto_draft($1)", .{draft_id}); + _ = try env.app.pool.exec("INSERT INTO picks (league_user_id, draft_id, team_id) VALUES (current_picker($1), $1, $2)", .{ draft_id, team_id }); + var result = try env.app.pool.query("SELECT cr.*, picks.league_user_id, users.name AS pick_user FROM current_rankings cr LEFT JOIN picks ON cr.team_id = picks.team_id AND picks.draft_id = $1 LEFT JOIN league_users USING(league_user_id) LEFT JOIN users USING (user_id) WHERE cr.team_id = $2", .{ draft_id, team_id }); + defer result.deinit(); + + var team: Team = undefined; + while (try result.next()) |row| { + team = try row.to(Team, .{}); + } + try web.renderWithDataPartials("pick", .{}, .{ + .team_id = team.team_id, + .rank = team.rank, + .name = team.name, + .pick_user = team.pick_user, + .division = team.division, + .league_user_id = team.league_user_id, + .draft_id = draft_id, + }, req, res); + } + } else { + @panic("oh no"); + } +} + +const httpz = @import("httpz"); +const Env = @import("../../env.zig").Env; +const web = @import("../../web/web.zig"); +const std = @import("std"); diff --git a/src/web/drafts/show.zig b/src/web/drafts/show.zig new file mode 100644 index 0000000..cd73438 --- /dev/null +++ b/src/web/drafts/show.zig @@ -0,0 +1,55 @@ +const Team = struct { + team_id: i16, + rank: ?i16, + name: []const u8, + division: []const u8, + pick_user: ?[]const u8, +}; + +const DraftInfo = struct { + draft_id: i32, + current_picker: i32, + status: []const u8, + league: []const u8, + round_time_remaining: ?i32, + message: []const u8, + can_pick: bool, +}; + +pub fn handler(env: *Env, req: *httpz.Request, res: *httpz.Response) !void { + if (req.params.get("id")) |draft_id| { + _ = try env.app.pool.exec("CALL auto_draft($1)", .{draft_id}); + + const picks_query = "SELECT * FROM current_draft_picks($1)"; + var picks_result = try env.app.pool.query(picks_query, .{draft_id}); + defer picks_result.deinit(); + + var teams: [32]Team = undefined; + var i: u8 = 0; + while (try picks_result.next()) |row| : (i += 1) { + const team = try row.to(Team, .{}); + teams[i] = team; + } + + var draft_info: DraftInfo = undefined; + const current_picker_query = + \\SELECT * FROM draft_info WHERE draft_id = $1 + ; + var row = try env.app.pool.row(current_picker_query, .{draft_id}); + if (row) |r| { + draft_info = try r.to(DraftInfo, .{}); + } + + try web.renderWithDataPartials("draft", .{ "pick", web.templates.get("pick").? }, .{ + .teams = teams, + .draft_info = draft_info, + .draft_id = draft_info.draft_id, + }, req, res); + try row.?.deinit(); + } +} + +const httpz = @import("httpz"); +const Env = @import("../../env.zig").Env; +const web = @import("../../web/web.zig"); +const std = @import("std"); -- cgit v1.2.3