diego3g / rsxp-2023

Repositório contendo o código do app do RS/XP 2023
MIT License
440 stars 84 forks source link

[0020] Criação de contratos de comunicação back-end/front-end #53

Open diego3g opened 1 year ago

diego3g commented 1 year ago

Estou criando contratos para todas comunicações que forem acontecer entre front-end e back-end facilitando a construção de ambas partes de forma isolada.

Exemplo de um contrato para a rota de "vincular ingresso":

import { z } from 'zod'

export const linkTicketRequest = z.object({
  symplaTicketNumber: z.string().regex(/[A-Z0-9]{4}-[A-Z0-9]{2}-[A-Z0-9]{4}/)
})

export type LinkTicketRequest = z.infer<typeof linkTicketRequest>

export const linkTicketResponse = z.object({
  // todo
})

export type LinkTicketResponse = z.infer<typeof linkTicketResponse>
extendsLcc commented 1 year ago

O ts-rest poderia ser interessante para esta definição de contratos.

Ele permitiria compartilhar as tipagens entre o front-end e back-end de maneira similar ao tRPC através da declaração de um contrato independente da implementação do back-end. Ele tem integração com nestjs e tmb gera os hooks do react-query a partir das definições do contrato.

(zodios is also an honorable mention)

jorge-lba commented 1 year ago

@extendsLcc eu não conheço o ts-rest, sabe me dizer se isso aumentaria a complexidade para o pessoal mais iniciante contribuir?

Se tiver algum conteúdo que auxiliasse a entender melhor com utilizar seria bem legal ^^

diego3g commented 1 year ago

@extendsLcc Não conhecia o ts-rest, apenas o zodios. Pode ser uma ótima opção. Vou dar uma estudada sobre a facilidade em implementar e entender se aplicamos isso nesse projeto. Obrigado!

diego3g commented 1 year ago

Fiz um exemplo de implementação utilizando o ts-rest caso queiram deixar o feedback. Particularmente curti bastante a biblioteca e acho que seria uma mão na roda.

https://github.com/diego3g/rsxp-2023/pull/76

Quero fazer um exemplo dela aplicada ao mobile com React Query e ao Nest, mas antes vou aguardar a PR #57 ser mergeada pra prosseguir.

@extendsLcc se quiser dar um visu e dar sua opinião.

extendsLcc commented 1 year ago

@jorge-lba A ferramenta traz sim uma carga porém não diria que o aumento de complexidade é tão significativo, tirando talvez algumas peculiaridades (auth), a questão é avaliar o custo x beneficio que ela vai trazer. Conteúdo de aprendizado vai ser apenas a doc e algumas discussions e issues no github deles, infelizmente.

Minha intenção era mais apresentar uma solução para esse tipo de problema de definição de contratos para quem estivesse acompanhando esta issue, esperando que possa ser util para alguém.