aboutsummaryrefslogtreecommitdiff
path: root/src/routes/api/profile
diff options
context:
space:
mode:
authorNathan Reiner <nathan@nathanreiner.xyz>2025-11-19 09:15:49 +0100
committerNathan Reiner <nathan@nathanreiner.xyz>2025-11-19 09:15:49 +0100
commit4c06eb64cbed3562e428ce59857d1763098638f3 (patch)
treecc9c8164e76cd48e1dd4ef963329dcfa3c1b152f /src/routes/api/profile
parent6201307fecf8398a1b53bf276bc08bfbb3524899 (diff)
allow images to upload and sort if according to their datetime
Diffstat (limited to 'src/routes/api/profile')
-rw-r--r--src/routes/api/profile/image/load.zig17
-rw-r--r--src/routes/api/profile/image/root.zig5
-rw-r--r--src/routes/api/profile/image/upload.zig19
-rw-r--r--src/routes/api/profile/root.zig1
4 files changed, 42 insertions, 0 deletions
diff --git a/src/routes/api/profile/image/load.zig b/src/routes/api/profile/image/load.zig
new file mode 100644
index 0000000..4b696ce
--- /dev/null
+++ b/src/routes/api/profile/image/load.zig
@@ -0,0 +1,17 @@
+const std = @import("std");
+
+const memora = @import("memora");
+const Context = memora.Context;
+const Storage = memora.Storage;
+
+pub const access = .users;
+
+pub fn get(ctx: *Context) !memora.Stream {
+ const name = ctx.request.head.target["/api/profile/image/load/".len..];
+ if (Storage.User.image(ctx.storage, name)) |file| {
+ ctx.response.headers.content_type = "image/jpeg";
+ return .from_file(file);
+ }
+
+ return error.NotFound;
+}
diff --git a/src/routes/api/profile/image/root.zig b/src/routes/api/profile/image/root.zig
new file mode 100644
index 0000000..d6b77f2
--- /dev/null
+++ b/src/routes/api/profile/image/root.zig
@@ -0,0 +1,5 @@
+const memora = @import("memora");
+const HandlerInfo = memora.routes.HandlerInfo;
+
+pub const upload: HandlerInfo = .from_type(@import("upload.zig"));
+pub const load: HandlerInfo = .from_type(@import("load.zig"));
diff --git a/src/routes/api/profile/image/upload.zig b/src/routes/api/profile/image/upload.zig
new file mode 100644
index 0000000..db140d4
--- /dev/null
+++ b/src/routes/api/profile/image/upload.zig
@@ -0,0 +1,19 @@
+const std = @import("std");
+
+const memora = @import("memora");
+const Context = memora.Context;
+const Storage = memora.Storage;
+
+pub const access = .users;
+
+pub fn post(ctx: *Context) !void {
+ const name = ctx.request.head.target["/api/profile/image/upload/".len..];
+ if (ctx.request.head.content_length) |length| {
+ var buffer: [1024]u8 = undefined;
+ const reader = try ctx.request.readerExpectContinue(&buffer);
+
+ try Storage.User.set_image(ctx.storage, name, reader, length);
+
+ ctx.response.headers.content_type = "image/jpeg";
+ }
+}
diff --git a/src/routes/api/profile/root.zig b/src/routes/api/profile/root.zig
new file mode 100644
index 0000000..632c09c
--- /dev/null
+++ b/src/routes/api/profile/root.zig
@@ -0,0 +1 @@
+pub const image = @import("image/root.zig");