Class: CongregaPlenum::PartiesService

Inherits:
Object
  • Object
show all
Defined in:
lib/modules/parties_service.rb,
sig/congrega_plenum.rbs

Overview

Service responsible for interacting with party endpoints. It exposes class methods that hide pagination, retries and detail lookups.

Constant Summary collapse

ITEMS_PER_PAGE =

Default page size for party listings.

Returns:

  • (Integer)
100
PROGRESS_INTERVAL =

Interval used to emit progress logs while iterating.

Returns:

  • (Integer)
20
SERVICE_TAG =

Tag prefix for structured logging.

Returns:

  • (String)
'CongregaPlenum::PartiesService'

Class Method Summary collapse

Class Method Details

.api_get(endpoint, params = {}) ⇒ payload_hash

Wraps Client#get to add service context without hiding request failures.

Parameters:

  • (String)
  • (params_hash)

Returns:

  • (payload_hash)


23
24
25
26
27
28
# File 'lib/modules/parties_service.rb', line 23

def api_get(endpoint, params = {})
  client.get(endpoint, params)
rescue StandardError => e
  log_error("Erro ao acessar API em #{endpoint}: #{e.message}")
  raise
end

.api_get_paginated(endpoint, params = {}) ⇒ payload_list

Bulk variant of api_get. Failures are propagated so consumers can abort an incomplete synchronization.

Parameters:

  • (String)
  • (params_hash)

Returns:

  • (payload_list)


32
33
34
35
36
37
# File 'lib/modules/parties_service.rb', line 32

def api_get_paginated(endpoint, params = {})
  client.get_paginated(endpoint, params)
rescue StandardError => e
  log_error("Erro paginando API em #{endpoint}: #{e.message}")
  raise
end

.clientCongregaPlenum::Client

Shared client instance configured via CongregaPlenum.configure.



18
19
20
# File 'lib/modules/parties_service.rb', line 18

def client
  @client ||= CongregaPlenum::Client.instance
end

.fetch_allArray<Hash>

Fetches every party registered na API, enriquecendo com payload detalhado.

Returns:

  • (Array<Hash>)


42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/modules/parties_service.rb', line 42

def fetch_all
  log_info('Iniciando coleta de todos os partidos')

  parties = api_get_paginated('partidos', itens: ITEMS_PER_PAGE)

  log_info("Coletamos #{parties.length} partidos da listagem")

  detailed_parties = build_detailed_parties(parties)

  log_info("Finalizamos a coleta detalhada de #{detailed_parties.length} partidos")
  detailed_parties
end

.fetch_by_id(party_id) ⇒ Hash?

Retrieves the detailed payload for a single party.

Parameters:

  • party_id (Integer)
  • (Integer)

Returns:

  • (Hash, nil)

Raises:



60
61
62
63
64
65
# File 'lib/modules/parties_service.rb', line 60

def fetch_by_id(party_id)
  log_debug("Buscando partido #{party_id}")

  response = api_get("partidos/#{party_id}")
  extract_detail(response, "partido #{party_id}")
end

.fetch_list(page: 1, items_per_page: ITEMS_PER_PAGE) ⇒ Array<Hash>

Returns a paginated list of parties, without triggering detail lookups.

Parameters:

  • page (Integer) (defaults to: 1)
  • items_per_page (Integer) (defaults to: ITEMS_PER_PAGE)
  • page: (Integer) (defaults to: 1)
  • items_per_page: (Integer) (defaults to: ITEMS_PER_PAGE)

Returns:

  • (Array<Hash>)


72
73
74
75
76
77
# File 'lib/modules/parties_service.rb', line 72

def fetch_list(page: 1, items_per_page: ITEMS_PER_PAGE)
  log_debug("Buscando lista de partidos página #{page}")

  response = api_get('partidos', pagina: page, itens: items_per_page)
  response['dados'] || []
end