Módulo:Temporada/Partidas: mudanças entre as edições

De Clube Atletico Mineiro - Enciclopedia Galo Digital
Ir para navegação Ir para pesquisar
Sem resumo de edição
Sem resumo de edição
Linha 1: Linha 1:
-- Module:Temporada/Partidas
-- Module:Temporada/Partidas
-- Modelo lógico de partidas de uma temporada
-- Modelo lógico + renderização de partidas
-- Não gera saída visual direta
-- Depende de Module:Temporada/Utils
-- Projeto Wiki Galo Digital
-- Projeto Wiki Galo Digital


Linha 13: Linha 11:
--------------------------------------------------
--------------------------------------------------
function Partidas.criar(args)
function Partidas.criar(args)
local partida = {}
local p = {}


-- Identificação básica
p.id = Utils.normalizeString(args.id)
partida.id = Utils.normalizeString(args.id)
p.data = Utils.normalizeString(args.data)
partida.data = Utils.normalizeString(args.data)
p.competicao = Utils.normalizeString(args.competicao)
partida.competicao = Utils.normalizeString(args.competicao)
p.rodada = Utils.normalizeString(args.rodada)
partida.rodada = Utils.normalizeString(args.rodada)
p.estadio = Utils.normalizeString(args.estadio)
partida.estadio = Utils.normalizeString(args.estadio)


-- Campo "local" (palavra reservada no Lua)
p["local"] = Utils.normalizeString(args["local"])
partida["local"] = Utils.normalizeString(args["local"])
p.localidade = p["local"]
partida.localidade = partida["local"]


-- Times
p.mandante = Utils.normalizeString(args.mandante)
partida.mandante = Utils.normalizeString(args.mandante)
p.visitante = Utils.normalizeString(args.visitante)
partida.visitante = Utils.normalizeString(args.visitante)


-- Gols
p.gols_mandante = Utils.toNumber(args.gols_mandante)
partida.gols_mandante = Utils.toNumber(args.gols_mandante)
p.gols_visitante = Utils.toNumber(args.gols_visitante)
partida.gols_visitante = Utils.toNumber(args.gols_visitante)


-- Flags históricas
p.autores_mandante = Utils.normalizeString(args.gols_mandante_autores)
partida.wo = Utils.toBoolean(args.wo)
p.autores_visitante = Utils.normalizeString(args.gols_visitante_autores)
partida.anulada = Utils.toBoolean(args.anulada)
partida.conta = not Utils.toBoolean(args.nao_conta)


-- Resultado padrão
p.wo = Utils.toBoolean(args.wo)
partida.resultado_mandante = Utils.resultadoPartida(
p.anulada = Utils.toBoolean(args.anulada)
partida.gols_mandante,
p.conta = not Utils.toBoolean(args.nao_conta)
partida.gols_visitante
)


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


-- Classe CSS
if p.anulada or not p.conta then
partida.css_mandante = Utils.cssResultado(partida.resultado_mandante)
p.valida = false
partida.css_visitante = Utils.cssResultado(partida.resultado_visitante)
 
-- Pontos (padrão 3-1-0)
partida.pontos_mandante = Utils.pontosResultado(partida.resultado_mandante)
partida.pontos_visitante = Utils.pontosResultado(partida.resultado_visitante)
 
-- Ajustes para W.O
if partida.wo then
-- W.O não gera gols válidos
partida.gols_mandante = 0
partida.gols_visitante = 0
end
 
-- Ajustes para partidas anuladas ou fora da estatística
if partida.anulada or not partida.conta then
partida.valida = false
partida.pontos_mandante = 0
partida.pontos_visitante = 0
else
else
partida.valida = true
p.valida = true
end
end


return partida
return p
end
end


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


--------------------------------------------------
--------------------------------------------------
-- Retorna gols do Atlético na partida
-- Resultado do Atlético
--------------------------------------------------
--------------------------------------------------
function Partidas.golsDoAtletico(partida)
function Partidas.resultadoDoAtletico(p)
local lado = Partidas.ladoDoAtletico(partida)
local lado = Partidas.ladoDoAtletico(p)
 
if lado == "mandante" then
if lado == "mandante" then
return partida.gols_mandante
return p.resultado_mandante
elseif lado == "visitante" then
elseif lado == "visitante" then
return partida.gols_visitante
return p.resultado_visitante
end
end
 
return nil
return 0
end
end


--------------------------------------------------
--------------------------------------------------
-- Retorna gols sofridos pelo Atlético
-- Linka lista de autores
--------------------------------------------------
--------------------------------------------------
function Partidas.golsSofridos(partida)
local function linkarAutores(lista)
local lado = Partidas.ladoDoAtletico(partida)
if lista == "" then
 
return ""
if lado == "mandante" then
return partida.gols_visitante
elseif lado == "visitante" then
return partida.gols_mandante
end
end


return 0
local autores = mw.text.split(lista, ";")
end
for i, nome in ipairs(autores) do
 
nome = mw.text.trim(nome)
--------------------------------------------------
autores[i] = "[[" .. nome .. "]]"
-- Retorna resultado do Atlético (V/E/D)
--------------------------------------------------
function Partidas.resultadoDoAtletico(partida)
local lado = Partidas.ladoDoAtletico(partida)
 
if lado == "mandante" then
return partida.resultado_mandante
elseif lado == "visitante" then
return partida.resultado_visitante
end
end


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


--------------------------------------------------
--------------------------------------------------
-- Renderiza uma linha da tabela de partidas
-- Renderização da linha
--------------------------------------------------
--------------------------------------------------
function Partidas.render(frame)
function Partidas.render(frame)
local args = frame.args
local args = frame.args
local partida = Partidas.criar(args)
local p = Partidas.criar(args)
 
local resultadoAtl = Partidas.resultadoDoAtletico(p)
local cssPlacar = Utils.cssResultado(resultadoAtl)


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


-- Negrito automático no Atlético
if Utils.isAtletico(p.mandante) then
if Utils.isAtletico(mandante) then
mandante = "'''" .. mandante .. "'''"
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
end


if Utils.isAtletico(visitante) then
local autoresVisit = ""
visitante = "'''" .. visitante .. "'''"
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
end


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


return string.format([[
return string.format([[
|- class="%s"
|-
| %s
| %s
| %s
| %s
Linha 170: Linha 143:
| %s
| %s
]],
]],
partida.css_mandante,
linkSumula,
args.id or "-",
p.competicao ~= "" and p.competicao or "-",
partida.competicao or "-",
p.rodada ~= "" and p.rodada or "-",
partida.rodada or "-",
p.data ~= "" and p.data or "-",
partida.data or "-",
autoresMand,
args.gols_mandante_autores or "Não identificado",
mandante,
mandante,
partida.css_mandante,
cssPlacar,
placar,
linkPlacar,
visitante,
visitante,
args.gols_visitante_autores or "Não houve",
autoresVisit,
partida.estadio ~= "" and partida.estadio or partida.localidade or "-"
p.estadio ~= "" and p.estadio or p.localidade or "-"
)
)
end
end


return Partidas
return Partidas

Edição das 16h27min de 24 de janeiro de 2026

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