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 + renderização | -- Modelo lógico + renderização das partidas da temporada | ||
-- Projeto Wiki Galo Digital | -- Projeto Wiki Galo Digital | ||
-- | -- | ||
-- Etapas cobertas: | |||
-- 2.x – Partidas | |||
-- 3.4 – Registro global para estatísticas | |||
-- | |||
-- Dependências: | |||
-- - Module:Temporada/Utils | |||
local Utils = require("Module:Temporada/Utils") | local Utils = require("Module:Temporada/Utils") | ||
| Linha 8: | Linha 14: | ||
-------------------------------------------------- | -------------------------------------------------- | ||
-- | -- REGISTRO GLOBAL DE PARTIDAS POR TEMPORADA | ||
-------------------------------------------------- | |||
Partidas._registro = Partidas._registro or {} | |||
function Partidas.registrar(ano, args) | |||
if not ano or ano == "" then | |||
return | |||
end | |||
Partidas._registro[ano] = Partidas._registro[ano] or {} | |||
table.insert(Partidas._registro[ano], args) | |||
end | |||
function Partidas.obterPorAno(ano) | |||
return Partidas._registro[ano] or {} | |||
end | |||
-------------------------------------------------- | |||
-- LINK CONDICIONAL DE TIME (Atlético sem link) | |||
-------------------------------------------------- | -------------------------------------------------- | ||
local function linkTime(nome) | local function linkTime(nome) | ||
| Linha 18: | Linha 42: | ||
-------------------------------------------------- | -------------------------------------------------- | ||
-- | -- LINKA AUTORES REMOVENDO CONTAGEM DO LINK | ||
-------------------------------------------------- | -------------------------------------------------- | ||
local function linkarAutores(lista) | local function linkarAutores(lista) | ||
if not lista or lista == "" then | if not lista or lista == "" then | ||
return "Não identificado" | return "Não identificado" | ||
end | |||
if lista == "Não houve" then | |||
return "Não houve" | |||
end | end | ||
| Linha 43: | Linha 71: | ||
-------------------------------------------------- | -------------------------------------------------- | ||
-- | -- CRIA OBJETO PARTIDA (MODELO LÓGICO) | ||
-------------------------------------------------- | -------------------------------------------------- | ||
function Partidas.criar(args) | function Partidas.criar(args) | ||
| Linha 49: | Linha 77: | ||
p.id = Utils.normalizeString(args.id) | p.id = Utils.normalizeString(args.id) | ||
p.ano = Utils.normalizeString(args.ano) | |||
p.data = Utils.normalizeString(args.data) | p.data = Utils.normalizeString(args.data) | ||
p.competicao = Utils.normalizeString(args.competicao) | p.competicao = Utils.normalizeString(args.competicao) | ||
p.rodada = Utils.normalizeString(args.rodada) | p.rodada = Utils.normalizeString(args.rodada) | ||
p.estadio = Utils.normalizeString(args.estadio) | p.estadio = Utils.normalizeString(args.estadio) | ||
p.localidade = Utils.normalizeString(args["local"]) | |||
p.mandante = Utils.normalizeString(args.mandante) | p.mandante = Utils.normalizeString(args.mandante) | ||
| Linha 77: | Linha 104: | ||
-------------------------------------------------- | -------------------------------------------------- | ||
-- | -- RESULTADO DO ATLÉTICO (V/E/D) | ||
-------------------------------------------------- | -------------------------------------------------- | ||
function Partidas.resultadoDoAtletico(p) | function Partidas.resultadoDoAtletico(p) | ||
| Linha 89: | Linha 116: | ||
-------------------------------------------------- | -------------------------------------------------- | ||
-- | -- LADO DO ATLÉTICO (mandante/visitante) | ||
-------------------------------------------------- | |||
function Partidas.ladoDoAtletico(p) | |||
if Utils.isAtletico(p.mandante) then | |||
return "mandante" | |||
elseif Utils.isAtletico(p.visitante) then | |||
return "visitante" | |||
end | |||
return nil | |||
end | |||
-------------------------------------------------- | |||
-- PLACAR EXIBIDO (CONSIDERA W.O) | |||
-------------------------------------------------- | -------------------------------------------------- | ||
local function placarExibido(p) | local function placarExibido(p) | ||
| Linha 103: | Linha 142: | ||
-------------------------------------------------- | -------------------------------------------------- | ||
-- | -- RENDERIZAÇÃO DA LINHA DA TABELA | ||
-------------------------------------------------- | -------------------------------------------------- | ||
function Partidas.render(frame) | function Partidas.render(frame) | ||
local args = frame.args | local args = frame.args | ||
-- REGISTRA PARTIDA PARA ESTATÍSTICAS (ETAPA 3.4) | |||
Partidas.registrar(args.ano, args) | |||
local p = Partidas.criar(args) | local p = Partidas.criar(args) | ||
local resultadoAtl = Partidas.resultadoDoAtletico(p) | local resultadoAtl = Partidas.resultadoDoAtletico(p) | ||
local cssPlacar = Utils.cssResultado(resultadoAtl) | local cssPlacar = Utils.cssResultado(resultadoAtl) | ||
-- | -- AUTORES | ||
local autoresMand | local autoresMand = (p.gols_mandante == 0) and "Não houve" | ||
or linkarAutores(p.autores_mandante) | |||
local autoresVisit | local autoresVisit = (p.gols_visitante == 0) and "Não houve" | ||
or linkarAutores(p.autores_visitante) | |||
-- | -- PLACAR + SÚMULA | ||
local textoPlacar = placarExibido(p) | local textoPlacar = placarExibido(p) | ||
| Linha 140: | Linha 174: | ||
local linkPlacar = "[[" .. sumulaTitle .. "|" .. textoPlacar .. "]]" | local linkPlacar = "[[" .. sumulaTitle .. "|" .. textoPlacar .. "]]" | ||
local linkCompeticao = "[[" .. p.competicao .. "]]" | -- COMPETIÇÃO E ESTÁDIO | ||
local estadioNome = | local linkCompeticao = p.competicao ~= "" and "[[" .. p.competicao .. "]]" or "-" | ||
local linkEstadio = "[[" .. estadioNome .. "]]" | local estadioNome = p.estadio ~= "" and p.estadio or p.localidade | ||
local linkEstadio = estadioNome ~= "" and "[[" .. estadioNome .. "]]" or "-" | |||
return string.format([[ | return string.format([[ | ||
|- | |- | ||
| %s | | %s | ||
| Linha 168: | Linha 203: | ||
autoresVisit, | autoresVisit, | ||
linkEstadio | linkEstadio | ||
) | ) | ||
end | end | ||
return Partidas | return Partidas | ||
Edição das 19h59min 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 das partidas da temporada
-- Projeto Wiki Galo Digital
--
-- Etapas cobertas:
-- 2.x – Partidas
-- 3.4 – Registro global para estatísticas
--
-- Dependências:
-- - Module:Temporada/Utils
local Utils = require("Module:Temporada/Utils")
local Partidas = {}
--------------------------------------------------
-- REGISTRO GLOBAL DE PARTIDAS POR TEMPORADA
--------------------------------------------------
Partidas._registro = Partidas._registro or {}
function Partidas.registrar(ano, args)
if not ano or ano == "" then
return
end
Partidas._registro[ano] = Partidas._registro[ano] or {}
table.insert(Partidas._registro[ano], args)
end
function Partidas.obterPorAno(ano)
return Partidas._registro[ano] or {}
end
--------------------------------------------------
-- LINK CONDICIONAL DE TIME (Atlético sem link)
--------------------------------------------------
local function linkTime(nome)
if Utils.isAtletico(nome) then
return "'''" .. nome .. "'''"
end
return "[[" .. nome .. "]]"
end
--------------------------------------------------
-- LINKA AUTORES REMOVENDO CONTAGEM DO LINK
--------------------------------------------------
local function linkarAutores(lista)
if not lista or lista == "" then
return "Não identificado"
end
if lista == "Não houve" then
return "Não houve"
end
local autores = mw.text.split(lista, ";")
for i, raw in ipairs(autores) do
raw = mw.text.trim(raw)
local nome = mw.ustring.match(raw, "^(.-)%s*%(") or raw
local sufixo = mw.ustring.match(raw, "%((.-)%)")
if sufixo then
autores[i] = "[[" .. nome .. "]] (" .. sufixo .. ")"
else
autores[i] = "[[" .. nome .. "]]"
end
end
return table.concat(autores, "; ")
end
--------------------------------------------------
-- CRIA OBJETO PARTIDA (MODELO LÓGICO)
--------------------------------------------------
function Partidas.criar(args)
local p = {}
p.id = Utils.normalizeString(args.id)
p.ano = Utils.normalizeString(args.ano)
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.localidade = Utils.normalizeString(args["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)
return p
end
--------------------------------------------------
-- RESULTADO DO ATLÉTICO (V/E/D)
--------------------------------------------------
function Partidas.resultadoDoAtletico(p)
if Utils.isAtletico(p.mandante) then
return p.resultado_mandante
elseif Utils.isAtletico(p.visitante) then
return p.resultado_visitante
end
return nil
end
--------------------------------------------------
-- LADO DO ATLÉTICO (mandante/visitante)
--------------------------------------------------
function Partidas.ladoDoAtletico(p)
if Utils.isAtletico(p.mandante) then
return "mandante"
elseif Utils.isAtletico(p.visitante) then
return "visitante"
end
return nil
end
--------------------------------------------------
-- PLACAR EXIBIDO (CONSIDERA W.O)
--------------------------------------------------
local function placarExibido(p)
if p.wo then
if Utils.isAtletico(p.mandante) then
return "O x W"
elseif Utils.isAtletico(p.visitante) then
return "W x O"
end
end
return p.gols_mandante .. " x " .. p.gols_visitante
end
--------------------------------------------------
-- RENDERIZAÇÃO DA LINHA DA TABELA
--------------------------------------------------
function Partidas.render(frame)
local args = frame.args
-- REGISTRA PARTIDA PARA ESTATÍSTICAS (ETAPA 3.4)
Partidas.registrar(args.ano, args)
local p = Partidas.criar(args)
local resultadoAtl = Partidas.resultadoDoAtletico(p)
local cssPlacar = Utils.cssResultado(resultadoAtl)
-- AUTORES
local autoresMand = (p.gols_mandante == 0) and "Não houve"
or linkarAutores(p.autores_mandante)
local autoresVisit = (p.gols_visitante == 0) and "Não houve"
or linkarAutores(p.autores_visitante)
-- PLACAR + SÚMULA
local textoPlacar = placarExibido(p)
local sumulaTitle = table.concat({
p.id,
p.mandante,
textoPlacar,
p.visitante
}, "_"):gsub(" ", "_")
local linkSumula = "[[" .. sumulaTitle .. "|" .. p.id .. "]]"
local linkPlacar = "[[" .. sumulaTitle .. "|" .. textoPlacar .. "]]"
-- COMPETIÇÃO E ESTÁDIO
local linkCompeticao = p.competicao ~= "" and "[[" .. p.competicao .. "]]" or "-"
local estadioNome = p.estadio ~= "" and p.estadio or p.localidade
local linkEstadio = estadioNome ~= "" and "[[" .. estadioNome .. "]]" or "-"
return string.format([[
|-
| %s
| %s
| %s
| %s
| %s
| %s
| class="%s gd-score" | %s
| %s
| %s
| class="gd-stadium" | %s
]],
linkSumula,
linkCompeticao,
p.rodada ~= "" and p.rodada or "-",
p.data ~= "" and p.data or "-",
autoresMand,
linkTime(p.mandante),
cssPlacar,
linkPlacar,
linkTime(p.visitante),
autoresVisit,
linkEstadio
)
end
return Partidas