aboutsummaryrefslogtreecommitdiff
path: root/src/routes/api/image
diff options
context:
space:
mode:
authorNathan Reiner <nathan@nathanreiner.xyz>2025-11-17 09:57:09 +0100
committerNathan Reiner <nathan@nathanreiner.xyz>2025-11-17 09:57:09 +0100
commite95cf5c7b6a08eb560763d5167fbddc1c2117bcc (patch)
tree2f7815c9f39328fcaced2113de727f63e4837fa3 /src/routes/api/image
parent0016aaa197697ec5ff38dfb3f63ac8b6f74b48e0 (diff)
add file uploading and multi-threading
Diffstat (limited to 'src/routes/api/image')
-rw-r--r--src/routes/api/image/list.zig30
-rw-r--r--src/routes/api/image/load.zig14
-rw-r--r--src/routes/api/image/root.zig2
-rw-r--r--src/routes/api/image/upload.zig4
4 files changed, 48 insertions, 2 deletions
diff --git a/src/routes/api/image/list.zig b/src/routes/api/image/list.zig
new file mode 100644
index 0000000..ee7a648
--- /dev/null
+++ b/src/routes/api/image/list.zig
@@ -0,0 +1,30 @@
+const std = @import("std");
+const Context = @import("../../context.zig");
+const Storage = @import("../../../storage/root.zig");
+
+pub const access = .users;
+
+const ImageInfo = struct {
+ id: []const u8,
+};
+
+const Result = struct {
+ images: []ImageInfo,
+};
+
+pub fn get(ctx: *Context) !Result {
+ var images: std.ArrayList(ImageInfo) = .empty;
+
+ const images_list = ctx.storage.images.list();
+ defer images_list.deinit();
+
+ for (images_list.images) |*image| {
+ try images.append(ctx.allocator, .{
+ .id = image.id
+ });
+ }
+
+ return .{
+ .images = try images.toOwnedSlice(ctx.allocator),
+ };
+}
diff --git a/src/routes/api/image/load.zig b/src/routes/api/image/load.zig
new file mode 100644
index 0000000..1bafb11
--- /dev/null
+++ b/src/routes/api/image/load.zig
@@ -0,0 +1,14 @@
+const std = @import("std");
+const Context = @import("../../context.zig");
+const Storage = @import("../../../storage/root.zig");
+
+pub const access = .users;
+
+pub fn get(ctx: *Context) ![]const u8 {
+ const id = ctx.request.head.target["/api/image/load/".len..];
+ var image = Storage.Image { .id = id };
+ var file = try image.file(ctx.storage);
+ defer file.close();
+
+ return try file.readToEndAlloc(ctx.allocator, std.math.maxInt(usize));
+}
diff --git a/src/routes/api/image/root.zig b/src/routes/api/image/root.zig
index 0ad1960..dafa090 100644
--- a/src/routes/api/image/root.zig
+++ b/src/routes/api/image/root.zig
@@ -1,3 +1,5 @@
const HandlerInfo = @import("../../handler-info.zig");
pub const upload: HandlerInfo = .from_type(@import("upload.zig"));
+pub const list: HandlerInfo = .from_type(@import("list.zig"));
+pub const load: HandlerInfo = .from_type(@import("load.zig"));
diff --git a/src/routes/api/image/upload.zig b/src/routes/api/image/upload.zig
index 7cd5cf1..3aa2ea6 100644
--- a/src/routes/api/image/upload.zig
+++ b/src/routes/api/image/upload.zig
@@ -4,12 +4,12 @@ const Storage = @import("../../../storage/root.zig");
const log = std.log.scoped(.image_upload);
-pub const access = .everyone;
+pub const access = .users;
pub fn post(ctx: *Context) !void {
if (ctx.request.head.content_length) |length| {
var buffer: [1024]u8 = undefined;
const reader = try ctx.request.readerExpectContinue(&buffer);
- try Storage.Image.new(ctx.storage, reader, length);
+ try ctx.storage.images.add(ctx.storage, reader, length);
}
}