diego3g / rsxp-2023

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

[0015] Vincular ingresso #68

Closed CassianoJunior closed 1 year ago

CassianoJunior commented 1 year ago

Comecei mais ou menos o código dessa feature, mas ainda não sei se está no caminho certo. Seria nesse sentido:

// app.controller.ts

import { Body, Controller, Get, Headers, Post } from '@nestjs/common'
import { LinkTicketRequest, LinkTicketResponse } from './agreements/linkTicket'
import { PrismaService } from './database/prisma.service'

@Controller()
export class AppController {
  ...

  @Post('/linkTicket')
  async linkTicketToUser(@Body() body: LinkTicketRequest, @Headers() header: any) {
    const { symplaTicketNumber } = body

    // Get user id from header token generated in auth
    const getUserFromHeader = (header: any) => {
      // Todo

      return { id }
    }

    const { id } = getUserFromHeader(header)

    const user = await this.prisma.user.update({
      where: {
        id,
      },
      data: {
        symplaTicketNumber,
      },
    })

    return {
      data: user,
    } as LinkTicketResponse
  }
}

// server/agreements/linkTicket

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>

// schema.prisma

...
model User {
  id                 String  @id @default(cuid())
  name               String
  email              String?
  symplaTicketNumber String?
}
diego3g commented 1 year ago

Essa task exclusivamente ainda depende bastante de outras tasks anteriores, acho que vale a pena a gente esperar mais um pouco, isso porque provavelmente não teremos uma tabela de usuários dentro do nosso back-end, essa tabela vai existir somente no serviço de autenticação que vamos utilizar que é o clerk.

Dessa forma, teremos apenas uma tabela de associação do usuário logado (vamos ter apenas o ID do mesmo que é uma string) com o número do ingresso e o número do ingresso precia ser único, ou seja, outra pessoa não deveria poder vincular o mesmo ingresso.

Acho legal aguardar o desenrolar das issues #65 e #61 para continuarmos com essa aqui, o que acha?

CassianoJunior commented 1 year ago

Você que manda. Vou ficar vendo essas issues e quando tiver tudo certo por lá volto pra essa.

Vou fechar essa por enquanto, depois reabrimos ela.

trolliama commented 1 year ago

@CassianoJunior Estou trabalhando na parte de backend e criei um exemplo de service para os tickets no meu fork. Gostaria de saber se você ainda tem interesse nessa issue já que vc fechou ela

CassianoJunior commented 1 year ago

@CassianoJunior Estou trabalhando na parte de backend e criei um exemplo de service para os tickets no meu fork. Gostaria de saber se você ainda tem interesse nessa issue já que vc fechou ela

Fala @trolliama , tenho interesse sim, tava só esperando as issues mencionadas serem finalizadas pra começar.

Mas fique a vontade pra mandar seu código aqui, quando eu terminar o meu também mando. É bom que a gente vê a resolução de cada um e aprende ainda mais 🚀.

Vou reabrir a issue pra ficar visível pros outros.

trolliama commented 1 year ago

@CassianoJunior Beleza, sem problemas. Comitei o que eu fiz dessa parte de vincular ingresso no meu fork se quiser dar uma olhada! commit

trolliama commented 1 year ago

Estou trabalhando nessa parte junto com o @eletroswing se quiser se juntar também! Fizemos baseado no PR #94, no PR #78 e nas rotas referenciadas no backlog de tarefas.

diego3g commented 1 year ago

Fala galera, implementei essa parte de link nos últimos commits que fiz e ficou bem legal caso queiram testar! Obrigado! <3