From 8d018d996c1eddb882dc64ebbd228bb0135944f3 Mon Sep 17 00:00:00 2001 From: sadbeast Date: Sun, 23 Jun 2024 15:36:59 -0700 Subject: wtf --- src/web/leagues/show.zig | 80 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 src/web/leagues/show.zig (limited to 'src/web/leagues/show.zig') diff --git a/src/web/leagues/show.zig b/src/web/leagues/show.zig new file mode 100644 index 0000000..2bbdabd --- /dev/null +++ b/src/web/leagues/show.zig @@ -0,0 +1,80 @@ +const League = struct { + name: []const u8, +}; + +const LeaguePickScore = struct { + season_id: i32, + league_id: i32, + team: []const u8, + player: []const u8, + win: i32, + playoffs: ?i16, + divisional: ?i16, + conference: ?i16, + superbowl: ?i16, + champion: ?i16, + total: i32, +}; + +const PlayerScore = struct { + player: []const u8, + score: i32, +}; + +pub fn handler(env: *Env, req: *httpz.Request, res: *httpz.Response) !void { + if (req.params.get("id")) |league_id| { + const query = try req.query(); + var league: League = undefined; + const league_query = + \\SELECT name FROM leagues WHERE league_id = $1 + ; + var league_result = (try env.app.pool.row(league_query, .{league_id})) orelse { + res.status = 404; + return; + }; + defer league_result.deinit() catch {}; + + league = try league_result.to(League, .{}); + + var team_scores_result: *pg.Result = undefined; + var player_scores_result: *pg.Result = undefined; + + if (query.get("season")) |season_id| { + player_scores_result = try env.app.pool.query("SELECT player, score FROM season_player_scores WHERE league_id = $1 AND season_id = season_id_by_year($2)", .{ league_id, season_id }); + team_scores_result = try env.app.pool.query("SELECT * FROM league_scores WHERE league_id = $1 AND season_id = season_id_by_year($2)", .{ league_id, season_id }); + } else { + player_scores_result = try env.app.pool.query("SELECT player, score FROM current_player_scores WHERE league_id = $1", .{league_id}); + team_scores_result = try env.app.pool.query("SELECT * FROM league_scores WHERE league_id = $1 AND season_id = current_season()", .{league_id}); + } + defer player_scores_result.deinit(); + defer team_scores_result.deinit(); + + var scores: [32]LeaguePickScore = undefined; + var score_count: u8 = 0; + while (try team_scores_result.next()) |row| : (score_count += 1) { + const score = try row.to(LeaguePickScore, .{ .dupe = true }); + scores[score_count] = score; + } + + var player_scores: [2]PlayerScore = undefined; + { + var i: u8 = 0; + while (try player_scores_result.next()) |row| : (i += 1) { + const score = try row.to(PlayerScore, .{}); + player_scores[i] = score; + } + } + + try web.renderWithData("league", .{ + .league = league, + .scores = scores[0..score_count], + .player_scores = player_scores, + }, req, res); + } +} + +const httpz = @import("httpz"); +const pg = @import("pg"); +const Env = @import("../../env.zig").Env; +const web = @import("../../web/web.zig"); +const std = @import("std"); -- cgit v1.2.3