File dereference endpoint
This commit is contained in:
parent
6f4882794a
commit
9e66ef441b
2 changed files with 38 additions and 0 deletions
|
@ -159,6 +159,11 @@ pub const DriveGetResult = union(services.drive.Kind) {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pub const FileResult = struct {
|
||||||
|
meta: services.files.FileUpload,
|
||||||
|
data: []const u8,
|
||||||
|
};
|
||||||
|
|
||||||
pub fn isAdminSetup(db: sql.Db) !bool {
|
pub fn isAdminSetup(db: sql.Db) !bool {
|
||||||
_ = services.communities.adminCommunityId(db) catch |err| switch (err) {
|
_ = services.communities.adminCommunityId(db) catch |err| switch (err) {
|
||||||
error.NotFound => return false,
|
error.NotFound => return false,
|
||||||
|
@ -616,5 +621,15 @@ fn ApiConn(comptime DbConn: type) type {
|
||||||
std.log.debug("{}", .{entry.id});
|
std.log.debug("{}", .{entry.id});
|
||||||
try services.files.update(self.db, entry.file_id orelse return error.NotAFile, meta, self.allocator);
|
try services.files.update(self.db, entry.file_id orelse return error.NotAFile, meta, self.allocator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn fileDereference(self: *Self, id: Uuid) !FileResult {
|
||||||
|
const meta = try services.files.get(self.db, id, self.allocator);
|
||||||
|
errdefer util.deepFree(self.allocator, meta);
|
||||||
|
|
||||||
|
return FileResult{
|
||||||
|
.meta = meta,
|
||||||
|
.data = try services.files.deref(self.allocator, id),
|
||||||
|
};
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
|
const util = @import("util");
|
||||||
const controllers = @import("../controllers.zig");
|
const controllers = @import("../controllers.zig");
|
||||||
|
|
||||||
pub const routes = .{
|
pub const routes = .{
|
||||||
|
@ -7,6 +8,7 @@ pub const routes = .{
|
||||||
controllers.apiEndpoint(login),
|
controllers.apiEndpoint(login),
|
||||||
controllers.apiEndpoint(global_timeline),
|
controllers.apiEndpoint(global_timeline),
|
||||||
controllers.apiEndpoint(cluster.overview),
|
controllers.apiEndpoint(cluster.overview),
|
||||||
|
controllers.apiEndpoint(media),
|
||||||
};
|
};
|
||||||
|
|
||||||
const index = struct {
|
const index = struct {
|
||||||
|
@ -87,3 +89,24 @@ const cluster = struct {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const media = struct {
|
||||||
|
pub const path = "/media/:id";
|
||||||
|
pub const method = .GET;
|
||||||
|
|
||||||
|
pub const Args = struct {
|
||||||
|
id: util.Uuid,
|
||||||
|
};
|
||||||
|
|
||||||
|
pub fn handler(req: anytype, res: anytype, srv: anytype) !void {
|
||||||
|
const result = try srv.fileDereference(req.args.id);
|
||||||
|
defer util.deepFree(srv.allocator, result);
|
||||||
|
|
||||||
|
try res.headers.put("Content-Type", result.meta.content_type orelse "application/octet-stream");
|
||||||
|
var stream = try res.open(.ok);
|
||||||
|
defer stream.close();
|
||||||
|
|
||||||
|
try stream.writer().writeAll(result.data);
|
||||||
|
try stream.finish();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in a new issue