const std = @import("std"); const util = @import("util"); const sql = @import("sql"); const Uuid = util.Uuid; const DateTime = util.DateTime; const getRandom = @import("../api.zig").getRandom; pub const Note = struct { id: Uuid, author_id: Uuid, content: []const u8, created_at: DateTime, }; pub const CreateError = error{ DatabaseFailure, }; pub fn create( db: anytype, author: Uuid, content: []const u8, alloc: std.mem.Allocator, ) CreateError!Uuid { const id = Uuid.randV4(getRandom()); db.insert("note", .{ .id = id, .author_id = author, .content = content, .created_at = DateTime.now(), }, alloc) catch return error.DatabaseFailure; return id; } pub const GetError = error{ DatabaseFailure, NotFound, }; pub fn get(db: anytype, id: Uuid, alloc: std.mem.Allocator) GetError!Note { return db.queryRow( Note, sql.selectStar(Note, "note") ++ \\WHERE id = $1 \\LIMIT 1 , .{id}, alloc, ) catch |err| switch (err) { error.NoRows => error.NotFound, else => error.DatabaseFailure, }; }