Skip to content

feature/supply-priority-expiration - #20

Open
gustavocs wants to merge 8 commits into
SOS-RS:developfrom
gustavocs:feature/supply-priority-expiration
Open

feature/supply-priority-expiration#20
gustavocs wants to merge 8 commits into
SOS-RS:developfrom
gustavocs:feature/supply-priority-expiration

Conversation

@gustavocs

@gustavocs gustavocs commented May 9, 2024

Copy link
Copy Markdown
Contributor
Comment thread src/shelter/shelter.service.ts Outdated

@AlbuquerqueRafael AlbuquerqueRafael left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Olá, @gustavocs. Obrigado pelo pull request.

Comment thread src/shelter-supply/shelter-supply.service.ts Outdated
@gustavocs
gustavocs force-pushed the feature/supply-priority-expiration branch from 5cab976 to 6180641 Compare May 9, 2024 21:59
Comment thread src/shelter-supply/shelter-supply.job.ts Outdated
@gustavocs
gustavocs force-pushed the feature/supply-priority-expiration branch from 4292004 to c4ebd69 Compare May 9, 2024 23:12
Comment thread src/shelter-supply/shelter-supply.job.ts Outdated
Comment thread src/shelter-supply/shelter-supply.job.ts Outdated
Comment thread src/shelter-supply/shelter-supply.job.ts Outdated
filipefraga

This comment was marked as duplicate.

@filipepacheco filipepacheco left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cumpre o requisito, apenas deve fazer a change sugerida em #20 (comment)

@gustavocs

gustavocs commented May 11, 2024

Copy link
Copy Markdown
Contributor Author

cumpre o requisito, apenas deve fazer a change sugerida em #20 (comment)

@filipepacheco @AndersonCRocha concordo, dava pra fazer com um updateMany. mas vou ter que dividir em duas queries de qualquer forma porque por alguma razão os campos createdAt e updatedAt no BD são varchar e não consigo usar os operadores de menor ou igual (lte). então faria essa lógica no próprio método. alguma objeção?

@gustavocs
gustavocs force-pushed the feature/supply-priority-expiration branch from c4ebd69 to 701524e Compare May 11, 2024 01:19
@AndersonCRocha

Copy link
Copy Markdown
Contributor

cumpre o requisito, apenas deve fazer a change sugerida em #20 (comment)

@filipepacheco @AndersonCRocha concordo, dava pra fazer com um updateMany. mas vou ter que dividir em duas queries de qualquer forma porque por alguma razão os campos createdAt e updatedAt no BD são varchar e não consigo usar os operadores de menor ou igual (lte). então faria essa lógica no próprio método. alguma objeção?

Rapazz, eu acho q o momento de ajustar o campo no banco pro tipo correto seria agora q tá no início heim, não faz sentido ser varchar, @filipefraga sabe a motivação?

@filipepacheco

Copy link
Copy Markdown
Contributor

ok, vou abrir uma issue pra migrar os campos de string pra timestamp.

@gustavocs
o prisma não tem suporte a operadores de cast?
o operador gt usando Date() não funcionaria com essa string de timestamp?

se não, vamos manter assim porque de fato vai seguir sendo 2 queries.

@gustavocs

Copy link
Copy Markdown
Contributor Author

ok, vou abrir uma issue pra migrar os campos de string pra timestamp.

@gustavocs o prisma não tem suporte a operadores de cast? o operador gt usando Date() não funcionaria com essa string de timestamp?

se não, vamos manter assim porque de fato vai seguir sendo 2 queries.

@filipepacheco Não consigo converter a Date() pra fazer a query porque os parâmetros da query do prisma são tipados. Tentei sem fazer o cast pra Date e usar lte e não executa conforme o esperado. Acho que foi justamente por isso que a primeira lógica tinha feito assim e não lembrava bem.

Sobre a migração: pelo que vi, não é só nesta tabela. Várias outras estão usando varchar pra createdAt e updatedAt.

@AndersonCRocha

Copy link
Copy Markdown
Contributor

@filipepacheco Realmente o prisma n oferece o suporte no query builder pro cast, tá deixando a desejar demais, TB n oferece suporte pra inserir uma RAW Clause no meio do query builder, forçando converter toda a query para nativa com $queryRaw, ou então fazer alguma gambiarra. Que foi o caso do unnaccent do outro PR

@filipepacheco

Copy link
Copy Markdown
Contributor

@AndersonCRocha sim, estamos descobrindo vários pontos negativos do Prisma...

Mas sem problema. Podemos subir assim caso essa entrega seja requisitada para deploy e depois da migração em todas as tabelas passamos por aqui pra arrumar.

Vou aprovar.

@AndersonCRocha

AndersonCRocha commented May 11, 2024

Copy link
Copy Markdown
Contributor

@gustavocs é importante ressaltar que na sua implementação não está sendo 2 queries não, tá sendo 1 query + N updates em que N é a quantidade de registros q deverão ser alterados, se for continuar com essa abordagem ao invés de corrigir o tipo no banco de dados, sugiro vc fazer um filter() na lista pra pegar os expirados, depois um map() para obter os ida e por fim um único update com where IN

Edit 1: PutzZz, acabei de ver que ShelterSupply é chave composta, deu ruim, desisto!!!

@filipepacheco

Copy link
Copy Markdown
Contributor

Antes de aprovar, vou deixar 3 sugestões

  1. Aumentar a periodicidade do CRON (10 segundos é muito pouco)
  2. Colocar a periodicidade no .env pra que seja de fácil ajuste sem a necessidade de deploy
    2.1. Essa aqui tá sendo usado as constantes do Nest. Será que tem como usar o .env de maneira amigável nesse caso?
  3. Colocar o intervalo de tempo pra prioridade ser diminuida no .env também

Obrigado @gustavocs

@gustavocs
gustavocs force-pushed the feature/supply-priority-expiration branch from 2e6a155 to ba82184 Compare May 11, 2024 03:27
@gustavocs

gustavocs commented May 11, 2024

Copy link
Copy Markdown
Contributor Author

@gustavocs é importante ressaltar que na sua implementação não está sendo 2 queries não, tá sendo 1 query + N updates em que N é a quantidade de registros q deverão ser alterados, se for continuar com essa abordagem ao invés de corrigir o tipo no banco de dados, sugiro vc fazer um filter() na lista pra pegar os expirados, depois um map() para obter os ida e por fim um único update com where IN

Edit 1: PutzZz, acabei de ver que ShelterSupply é chave composta, deu ruim, desisto!!!

Sim, eu tava implementando um filter e percebi que não teria como fazer com whereIn. Tá difícil. Vou fazer as mudanças sugeridas pelo @filipepacheco amanhã cedo. Valeu pelo review <3

@gustavocs

Copy link
Copy Markdown
Contributor Author

Aguardando #60 para corrigir implementação.

@filipepacheco filipepacheco left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

por gentileza corrige o erro de lint

@gustavocs

Copy link
Copy Markdown
Contributor Author

por gentileza corrige o erro de lint

Corrigido. O erro de lte vai vai seguir até os campos serem migrados pra timestampz. Já fiz o teste local e funciona.
Esse PR tá dependendo do #60, vou adicionar na descrição.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment