Fix compile errors
This commit is contained in:
parent
b58266bdd8
commit
303bce771d
|
@ -143,6 +143,10 @@ fn ApiConn(comptime DbConn: type, comptime methods: anytype) type {
|
||||||
return Services{ .db = self.db };
|
return Services{ .db = self.db };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn getCommunity(self: *Self, id: Uuid) !types.communities.Community {
|
||||||
|
return try methods.communities.get(self.allocator, self.context, self.getServices(), id);
|
||||||
|
}
|
||||||
|
|
||||||
pub fn createCommunity(self: *Self, origin: []const u8, name: ?[]const u8) !Uuid {
|
pub fn createCommunity(self: *Self, origin: []const u8, name: ?[]const u8) !Uuid {
|
||||||
return try methods.communities.create(
|
return try methods.communities.create(
|
||||||
self.allocator,
|
self.allocator,
|
||||||
|
@ -157,6 +161,10 @@ fn ApiConn(comptime DbConn: type, comptime methods: anytype) type {
|
||||||
return methods.invites.create(self.allocator, self.context, self.getServices(), options);
|
return methods.invites.create(self.allocator, self.context, self.getServices(), options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn getInvite(self: *Self, id: Uuid) !Invite {
|
||||||
|
return try methods.invites.get(self.allocator, self.context, self.getServices(), id);
|
||||||
|
}
|
||||||
|
|
||||||
pub fn login(self: *Self, username: []const u8, password: []const u8) !Token {
|
pub fn login(self: *Self, username: []const u8, password: []const u8) !Token {
|
||||||
return methods.auth.login(self.allocator, self.context, self.getServices(), username, password);
|
return methods.auth.login(self.allocator, self.context, self.getServices(), username, password);
|
||||||
}
|
}
|
||||||
|
@ -251,6 +259,10 @@ fn ApiConn(comptime DbConn: type, comptime methods: anytype) type {
|
||||||
return try methods.drive.get(self.allocator, self.context, self.getServices(), path);
|
return try methods.drive.get(self.allocator, self.context, self.getServices(), path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn driveGetEntryById(self: *Self, id: Uuid) !types.drive.DriveEntry {
|
||||||
|
return try methods.drive.getById(self.allocator, self.context, self.getServices(), id);
|
||||||
|
}
|
||||||
|
|
||||||
pub fn driveUpdate(self: *Self, path: []const u8, meta: types.files.UpdateArgs) !void {
|
pub fn driveUpdate(self: *Self, path: []const u8, meta: types.files.UpdateArgs) !void {
|
||||||
return try methods.drive.update(self.allocator, self.context, self.getServices(), path, meta);
|
return try methods.drive.update(self.allocator, self.context, self.getServices(), path, meta);
|
||||||
}
|
}
|
||||||
|
|
|
@ -105,6 +105,20 @@ pub fn get(
|
||||||
return try convert(alloc, svcs, entry, true);
|
return try convert(alloc, svcs, entry, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn getById(
|
||||||
|
alloc: std.mem.Allocator,
|
||||||
|
ctx: ApiContext,
|
||||||
|
svcs: anytype,
|
||||||
|
id: Uuid,
|
||||||
|
) !pkg.drive.DriveEntry {
|
||||||
|
const user_id = ctx.userId() orelse return error.NoToken;
|
||||||
|
const entry = try svcs.getDriveEntry(alloc, id);
|
||||||
|
defer util.deepFree(alloc, entry);
|
||||||
|
if (!Uuid.eql(entry.owner_id, user_id)) return error.NotFound;
|
||||||
|
|
||||||
|
return try convert(alloc, svcs, entry, true);
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: These next two functions are more about files than drive entries, consider refactor?
|
// TODO: These next two functions are more about files than drive entries, consider refactor?
|
||||||
|
|
||||||
pub fn update(
|
pub fn update(
|
||||||
|
|
|
@ -154,6 +154,14 @@ pub fn Services(comptime Db: type) type {
|
||||||
return try impl.drive.stat(self.db, owner_id, path, alloc);
|
return try impl.drive.stat(self.db, owner_id, path, alloc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn getDriveEntry(
|
||||||
|
self: Self,
|
||||||
|
alloc: std.mem.Allocator,
|
||||||
|
id: Uuid,
|
||||||
|
) !DriveEntry {
|
||||||
|
return try impl.drive.get(self.db, id, alloc);
|
||||||
|
}
|
||||||
|
|
||||||
pub fn createDriveEntry(
|
pub fn createDriveEntry(
|
||||||
self: Self,
|
self: Self,
|
||||||
alloc: std.mem.Allocator,
|
alloc: std.mem.Allocator,
|
||||||
|
|
|
@ -7,19 +7,36 @@ const Uuid = util.Uuid;
|
||||||
const DateTime = util.DateTime;
|
const DateTime = util.DateTime;
|
||||||
const Entry = types.drive.DriveEntry;
|
const Entry = types.drive.DriveEntry;
|
||||||
|
|
||||||
pub fn stat(db: anytype, owner: Uuid, path: []const u8, alloc: std.mem.Allocator) !Entry {
|
fn doGetQuery(db: anytype, comptime clause: []const u8, args: anytype, alloc: std.mem.Allocator) !Entry {
|
||||||
return (db.queryRow(Entry,
|
const q = std.fmt.comptimePrint(
|
||||||
\\SELECT id, path, owner_id, name, file_id, kind, parent_directory_id
|
\\SELECT id, path, owner_id, name, file_id, kind, parent_directory_id
|
||||||
\\FROM drive_entry_path
|
\\FROM drive_entry_path
|
||||||
\\WHERE owner_id = $1 AND path = ('/' || $2)
|
\\WHERE {s}
|
||||||
\\LIMIT 1
|
\\LIMIT 1
|
||||||
, .{
|
,
|
||||||
owner,
|
.{clause},
|
||||||
std.mem.trim(u8, path, "/"),
|
);
|
||||||
}, alloc) catch |err| switch (err) {
|
|
||||||
|
return db.queryRow(Entry, q, args, alloc) catch |err| switch (err) {
|
||||||
error.NoRows => return error.NotFound,
|
error.NoRows => return error.NotFound,
|
||||||
else => |e| return e,
|
else => |e| return e,
|
||||||
});
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn stat(db: anytype, owner: Uuid, path: []const u8, alloc: std.mem.Allocator) !Entry {
|
||||||
|
return try doGetQuery(
|
||||||
|
db,
|
||||||
|
"owner_id = $1 AND path = ('/' || $2)",
|
||||||
|
.{
|
||||||
|
owner,
|
||||||
|
std.mem.trim(u8, path, "/"),
|
||||||
|
},
|
||||||
|
alloc,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get(db: anytype, id: Uuid, alloc: std.mem.Allocator) !Entry {
|
||||||
|
return try doGetQuery(db, "id = $1", .{id}, alloc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates a file or directory
|
/// Creates a file or directory
|
||||||
|
|
|
@ -98,12 +98,14 @@ pub const update = struct {
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn handler(req: anytype, res: anytype, srv: anytype) !void {
|
pub fn handler(req: anytype, res: anytype, srv: anytype) !void {
|
||||||
const result = try srv.driveUpdate(req.args.path, .{
|
try srv.driveUpdate(req.args.path, .{
|
||||||
.filename = req.body.meta.filename,
|
.filename = req.body.meta.filename,
|
||||||
.description = req.body.meta.description,
|
.description = req.body.meta.description,
|
||||||
.content_type = req.body.meta.content_type,
|
.content_type = req.body.meta.content_type,
|
||||||
.sensitive = req.body.meta.sensitive,
|
.sensitive = req.body.meta.sensitive,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const result = try srv.driveGet(req.args.path);
|
||||||
defer util.deepFree(srv.allocator, result);
|
defer util.deepFree(srv.allocator, result);
|
||||||
try res.json(.ok, result);
|
try res.json(.ok, result);
|
||||||
}
|
}
|
||||||
|
@ -117,7 +119,9 @@ pub const move = struct {
|
||||||
pub fn handler(req: anytype, res: anytype, srv: anytype) !void {
|
pub fn handler(req: anytype, res: anytype, srv: anytype) !void {
|
||||||
const destination = req.headers.get("Destination") orelse return error.NoDestination;
|
const destination = req.headers.get("Destination") orelse return error.NoDestination;
|
||||||
|
|
||||||
const result = try srv.driveMove(req.args.path, destination);
|
try srv.driveMove(req.args.path, destination);
|
||||||
|
|
||||||
|
const result = try srv.driveGet(req.args.path);
|
||||||
defer util.deepFree(srv.allocator, result);
|
defer util.deepFree(srv.allocator, result);
|
||||||
|
|
||||||
try res.headers.put("Location", destination);
|
try res.headers.put("Location", destination);
|
||||||
|
|
|
@ -341,7 +341,7 @@ const drive = struct {
|
||||||
return res.status(.see_other);
|
return res.status(.see_other);
|
||||||
},
|
},
|
||||||
.upload => |body| {
|
.upload => |body| {
|
||||||
const entry = try srv.driveUpload(
|
const entry_id = try srv.driveUpload(
|
||||||
.{
|
.{
|
||||||
.filename = body.file.filename,
|
.filename = body.file.filename,
|
||||||
.dir = trimmed_path,
|
.dir = trimmed_path,
|
||||||
|
@ -351,6 +351,7 @@ const drive = struct {
|
||||||
},
|
},
|
||||||
body.file.data,
|
body.file.data,
|
||||||
);
|
);
|
||||||
|
const entry = try srv.driveGetEntryById(entry_id);
|
||||||
defer util.deepFree(srv.allocator, entry);
|
defer util.deepFree(srv.allocator, entry);
|
||||||
|
|
||||||
const url = try std.fmt.allocPrint(srv.allocator, "{s}/drive/{s}", .{
|
const url = try std.fmt.allocPrint(srv.allocator, "{s}/drive/{s}", .{
|
||||||
|
@ -402,16 +403,17 @@ const cluster = struct {
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn handler(req: anytype, res: anytype, srv: anytype) !void {
|
pub fn handler(req: anytype, res: anytype, srv: anytype) !void {
|
||||||
const cid = try srv.createCommunity(req.body.origin, req.body.name);
|
const comm_id = try srv.createCommunity(req.body.origin, req.body.name);
|
||||||
const community = try srv.getCommunity(cid);
|
const community = try srv.getCommunity(comm_id);
|
||||||
defer util.deepFree(srv.allocator, community);
|
defer util.deepFree(srv.allocator, community);
|
||||||
|
|
||||||
const invite = try srv.createInvite(.{
|
const invite_id = try srv.createInvite(.{
|
||||||
.max_uses = 1,
|
.max_uses = 1,
|
||||||
|
|
||||||
.kind = .community_owner,
|
.kind = .community_owner,
|
||||||
.to_community = community.id,
|
.to_community = community.id,
|
||||||
});
|
});
|
||||||
|
const invite = try srv.getInvite(invite_id);
|
||||||
defer util.deepFree(srv.allocator, invite);
|
defer util.deepFree(srv.allocator, invite);
|
||||||
|
|
||||||
try res.template(.ok, srv, success_tmpl, .{ .community = community, .invite = invite });
|
try res.template(.ok, srv, success_tmpl, .{ .community = community, .invite = invite });
|
||||||
|
|
Loading…
Reference in New Issue