+ pub fn @"/new_feed"(self: Self) !void {
+ if (self.logged_in) |login| {
+ const name_str = self.req.get_value("name") orelse return error.NoName;
+ const name = try Name.fromSlice(name_str);
+
+ var txn = try self.env.txn();
+
+ const userlist = try UserList.init(txn);
+ try txn.commit();
+
+ txn = try self.env.txn();
+ var feeds_view = try login.user.feeds.open(txn);
+ _ = try feeds_view.append(.{ .name = name, .list = userlist });
+ try txn.commit();
+ }
+ }
+ pub fn @"/feed_add"(self: Self) !void {
+ if (self.logged_in) |login| {
+ _ = login;
+
+ const list_id_str = self.req.get_value("feed_id") orelse return error.NoListId;
+ const user_id_str = self.req.get_value("user_id") orelse return error.NoUserId;
+ const list_id = try std.fmt.parseUnsigned(UserList.Index, list_id_str, 16);
+ const user_id = try parse_enum(UserId, user_id_str, 16);
+
+ const txn = try self.env.txn();
+ defer txn.commit() catch {};
+
+ const user_list = UserList{ .idx = list_id };
+ var user_list_view = try user_list.open(txn);
+ if (try user_list_view.has(user_id)) {
+ try user_list_view.del(user_id);
+ } else {
+ try user_list_view.append(user_id);
+ }
+ }
+ }