horse icon indicating copy to clipboard operation
horse copied to clipboard

Implementacoes para tratamento de QueryParams como List

Open fabiohmribeiro opened this issue 8 months ago • 3 comments

Implementado o método AsList<T> na classe THorseCoreParamField para converter automaticamente os valores separados por vírgula do parâmetro de consulta em uma lista do tipo especificado. Adicionei suporte para os tipos Integer, Int64, Double, String, Variant, DateTime, Date e Time. Utilizei TValue para conversão de tipo e tratamento de exceções para tipos não suportados.

Atualizado o método InitializeQuery na classe THorseRequest para incluir a condição que permite concatenar os valores separados por vírgula quando houver repetição de QueryParam.

Contexto:

Recentemente, enfrentei um desafios ao lidar com queryparams como arrays (por exemplo, test=1,2,3), exigindo uma abordagem manual. Para solucionar isso, implementei o método "AsList<T>", que converte automaticamente os query parameters em um "TList".

Outro ponto de melhoria foi na montagem do "InitializeQuery". Originalmente construído com um dicionário, ele não conseguia lidar adequadamente com múltiplos QueryParams do mesmo nome (por exemplo, ?test=123,test=abc), resultando na captura apenas do último valor definido. Com a atualização da função, agora ele concatena os valores encontrados para o campo, separando-os por vírgula. Isso cria uma representação semelhante a um array (por exemplo, teste=123,abc), permitindo que o método "AsList<T>" também processe e transforme esse caso em um "TList<T>".

Exemplo simples de uso

THorse.Get('/list',
procedure (Req: THorseRequest; Res: THorseResponse)
begin
   var teste  := Req.Query.Field('test').AsList<string>;
   var  response := String.Join(', ', teste.ToArray);
   teste.Free;

   Res.Send(response).Status(200);
end);

fabiohmribeiro avatar Jun 05 '24 14:06 fabiohmribeiro