mirror of
https://github.com/jetzig-framework/jetzig.git
synced 2025-05-14 22:16:08 +00:00
WIP
This commit is contained in:
parent
f32c5227c6
commit
defd4b8b87
@ -17,7 +17,8 @@
|
|||||||
.path = "../jetquery",
|
.path = "../jetquery",
|
||||||
},
|
},
|
||||||
.jetcommon = .{
|
.jetcommon = .{
|
||||||
.path = "../jetcommon",
|
.url = "https://github.com/jetzig-framework/jetcommon/archive/5946df967d3cf2f843035464a6b8a17cb573afd3.tar.gz",
|
||||||
|
.hash = "12206a50c39a1766d24abcaa9f8fbeaaa20c853f987c667e0b8325e53d9c7ede7d24",
|
||||||
},
|
},
|
||||||
.args = .{
|
.args = .{
|
||||||
.url = "https://github.com/ikskuh/zig-args/archive/0abdd6947a70e6d8cc83b66228cea614aa856206.tar.gz",
|
.url = "https://github.com/ikskuh/zig-args/archive/0abdd6947a70e6d8cc83b66228cea614aa856206.tar.gz",
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
|
|
||||||
const jetquery = @import("jetquery");
|
const jetquery = @import("jetquery");
|
||||||
const Migrate = @import("jetquery_migrate");
|
const Migrate = @import("jetquery_migrate").Migrate;
|
||||||
// const migrations = @import("migrations").migrations;
|
const MigrateSchema = @import("jetquery_migrate").MigrateSchema;
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
@ -14,9 +14,12 @@ pub fn main() !void {
|
|||||||
|
|
||||||
const allocator = arena.allocator();
|
const allocator = arena.allocator();
|
||||||
|
|
||||||
var repo = try jetquery.Repo.loadConfig(allocator, .{});
|
var repo = try jetquery.Repo(
|
||||||
|
jetquery.config.database.adapter,
|
||||||
|
MigrateSchema,
|
||||||
|
).loadConfig(allocator, .{});
|
||||||
defer repo.deinit();
|
defer repo.deinit();
|
||||||
|
|
||||||
const migrate = Migrate.init(&repo);
|
const migrate = Migrate(jetquery.config.database.adapter).init(&repo);
|
||||||
try migrate.run();
|
try migrate.run();
|
||||||
}
|
}
|
||||||
|
@ -151,12 +151,12 @@ pub fn init(allocator: std.mem.Allocator) !Environment {
|
|||||||
std.process.exit(1);
|
std.process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (jetzig.jetquery.adapter == .null) {
|
if (jetzig.database.adapter == .null) {
|
||||||
try logger.WARN("No database configured in `config/database.zig`. Database operations are not available.", .{});
|
try logger.WARN("No database configured in `config/database.zig`. Database operations are not available.", .{});
|
||||||
} else {
|
} else {
|
||||||
try logger.INFO(
|
try logger.INFO(
|
||||||
"Using `{s}` database adapter with database: `{s}`.",
|
"Using `{s}` database adapter with database: `{s}`.",
|
||||||
.{ @tagName(jetzig.jetquery.adapter), jetzig.jetquery.config.database.database },
|
.{ @tagName(jetzig.database.adapter), jetzig.jetquery.config.database.database },
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,9 +97,6 @@ pub const job_worker_threads: usize = 1;
|
|||||||
/// milliseconds.
|
/// milliseconds.
|
||||||
pub const job_worker_sleep_interval_ms: usize = 10;
|
pub const job_worker_sleep_interval_ms: usize = 10;
|
||||||
|
|
||||||
/// Database configuration.
|
|
||||||
pub const database: ?db.DatabaseOptions = null;
|
|
||||||
|
|
||||||
/// Database Schema.
|
/// Database Schema.
|
||||||
pub const Schema: type = struct {
|
pub const Schema: type = struct {
|
||||||
pub const _null = struct {}; // https://github.com/ziglang/zig/pull/21331
|
pub const _null = struct {}; // https://github.com/ziglang/zig/pull/21331
|
||||||
|
@ -2,22 +2,15 @@ const std = @import("std");
|
|||||||
|
|
||||||
const jetzig = @import("../jetzig.zig");
|
const jetzig = @import("../jetzig.zig");
|
||||||
|
|
||||||
pub const DatabaseOptions = struct {
|
|
||||||
adapter: enum { postgresql },
|
|
||||||
hostname: []const u8,
|
|
||||||
port: u16,
|
|
||||||
username: []const u8,
|
|
||||||
password: []const u8,
|
|
||||||
database: []const u8,
|
|
||||||
};
|
|
||||||
|
|
||||||
pub const Schema = jetzig.config.get(type, "Schema");
|
pub const Schema = jetzig.config.get(type, "Schema");
|
||||||
|
pub const adapter = jetzig.jetquery.config.database.adapter;
|
||||||
|
pub const Repo = jetzig.jetquery.Repo(jetzig.jetquery.config.database.adapter, Schema);
|
||||||
|
|
||||||
pub fn Query(comptime table: jetzig.jetquery.DeclEnum(jetzig.config.get(type, "Schema"))) type {
|
pub fn Query(comptime model: anytype) type {
|
||||||
return jetzig.jetquery.Query(Schema, table);
|
return jetzig.jetquery.Query(adapter, Schema, model);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn repo(allocator: std.mem.Allocator, app: *const jetzig.App) !jetzig.jetquery.Repo {
|
pub fn repo(allocator: std.mem.Allocator, app: *const jetzig.App) !Repo {
|
||||||
// XXX: Is this terrible ?
|
// XXX: Is this terrible ?
|
||||||
const Callback = struct {
|
const Callback = struct {
|
||||||
var jetzig_app: *const jetzig.App = undefined;
|
var jetzig_app: *const jetzig.App = undefined;
|
||||||
@ -27,7 +20,7 @@ pub fn repo(allocator: std.mem.Allocator, app: *const jetzig.App) !jetzig.jetque
|
|||||||
};
|
};
|
||||||
Callback.jetzig_app = app;
|
Callback.jetzig_app = app;
|
||||||
|
|
||||||
return try jetzig.jetquery.Repo.loadConfig(
|
return try Repo.loadConfig(
|
||||||
allocator,
|
allocator,
|
||||||
.{ .eventCallback = Callback.callbackFn, .lazy_connect = true },
|
.{ .eventCallback = Callback.callbackFn, .lazy_connect = true },
|
||||||
);
|
);
|
||||||
|
@ -17,6 +17,8 @@ resource_id: []const u8,
|
|||||||
extension: ?[]const u8,
|
extension: ?[]const u8,
|
||||||
query: ?[]const u8,
|
query: ?[]const u8,
|
||||||
|
|
||||||
|
// TODO: Fix edge case `/foo/bar/` <-- strip trailing slash.
|
||||||
|
|
||||||
const Self = @This();
|
const Self = @This();
|
||||||
|
|
||||||
/// Initialize a new HTTP Path.
|
/// Initialize a new HTTP Path.
|
||||||
|
@ -43,7 +43,7 @@ rendered_view: ?jetzig.views.View = null,
|
|||||||
start_time: i128,
|
start_time: i128,
|
||||||
store: RequestStore,
|
store: RequestStore,
|
||||||
cache: RequestStore,
|
cache: RequestStore,
|
||||||
repo: *jetzig.jetquery.Repo,
|
repo: *jetzig.database.Repo,
|
||||||
global: *jetzig.Global,
|
global: *jetzig.Global,
|
||||||
|
|
||||||
/// Wrapper for KV store that uses the request's arena allocator for fetching values.
|
/// Wrapper for KV store that uses the request's arena allocator for fetching values.
|
||||||
@ -105,7 +105,7 @@ pub fn init(
|
|||||||
httpz_request: *httpz.Request,
|
httpz_request: *httpz.Request,
|
||||||
httpz_response: *httpz.Response,
|
httpz_response: *httpz.Response,
|
||||||
response: *jetzig.http.Response,
|
response: *jetzig.http.Response,
|
||||||
repo: *jetzig.jetquery.Repo,
|
repo: *jetzig.database.Repo,
|
||||||
) !Request {
|
) !Request {
|
||||||
const method = switch (httpz_request.method) {
|
const method = switch (httpz_request.method) {
|
||||||
.DELETE => Method.DELETE,
|
.DELETE => Method.DELETE,
|
||||||
|
@ -19,7 +19,7 @@ initialized: bool = false,
|
|||||||
store: *jetzig.kv.Store,
|
store: *jetzig.kv.Store,
|
||||||
job_queue: *jetzig.kv.Store,
|
job_queue: *jetzig.kv.Store,
|
||||||
cache: *jetzig.kv.Store,
|
cache: *jetzig.kv.Store,
|
||||||
repo: *jetzig.jetquery.Repo,
|
repo: *jetzig.database.Repo,
|
||||||
global: *anyopaque,
|
global: *anyopaque,
|
||||||
decoded_static_route_params: []*jetzig.data.Value = &.{},
|
decoded_static_route_params: []*jetzig.data.Value = &.{},
|
||||||
|
|
||||||
@ -36,7 +36,7 @@ pub fn init(
|
|||||||
store: *jetzig.kv.Store,
|
store: *jetzig.kv.Store,
|
||||||
job_queue: *jetzig.kv.Store,
|
job_queue: *jetzig.kv.Store,
|
||||||
cache: *jetzig.kv.Store,
|
cache: *jetzig.kv.Store,
|
||||||
repo: *jetzig.jetquery.Repo,
|
repo: *jetzig.database.Repo,
|
||||||
global: *anyopaque,
|
global: *anyopaque,
|
||||||
) Server {
|
) Server {
|
||||||
return .{
|
return .{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user