Skip to content

spindart/tecnofit

Repository files navigation

Tecnofit API

API para gerenciamento de recordes pessoais de movimentos (exercícios).

Funcionalidades

  • Consulta de ranking por movimento
  • Paginação de resultados
  • Cache com fallback em memória
  • Ordenação por valor (peso) do recorde

Pré-requisitos

  • PHP (versão 8 ou superior)
  • Composer
  • MySQL ou outro banco de dados compatível

Instalação

  1. Clone o repositório:

    git clone https://github.com/spindart/tecnofit.git
    cd tecnofit
  2. Instale as dependências:

    composer install
  3. Configure o banco de dados:

    • Crie um banco de dados no MySQL chamado tecnofit
    • Edite o arquivo config/config.php para atualizar a conexão PDO e para que funcione o phinx (migrations e seeds):
  4. Execute as migrações:

    composer migrate
  5. Popule o banco de dados com dados iniciais:

    composer seed

Uso Local

  1. Configure o banco de dados MySQL localmente

    • Crie um banco de dados chamado tecnofit
    • Configure o arquivo na pasta config/config.php com os dados para conexão PDO.
  2. Execute as migrações e seeds:

    composer migrate
    composer seed
  3. Inicie o servidor PHP:

    php -S localhost:8000 -t public
  4. Acesse:

Uso com Docker

  1. Configure o arquivo config.php em config/config.php:

    • Modifique (descomente os dados de conexão com o Docker e comente os Localhost)
  2. Inicie os containers:

    docker-compose up -d
  3. Acesse:

Endpoints Disponíveis

GET /movements/{id}/ranking

Retorna o ranking de um movimento específico, incluindo:

  • Nome do movimento
  • Lista ordenada de usuários
  • Recorde pessoal de cada usuário
  • Posição no ranking
  • Data do recorde

Exemplo de resposta:

{
    "movement": "Deadlift",
    "ranking": [
        {
            "position": 1,
            "user": "Jose",
            "value": 190.0,
            "date": "2021-01-06 00:00:00"
        },
        {
            "position": 2,
            "user": "Joao",
            "value": 180.0,
            "date": "2021-01-02 00:00:00"
        }
    ]
}

Estrutura do Projeto

.
├── config/
│   └── container.php
├── db/
│   ├── migrations/
│   └── seeds/
├── public/
│   └── index.php
├── src/
│   ├── Application/
│   ├── Domain/
│   └── Infrastructure/
└── tests/
    └── Unit/

Testes

Para executar os testes unitários:

composer test

Documentação da API

A API é documentada usando OpenAPI/Swagger. Você pode acessar a documentação de duas formas:

Ambiente Local

Ambiente Docker

Uso da API

Consultar Ranking de Movimento

GET /movements/{id}/ranking?page=1&limit=10&only_best=false

Parâmetros

  • id (obrigatório): ID do movimento
  • page (opcional): Página atual (padrão: 1)
  • limit (opcional): Itens por página (padrão: 10)
  • only_best (opcional): Retorna apenas o melhor resultado de cada usuário (default: true)

Exemplo de Resposta

{
    "movement": "Deadlift",
    "ranking": [
        {
            "position": 1,
            "user": "John",
            "value": 200.0,
            "date": "2021-01-01 00:00:00",
            "user_id": 4
        }
    ],
    "pagination": {
        "current_page": 1,
        "per_page": 10,
        "total_items": 50,
        "total_pages": 5
    }
}

Tecnologias

  • PHP 8.0+
  • MySQL 5.7
  • Redis
  • Docker
  • Slim Framework
  • PHPUnit

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published