This commit is contained in:
Bob Farrell 2024-08-30 18:03:06 +01:00
parent bd15e5c43b
commit 1c2cbaca77
7 changed files with 77 additions and 12 deletions

View File

@ -55,7 +55,11 @@ pub fn build(b: *std.Build) !void {
const zmpl_module = zmpl_dep.module("zmpl"); const zmpl_module = zmpl_dep.module("zmpl");
const jetkv_dep = b.dependency("jetkv", .{ .target = target, .optimize = optimize }); const jetkv_dep = b.dependency("jetkv", .{ .target = target, .optimize = optimize });
const jetquery_dep = b.dependency("jetquery", .{ .target = target, .optimize = optimize }); const jetquery_dep = b.dependency("jetquery", .{
.target = target,
.optimize = optimize,
.jetquery_migrations_path = @as([]const u8, "src/app/database/migrations"),
});
const zmd_dep = b.dependency("zmd", .{ .target = target, .optimize = optimize }); const zmd_dep = b.dependency("zmd", .{ .target = target, .optimize = optimize });
const httpz_dep = b.dependency("httpz", .{ .target = target, .optimize = optimize }); const httpz_dep = b.dependency("httpz", .{ .target = target, .optimize = optimize });
const pg_dep = b.dependency("pg", .{ .target = target, .optimize = optimize }); const pg_dep = b.dependency("pg", .{ .target = target, .optimize = optimize });

View File

@ -22,8 +22,9 @@
.hash = "1220411a8c46d95bbf3b6e2059854bcb3c5159d428814099df5294232b9980517e9c", .hash = "1220411a8c46d95bbf3b6e2059854bcb3c5159d428814099df5294232b9980517e9c",
}, },
.pg = .{ .pg = .{
.url = "https://github.com/karlseguin/pg.zig/archive/1b4011d4c8218c70471477e283608daf919bee3a.tar.gz", // .url = "https://github.com/karlseguin/pg.zig/archive/1491270ac43c7eba91992bb06b3758254c36e39a.tar.gz",
.hash = "122086d9461b75535b630019374f8a068eff467e657a46d2bb577fe0a507f1cd2fca", // .hash = "1220bcc68967188de7ad5d520a4629c0d1e169c111d87e6978a3c128de5ec2b6bdd0",
.path = "../pg.zig",
}, },
.smtp_client = .{ .smtp_client = .{
.url = "https://github.com/karlseguin/smtp_client.zig/archive/8fcfad9ca2d9e446612c79f4e54050cfbe81b38d.tar.gz", .url = "https://github.com/karlseguin/smtp_client.zig/archive/8fcfad9ca2d9e446612c79f4e54050cfbe81b38d.tar.gz",

View File

@ -14,6 +14,12 @@ pub fn build(b: *std.Build) !void {
}); });
const zig_args_dep = b.dependency("args", .{ .target = target, .optimize = optimize }); const zig_args_dep = b.dependency("args", .{ .target = target, .optimize = optimize });
const jetquery_dep = b.dependency("jetquery", .{
.target = target,
.optimize = optimize,
.jetquery_migrations_path = @as([]const u8, "src/app/database/migrations"),
});
exe.root_module.addImport("jetquery", jetquery_dep.module("jetquery"));
exe.root_module.addImport("args", zig_args_dep.module("args")); exe.root_module.addImport("args", zig_args_dep.module("args"));
exe.root_module.addImport( exe.root_module.addImport(

View File

@ -8,6 +8,9 @@
.url = "https://github.com/ikskuh/zig-args/archive/0abdd6947a70e6d8cc83b66228cea614aa856206.tar.gz", .url = "https://github.com/ikskuh/zig-args/archive/0abdd6947a70e6d8cc83b66228cea614aa856206.tar.gz",
.hash = "1220411a8c46d95bbf3b6e2059854bcb3c5159d428814099df5294232b9980517e9c", .hash = "1220411a8c46d95bbf3b6e2059854bcb3c5159d428814099df5294232b9980517e9c",
}, },
.jetquery = .{
.path = "../../jetquery",
},
}, },
.paths = .{ .paths = .{
"", "",

View File

@ -9,11 +9,12 @@ const layout = @import("generate/layout.zig");
const middleware = @import("generate/middleware.zig"); const middleware = @import("generate/middleware.zig");
const job = @import("generate/job.zig"); const job = @import("generate/job.zig");
const mailer = @import("generate/mailer.zig"); const mailer = @import("generate/mailer.zig");
const migration = @import("generate/migration.zig");
/// Command line options for the `generate` command. /// Command line options for the `generate` command.
pub const Options = struct { pub const Options = struct {
pub const meta = .{ pub const meta = .{
.usage_summary = "[view|partial|layout|mailer|middleware|job|secret] [options]", .usage_summary = "[view|partial|layout|mailer|middleware|job|secret|migration] [options]",
.full_text = .full_text =
\\Generate scaffolding for views, middleware, and other objects. \\Generate scaffolding for views, middleware, and other objects.
\\ \\
@ -38,7 +39,7 @@ pub fn run(
_ = options; _ = options;
const Generator = enum { view, partial, layout, mailer, middleware, job, secret }; const Generator = enum { view, partial, layout, mailer, middleware, job, secret, migration };
var sub_args = std.ArrayList([]const u8).init(allocator); var sub_args = std.ArrayList([]const u8).init(allocator);
defer sub_args.deinit(); defer sub_args.deinit();
@ -55,6 +56,7 @@ pub fn run(
.{ "mailer", .mailer }, .{ "mailer", .mailer },
.{ "middleware", .middleware }, .{ "middleware", .middleware },
.{ "secret", .secret }, .{ "secret", .secret },
.{ "migration", .migration },
}); });
for (inner_map.kvs) |kv| try available_buf.append(kv.key); for (inner_map.kvs) |kv| try available_buf.append(kv.key);
break :blk inner_map; break :blk inner_map;
@ -67,6 +69,7 @@ pub fn run(
.{ "mailer", .mailer }, .{ "mailer", .mailer },
.{ "middleware", .middleware }, .{ "middleware", .middleware },
.{ "secret", .secret }, .{ "secret", .secret },
.{ "migration", .migration },
}); });
for (inner_map.keys()) |key| try available_buf.append(key); for (inner_map.keys()) |key| try available_buf.append(key);
break :blk inner_map; break :blk inner_map;
@ -75,6 +78,10 @@ pub fn run(
const available_help = try std.mem.join(allocator, "|", available_buf.items); const available_help = try std.mem.join(allocator, "|", available_buf.items);
defer allocator.free(available_help); defer allocator.free(available_help);
var arena_allocator = std.heap.ArenaAllocator.init(allocator);
defer arena_allocator.deinit();
const arena = arena_allocator.allocator();
const generate_type: ?Generator = if (positionals.len > 0) map.get(positionals[0]) else null; const generate_type: ?Generator = if (positionals.len > 0) map.get(positionals[0]) else null;
if (positionals.len > 1) { if (positionals.len > 1) {
@ -91,13 +98,14 @@ pub fn run(
if (generate_type) |capture| { if (generate_type) |capture| {
return switch (capture) { return switch (capture) {
.view => view.run(allocator, cwd, sub_args.items, other_options.help), .view => view.run(arena, cwd, sub_args.items, other_options.help),
.partial => partial.run(allocator, cwd, sub_args.items, other_options.help), .partial => partial.run(arena, cwd, sub_args.items, other_options.help),
.layout => layout.run(allocator, cwd, sub_args.items, other_options.help), .layout => layout.run(arena, cwd, sub_args.items, other_options.help),
.mailer => mailer.run(allocator, cwd, sub_args.items, other_options.help), .mailer => mailer.run(arena, cwd, sub_args.items, other_options.help),
.job => job.run(allocator, cwd, sub_args.items, other_options.help), .job => job.run(arena, cwd, sub_args.items, other_options.help),
.middleware => middleware.run(allocator, cwd, sub_args.items, other_options.help), .middleware => middleware.run(arena, cwd, sub_args.items, other_options.help),
.secret => secret.run(allocator, cwd, sub_args.items, other_options.help), .secret => secret.run(arena, cwd, sub_args.items, other_options.help),
.migration => migration.run(arena, cwd, sub_args.items, other_options.help),
}; };
} }
} }

View File

@ -0,0 +1,34 @@
const std = @import("std");
const jetquery = @import("jetquery");
/// Run the migration generator. Create a migration in `src/app/database/migrations/`
pub fn run(allocator: std.mem.Allocator, cwd: std.fs.Dir, args: [][]const u8, help: bool) !void {
if (help or args.len != 1) {
std.debug.print(
\\Generate a new Migration. Migrations modify the application's database schema.
\\
\\Example:
\\
\\ jetzig generate migration create_iguanas
\\
, .{});
if (help) return;
return error.JetzigCommandError;
}
const name = args[0];
const migrations_dir = try cwd.makeOpenPath(
try std.fs.path.join(allocator, &.{ "src", "app", "database", "migrations" }),
.{},
);
const migration = jetquery.Migration.init(
allocator,
name,
.{ .migrations_path = try migrations_dir.realpathAlloc(allocator, ".") },
);
try migration.save();
}

View File

@ -0,0 +1,9 @@
const jetquery = @import("jetquery");
pub fn up(repo: *jetquery.Repo) !void {
_ = repo;
}
pub fn down(repo: *jetquery.Repo) !void {
_ = repo;
}