From 3f0731baa4541c1ca5cb97237a05f0284a8cda5d Mon Sep 17 00:00:00 2001 From: Bob Farrell Date: Sun, 22 Sep 2024 20:23:31 +0100 Subject: [PATCH] WIP --- build.zig | 1 + src/commands/migrate.zig | 16 +--------------- src/jetzig/App.zig | 6 +----- src/jetzig/Environment.zig | 9 +++++++++ src/jetzig/database.zig | 31 ++++++++----------------------- src/jetzig/http/Request.zig | 9 --------- src/jetzig/http/Server.zig | 4 +++- 7 files changed, 23 insertions(+), 53 deletions(-) diff --git a/build.zig b/build.zig index 45bfab8..43924bc 100644 --- a/build.zig +++ b/build.zig @@ -52,6 +52,7 @@ pub fn build(b: *std.Build) !void { .target = target, .optimize = optimize, .jetquery_migrations_path = @as([]const u8, "src/app/database/migrations"), + .jetquery_config_path = @as([]const u8, "config/database.zig"), }); const zmd_dep = b.dependency("zmd", .{ .target = target, .optimize = optimize }); const httpz_dep = b.dependency("httpz", .{ .target = target, .optimize = optimize }); diff --git a/src/commands/migrate.zig b/src/commands/migrate.zig index 2d828ba..4d4e319 100644 --- a/src/commands/migrate.zig +++ b/src/commands/migrate.zig @@ -14,21 +14,7 @@ pub fn main() !void { const allocator = arena.allocator(); - // FIXME: Load config from app - var repo = try jetquery.Repo.init( - allocator, - .{ - .adapter = .{ - .postgresql = .{ - .database = "jetzig_website", - .username = "postgres", - .hostname = "127.0.0.1", - .password = "password", - .port = 5432, - }, - }, - }, - ); + var repo = try jetquery.Repo.loadConfig(allocator, .{}); defer repo.deinit(); const migrate = Migrate.init(&repo); diff --git a/src/jetzig/App.zig b/src/jetzig/App.zig index 0f3d847..153bbe9 100644 --- a/src/jetzig/App.zig +++ b/src/jetzig/App.zig @@ -70,11 +70,7 @@ pub fn start(self: *const App, routes_module: type, options: AppOptions) !void { ); defer log_thread.join(); - var repo = try jetzig.database.repo( - self.allocator, - jetzig.config.get(?jetzig.database.DatabaseOptions, "database"), - self, - ); + var repo = try jetzig.database.repo(self.allocator, self); defer repo.deinit(); if (self.env.detach) { diff --git a/src/jetzig/Environment.zig b/src/jetzig/Environment.zig index 34a239f..16d4282 100644 --- a/src/jetzig/Environment.zig +++ b/src/jetzig/Environment.zig @@ -151,6 +151,15 @@ pub fn init(allocator: std.mem.Allocator) !Environment { std.process.exit(1); } + if (jetzig.jetquery.adapter == .null) { + try logger.WARN("No database configured in `config/database.zig`. Database operations are not available.", .{}); + } else { + try logger.INFO( + "Using `{s}` database adapter with database: `{s}`.", + .{ @tagName(jetzig.jetquery.adapter), jetzig.jetquery.config.database.database }, + ); + } + return .{ .allocator = allocator, .logger = logger, diff --git a/src/jetzig/database.zig b/src/jetzig/database.zig index 0a76b06..168effd 100644 --- a/src/jetzig/database.zig +++ b/src/jetzig/database.zig @@ -13,12 +13,11 @@ pub const DatabaseOptions = struct { pub const Schema = jetzig.get(type, "Schema"); -pub fn repo(allocator: std.mem.Allocator, maybe_options: ?DatabaseOptions, app: *const jetzig.App) !jetzig.jetquery.Repo { - const options = maybe_options orelse return try jetzig.jetquery.Repo.init( - allocator, - .{ .adapter = .null }, - ); +pub fn Query(comptime table: std.meta.DeclEnum(jetzig.config.get(type, "Schema"))) type { + return jetzig.jetquery.Query(@field(jetzig.config.get(type, "Schema"), @tagName(table))); +} +pub fn repo(allocator: std.mem.Allocator, app: *const jetzig.App) !jetzig.jetquery.Repo { // XXX: Is this terrible ? const Callback = struct { var jetzig_app: *const jetzig.App = undefined; @@ -28,24 +27,10 @@ pub fn repo(allocator: std.mem.Allocator, maybe_options: ?DatabaseOptions, app: }; Callback.jetzig_app = app; - return switch (options.adapter) { - .postgresql => try jetzig.jetquery.Repo.init( - allocator, - .{ - .adapter = .{ - .postgresql = .{ - .hostname = options.hostname, - .port = options.port, - .username = options.username, - .password = options.password, - .database = options.database, - .lazy_connect = true, - }, - }, - .eventCallback = Callback.callbackFn, - }, - ), - }; + return try jetzig.jetquery.Repo.loadConfig( + allocator, + .{ .eventCallback = Callback.callbackFn, .lazy_connect = true }, + ); } fn eventCallback(event: jetzig.jetquery.events.Event, app: *const jetzig.App) !void { diff --git a/src/jetzig/http/Request.zig b/src/jetzig/http/Request.zig index 60f5868..c5b60a5 100644 --- a/src/jetzig/http/Request.zig +++ b/src/jetzig/http/Request.zig @@ -520,15 +520,6 @@ pub fn mail(self: *Request, name: []const u8, mail_params: jetzig.mail.MailParam }; } -pub fn query( - self: *const Request, - comptime table: std.meta.DeclEnum(jetzig.config.get(type, "Schema")), -) jetzig.jetquery.Query(@field(jetzig.config.get(type, "Schema"), @tagName(table))) { - return jetzig.jetquery.Query( - @field(jetzig.config.get(type, "Schema"), @tagName(table)), - ).init(self.allocator); -} - fn extensionFormat(self: *const Request) ?jetzig.http.Request.Format { const extension = self.path.extension orelse return null; if (std.mem.eql(u8, extension, ".html")) { diff --git a/src/jetzig/http/Server.zig b/src/jetzig/http/Server.zig index fe99958..414ee10 100644 --- a/src/jetzig/http/Server.zig +++ b/src/jetzig/http/Server.zig @@ -324,7 +324,9 @@ fn renderView( }; } } else { - try self.logger.WARN("`request.render` was not invoked. Rendering empty content.", .{}); + if (!request.redirected) { + try self.logger.WARN("`request.render` was not invoked. Rendering empty content.", .{}); + } request.response_data.reset(); return .{ .view = .{ .data = request.response_data, .status_code = .no_content },