api

package
v0.5.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 6, 2026 License: MIT Imports: 20 Imported by: 0

Documentation

Overview

Package api expoe a interface HTTP do Brevis.

Usa net/http puro. O roteamento por metodo e path do ServeMux (Go 1.22+) cobre o que precisamos, e a regra 6 do plano pede evitar framework quando a stdlib resolve. O trabalho dificil deste sistema esta na fila, no scheduler e na maquina de estados — nao no HTTP.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Acoes

type Acoes interface {
	Alternar(ctx context.Context, slug string) (bool, error)
	Disparar(ctx context.Context, slug string, agora time.Time, params map[string]string) (uuid.UUID, error)
}

Acoes sao os dois efeitos que a tela dispara. Interface pequena de proposito: a UI nao deve poder fazer mais nada no sistema do que pausar uma agenda e mandar rodar agora.

type Checker

type Checker interface {
	Check(ctx context.Context) error
}

Checker e uma dependencia que o readiness consulta. Interface pequena de proposito (regra 5): o postgres.Pool ja a satisfaz sem adaptador.

type Definicoes

type Definicoes interface {
	Definicao(ctx context.Context, slug string) (wf.Workflow, error)
}

Definicoes le a definicao publicada de um workflow. Separada de `Leitura` porque devolve o dominio, nao uma projecao de tela.

type Execucoes

type Execucoes interface {
	Buscar(ctx context.Context, id uuid.UUID) (run.Run, error)
	EstadoDosNos(ctx context.Context, id uuid.UUID) (map[string]postgres.EstadoNo, error)
	LogsDaRun(ctx context.Context, id uuid.UUID) ([]postgres.LogDoPasso, error)
}

Execucoes le uma Run e o estado de seus passos.

type Leitura

type Leitura interface {
	Indicadores(ctx context.Context, janela time.Duration) (postgres.Indicadores, error)
	ExecucoesPorHora(ctx context.Context, horas int) ([]postgres.Balde, error)
	EmAndamento(ctx context.Context, limite int) ([]postgres.ResumoRun, error)
	UltimasRuns(ctx context.Context, limite int) ([]postgres.ResumoRun, error)
	Runs(ctx context.Context, f postgres.FiltroRuns) ([]postgres.ResumoRun, error)
	ContarRuns(ctx context.Context, f postgres.FiltroRuns) (int, error)
	RunsDoWorkflow(ctx context.Context, slug string, limite int) ([]postgres.ResumoRun, error)
	Workflows(ctx context.Context) ([]postgres.ResumoWorkflow, error)
	Agendas(ctx context.Context) ([]postgres.AgendaResumo, error)
	Projetos(ctx context.Context) ([]postgres.ResumoProjeto, error)
	ProfundidadeDaFila(ctx context.Context) (int, int, error)
}

Leitura e o que a UI precisa do banco. Interface declarada aqui, no consumidor.

type Server

type Server struct {
	// contains filtered or unexported fields
}

Server carrega o roteador e as dependencias que o readiness consulta.

func NewServer

func NewServer(log *slog.Logger, checkers map[string]Checker, ui *UI) *Server

NewServer monta o roteador. Os checkers sao nomeados para que o /ready diga QUAL dependencia falhou, e nao apenas que algo falhou.

`ui` pode ser nil: um processo que so serve health check nao precisa das paginas, e exigi-las acoplaria o servidor ao banco sem necessidade.

func NewServerAutenticado

func NewServerAutenticado(log *slog.Logger, checkers map[string]Checker, ui *UI,
	cred auth.Credencial, inseguro bool,
) *Server

NewServerAutenticado e o mesmo, exigindo sessao quando a credencial esta configurada. `inseguro` manda o cookie sem a flag Secure — necessario apenas para http puro em desenvolvimento, porque um cookie Secure nunca chega de volta por http e o login pareceria simplesmente nao funcionar.

func (*Server) HTTPServer

func (s *Server) HTTPServer(addr string) *http.Server

HTTPServer devolve o servidor configurado. Os timeouts existem porque o default do net/http e nenhum: sem eles, uma conexao lenta segura um handler indefinidamente.

func (*Server) ServeHTTP

func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request)

ServeHTTP faz do Server um http.Handler, com log de acesso.

type UI

type UI struct {
	// contains filtered or unexported fields
}

UI registra as paginas server-rendered e o JSON que a ilha React consome.

func NewUI

func NewUI(l Leitura, d Definicoes, e Execucoes, a Acoes, m branding.Marca, log *slog.Logger) *UI

func (*UI) Registrar

func (u *UI) Registrar(mux *http.ServeMux)

Registrar liga as rotas ao mux.

func (*UI) RegistrarLogin

func (u *UI) RegistrarLogin(mux *http.ServeMux, portao *auth.Portao)

RegistrarLogin liga as rotas de sessao. Fica separada de Registrar porque so existe quando ha credencial: sem ela, uma tela de login que sempre aceita seria pior que nenhuma.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL