README - API Sinerji
Bem-vindo à documentação da API Sinerji.
 Esta API foi desenvolvida para fornecer funcionalidades relacionadas a usuários, endereços e animais de estimação (pets). Ela permite operações básicas de CRUD (Criar, Ler, Atualizar, Excluir) para cada uma dessas entidades.

##Informações técnicas
A aplicação está configurada para banco de dados PostgreSQL, certifique-se de configurar o banco de dados antes de rodar a api.
As configurações de endereço de banco de dados, usuário e senha estão no arquivo Persistence.XML
As tabelas são mapeadas e geradas no banco de dados automaticamente após a primeira vez que a aplicação rodar no ambiente.
Modificações de estrutura das entidades também seram mapeadas automaticamente ao banco.
A porta padrão da aplicação é 8080
Sua arquitetura envolve o usa da aplicação com páginas JSF porém aind estão em desenvolvimento.

##Teste de aplicação
A API possui um diretório de testes em que todas as funções principais da categoria "Service" de todas as entidades são testadas.
Recomendo a execução de todos os testes.

## Endpoints

A API Sinerji oferece os seguintes endpoints:

### Usuários (/user)

- **GET /user**: Retorna todos os usuários cadastrados.
- **GET /user?id={id}**: Retorna um usuário específico com o ID fornecido.
- **POST /user**: Adiciona um novo usuário.
- **PUT /user**: Atualiza um usuário existente.
- **DELETE /user**: Exclui um usuário existente.

### Endereços (/address)

- **GET /address**: Retorna todos os endereços cadastrados.
- **GET /address?id={id}**: Retorna um endereço específico com o ID fornecido.
- **POST /address**: Adiciona um novo endereço.
- **PUT /address**: Atualiza um endereço existente.
- **DELETE /address**: Exclui um endereço existente.

### Pets (/pet)

- **GET /pet**: Retorna todos os pets cadastrados.
- **GET /pet?id={id}**: Retorna um pet específico com o ID fornecido.
- **POST /pet**: Adiciona um novo pet.
- **PUT /pet**: Atualiza um pet existente.
- **DELETE /pet**: Exclui um pet existente.

## Parâmetros

- **id**: O ID do usuário, endereço ou pet desejado para operações de busca, atualização ou exclusão.

## Corpo da Requisição

- **POST /user**:
{
  "id": 4,
  "name": "Janiany",
  "age": 22,
  "phone": "11954178260",
  "gender": "FEMALE"
}

- **POST /address**:
{
  "street": "123 Main Street",
  "state": "California",
  "city": "Los Angeles",
  "number": "456",
  "additional": "Apartment 789",
  "zipCode": "90001",
  "country": "USA"
}

- **POST /pet**:
{
  "type": "DOG",
  "name": "Latido",
  "birthDate": "2020-01-15T00:00:00Z",
  "ownerId": 4,
  "additionalInformation": "Saudável"
}

## Respostas

- **GET /user**:
[{
        "id": 4,
        "name": "Janiany",
        "age": 22,
        "phone": "11954178260",
        "gender": "FEMALE"
    },
    {
        "id": 5,
        "name": "Jeferson",
        "age": 69,
        "phone": "11991275193",
        "gender": "MALE"
    }
]

- **GET /address**:
[
    {
        "id": 2,
        "user": {
            "id": 4,
            "name": "Janiany",
            "age": 22,
            "phone": "11954178260",
            "gender": "FEMALE"
        },
        "street": "123 Main Street",
        "state": "California",
        "city": "Los Angeles",
        "number": "456",
        "additional": "Apartment 789",
        "zipCode": "90001",
        "country": "USA"
    },
    {
        "id": 3,
        "user": {
            "id": 5,
            "name": "Jeferson",
            "age": 69,
            "phone": "11991275193",
            "gender": "MALE"
        },
        "city": "São Bernardo",
        "number": "45",
        "additional": "Apartamento 124",
        "country": "Brasil"
    }
]

- **GET /pet**:
[
{
        "id": 4,
        "type": "CAT",
        "name": "Miado",
        "birthDate": "Dec 24, 2022, 9:00:00 PM",
        "owner": {
            "id": 8,
            "name": "John Doe",
            "age": 25,
            "phone": "123456789",
            "gender": "MALE"
        },
        "additionalInformation": "Animal com problema de locomoção"
    },
    {
        "id": 5,
        "type": "DOG",
        "name": "Latido",
        "birthDate": "Jun 10, 2020, 9:00:00 PM",
        "owner": {
            "id": 4,
            "name": "Janiany",
            "age": 22,
            "phone": "11954178260",
            "gender": "FEMALE"
        },
        "additionalInformation": "Saudável"
    }
]

## Dados do Projeto

- **Java Version**: Java 8
- **Servlet API Version**: 4.0.1
- **CDI API Version**: 2.0.SP1
- **Jakarta Persistence API Version**: 3.1.0
- **Hibernate Core Version**: 5.6.15.Final
- **Hibernate Entity Manager Version**: 5.3.6.Final
- **PostgreSQL Driver Version**: 42.6.2
- **Java EE API Version**: 7.0
- **Gson Version**: 2.10.1
- **JUnit Version**: 3.8.1
- **JUnit Jupiter API Version**: 5.10.2
- **Mockito Core Version**: 5.7.0


## Autor

Esta API foi desenvolvida por [Luiz Henrique Netto](https://www.linkedin.com/in/luiz-henrique-netto-5b852923a/).

## Contato

Para mais informações, entre em contato através do email: lh.netto11@gmail.com