X-Git-Url: https://gitweb.ps.run/chirp/blobdiff_plain/a68112f4ed195cb5dbe21e8401f04e2f6cc1a7e8..6a5bd646d03ad9796f00b639881c3b3e25ee35f2:/src/main.zig diff --git a/src/main.zig b/src/main.zig index b54841d..2f7fd4c 100644 --- a/src/main.zig +++ b/src/main.zig @@ -166,6 +166,9 @@ fn decode(text: []const u8) !std.BoundedArray(u8, 1024) { } const Chirp = struct { + const PostsPerPage = 10; + const UsersPerPage = 10; + pub fn hash_password(password: []const u8) !PasswordHash { var hash_buffer = try PasswordHash.init(128); @@ -269,7 +272,7 @@ const Chirp = struct { try sessions.del(session_token); } - fn append_post(env: lmdb.Env, user_id: UserId, post_list: PostList, parent_id: ?PostId, quote_id: ?PostId, text: []const u8) !void { + fn append_post(env: lmdb.Env, user_id: UserId, post_list: PostList, parent_id: ?PostId, quote_id: ?PostId, text: []const u8) !PostId { var post_id: PostId = undefined; // TODO: do this in one commit @@ -315,39 +318,45 @@ const Chirp = struct { var quotes = try quote_post.quotes.open(txn); try quotes.append(post_id); } + + return post_id; } fn post(env: lmdb.Env, user_id: UserId, text: []const u8) !void { - const txn = try env.txn(); - + var txn = try env.txn(); const users = try Db.users(txn); const user = try users.get(user_id); - txn.abort(); - try append_post(env, user_id, user.posts, null, null, text); + const post_id = try append_post(env, user_id, user.posts, null, null, text); + _ = post_id; } fn comment(env: lmdb.Env, user_id: UserId, parent_post_id: PostId, text: []const u8) !void { - const txn = try env.txn(); + var txn = try env.txn(); + const users = try Db.users(txn); + const user = try users.get(user_id); const posts = try Db.posts(txn); const parent_post = try posts.get(parent_post_id); - txn.abort(); - try append_post(env, user_id, parent_post.comments, parent_post_id, null, text); + const post_id = try append_post(env, user_id, parent_post.comments, parent_post_id, null, text); + + txn = try env.txn(); + var replies_view = try user.posts.open(txn); + try replies_view.append(post_id); + try txn.commit(); } fn quote(env: lmdb.Env, user_id: UserId, quote_post_id: PostId, text: []const u8) !void { - const txn = try env.txn(); - + var txn = try env.txn(); const users = try Db.users(txn); const user = try users.get(user_id); - txn.abort(); - try append_post(env, user_id, user.posts, null, quote_post_id, text); + const post_id = try append_post(env, user_id, user.posts, null, quote_post_id, text); + _ = post_id; } fn vote(env: lmdb.Env, post_id: PostId, user_id: UserId, kind: Vote.Kind) !void { @@ -434,10 +443,77 @@ const Chirp = struct { // }}} // html {{{ -fn html_form(res: *http.Response, comptime fmt_action: []const u8, args_action: anytype, inputs: anytype) !void { - try res.write("
+ \\