This commit is contained in:
Bob Farrell 2024-09-15 17:08:26 +01:00
parent 60de7ac508
commit 4707fdf744
6 changed files with 20 additions and 4 deletions

View File

@ -7,8 +7,7 @@
.hash = "1220d0e8734628fd910a73146e804d10a3269e3e7d065de6bb0e3e88d5ba234eb163",
},
.zmpl = .{
.url = "https://github.com/jetzig-framework/zmpl/archive/dc4c5d2e224ce61990a9593681ee7ffb8c2ca8c2.tar.gz",
.hash = "1220175cf7aa82cc18c787e29ec2f62d17b55a5d0d280dfd15ffa347d3932beb9bdc",
.path = "../zmpl",
},
.jetkv = .{
.url = "https://github.com/jetzig-framework/jetkv/archive/2b1130a48979ea2871c8cf6ca89c38b1e7062839.tar.gz",

View File

@ -55,7 +55,8 @@ const Function = struct {
const path = relative_path[0 .. relative_path.len - std.fs.path.extension(relative_path).len];
if (std.mem.eql(u8, path, "root")) return try self.routes.allocator.dupe(u8, "/");
return try std.mem.concat(self.routes.allocator, u8, &[_][]const u8{ "/", path });
const maybe_new = if (std.mem.eql(u8, self.name, "new")) "/new" else "";
return try std.mem.concat(self.routes.allocator, u8, &[_][]const u8{ "/", path, maybe_new });
}
pub fn lessThanFn(context: void, lhs: Function, rhs: Function) bool {

View File

@ -3,6 +3,8 @@ const routes = @import("routes");
const app = @import("app");
const jetzig = @import("jetzig");
pub const jetzig_options = app.jetzig_options;
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
const allocator = gpa.allocator();
@ -21,6 +23,7 @@ pub fn main() !void {
const action = comptime switch (route.action) {
.get => jetzig.colors.cyan("{s: <7}"),
.index => jetzig.colors.blue("{s: <7}"),
.new => jetzig.colors.green("{s: <7}"),
.post => jetzig.colors.yellow("{s: <7}"),
.put => jetzig.colors.magenta("{s: <7}"),
.patch => jetzig.colors.bright_magenta("{s: <7}"),
@ -32,6 +35,7 @@ pub fn main() !void {
@tagName(route.action),
route.uri_path ++ switch (route.action) {
.index, .post => "",
.new => "/new",
.get, .put, .patch, .delete => "/:id",
.custom => "",
},

View File

@ -50,4 +50,7 @@ pub fn repo(allocator: std.mem.Allocator, maybe_options: ?DatabaseOptions, app:
fn eventCallback(event: jetzig.jetquery.events.Event, app: *const jetzig.App) !void {
try app.server.logger.INFO("[database] {?s}", .{event.sql});
if (event.err) |err| {
try app.server.logger.ERROR("[database] {?s}", .{err.message});
}
}

View File

@ -632,6 +632,7 @@ pub fn match(self: *Request, route: jetzig.views.Route) !bool {
.GET => switch (route.action) {
.index => self.isMatch(.exact, route),
.get => self.isMatch(.resource_id, route),
.new => self.isMatch(.exact, route),
else => false,
},
.POST => switch (route.action) {
@ -660,5 +661,7 @@ fn isMatch(self: *Request, match_type: enum { exact, resource_id }, route: jetzi
.resource_id => self.path.directory,
};
if (route.action == .get and std.mem.eql(u8, self.path.resource_id, "new")) return false;
return std.mem.eql(u8, path, route.uri_path);
}

View File

@ -4,7 +4,7 @@ const jetzig = @import("../../jetzig.zig");
const Route = @This();
pub const Action = enum { index, get, post, put, patch, delete, custom };
pub const Action = enum { index, get, new, post, put, patch, delete, custom };
pub const RenderFn = *const fn (Route, *jetzig.http.Request) anyerror!jetzig.views.View;
pub const RenderStaticFn = *const fn (Route, *jetzig.http.StaticRequest) anyerror!jetzig.views.View;
@ -17,6 +17,7 @@ const StaticViewWithId = *const fn (id: []const u8, *jetzig.http.StaticRequest,
pub const Formats = struct {
index: ?[]const ResponseFormat = null,
get: ?[]const ResponseFormat = null,
new: ?[]const ResponseFormat = null,
post: ?[]const ResponseFormat = null,
put: ?[]const ResponseFormat = null,
patch: ?[]const ResponseFormat = null,
@ -28,6 +29,7 @@ const ResponseFormat = enum { html, json };
pub const DynamicViewType = union(Action) {
index: ViewWithoutId,
get: ViewWithId,
new: ViewWithoutId,
post: ViewWithoutId,
put: ViewWithId,
patch: ViewWithId,
@ -38,6 +40,7 @@ pub const DynamicViewType = union(Action) {
pub const StaticViewType = union(Action) {
index: StaticViewWithoutId,
get: StaticViewWithId,
new: StaticViewWithoutId,
post: StaticViewWithoutId,
put: StaticViewWithId,
patch: StaticViewWithId,
@ -120,6 +123,7 @@ pub fn validateFormat(self: Route, request: *const jetzig.http.Request) bool {
const supported_formats = switch (self.action) {
.index => formats.index orelse return true,
.get => formats.get orelse return true,
.new => formats.new orelse return true,
.post => formats.post orelse return true,
.put => formats.put orelse return true,
.patch => formats.patch orelse return true,
@ -156,6 +160,7 @@ fn renderFn(self: Route, request: *jetzig.http.Request) anyerror!jetzig.views.Vi
switch (self.view.dynamic) {
.index => |view| return try view(request, request.response_data),
.get => |view| return try view(request.path.resource_id, request, request.response_data),
.new => |view| return try view(request, request.response_data),
.post => |view| return try view(request, request.response_data),
.patch => |view| return try view(request.path.resource_id, request, request.response_data),
.put => |view| return try view(request.path.resource_id, request, request.response_data),
@ -170,6 +175,7 @@ fn renderStaticFn(self: Route, request: *jetzig.http.StaticRequest) anyerror!jet
switch (self.view.static) {
.index => |view| return try view(request, request.response_data),
.get => |view| return try view(try request.resourceId(), request, request.response_data),
.new => |view| return try view(request, request.response_data),
.post => |view| return try view(request, request.response_data),
.patch => |view| return try view(try request.resourceId(), request, request.response_data),
.put => |view| return try view(try request.resourceId(), request, request.response_data),