╭ changed ─────────╮ │src/event/User.zig│ ╰──────────────────╯ ╭───────────╮ │← all files│ ╰───────────╯ ╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │156 │ │157 if (!try event_id_to_user.remove(user_key)) return error.EventNotFound; │ │158 │ │159 + // the user's repos go with them: the repo name index is keyed by owner │ │160 + // id, so one left behind is listed but can never be resolved again │ │161 const user_id_to_repo_id_set_cursor = try haxy_moment.putCursor(hash.hashInt(hash_kind, "user-id->repo-id-set"));│ │162 const user_id_to_repo_id_set = try DB.HashMap(.read_write).init(user_id_to_repo_id_set_cursor); │ │163 + if (try user_id_to_repo_id_set.getCursor(user_key)) |user_repos_cursor| { │ │164 + const user_repos = try DB.SortedSet(.read_only).init(user_repos_cursor); │ │165 + │ │166 + // collected up front, since deleting a repo removes it from this set │ │167 + var repo_ids: std.ArrayList([evt.event_id_size]u8) = .empty; │ │168 + var repo_iter = try user_repos.iteratorFromIndex(0); │ │169 + while (try repo_iter.next()) |kv_pair_cursor| { │ │170 + try repo_ids.append(arena.allocator(), try evt.readOrderKeyId(DB, kv_pair_cursor)); │ │171 + } │ │172 + │ │173 + for (repo_ids.items) |*repo_id| { │ │174 + try evt.Repo.consume(DB, hash_kind, haxy_moment, repo_id, null, arena, event_oid); │ │175 + } │ │176 + } │ │177 _ = try user_id_to_repo_id_set.remove(user_key); │ │178 } │ │179 } │ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯