saveinmed/backend-old/internal/http/handler/address_handler.go
NANDO9322 0a0c344022 feat(geral): implementa fluxo de aprovação, api de endereços e acesso master
Backend:
- Implementa API de Endereços (`POST /enderecos`) e migration da tabela `addresses`.
- Adiciona bloqueio de login para usuários de empresas não verificadas (status `pending`).
- Criação automática do usuário Master (`seedAdmin`) com empresa verificada.
- Adiciona aliases de rota em PT-BR (`/api/v1/empresas` GET/PATCH, `/api/v1/usuarios` PATCH) para compatibilidade com o frontend.
- Atualiza DTOs para suportar campos em português no registro de empresas e atualização de usuários.
- Endpoint `/auth/me` agora retorna `company_name` e flag `superadmin`.
- Ajusta filtro de repositório para listar empresas por status de verificação.

Frontend:
- Nova página `/usuarios-pendentes` com layout padrão e funcionalidade de aprovação.
- Atualiza [Header](cci:1://file:///c:/Projetos/saveinmed/saveinmed-frontend/src/components/Header.tsx:29:0-337:2) para exibir o nome da empresa do usuário logado.
- Serviço `empresaApiService`: correções de mapeamento (`corporate_name` -> `razao_social`) e novos métodos.
- Tipagem atualizada para incluir campos de empresa no [UserData](cci:2://file:///c:/Projetos/saveinmed/saveinmed-frontend/src/types/auth.ts:15:0-30:1).

Fixes:
- Correção de erro 405 (Method Not Allowed) nas rotas de atualização.
- Correção de erro 404 na listagem de pendentes.
- Resolução de campos vazios na listagem de empresas.
2026-01-21 17:20:06 -03:00

48 lines
1 KiB
Go

package handler
import (
"log"
"net/http"
"time"
"github.com/saveinmed/backend-go/internal/domain"
)
func (h *Handler) CreateAddress(w http.ResponseWriter, r *http.Request) {
reqUser, err := getRequester(r)
if err != nil {
writeError(w, http.StatusUnauthorized, err)
return
}
var payload createAddressRequest
if err := decodeJSON(r.Context(), r, &payload); err != nil {
writeError(w, http.StatusBadRequest, err)
return
}
// Use user ID as the entity ID
entityID := reqUser.ID
addr := domain.Address{
EntityID: entityID,
Title: payload.Title,
ZipCode: payload.ZipCode,
Street: payload.Street,
Number: payload.Number,
Complement: payload.Complement,
District: payload.District,
City: payload.City,
State: payload.State,
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
}
if err := h.svc.CreateAddress(r.Context(), &addr); err != nil {
log.Printf("Failed to create address: %v", err)
writeError(w, http.StatusInternalServerError, err)
return
}
writeJSON(w, http.StatusCreated, addr)
}