diff --git a/src/db/Remote.zig b/src/db/Remote.zig index b4aa2e3..b5091eb 100644 --- a/src/db/Remote.zig +++ b/src/db/Remote.zig @@ -9,7 +9,7 @@ const _internal = @import("./_internal.zig"); const db = &_internal.db; pub const Remote = struct { - id: u64, + id: u64 = 0, uuid: ulid.ULID, type: Type, domain: string, @@ -43,4 +43,15 @@ pub const Remote = struct { if (all_remotes.len > 0) return all_remotes; return db.collect(alloc, Remote, "select * from " ++ table_name, .{}); } + + pub fn create(alloc: *std.mem.Allocator, ty: Type, domain: string) !Remote { + const held = db.mutex.acquire(); + defer held.release(); + + return _internal.insert(alloc, &Remote{ + .uuid = _internal.factory.newULID(), + .type = ty, + .domain = domain, + }); + } }; diff --git a/src/db/Time.zig b/src/db/Time.zig index 7e925eb..d73a84f 100644 --- a/src/db/Time.zig +++ b/src/db/Time.zig @@ -36,4 +36,8 @@ pub const Time = struct { // RFC1123 return try self.formatAlloc(alloc, "ddd, DD MMM YYY HH:mm:ss z"); } + + pub fn now() Self { + return .{ .ctx = time.DateTime.now() }; + } }; diff --git a/src/db/User.zig b/src/db/User.zig index 7dbd834..b8217fb 100644 --- a/src/db/User.zig +++ b/src/db/User.zig @@ -11,7 +11,7 @@ const _internal = @import("./_internal.zig"); const db = &_internal.db; pub const User = struct { - id: u64, + id: u64 = 0, uuid: ulid.ULID, provider: u64, snowflake: string, @@ -20,6 +20,19 @@ pub const User = struct { pub const table_name = "users"; + pub fn create(alloc: *std.mem.Allocator, provider: u64, snowflake: string, name: string) !User { + const held = db.mutex.acquire(); + defer held.release(); + + return try _internal.insert(alloc, &User{ + .uuid = _internal.factory.newULID(), + .provider = provider, + .snowflake = snowflake, + .name = name, + .joined_on = Time.now(), + }); + } + usingnamespace _internal.ByKeyGen(User); pub const findPackageBy = _internal.FindByGen(User, Package, .owner, .uuid).first;