From 3c60fb901177a69b762183b14817ee33cf12380e Mon Sep 17 00:00:00 2001 From: Filip Hoffmann Date: Tue, 1 Jul 2025 12:04:34 +0200 Subject: [PATCH] some query improvements --- src/grom/application.gleam | 145 +++++++++------------------------ src/grom/guild/audit_log.gleam | 7 +- 2 files changed, 42 insertions(+), 110 deletions(-) diff --git a/src/grom/application.gleam b/src/grom/application.gleam index dd5ac7a..a9860a4 100644 --- a/src/grom/application.gleam +++ b/src/grom/application.gleam @@ -94,17 +94,15 @@ pub type InstallationContextConfig { InstallationContextConfig(oauth2_install_params: Option(InstallParams)) } -pub opaque type GetEntitlements { - GetEntitlements( - user_id: Option(String), - sku_ids: Option(Set(String)), - before_id: Option(String), - after_id: Option(String), - limit: Option(Int), - guild_id: Option(String), - exclude_ended: Bool, - exclude_deleted: Bool, - ) +pub type GetEntitlementsQuery { + UserId(String) + SkuIds(Set(String)) + BeforeId(String) + AfterId(String) + Limit(Int) + GuildId(String) + ExcludeEnded(Bool) + ExcludeDeleted(Bool) } // FLAGS ----------------------------------------------------------------------- @@ -481,45 +479,36 @@ pub fn delete_emoji( pub fn get_entitlements( client: Client, for application_id: String, - with get_entitlements: GetEntitlements, + with query: Set(GetEntitlementsQuery), ) -> Result(List(Entitlement), Error) { let query = - [ - case get_entitlements.user_id { - Some(id) -> [#("user_id", id)] - None -> [] - }, - case get_entitlements.sku_ids { - Some(ids) -> [ - #( - "sku_ids", - ids - |> set.to_list - |> string.join(with: ","), - ), - ] - None -> [] - }, - case get_entitlements.before_id { - Some(id) -> [#("before", id)] - None -> [] - }, - case get_entitlements.after_id { - Some(id) -> [#("after", id)] - None -> [] - }, - case get_entitlements.limit { - Some(limit) -> [#("limit", int.to_string(limit))] - None -> [] - }, - case get_entitlements.guild_id { - Some(id) -> [#("guild_id", id)] - None -> [] - }, - [#("exclude_ended", bool.to_string(get_entitlements.exclude_ended))], - [#("exclude_deleted", bool.to_string(get_entitlements.exclude_deleted))], - ] - |> list.flatten + set.map(query, fn(item) { + case item { + UserId(id) -> #("user_id", id) + SkuIds(ids) -> #( + "sku_ids", + ids + |> set.to_list + |> string.join(","), + ) + BeforeId(id) -> #("before", id) + AfterId(id) -> #("after", id) + Limit(limit) -> #("limit", limit |> int.to_string) + GuildId(id) -> #("guild_id", id) + ExcludeEnded(exclude) -> #( + "exclude_ended", + exclude + |> bool.to_string + |> string.lowercase, + ) + ExcludeDeleted(exclude) -> #( + "exclude_deleted", + exclude + |> bool.to_string + |> string.lowercase, + ) + } + }) use response <- result.try( client @@ -527,7 +516,7 @@ pub fn get_entitlements( http.Get, "/applications/" <> application_id <> "/entitlements", ) - |> request.set_query(query) + |> request.set_query(query |> set.to_list) |> rest.execute, ) @@ -535,61 +524,3 @@ pub fn get_entitlements( |> json.parse(using: decode.list(entitlement.decoder())) |> result.map_error(error.CouldNotDecode) } - -pub fn new_get_entitlements() -> GetEntitlements { - GetEntitlements(None, None, None, None, None, None, False, True) -} - -pub fn get_entitlements_with_user_id( - get_entitlements: GetEntitlements, - user_id: String, -) -> GetEntitlements { - GetEntitlements(..get_entitlements, user_id: Some(user_id)) -} - -pub fn get_entitlements_with_sku_ids( - get_entitlements: GetEntitlements, - sku_ids: Set(String), -) -> GetEntitlements { - GetEntitlements(..get_entitlements, sku_ids: Some(sku_ids)) -} - -pub fn get_entitlements_before( - get_entitlements: GetEntitlements, - id before_id: String, -) -> GetEntitlements { - GetEntitlements(..get_entitlements, before_id: Some(before_id)) -} - -pub fn get_entitlements_after( - get_entitlements: GetEntitlements, - id after_id: String, -) -> GetEntitlements { - GetEntitlements(..get_entitlements, after_id: Some(after_id)) -} - -pub fn get_entitlements_with_limit( - get_entitlements: GetEntitlements, - limit: Int, -) -> GetEntitlements { - GetEntitlements(..get_entitlements, limit: Some(limit)) -} - -pub fn get_entitlements_with_guild_id( - get_entitlements: GetEntitlements, - guild_id: String, -) -> GetEntitlements { - GetEntitlements(..get_entitlements, guild_id: Some(guild_id)) -} - -pub fn get_entitlements_excluding_ended( - get_entitlements: GetEntitlements, -) -> GetEntitlements { - GetEntitlements(..get_entitlements, exclude_ended: True) -} - -pub fn get_entitlements_including_deleted( - get_entitlements: GetEntitlements, -) -> GetEntitlements { - GetEntitlements(..get_entitlements, exclude_deleted: False) -} diff --git a/src/grom/guild/audit_log.gleam b/src/grom/guild/audit_log.gleam index 2144d5f..0146c1c 100644 --- a/src/grom/guild/audit_log.gleam +++ b/src/grom/guild/audit_log.gleam @@ -5,6 +5,7 @@ import gleam/int import gleam/json import gleam/list import gleam/result +import gleam/set.{type Set} import grom/channel.{type Channel} import grom/client.{type Client} import grom/error.{type Error} @@ -117,11 +118,11 @@ pub fn partial_user_decoder() -> decode.Decoder(PartialUser) { pub fn get( client: Client, for guild_id: String, - with query: List(GetQuery), + with query: Set(GetQuery), ) -> Result(AuditLog, Error) { let query = query - |> list.map(fn(parameter) { + |> set.map(fn(parameter) { case parameter { UserId(id) -> #("user_id", id) EntryType(type_) -> #( @@ -139,7 +140,7 @@ pub fn get( use response <- result.try( client |> rest.new_request(http.Get, "/guilds/" <> guild_id <> "/audit-logs") - |> request.set_query(query) + |> request.set_query(query |> set.to_list) |> rest.execute, ) -- 2.51.2