From 5ab62ae3e25c2d3e0190486a0836c1133abaa259 Mon Sep 17 00:00:00 2001 From: Filip Hoffmann Date: Tue, 17 Feb 2026 22:00:14 +0100 Subject: [PATCH] get invite target users ids endpoint --- gleam.toml | 1 + manifest.toml | 2 ++ src/grom/invite.gleam | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/gleam.toml b/gleam.toml index 5fa8263..ffd8b59 100644 --- a/gleam.toml +++ b/gleam.toml @@ -28,6 +28,7 @@ multipart_form = ">= 1.1.0 and < 2.0.0" operating_system = ">= 1.0.1 and < 2.0.0" status_code = ">= 1.0.0 and < 2.0.0" stratus = ">= 2.0.0 and < 3.0.0" +splitter = ">= 1.2.0 and < 2.0.0" [dev-dependencies] gleeunit = ">= 1.0.0 and < 2.0.0" diff --git a/manifest.toml b/manifest.toml index 52aaf92..180ad15 100644 --- a/manifest.toml +++ b/manifest.toml @@ -16,6 +16,7 @@ packages = [ { name = "logging", version = "1.3.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "logging", source = "hex", outer_checksum = "1098FBF10B54B44C2C7FDF0B01C1253CAFACDACABEFB4B0D027803246753E06D" }, { name = "multipart_form", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_http", "gleam_stdlib"], otp_app = "multipart_form", source = "hex", outer_checksum = "082C77A0C3BB1128FCD55491665E9B72BC943E849B67D02B08CFA6808AD8E47C" }, { name = "operating_system", version = "1.0.1", build_tools = ["gleam"], requirements = [], otp_app = "operating_system", source = "hex", outer_checksum = "682D4D19496E607A6E6229AA51A38A1400ED5067C2C54D56843DBCB0C61FFA6D" }, + { name = "splitter", version = "1.2.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "splitter", source = "hex", outer_checksum = "3DFD6B6C49E61EDAF6F7B27A42054A17CFF6CA2135FF553D0CB61C234D281DD0" }, { name = "status_code", version = "1.1.0", build_tools = ["gleam"], requirements = [], otp_app = "status_code", source = "hex", outer_checksum = "F6EC765345A634602AD030EB1B4D34A425873CBC223CEC595EBF062073CD70BC" }, { name = "stratus", version = "2.0.0", build_tools = ["gleam"], requirements = ["exception", "gleam_crypto", "gleam_erlang", "gleam_http", "gleam_otp", "gleam_stdlib", "gramps", "logging"], otp_app = "stratus", source = "hex", outer_checksum = "DB81236C1E00C29C01FBED9D3B0946E7A74AEE7D515036C7BF152D22430ADE9E" }, ] @@ -31,5 +32,6 @@ gleam_time = { version = ">= 1.1.0 and < 2.0.0" } gleeunit = { version = ">= 1.0.0 and < 2.0.0" } multipart_form = { version = ">= 1.1.0 and < 2.0.0" } operating_system = { version = ">= 1.0.1 and < 2.0.0" } +splitter = { version = ">= 1.2.0 and < 2.0.0" } status_code = { version = ">= 1.0.0 and < 2.0.0" } stratus = { version = ">= 2.0.0 and < 3.0.0" } diff --git a/src/grom/invite.gleam b/src/grom/invite.gleam index d17dd84..b296700 100644 --- a/src/grom/invite.gleam +++ b/src/grom/invite.gleam @@ -19,6 +19,7 @@ import grom/internal/rest import grom/internal/time_duration import grom/internal/time_rfc3339 import grom/user.{type User, User} +import splitter.{type Splitter} // TYPES ----------------------------------------------------------------------- @@ -461,3 +462,36 @@ pub fn delete( pub fn new_create() -> Create { Create(None, None, False, False, None, None, None) } + +pub fn get_target_users_ids( + client: grom.Client, + for_code code: String, +) -> Result(List(String), grom.Error) { + use response <- result.try( + client + |> rest.new_request(http.Get, "/invites/" <> code <> "/target-users") + |> rest.execute, + ) + + Ok(split_endlines(response.body)) +} + +// Cursed CSV handling, because this is a cursed CSV. +fn split_endlines(string: String) -> List(String) { + let splitter = splitter.new(["\r\n", "\n"]) + split_endlines_loop(string, splitter, []) +} + +fn split_endlines_loop( + string: String, + splitter: Splitter, + acc: List(String), +) -> List(String) { + case splitter.split(splitter, string) { + #(last, "", "") -> + [last, ..acc] + |> list.reverse + |> list.drop(1) + #(id, _, rest) -> split_endlines_loop(rest, splitter, [id, ..acc]) + } +} -- 2.51.2