---
# System prepended metadata

title: Requisitos da Tese
tags: [DISS]

---

# Requisitos da Tese
###### tags: `DISS`

## Infraestrutura atual

O schema de uma empresa tem um conjunto de tabelas base, e depois tabelas que são criadas dinamicamente quando certos módulos são ativos:
* payroll
* accounting
* etc (preciso de investigar ao certo quais são os módulos e tabelas que são criadas)

No caso da contabilidade, é criado um schema por cada exercício fiscal, cada um com um conjunto de tabelas

A sharding function é uma função que é gerada sempre que se fazem alterações à estrutura da base de dados, e que é usada para criar novas empresas


## Possível abordagem

Uma possível abordagem seria criar um schema "base" e usá-lo como referência para comparar com outros e detetar alterações. A partir dessas differenças, haveria a opção de gerar uma migração já com os comandos necessários para o "up" e "down". Esta abordagem seria capaz de lidar com alterações ao esquema da base de dados, mas não lidaria com alterações a funções.

Para lidar com esse cenário, uma possível abordagem seria criar uma tabela (no esquema de cada empresa?) que serviria para version control de cada função, para saber qual é por exemplo o commit com a versão mais recente da função. Esta tabela só seria modificada pela ferramenta a desenvolver. Migrações para esta ferramenta seriam potencialmente escritas em JS (neste momento é usado Ruby para o ActiveRecord, e ser usada uma linguagem de scripting tem inúmeras vantagens)

<center>
<img src="https://i.imgur.com/cT4Yp3O.png">
</center>
<center>System Architecture</center>
<br>


Esta seria a arquitetura do sistema, em que o "Core" irá conter toda a lógica da ferramenta. Será desenvolvida uma command line tool para os programadores da Cloudware poderem usar a ferramenta. E finalmente será também disponibilizada uma API a ser usada em projetos futuros (rever um bocado como escrever esta parte a falar do Casper Editor)


## Casper

O Casper é uma aplicação open-source desenvolvida e usada pelos developers da Cloudware para configurar o seu ambiente de desenvolvimento. A ferramenta a desenvolver seria adicionada a esta aplicação, e portanto isto trás algumas possíveis limitações das linguagens a usar para desenvolver a ferramenta (este ponto terá de ser discutido com mais detalhe com os developers encarregues do Casper)





