Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implementar APIs de eventos #7

Open
caioeverest opened this issue Jan 18, 2024 · 3 comments
Open

Implementar APIs de eventos #7

caioeverest opened this issue Jan 18, 2024 · 3 comments
Assignees

Comments

@caioeverest
Copy link
Collaborator

No description provided.

@caioeverest caioeverest self-assigned this Jan 18, 2024
@kessix
Copy link

kessix commented Jan 20, 2024

@caioeverest tem alguma documentação de como a API deve ser construida?
Queria ajuda no desenvolvimento.

@caioeverest
Copy link
Collaborator Author

Olá @kessix,

Primeiramente, peço desculpas pela demora na resposta. Estou muito contente que você tenha demonstrado interesse em contribuir com o projeto Tech Agenda.

Recentemente, criei um pull request (#8) que implementa a estrutura fundamental do projeto, incluindo tanto o backend quanto o frontend. Agora, precisamos estender o código do arquivo api.go com alguns métodos adicionais.

A lógica de negócios do projeto reside na camada service, enquanto o gerenciamento da API está no arquivo que mencionei anteriormente. As rotas são definidas aqui.

Para a entidade "event", precisamos criar três endpoints:

  1. Inserção de eventos (POST /api/events)
  2. Atualização de eventos (PATCH /api/events/:EventID)
  3. Exclusão de eventos (DELETE /api/events/:EventID)

Os endpoints de manipulação de eventos precisam validar se o usuário que está fazendo a requisição é o mesmo que criou o evento. Já existe um middleware global que verifica os cookies e injeta os dados do usuário no contexto. Você pode acessar esses dados usando a função GetUserFromCtx. Se o usuário não estiver logado, essa função retornará nil. Um exemplo de como isso é feito está disponível no handler de "lending" aqui.

Infelizmente, ainda não temos documentação detalhada para os campos obrigatórios, mas você pode consultar a migração que indica quais campos não podem ser nulos.

Aqui estão os campos necessários para o endpoint de criação de eventos:

Campos para a entidade Event na tabela events:

  • title - O título que será exibido no frontend (obrigatório)
  • banner - O link da imagem que será usada como banner do evento (não existe constraint no banco, mas acredito que podemos assumir que todo evento vai ter um banner e requisitar isso como obrigatório)
  • description - Descrição do evento (suporta markdown na UI e é obrigatório)
  • href - Link para plataforma externa (pode ser nulo)
  • type_of - Tipo do evento (presencial, online ou ambos; padrão é online)
  • begin_date - Data de início do evento (obrigatório)
  • end_date - Data de término do evento (obrigatório)
  • user_id - ID do usuário, que deve ser obtido do contexto usando a função GetUserFromCtx (obrigatório)

Venue:

  • venue_ids - Lista de locais onde o evento ocorrerá (pode ser nula)

Como um evento pode ter múltiplos locais e há uma relação N-N entre a entidade Event e Venue, é necessário inserir um registro na tabela events_venues para associar um evento a uma venue.

Tags:

  • tag_ids - Lista de tags associadas ao evento (pode ser nula por enquanto)

Similarmente ao relacionamento com venues, as tags também têm uma relação N-N com eventos. Portanto, para associar um evento a uma tag, é necessário criar um registro na tabela events_tags.

Neste momento, nosso foco está na criação de eventos. Provavelmente, vamos criar APIs separadas para o registro de novas "venues" e "tags" posteriormente. Acredito que a criação de tags pode ser limitada a usuários com as roles "mod" ou "admin", mas discutiremos isso em uma futura issue.

Por último, seria interessante se pudéssemos permitir a inserção em massa de eventos, seja através de um arquivo CSV ou JSON.

Para esta issue, vamos concentrar nossos esforços na API de eventos. A API de participantes pode gerar discussões adicionais, pois estamos planejando integrar com outras plataformas para obter informações sobre os participantes.

Estou à disposição para esclarecer qualquer dúvida ou ajudar em qualquer etapa do processo. Obrigado por se juntar ao projeto Tech Agenda!

@caioeverest caioeverest changed the title Implementar APIs de eventos e participantes Implementar APIs de eventos Feb 4, 2024
@kessix
Copy link

kessix commented Feb 9, 2024

Neste final de semana irei iniciar as primeiras contribuições!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants