# Impactos de alteração de versões das APIs Midgard
## Contextualização
Analisar como é tratado atualmente os impactos ao subir a versão da API em algum serviço, verificar se tem um checklist onde possuir todos os lugares dependentes de atualização dessa rota, um exemplo seria o atual Manual Sharing, onde temos um mapeamento de rotas que depende que as versões sejam atualizadas caso algum serviço altere sua versão.
## Pontos de Api dos serviços a verificar
Atualmente para que uma api seja atualizada alguns módulos do CRM como Opportunity fazem o uso da [rota virtual](https://gitlab.wssim.com.br/platform/heimdall/) o que facilita a atualização destes quando houver necessidade de troca de versão de outros módulos.
Em geral as versões da API ficam na variavel exportada ApiConstants [midgard/packages/midgard-components/src/Constants.js](https://gitlab.wssim.com.br/cloud/midgard/-/blob/master/packages/midgard-components/src/Constants.js)
```
const ApiVersion = {
ACCESS_CONTROL: 'v1',
ACCOUNTS: 'v4',
ADMINISTRATION: 'v10',
AGRICULTURAL: 'v7',
ANALYTICS: 'v1',
FORECAST: 'v2',
ROUTE: 'v1',
DEMAND_GENERATION: 'v2',
OPPORTUNITY: 'v7',
ATTACHMENT: 'v2',
BDD: 'v3',
BTB: 'v2',
CALENDAR: 'v4',
CAMPAIGN: 'v4',
COMMON_DATA: 'v7',
CUSTOMER: 'v11',
DOCUMENT_MANAGER: 'v1',
DOCUMENT: 'v2',
EXPENSES: 'v2',
FILE_MANAGER: 'v2',
FINANCIAL: 'v8',
INTEGRATION_HUB: 'v3',
MAPPING: 'v3',
PREFERENCE: 'v1',
PRODUCT: 'v8',
SALES: 'v13',
SERVICE: 'v5',
USER: 'v12',
VESSEL: 'v4',
TRANSFORMATION: 'v1',
BULK: 'v1',
};
```
Para o caso do **ManualSharingApi** que no momento esta utilizando o valor da versão fixo
```
const apiMapper = Object.freeze({
OPPORTUNITY: {
uri: 'v7/opportunity',
objects: [],
},
...
});
```
sugiro a alteração deste para pegar esta informação do midgard components, desta forma, caso ocorra uma atualização de versão sempre estaremos atualizados.
## Outros pontos
Este seria apenas um ponto para correção do ManualSharing, existem outros pontos no Midgard que fazem uso de constantes fixas da API para consumo nos resources destes módulos.
Isto foi feito para que não ocorra quebra do front antes de uma feature estar 100% em homologação e outros times não precisarem a cada nova atualização de serviço estarem realizando a manutenção de seus ambientes.
## Checklist ao alterar uma versão de microserviço no Midgard
- [ ] Incluir/Alterar no Heimdall, as rotas com a respectiva versão da API caso o módulo possua rotas virtuais
- [ ] Incluir/Alterar no arquivo de constantes do módulo a versão nova da API caso necessário
- [ ] Realizar testes durante e após o desenvolvimento da feature desta nova API
- [ ] Checar com outros times se é possível alterar a versão da API no arquivo de constantes de midgard-components (lembrando que todos os módulos fazem uso deste)
- [ ] Alterar aquivo Constants de midgard-components caso a feature esteja pronta para ir a produção.
- [ ] Caso esteja pronto a ir a produção apagar do arquivo de constantes do módulo a versão da API e fazer ajustes necessários nos resources para pegar a versão da API do local correto