Módulo:Temporada/Partidas

De Clube Atletico Mineiro - Enciclopedia Galo Digital
Revisão de 16h27min de 24 de janeiro de 2026 por Admin (discussão | contribs)
Ir para navegação Ir para pesquisar

Predefinição:Documentation

Módulo:Temporada/Partidas

O Módulo:Temporada/Partidas define o modelo lógico das partidas de uma temporada e é responsável pela renderização das linhas individuais e da lista completa de jogos no projeto Wiki Galo Digital.

Ele atua como ponte entre os dados brutos da temporada e a apresentação tabular das partidas.

---

Escopo e responsabilidades

Este módulo é responsável por:

  • Criar o objeto lógico Partida
  • Normalizar e validar dados das partidas
  • Calcular resultado do Atlético (V, E, D)
  • Renderizar:
    • Linha individual da tabela de partidas
    • Lista completa de partidas da temporada
  • Centralizar regras de apresentação do placar

Predefinição:Aviso

---

Dependências

Este módulo depende diretamente de:

  • Module:Temporada/Utils

E consome dados exclusivamente de:

  • Module:Temporada/Dados/ANO

---

Estrutura do objeto Partida

O objeto Partida contém os seguintes campos:

  • Identificação
    • id
    • ano
    • data
    • competicao
    • rodada
  • Local
    • estadio
    • localidade
  • Times
    • mandante
    • visitante
  • Placar
    • gols_mandante
    • gols_visitante
  • Autores dos gols
    • autores_mandante
    • autores_visitante
  • Flags de controle
    • wo
    • anulada
    • conta
  • Resultados calculados
    • resultado_mandante
    • resultado_visitante

---

Funções internas

linkTime(nome)

Gera link condicional para nomes de times.

  • Atlético Mineiro é exibido em negrito, sem link
  • Outros times são linkados automaticamente

---

linkarAutores(lista)

Processa lista de autores de gols:

  • Remove contagem do nome do link
  • Preserva sufixos como "(2)", "(3)"
  • Retorna lista formatada e linkada

---

placarExibido(p)

Determina o placar exibido:

  • Considera partidas decididas por W.O
  • Retorna formato padrão "x" quando aplicável

---

renderLinha(p)

Renderiza uma linha completa da tabela de partidas.

Inclui:

  • Súmula
  • Competição
  • Rodada
  • Data
  • Autores dos gols
  • Mandante e visitante
  • Placar com classe CSS
  • Estádio ou localidade

---

Funções públicas

criar(args)

Cria o objeto lógico Partida a partir dos dados brutos.

  • Normaliza parâmetros
  • Aplica validações defensivas
  • Calcula resultados automaticamente

Predefinição:Nota

---

resultadoDoAtletico(p)

Retorna o resultado do Atlético na partida.

  • Identifica se o clube foi mandante ou visitante
  • Retorna V, E ou D

---

renderLista(frame)

Renderiza a lista completa de partidas de uma temporada.

  • Parâmetro
    • frame.args.ano
  • Fluxo
  1. Carrega dados do ano
  2. Cria objetos Partida
  3. Renderiza cada linha
  4. Retorna tabela consolidada

---

obterPorAno(ano)

Obtém a lista de partidas de uma temporada específica.

  • Parâmetro
    • ano
  • Retorno
    • Lista de partidas ou lista vazia

Predefinição:Aviso

---

Regras de validação

  • Partidas anuladas não são contabilizadas
  • Partidas marcadas como não contabilizáveis são ignoradas
  • Campos vazios recebem valores padrão
  • Erros são tratados sem interromper renderização

---

Boas práticas e manutenção

  • Não duplicar lógica de normalização (usar Utils)
  • Manter consistência entre modelo lógico e renderização
  • Alterações no objeto Partida exigem revisão em:
    • Estatísticas
    • Campanhas
    • Templates
  • Novos campos devem ser documentados

---

Páginas relacionadas

---

Histórico

  • Módulo criado para padronizar o tratamento de partidas
  • Centraliza regras de renderização e normalização
  • Projetado para escalabilidade por temporada

-- Module:Temporada/Partidas
-- Modelo lógico + renderização de partidas
-- Projeto Wiki Galo Digital

local Utils = require("Module:Temporada/Utils")

local Partidas = {}

--------------------------------------------------
-- Cria e normaliza uma partida
--------------------------------------------------
function Partidas.criar(args)
	local p = {}

	p.id = Utils.normalizeString(args.id)
	p.data = Utils.normalizeString(args.data)
	p.competicao = Utils.normalizeString(args.competicao)
	p.rodada = Utils.normalizeString(args.rodada)
	p.estadio = Utils.normalizeString(args.estadio)

	p["local"] = Utils.normalizeString(args["local"])
	p.localidade = p["local"]

	p.mandante = Utils.normalizeString(args.mandante)
	p.visitante = Utils.normalizeString(args.visitante)

	p.gols_mandante = Utils.toNumber(args.gols_mandante)
	p.gols_visitante = Utils.toNumber(args.gols_visitante)

	p.autores_mandante = Utils.normalizeString(args.gols_mandante_autores)
	p.autores_visitante = Utils.normalizeString(args.gols_visitante_autores)

	p.wo = Utils.toBoolean(args.wo)
	p.anulada = Utils.toBoolean(args.anulada)
	p.conta = not Utils.toBoolean(args.nao_conta)

	p.resultado_mandante = Utils.resultadoPartida(p.gols_mandante, p.gols_visitante)
	p.resultado_visitante = Utils.resultadoPartida(p.gols_visitante, p.gols_mandante)

	if p.anulada or not p.conta then
		p.valida = false
	else
		p.valida = true
	end

	return p
end

--------------------------------------------------
-- Identifica lado do Atlético
--------------------------------------------------
function Partidas.ladoDoAtletico(p)
	if Utils.isAtletico(p.mandante) then
		return "mandante"
	elseif Utils.isAtletico(p.visitante) then
		return "visitante"
	end
	return nil
end

--------------------------------------------------
-- Resultado do Atlético
--------------------------------------------------
function Partidas.resultadoDoAtletico(p)
	local lado = Partidas.ladoDoAtletico(p)
	if lado == "mandante" then
		return p.resultado_mandante
	elseif lado == "visitante" then
		return p.resultado_visitante
	end
	return nil
end

--------------------------------------------------
-- Linka lista de autores
--------------------------------------------------
local function linkarAutores(lista)
	if lista == "" then
		return ""
	end

	local autores = mw.text.split(lista, ";")
	for i, nome in ipairs(autores) do
		nome = mw.text.trim(nome)
		autores[i] = "[[" .. nome .. "]]"
	end

	return table.concat(autores, "; ")
end

--------------------------------------------------
-- Renderização da linha
--------------------------------------------------
function Partidas.render(frame)
	local args = frame.args
	local p = Partidas.criar(args)

	local resultadoAtl = Partidas.resultadoDoAtletico(p)
	local cssPlacar = Utils.cssResultado(resultadoAtl)

	local mandante = "[[" .. p.mandante .. "]]"
	local visitante = "[[" .. p.visitante .. "]]"

	if Utils.isAtletico(p.mandante) then
		mandante = "'''" .. mandante .. "'''"
	end
	if Utils.isAtletico(p.visitante) then
		visitante = "'''" .. visitante .. "'''"
	end

	local autoresMand = ""
	if p.gols_mandante == 0 then
		autoresMand = "Não houve"
	elseif p.autores_mandante ~= "" then
		autoresMand = linkarAutores(p.autores_mandante)
	else
		autoresMand = "Não identificado"
	end

	local autoresVisit = ""
	if p.gols_visitante == 0 then
		autoresVisit = "Não houve"
	elseif p.autores_visitante ~= "" then
		autoresVisit = linkarAutores(p.autores_visitante)
	else
		autoresVisit = "Não identificado"
	end

	local linkSumula = "[[" .. p.id .. "]]"
	local linkPlacar = "[[" .. p.id .. "|" .. p.gols_mandante .. " x " .. p.gols_visitante .. "]]"

	return string.format([[
|-
| %s
| %s
| %s
| %s
| %s
| %s
| class="%s gd-score" | %s
| %s
| %s
| %s
]],
		linkSumula,
		p.competicao ~= "" and p.competicao or "-",
		p.rodada ~= "" and p.rodada or "-",
		p.data ~= "" and p.data or "-",
		autoresMand,
		mandante,
		cssPlacar,
		linkPlacar,
		visitante,
		autoresVisit,
		p.estadio ~= "" and p.estadio or p.localidade or "-"
	)
end

return Partidas