aboutsummaryrefslogtreecommitdiffstats
path: root/src/web/leagues/show.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/web/leagues/show.zig')
-rw-r--r--src/web/leagues/show.zig80
1 files changed, 80 insertions, 0 deletions
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");