Módulo:Temporada/Partidas: mudanças entre as edições
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 | -- Modelo lógico + renderização de partidas | ||
-- Projeto Wiki Galo Digital | -- Projeto Wiki Galo Digital | ||
| Linha 13: | Linha 11: | ||
-------------------------------------------------- | -------------------------------------------------- | ||
function Partidas.criar(args) | function Partidas.criar(args) | ||
local | 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 | |||
if | |||
else | else | ||
p.valida = true | |||
end | end | ||
return | return p | ||
end | end | ||
-------------------------------------------------- | -------------------------------------------------- | ||
-- | -- Identifica lado do Atlético | ||
-------------------------------------------------- | -------------------------------------------------- | ||
function Partidas.ladoDoAtletico( | function Partidas.ladoDoAtletico(p) | ||
if Utils.isAtletico( | if Utils.isAtletico(p.mandante) then | ||
return "mandante" | return "mandante" | ||
elseif Utils.isAtletico( | elseif Utils.isAtletico(p.visitante) then | ||
return "visitante" | return "visitante" | ||
end | end | ||
return nil | return nil | ||
end | end | ||
-------------------------------------------------- | -------------------------------------------------- | ||
-- | -- Resultado do Atlético | ||
-------------------------------------------------- | -------------------------------------------------- | ||
function Partidas. | function Partidas.resultadoDoAtletico(p) | ||
local lado = Partidas.ladoDoAtletico( | local lado = Partidas.ladoDoAtletico(p) | ||
if lado == "mandante" then | if lado == "mandante" then | ||
return | return p.resultado_mandante | ||
elseif lado == "visitante" then | elseif lado == "visitante" then | ||
return | return p.resultado_visitante | ||
end | end | ||
return nil | |||
return | |||
end | end | ||
-------------------------------------------------- | -------------------------------------------------- | ||
-- | -- Linka lista de autores | ||
-------------------------------------------------- | -------------------------------------------------- | ||
function | local function linkarAutores(lista) | ||
if lista == "" then | |||
return "" | |||
if | |||
return | |||
end | end | ||
local autores = mw.text.split(lista, ";") | |||
for i, nome in ipairs(autores) do | |||
nome = mw.text.trim(nome) | |||
autores[i] = "[[" .. nome .. "]]" | |||
end | end | ||
return | return table.concat(autores, "; ") | ||
end | end | ||
-------------------------------------------------- | -------------------------------------------------- | ||
-- | -- Renderização da linha | ||
-------------------------------------------------- | -------------------------------------------------- | ||
function Partidas.render(frame) | function Partidas.render(frame) | ||
local args = frame.args | local args = frame.args | ||
local | local p = Partidas.criar(args) | ||
local resultadoAtl = Partidas.resultadoDoAtletico(p) | |||
local cssPlacar = Utils.cssResultado(resultadoAtl) | |||
local mandante = | local mandante = "[[" .. p.mandante .. "]]" | ||
local visitante = | local visitante = "[[" .. p.visitante .. "]]" | ||
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 | 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 | end | ||
local | local linkSumula = "[[" .. p.id .. "]]" | ||
local linkPlacar = "[[" .. p.id .. "|" .. p.gols_mandante .. " x " .. p.gols_visitante .. "]]" | |||
return string.format([[ | return string.format([[ | ||
|- | |- | ||
| %s | | %s | ||
| %s | | %s | ||
| Linha 170: | Linha 143: | ||
| %s | | %s | ||
]], | ]], | ||
linkSumula, | |||
p.competicao ~= "" and p.competicao or "-", | |||
p.rodada ~= "" and p.rodada or "-", | |||
p.data ~= "" and p.data or "-", | |||
autoresMand, | |||
mandante, | mandante, | ||
cssPlacar, | |||
linkPlacar, | |||
visitante, | visitante, | ||
autoresVisit, | |||
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
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
---
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
idanodatacompeticaorodada
- Local
estadiolocalidade
- Times
mandantevisitante
- Placar
gols_mandantegols_visitante
- Autores dos gols
autores_mandanteautores_visitante
- Flags de controle
woanuladaconta
- Resultados calculados
resultado_mandanteresultado_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
---
resultadoDoAtletico(p)
Retorna o resultado do Atlético na partida.
- Identifica se o clube foi mandante ou visitante
- Retorna
V,EouD
---
renderLista(frame)
Renderiza a lista completa de partidas de uma temporada.
- Parâmetro
frame.args.ano
- Fluxo
- Carrega dados do ano
- Cria objetos Partida
- Renderiza cada linha
- 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
---
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
- Módulo:Temporada
- Módulo:Temporada/Utils
- Módulo:Temporada/Estatisticas
- Módulo:Temporada/Dados/1919
- Predefinição:Partida
---
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