aboutsummaryrefslogtreecommitdiff
path: root/backend/src/repos/maps_repo.zig
diff options
context:
space:
mode:
Diffstat (limited to 'backend/src/repos/maps_repo.zig')
-rw-r--r--backend/src/repos/maps_repo.zig84
1 files changed, 84 insertions, 0 deletions
diff --git a/backend/src/repos/maps_repo.zig b/backend/src/repos/maps_repo.zig
new file mode 100644
index 0000000..8031827
--- /dev/null
+++ b/backend/src/repos/maps_repo.zig
@@ -0,0 +1,84 @@
+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});
+}