const std = @import("std"); const zqlite = @import("zqlite"); const nanoid = @import("../lib/nanoid.zig"); pub const Map = struct { id: []const u8, name: []const u8, }; pub fn get_maps(allocator: std.mem.Allocator, conn: zqlite.Conn) !std.ArrayList(Map) { const query = \\SELECT id, name \\FROM maps ; var rows = try conn.rows(query, .{}); defer rows.deinit(); var list = std.ArrayList(Map).init(allocator); while (rows.next()) |row| { try list.append(Map{ .id = try allocator.dupe(u8, row.text(0)), .name = try allocator.dupe(u8, row.text(1)), }); } if (rows.err) |err| return err; return list; } pub fn get_map(allocator: std.mem.Allocator, conn: zqlite.Conn, id: []const u8) !?Map { const query = \\SELECT id, name \\FROM maps \\WHERE id = ? ; if (try conn.row(query, .{id})) |row| { defer row.deinit(); return Map{ .id = try allocator.dupe(u8, row.text(0)), .name = try allocator.dupe(u8, row.text(1)), }; } else { return null; } } pub fn create(allocator: std.mem.Allocator, conn: zqlite.Conn, name: []const u8) !Map { const query = \\INSERT INTO maps(id, name) \\VALUES (?, ?) ; const id: []const u8 = &nanoid.generate(std.crypto.random); try conn.exec(query, .{ id, name }); return Map{ .id = try allocator.dupe(u8, id), .name = name, }; } pub fn update(conn: zqlite.Conn, id: []const u8, name: []const u8) !Map { const query = \\UPDATE maps \\SET name = ?, updated_at = datetime() \\WHERE id = ? ; try conn.exec(query, .{ name, id }); return Map{ .id = id, .name = name, }; } pub fn delete(conn: zqlite.Conn, id: []const u8) !void { const query = \\DELETE FROM maps \\WHERE id = ? ; try conn.exec(query, .{id}); }