code:
<?php

declare(strict_types=1);

/**
 * Definición de rutas y middlewares de la aplicación.
 */
return (static function () use ($app): void {
    // Agrega el subdominio al path de la ruta.
    $base_route = static function (string $path) use ($app): string {
        return rtrim($app->get('flight.base_url'), '/').$path;
    };

    // Crea una instancia del enrutador.
    $router = $app->router();

    $router->get($base_route('/'), \App\Controllers\ApiController::class.'->welcome');

    // Autenticación.
    $router->post($base_route('/v1/auth/login'), \App\Controllers\AuthController::class.'->login');

    $router->group($base_route(''), static function (\flight\net\Router $router) use ($base_route): void {
        // Autenticación del usuario de acceso.
        $router->get($base_route('/v1/auth/me'), \App\Controllers\AuthController::class.'->me');
        $router->get($base_route('/v1/auth/check'), \App\Controllers\AuthController::class.'->check');
        $router->post($base_route('/v1/auth/refresh'), \App\Controllers\AuthController::class.'->refresh');
        $router->post($base_route('/v1/auth/logout'), \App\Controllers\AuthController::class.'->logout');

        $router->group($base_route(''), static function (\flight\net\Router $router) use ($base_route): void {
            // Usuarios de acceso.
            $router->get($base_route('/v1/users'), \App\Controllers\UserController::class.'->index');
            $router->post($base_route('/v1/users'), \App\Controllers\UserController::class.'->create');
            $router->get($base_route('/v1/users/@id'), \App\Controllers\UserController::class.'->show');
            $router->put($base_route('/v1/users/@id'), \App\Controllers\UserController::class.'->update');
            $router->delete($base_route('/v1/users/@id'), \App\Controllers\UserController::class.'->delete');
        }, [\App\Middlewares\IsAdminRoleMiddleware::class]);

        // Categorías de inscripción de parejas.
        $router->get($base_route('/v1/categories/registrations'), \App\Controllers\RegistrationCategoryController::class.'->index');
        $router->get($base_route('/v1/categories/registrations/@id'), \App\Controllers\RegistrationCategoryController::class.'->show');
        $router->get($base_route('/v1/categories/registrations/@id/groups'), \App\Controllers\RegistrationCategoryController::class.'->groups');
        $router->get($base_route('/v1/categories/registrations/@id/ranking'), \App\Controllers\RegistrationCategoryController::class.'->ranking');

        // Jugadores.
        $router->get($base_route('/v1/players'), \App\Controllers\PlayerController::class.'->index');
        $router->post($base_route('/v1/players'), \App\Controllers\PlayerController::class.'->create')
            ->addMiddleware(\App\Middlewares\WritePermissionMiddleware::class);
        $router->get($base_route('/v1/players/@id'), \App\Controllers\PlayerController::class.'->show');
        $router->get($base_route('/v1/players/@id/pairs'), \App\Controllers\PlayerController::class.'->pair');
        $router->get($base_route('/v1/players/@id/groups'), \App\Controllers\PlayerController::class.'->group');
        $router->put($base_route('/v1/players/@id'), \App\Controllers\PlayerController::class.'->update')
            ->addMiddleware(\App\Middlewares\WritePermissionMiddleware::class);
        $router->delete($base_route('/v1/players/@id'), \App\Controllers\PlayerController::class.'->delete')
            ->addMiddleware(\App\Middlewares\WritePermissionMiddleware::class);

        // Parejas y jugadores.
        $router->get($base_route('/v1/pairs/players'), \App\Controllers\PairPlayerController::class.'->index');
        $router->get($base_route('/v1/pairs/@id/players'), \App\Controllers\PairPlayerController::class.'->show');
        $router->post($base_route('/v1/pairs/players'), \App\Controllers\PairPlayerController::class.'->create')
            ->addMiddleware(\App\Middlewares\WritePermissionMiddleware::class);

        // Parejas.
        $router->get($base_route('/v1/pairs'), \App\Controllers\PairController::class.'->index');
        $router->post($base_route('/v1/pairs'), \App\Controllers\PairController::class.'->create')
            ->addMiddleware(\App\Middlewares\WritePermissionMiddleware::class);
        $router->get($base_route('/v1/pairs/@id'), \App\Controllers\PairController::class.'->show');
        $router->get($base_route('/v1/pairs/@id/groups'), \App\Controllers\PairController::class.'->group');
        $router->put($base_route('/v1/pairs/@id'), \App\Controllers\PairController::class.'->update')
            ->addMiddleware(\App\Middlewares\WritePermissionMiddleware::class);
        $router->delete($base_route('/v1/pairs/@id'), \App\Controllers\PairController::class.'->delete')
            ->addMiddleware(\App\Middlewares\WritePermissionMiddleware::class);

        // Grupos, partidos, parejas y jugadores.
        $router->get($base_route('/v1/groups/matches/pairs/players'), \App\Controllers\GroupMatchPairPlayerController::class.'->index');
        $router->get($base_route('/v1/groups/@id/matches/pairs/players'), \App\Controllers\GroupMatchPairPlayerController::class.'->show');

        // Grupos y partidos.
        $router->get($base_route('/v1/groups/matches'), \App\Controllers\GroupMatchController::class.'->index');
        $router->get($base_route('/v1/groups/@id/matches'), \App\Controllers\GroupMatchController::class.'->show');

        // Grupos y parejas.
        $router->get($base_route('/v1/groups/pairs'), \App\Controllers\GroupPairController::class.'->index');
        $router->get($base_route('/v1/groups/@id/pairs'), \App\Controllers\GroupPairController::class.'->show');
        $router->get($base_route('/v1/groups/@id/pairs/players'), \App\Controllers\GroupPairController::class.'->players');

        // Grupos.
        $router->get($base_route('/v1/groups'), \App\Controllers\GroupController::class.'->index');
        $router->get($base_route('/v1/groups/@id'), \App\Controllers\GroupController::class.'->show');
        $router->put($base_route('/v1/groups/@id'), \App\Controllers\GroupController::class.'->update')
            ->addMiddleware(\App\Middlewares\WritePermissionMiddleware::class);
        $router->get($base_route('/v1/groups/@id/ranking'), \App\Controllers\GroupController::class.'->ranking');

        // Partidos, parejas y jugadores.
        $router->get($base_route('/v1/matches/pairs/players'), \App\Controllers\MatchPairPlayerController::class.'->index');
        $router->get($base_route('/v1/matches/@id/pairs/players'), \App\Controllers\MatchPairPlayerController::class.'->show');

        // Partidos y parejas.
        $router->get($base_route('/v1/matches/pairs'), \App\Controllers\MatchPairController::class.'->index');
        $router->get($base_route('/v1/matches/@id/pairs'), \App\Controllers\MatchPairController::class.'->show');
        $router->put($base_route('/v1/matches/@matchId/pairs/@pairId'), \App\Controllers\MatchPairController::class.'->update')
            ->addMiddleware(\App\Middlewares\WritePermissionMiddleware::class);

        // Partidos.
        $router->get($base_route('/v1/matches'), \App\Controllers\MatchController::class.'->index');
        $router->post($base_route('/v1/matches'), \App\Controllers\MatchController::class.'->create')
            ->addMiddleware(\App\Middlewares\WritePermissionMiddleware::class);
        $router->get($base_route('/v1/matches/@id'), \App\Controllers\MatchController::class.'->show');
        $router->get($base_route('/v1/matches/@id/groups'), \App\Controllers\MatchController::class.'->group');
        $router->put($base_route('/v1/matches/@id'), \App\Controllers\MatchController::class.'->update')
            ->addMiddleware(\App\Middlewares\WritePermissionMiddleware::class);
        $router->delete($base_route('/v1/matches/@id'), \App\Controllers\MatchController::class.'->delete')
            ->addMiddleware(\App\Middlewares\WritePermissionMiddleware::class);

        // Categorías de los partidos.
        $router->get($base_route('/v1/categories/matches'), \App\Controllers\MatchCategoryController::class.'->index');
        $router->get($base_route('/v1/categories/matches/@id'), \App\Controllers\MatchCategoryController::class.'->show');

        // Estatus de los partidos.
        $router->get($base_route('/v1/status/matches'), \App\Controllers\MatchStatusController::class.'->index');
        $router->get($base_route('/v1/status/matches/@id'), \App\Controllers\MatchStatusController::class.'->show');

        // Roles de los usuarios de acceso.
        $router->get($base_route('/v1/roles'), \App\Controllers\RoleController::class.'->index');
        $router->get($base_route('/v1/roles/@id'), \App\Controllers\RoleController::class.'->show');

        // Acciones de las rondas del torneo.
        $router->group($base_route(''), static function (\flight\net\Router $router) use ($base_route): void {
            $router->post($base_route('/v1/rounds/init'), \App\Controllers\RoundController::class.'->init');
            $router->post($base_route('/v1/rounds/purge/groups'), \App\Controllers\RoundController::class.'->purgeGroups');
        }, [\App\Middlewares\WritePermissionMiddleware::class]);

        // Modelo de datos.
        $router->get($base_route('/v1/analysis/profiles/@id'), App\Controllers\AnalysisController::class.'->profile');
        $router->get($base_route('/v1/analysis/heatmap'), App\Controllers\AnalysisController::class.'->heatmap');
        $router->get($base_route('/v1/analysis/parities/@id'), App\Controllers\AnalysisController::class.'->parity');
        $router->get($base_route('/v1/analysis/synergies/@id'), App\Controllers\AnalysisController::class.'->synergy');
        $router->get($base_route('/v1/analysis/comparisons/synergies'), App\Controllers\AnalysisController::class.'->compareSynergies');
        $router->get($base_route('/v1/analysis/comparisons/points'), App\Controllers\AnalysisController::class.'->comparePoints');
        $router->get($base_route('/v1/analysis/groups/@id/points'), App\Controllers\AnalysisController::class.'->groupPoints');
        $router->get($base_route('/v1/analysis/feelings'), App\Controllers\AnalysisController::class.'->feelings');
    }, [\App\Middlewares\AuthMiddleware::class, \App\Middlewares\CheckRoleMiddleware::class]);
})();


code:
<?php

/**
 * Opciones de configuración de los servicios del framework.
 */
return [
    [
        'name' => 'gump',
        'class' => \GUMP::class,
        'params' => ['en'],
    ],
];

license: mit


code:
# 🏷 / 📋 + 🎾 Comparación de puntos

Obtiene una gráfica comparativa de los puntos realizados en las categorías de inscripción.

```
[GET] /v1/analysis/comparisons/points
```

Ejemplo:

```bash
curl -X GET \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-API-KEY: API_KEY' \
  http://localhost:8080/v1/analysis/comparisons/points
```

Respuesta de la petición:

```json
{
  "data": {
    "data": [
      {
        "marker": {
          "color": "#E61357",
          "cornerradius": 10
        },
        "text": [
          "77.0",
          "77.25"
        ],
        "textposition": "auto",
        "type": "bar",
        "x": [
          "Libre",
          "50 y más"
        ],
        "y": [
          77,
          77.25
        ]
      }
    ],
    "title": "Promedio de puntos hechos por categoria",
    "x-axis": "Categoría",
    "y-axis": "Puntos promedio"
  },
  "status": 200,
  "description": "Information about the points comparison"
}
```


code:
# 🏷 / 📋 + 👫 Comparación de sinergias

Obtiene una gráfica comparativa de las sinergias de las categorías de inscripción.

```
[GET] /v1/analysis/comparisons/synergies
```

Ejemplo:

```bash
curl -X GET \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-API-KEY: API_KEY' \
  http://localhost:8080/v1/analysis/comparisons/synergies
```

Respuesta de la petición:

```json
{
  "data": {
    "data": [
      {
        "marker": {
          "color": "#E61357",
          "cornerradius": 10
        },
        "text": [
          "10.0069",
          "9.9994"
        ],
        "textposition": "auto",
        "type": "bar",
        "x": [
          "Libre",
          "50 y más"
        ],
        "y": [
          10.0069,
          9.9994
        ]
      }
    ],
    "title": "Comparativa de sinergia entre categorias",
    "x-axis": "Categoría",
    "y-axis": "Sinergia"
  },
  "status": 200,
  "description": "Information about the synergies comparison"
}
```


code:
# 👥 + 🎾 Puntos de un grupo

Obtiene una gráfica que compara los puntos realizados en un grupo.

```
[GET] /v1/analysis/groups/@id/points
```

Parámetros de la ruta:

| Parámetros | Tipo | Requerido | Descripción |
| ---------- | ---- | --------- | ----------- |
| `id` | `string` | `true` | Identificador del grupo. |

Ejemplo:

```bash
 curl -X GET \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-API-KEY: API_KEY' \
  http://localhost:8080/v1/groups/@id/points
```

Respuesta de la petición:

```json
{
  "data": {
    "data": [
      {
        "marker": {
          "color": "#3C9145",
          "cornerradius": 10
        },
        "text": [
          14,
          14,
          23,
          30
        ],
        "textposition": "auto",
        "type": "bar",
        "x": [
          "Jorge Rios-JR PAREJA DOS",
          "Ulises Medrano-Paul Solorio",
          "José Manuel Vargas-Ernesto Oñate",
          "Gerardo Martínez-Jesús Arguellas"
        ],
        "y": [
          14,
          14,
          23,
          30
        ]
      },
      {
        "marker": {
          "color": "#E61357",
          "cornerradius": 10
        },
        "text": [
          30,
          27,
          18,
          6
        ],
        "textposition": "auto",
        "type": "bar",
        "x": [
          "Jorge Rios-JR PAREJA DOS",
          "Ulises Medrano-Paul Solorio",
          "José Manuel Vargas-Ernesto Oñate",
          "Gerardo Martínez-Jesús Arguellas"
        ],
        "y": [
          30,
          27,
          18,
          6
        ]
      }
    ],
    "title": "Puntos hechos vs puntos recibidos del grupo A",
    "x-axis": "Jugadores",
    "y-axis": "Puntos"
  },
  "status": 200,
  "description": "Information about the group points"
}
```


code:
# 📊 Análisis de datos

Análisis de datos obtenidos durante el torneo.


code:
# 🏷 / 📋 + ⚖ Paridad de una categoría de inscripción

Obtiene una gráfica comparativa que describe el emparejamiento de los partidos en una categoría de inscripción.

```
[GET] /v1/analysis/parities/@id
```

Parámetros de la ruta:

| Parámetros | Tipo | Requerido | Descripción |
| ---------- | ---- | --------- | ----------- |
| `id` | `string` | `true` | Identificador de la categoría de inscripción. |

Ejemplo:

```bash
curl -X GET \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-API-KEY: API_KEY' \
  http://localhost:8080/v1/analysis/parities/@id
```

Respuesta de la petición:

```json
{
  "data": {
    "data": [
      {
        "marker": {
          "color": "#E61357",
          "cornerradius": 10
        },
        "text": [
          7.85,
          8.79,
          8.12,
          1.73,
          8.04,
          11.09,
          2.52,
          11.8
        ],
        "textposition": "auto",
        "type": "bar",
        "x": [
          "A",
          "B",
          "C",
          "D",
          "E",
          "F",
          "G",
          "H"
        ],
        "y": [
          7.85,
          8.79,
          8.12,
          1.73,
          8.04,
          11.09,
          2.52,
          11.8
        ]
      }
    ],
    "title": "¿Qué tan parejos estuvieron los grupos de la categoria Libre?",
    "x-axis": "Grupos",
    "y-axis": "Indice de paridad"
  },
  "status": 200,
  "description": "Information about the registration category parity"
}
```


code:
# ✨ Perfil de un jugador

Obtiene recomendaciones y tips para un jugador.

```
[GET] /v1/analysis/profiles/@id
```

Parámetros de la ruta:

| Parámetros | Tipo | Requerido | Descripción |
| ---------- | ---- | --------- | ----------- |
| `id` | `string` | `true` | Identificador del jugador. |

Ejemplo:

```bash
curl -X GET \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-API-KEY: API_KEY' \
  http://localhost:8080/v1/analysis/profiles/@id
```

Respuesta de la petición:

```json
{
  "data": {
    "position": "Delantero. Aprovecha tu velocidad.",
    "priority": "Priorizar la técnica de golpe y desplazamientos (visión de juego).",
    "workout": "Mejora tu agilidad con ejercicios de reacción. Usa golpes cortos y cambios de dirección para desequilibrio."
  },
  "status": 200,
  "description": "Information about the player profile"
}
```


code:
# 🏷 / 📋 + 👫 + 🏃♂ Sinergia de una categoría de inscripción

Obtiene una gráfica comparativa que describe el desempeño de las parejas.

```
[GET] /v1/analysis/synergies/@id
```

Parámetros de la ruta:

| Parámetros | Tipo | Requerido | Descripción |
| ---------- | ---- | --------- | ----------- |
| `id` | `string` | `true` | Identificador de la categoría de inscripción. |

Ejemplo:

```bash
curl -X GET \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-API-KEY: API_KEY' \
  http://localhost:8080/v1/analysis/synergies/@id
```

Respuesta de la petición:

```json
{
  "data": {
    "data": [
      {
        "marker": {
          "color": "#AA12E6",
          "cornerradius": 10
        },
        "text": [
          "-43.33%",
          "-33.33%",
          "26.67%",
          "90.0%",
          "-63.33%",
          "3.33%",
          "36.67%",
          "63.33%",
          "-43.33%",
          "13.33%",
          "13.33%",
          "56.67%",
          "23.33%",
          "-13.33%",
          "-3.33%",
          "33.33%",
          "-40.0%",
          "-13.33%",
          "16.67%",
          "76.67%",
          "-80.0%",
          "10.0%",
          "50.0%",
          "60.0%",
          "-13.33%",
          "13.33%",
          "20.0%",
          "20.0%",
          "-56.67%",
          "0.1%",
          "0.1%",
          "96.67%"
        ],
        "textposition": "auto",
        "type": "bar",
        "x": [
          "Jorge Rios-JR PAREJA DOS",
          "Ulises Medrano-Paul Solorio",
          "José Manuel Vargas-Ernesto Oñate",
          "Gerardo Martínez-Jesús Arguellas",
          "Juan Pablo Bullet-JP Bullet Dos",
          "Francisco Solis-Diego Solis",
          "Edgar Labra-Rodrigo Sánchez",
          "Alonso Calderon-Lennin Bustos",
          "Yonatan Ángeles-Daniel Sánchez Dos",
          "Adrián Arreola-Marcos Rojo",
          "Fabián Padilla-Victor Ayala",
          "Carlos Castro-Owen Alexander",
          "Fernando Córtez-Avimael Tapia",
          "Daniel Adame-Alonso Zuñiga",
          "Santiago Martinez-Fernando Soto",
          "Julio Méndez-Miguel Baez",
          "Raúl Rodriguez-César Rodríguez",
          "Alejandro Padrón-Victor Cardiel",
          "Ricky Rodriguez-Victor Cordero",
          "Enrique Ybarra Lara-Gerardo Cruz Parente",
          "Antonio Daniel Quintana-Diego Alejandro Quintana",
          "Giovanny Venegas-Miguel Cervantes",
          "Daniel Aguilar-Daniel Sánchez",
          "Marco López-Mikjail Juárez",
          "Gustavo Ventura-Luis Zavala Orozco",
          "Nestor de la Rosa-Sebastián Velázquez",
          "Carlos García-Armando Ordónez",
          "David Martínez-Iván Zavala",
          "Manuel Méndez-Eduardo Gutierrez",
          "Lalo Morales-Juan Mireles",
          "Iván Zuñiga-Alejandro Flores",
          "Edgar García-Hugo Eduardo Arizmendi"
        ],
        "y": [
          0,
          0,
          26.67,
          90,
          0,
          3.33,
          36.67,
          63.33,
          0,
          13.33,
          13.33,
          56.67,
          23.33,
          0,
          0,
          33.33,
          0,
          0,
          16.67,
          76.67,
          0,
          10,
          50,
          60,
          0,
          13.33,
          20,
          20,
          0,
          0.1,
          0.1,
          96.67
        ]
      },
      {
        "marker": {
          "color": "#E64912",
          "cornerradius": 10
        },
        "text": [
          "-43.33%",
          "-33.33%",
          "26.67%",
          "90.0%",
          "-63.33%",
          "3.33%",
          "36.67%",
          "63.33%",
          "-43.33%",
          "13.33%",
          "13.33%",
          "56.67%",
          "23.33%",
          "-13.33%",
          "-3.33%",
          "33.33%",
          "-40.0%",
          "-13.33%",
          "16.67%",
          "76.67%",
          "-80.0%",
          "10.0%",
          "50.0%",
          "60.0%",
          "-13.33%",
          "13.33%",
          "20.0%",
          "20.0%",
          "-56.67%",
          "0.1%",
          "0.1%",
          "96.67%"
        ],
        "textposition": "auto",
        "type": "bar",
        "x": [
          "Jorge Rios-JR PAREJA DOS",
          "Ulises Medrano-Paul Solorio",
          "José Manuel Vargas-Ernesto Oñate",
          "Gerardo Martínez-Jesús Arguellas",
          "Juan Pablo Bullet-JP Bullet Dos",
          "Francisco Solis-Diego Solis",
          "Edgar Labra-Rodrigo Sánchez",
          "Alonso Calderon-Lennin Bustos",
          "Yonatan Ángeles-Daniel Sánchez Dos",
          "Adrián Arreola-Marcos Rojo",
          "Fabián Padilla-Victor Ayala",
          "Carlos Castro-Owen Alexander",
          "Fernando Córtez-Avimael Tapia",
          "Daniel Adame-Alonso Zuñiga",
          "Santiago Martinez-Fernando Soto",
          "Julio Méndez-Miguel Baez",
          "Raúl Rodriguez-César Rodríguez",
          "Alejandro Padrón-Victor Cardiel",
          "Ricky Rodriguez-Victor Cordero",
          "Enrique Ybarra Lara-Gerardo Cruz Parente",
          "Antonio Daniel Quintana-Diego Alejandro Quintana",
          "Giovanny Venegas-Miguel Cervantes",
          "Daniel Aguilar-Daniel Sánchez",
          "Marco López-Mikjail Juárez",
          "Gustavo Ventura-Luis Zavala Orozco",
          "Nestor de la Rosa-Sebastián Velázquez",
          "Carlos García-Armando Ordónez",
          "David Martínez-Iván Zavala",
          "Manuel Méndez-Eduardo Gutierrez",
          "Lalo Morales-Juan Mireles",
          "Iván Zuñiga-Alejandro Flores",
          "Edgar García-Hugo Eduardo Arizmendi"
        ],
        "y": [
          -43.33,
          -33.33,
          0,
          0,
          -63.33,
          0,
          0,
          0,
          -43.33,
          0,
          0,
          0,
          0,
          -13.33,
          -3.33,
          0,
          -40,
          -13.33,
          0,
          0,
          -80,
          0,
          0,
          0,
          -13.33,
          0,
          0,
          0,
          -56.67,
          0,
          0,
          0
        ]
      }
    ],
    "title": "Sinergia de los equipos de la categoria Libre",
    "x-axis": "Parejas",
    "y-axis": "Sinergia"
  },
  "status": 200,
  "description": "Information about the registration category synergy"
}
```


code:
# 🔑 Comprobar API key

```
[GET] /v1/auth/check
```

Ejemplo:

```bash
curl -X GET \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-API-KEY: API_KEY' \
  http://localhost:8080/v1/auth/check
```

Respuesta de la petición:

```json
{
  "data": {
    "id": "d727a742-051c-41c3-95cb-561fb05b41f1",
    "user_id": "70f7531a-21f6-482e-a0ef-875d9d050ed3",
    "is_revoked": 0,
    "expires_at": "2025-02-28 15:55:56",
    "created_at": "2025-02-28 15:47:56",
    "updated_at": "2025-02-28 15:47:56"
  },
  "status": 200,
  "description": "Information about the API key"
}
```


code:
# 🔐 Autenticación

Autenticación de los usuarios de acceso.

> Los token tienen una duración de 8 minutos, comprueba la [información del token](check.html) y [genera uno nuevo](refresh.html) antes de su expiración.


code:
# 🪪 Inicio de sesión

```
[POST] /v1/auth/login
```

Cuerpo de la petición:

| Campo | Tipo | Requerido | Rango | Descripción |
| ----- | ---- | --------- | ----- | ----------- |
| `nickname` | `string` | `true` | `between_len: [1, 128]` | Nombre de usuario o correo eléctrico del usuario de acceso. |
| `password` | `string` | `true` | `between_len: [8, 64]` | Contraseña del usuario de acceso. |

Ejemplos:

```bash
curl -X POST \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  http://localhost:8080/v1/auth/login \
  -d '{
    "nickname": "ricardogj08",
    "password": "12345678"
  }'

curl -X POST \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  http://localhost:8080/v1/auth/login \
  -d '{
    "nickname": "ricardogj08@riseup.net",
    "password": "12345678"
  }'
```

Respuesta de la petición:

```json
{
  "data": {
    "api_key": "516220f0beed3bb91d711932f280123a62246183e67bf2d4f434f7f913770b88"
  },
  "status": 201,
  "description": "The API key was created successfully"
}
```


code:
# 👋 Cerrar sesión

```
[POST] /v1/auth/logout
```

Ejemplo:

```bash
curl -X POST \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-API-KEY: API_KEY' \
  http://localhost:8080/v1/auth/logout
```

Respuesta de la petición:

```json
{
  "data": null,
  "status": 200,
  "description": "The API key was finalized successfully"
}
```


code:
# 🧑 Usuario autenticado

```
[GET] /v1/auth/me
```

Ejemplo:

```bash
curl -X GET \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-API-KEY: API_KEY' \
  http://localhost:8080/v1/auth/me
```

Respuesta de la petición:

```json
{
  "data": {
    "id": "860c2dc9-23ff-46c7-96c1-7b9fe437d12b",
    "email": "ricardogj08@riseup.net",
    "username": "ricardogj08",
    "fullname": "Ricardo García Jiménez",
    "is_active": 1,
    "created_at": "2025-03-07 14:38:11",
    "updated_at": "2025-03-07 14:38:11",
    "role": {
      "id": "ff23a6f7-0862-4431-b3b3-015beae0cb9f",
      "name": "admin",
      "description": "Administrador"
    }
  },
  "status": 200,
  "description": "Information about the authenticated user"
}
```


code:
# 🔄 Renovar API key

```
[POST] /v1/auth/refresh
```

Ejemplo:

```bash
curl -X POST \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-API-KEY: API_KEY' \
  http://localhost:8080/v1/auth/refresh
```

Respuesta de la petición:

```json
{
  "data": {
    "api_key": "f74857b229d61d810ac5ab3aa4c4d2010f2ea6028a69533f8d76a5e2429d8df1"
  },
  "status": 201,
  "description": "The API key was renewed successfully"
}
```


code:
# 👥 + 🎾 + 👫 + 🏃♂ Grupos, partidos, parejas y jugadores

Partidos, parejas y jugadores asignados a los grupos.

```
[GET] /v1/groups/matches/pairs/players
```

Parámetros de consulta:

| Parámetro | Tipo | Rango | Por defecto | Descripción |
| --------- | ---- | ----- | ----------- | ----------- |
| `page` | `integer` | `min_numeric: 1` | `1` | Número de la página de resultados de los grupos con sus partidos, parejas y jugadores. |
| `filterBy` | `string` | `contains: [name, description]` | `name` | Campo de búsqueda de los grupos con sus partidos, parejas y jugadores. |
| `orderBy` | `string` | `contains: [name, description, created_at, updated_at]` | `name` | Campo de ordenamiento de los grupos con sus partidos, parejas y jugadores. |
| `sortBy` | `string` | `contains: [asc, desc]` | `asc` | Modo de ordenamiento de los grupos con sus partidos, parejas y jugadores. |
| `registration_category_id` | `string` | `exact_len: 36` | `null` | Identificador de la categoría de inscripción de los grupos con sus partidos, parejas y jugadores ([ver](../registration-categories/index.html)). |
| `is_eliminated` | `boolean` | `contains: [yes/no, on/off, 1/0, true/false]` | `null` | Filtrar los grupos con sus partidos, parejas y jugadores por estatus de eliminación. |
| `is_active` | `boolean` | `contains: [yes/no, on/off, 1/0, true/false]` | `null` | Filtrar los grupos con sus partidos, parejas y jugadores por estatus de actividad. |

Ejemplo:

```bash
curl -X GET \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-API-KEY: API_KEY' \
  http://localhost:8080/v1/groups/matches/pairs/players?page=2&filterBy=name&orderBy=name&sortBy=asc&registration_category_id=21c13c24-af5d-45bd-9294-2de7e175ceee&is_eliminated=false&is_active=true
```

Respuesta de la petición:

```json
{
  "data": [
    {
      "group": {
        "id": "010e017e-3bd3-4db0-99e4-ad3618b669a5",
        "name": "A_2025",
        "description": "A",
        "is_eliminated": 0,
        "is_active": 1,
        "created_at": "2025-03-22 03:21:43",
        "updated_at": "2025-03-22 03:21:43",
        "registration_category": {
          "id": "21c13c24-af5d-45bd-9294-2de7e175ceee",
          "name": "seniors",
          "description": "50 y más"
        }
      },
      "matches": [
        {
          "match": {
            "id": "01cf60b7-de92-45b5-8051-383416d94238",
            "is_active": 1,
            "created_at": "2025-03-22 03:21:43",
            "updated_at": "2025-03-22 03:21:43",
            "registration_category": {
              "id": "21c13c24-af5d-45bd-9294-2de7e175ceee",
              "name": "seniors",
              "description": "50 y más"
            },
            "match_category": {
              "id": "ad14f6d0-5296-4a6e-a986-6a99a20365b7",
              "name": "qualifier",
              "description": "Clasificación"
            },
            "match_status": {
              "id": "b06b08ff-0f65-456c-ae90-3dd740a26c9b",
              "name": "scheduled",
              "description": "Programado"
            },
            "pairs": [
              {
                "pair": {
                  "id": "78e0192e-3ad5-4c8f-9064-783c6090008b",
                  "is_eliminated": 0,
                  "is_active": 1,
                  "created_at": "2025-03-22 03:13:32",
                  "updated_at": "2025-03-22 03:13:32",
                  "registration_category": {
                    "id": "21c13c24-af5d-45bd-9294-2de7e175ceee",
                    "name": "seniors",
                    "description": "50 y más"
                  },
                  "players": [
                    {
                      "player": {
                        "id": "5e6c10cf-0b74-465a-9843-3427c7be9fd9",
                        "fullname": "Fernando Gómez",
                        "city": "Apaseo el Grande",
                        "weight": "78.20",
                        "height": "1.71",
                        "age": 53,
                        "experience": 23,
                        "is_active": 1,
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      },
                      "relationship": {
                        "id": "6a4284e5-aa1f-4784-81e5-71569c854180",
                        "player_id": "5e6c10cf-0b74-465a-9843-3427c7be9fd9",
                        "pair_id": "78e0192e-3ad5-4c8f-9064-783c6090008b",
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      }
                    },
                    {
                      "player": {
                        "id": "693862e4-bd66-46c0-9305-6f96d517725e",
                        "fullname": "Gabriela Jiménez",
                        "city": "Uriangato",
                        "weight": "65.50",
                        "height": "1.62",
                        "age": 61,
                        "experience": 31,
                        "is_active": 1,
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      },
                      "relationship": {
                        "id": "b644d27b-a73e-42d5-b193-d31fc6712b4a",
                        "player_id": "693862e4-bd66-46c0-9305-6f96d517725e",
                        "pair_id": "78e0192e-3ad5-4c8f-9064-783c6090008b",
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      }
                    }
                  ]
                },
                "relationship": {
                  "id": "9ec5cb5c-3aab-4ca4-aa33-f896d240e533",
                  "pair_id": "78e0192e-3ad5-4c8f-9064-783c6090008b",
                  "match_id": "01cf60b7-de92-45b5-8051-383416d94238",
                  "score": 0,
                  "is_winner": 0,
                  "created_at": "2025-03-22 03:21:43",
                  "updated_at": "2025-03-22 03:21:43"
                }
              },
              {
                "pair": {
                  "id": "d2955c5e-3548-48cc-9f2d-02586d8384d7",
                  "is_eliminated": 0,
                  "is_active": 1,
                  "created_at": "2025-03-22 03:13:32",
                  "updated_at": "2025-03-22 03:13:32",
                  "registration_category": {
                    "id": "21c13c24-af5d-45bd-9294-2de7e175ceee",
                    "name": "seniors",
                    "description": "50 y más"
                  },
                  "players": [
                    {
                      "player": {
                        "id": "08d34019-e287-4463-9a35-2303f4562b01",
                        "fullname": "Laura Vargas",
                        "city": "Dolores Hidalgo",
                        "weight": "64.50",
                        "height": "1.63",
                        "age": 59,
                        "experience": 29,
                        "is_active": 1,
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      },
                      "relationship": {
                        "id": "9a751a07-5759-4dd4-87fe-3d1c06f991b4",
                        "player_id": "08d34019-e287-4463-9a35-2303f4562b01",
                        "pair_id": "d2955c5e-3548-48cc-9f2d-02586d8384d7",
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      }
                    },
                    {
                      "player": {
                        "id": "bdcfe411-5f65-4f00-80bf-280c9a0238b7",
                        "fullname": "Carlos Sánchez",
                        "city": "Silao",
                        "weight": "77.50",
                        "height": "1.74",
                        "age": 54,
                        "experience": 24,
                        "is_active": 1,
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      },
                      "relationship": {
                        "id": "a43769c6-fa7f-4e33-b278-26f03bcd5dcb",
                        "player_id": "bdcfe411-5f65-4f00-80bf-280c9a0238b7",
                        "pair_id": "d2955c5e-3548-48cc-9f2d-02586d8384d7",
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      }
                    }
                  ]
                },
                "relationship": {
                  "id": "e70bfd47-3d3f-4e91-9e32-6504dbd54b8b",
                  "pair_id": "d2955c5e-3548-48cc-9f2d-02586d8384d7",
                  "match_id": "01cf60b7-de92-45b5-8051-383416d94238",
                  "score": 0,
                  "is_winner": 0,
                  "created_at": "2025-03-22 03:21:43",
                  "updated_at": "2025-03-22 03:21:43"
                }
              }
            ]
          },
          "relationship": {
            "id": "9bfd7fad-f5a8-4a43-8b45-715431b89053",
            "group_id": "010e017e-3bd3-4db0-99e4-ad3618b669a5",
            "match_id": "01cf60b7-de92-45b5-8051-383416d94238",
            "created_at": "2025-03-22 03:21:43",
            "updated_at": "2025-03-22 03:21:43"
          }
        },
        {
          "match": {
            "id": "17d17886-c1a2-42c4-a75c-d9bff8f5169d",
            "is_active": 1,
            "created_at": "2025-03-22 03:21:43",
            "updated_at": "2025-03-22 03:21:43",
            "registration_category": {
              "id": "21c13c24-af5d-45bd-9294-2de7e175ceee",
              "name": "seniors",
              "description": "50 y más"
            },
            "match_category": {
              "id": "ad14f6d0-5296-4a6e-a986-6a99a20365b7",
              "name": "qualifier",
              "description": "Clasificación"
            },
            "match_status": {
              "id": "b06b08ff-0f65-456c-ae90-3dd740a26c9b",
              "name": "scheduled",
              "description": "Programado"
            },
            "pairs": [
              {
                "pair": {
                  "id": "6cc0b3a3-e263-4070-9e93-5b02bb443102",
                  "is_eliminated": 0,
                  "is_active": 1,
                  "created_at": "2025-03-22 03:13:32",
                  "updated_at": "2025-03-22 03:13:32",
                  "registration_category": {
                    "id": "21c13c24-af5d-45bd-9294-2de7e175ceee",
                    "name": "seniors",
                    "description": "50 y más"
                  },
                  "players": [
                    {
                      "player": {
                        "id": "f12ee012-264a-4fa6-b880-ebc3527a3a9b",
                        "fullname": "Roberto Torres",
                        "city": "Salamanca",
                        "weight": "79.00",
                        "height": "1.73",
                        "age": 65,
                        "experience": 35,
                        "is_active": 1,
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      },
                      "relationship": {
                        "id": "3521e54d-29d2-41c7-a736-57a3cec7b893",
                        "player_id": "f12ee012-264a-4fa6-b880-ebc3527a3a9b",
                        "pair_id": "6cc0b3a3-e263-4070-9e93-5b02bb443102",
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      }
                    },
                    {
                      "player": {
                        "id": "6414805e-82bb-46a3-8223-f76e7a0b8833",
                        "fullname": "Sofía Mendoza",
                        "city": "San Miguel de Allende",
                        "weight": "66.00",
                        "height": "1.61",
                        "age": 57,
                        "experience": 27,
                        "is_active": 1,
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      },
                      "relationship": {
                        "id": "9e9ee62b-2dcf-42cd-a66b-8d8332d4a808",
                        "player_id": "6414805e-82bb-46a3-8223-f76e7a0b8833",
                        "pair_id": "6cc0b3a3-e263-4070-9e93-5b02bb443102",
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      }
                    }
                  ]
                },
                "relationship": {
                  "id": "34d51812-538e-4a91-aa93-6420f221b192",
                  "pair_id": "6cc0b3a3-e263-4070-9e93-5b02bb443102",
                  "match_id": "17d17886-c1a2-42c4-a75c-d9bff8f5169d",
                  "score": 0,
                  "is_winner": 0,
                  "created_at": "2025-03-22 03:21:43",
                  "updated_at": "2025-03-22 03:21:43"
                }
              },
              {
                "pair": {
                  "id": "d2955c5e-3548-48cc-9f2d-02586d8384d7",
                  "is_eliminated": 0,
                  "is_active": 1,
                  "created_at": "2025-03-22 03:13:32",
                  "updated_at": "2025-03-22 03:13:32",
                  "registration_category": {
                    "id": "21c13c24-af5d-45bd-9294-2de7e175ceee",
                    "name": "seniors",
                    "description": "50 y más"
                  },
                  "players": [
                    {
                      "player": {
                        "id": "08d34019-e287-4463-9a35-2303f4562b01",
                        "fullname": "Laura Vargas",
                        "city": "Dolores Hidalgo",
                        "weight": "64.50",
                        "height": "1.63",
                        "age": 59,
                        "experience": 29,
                        "is_active": 1,
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      },
                      "relationship": {
                        "id": "9a751a07-5759-4dd4-87fe-3d1c06f991b4",
                        "player_id": "08d34019-e287-4463-9a35-2303f4562b01",
                        "pair_id": "d2955c5e-3548-48cc-9f2d-02586d8384d7",
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      }
                    },
                    {
                      "player": {
                        "id": "bdcfe411-5f65-4f00-80bf-280c9a0238b7",
                        "fullname": "Carlos Sánchez",
                        "city": "Silao",
                        "weight": "77.50",
                        "height": "1.74",
                        "age": 54,
                        "experience": 24,
                        "is_active": 1,
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      },
                      "relationship": {
                        "id": "a43769c6-fa7f-4e33-b278-26f03bcd5dcb",
                        "player_id": "bdcfe411-5f65-4f00-80bf-280c9a0238b7",
                        "pair_id": "d2955c5e-3548-48cc-9f2d-02586d8384d7",
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      }
                    }
                  ]
                },
                "relationship": {
                  "id": "bbef0bf7-2e46-475f-a0b8-c0ef4c25e667",
                  "pair_id": "d2955c5e-3548-48cc-9f2d-02586d8384d7",
                  "match_id": "17d17886-c1a2-42c4-a75c-d9bff8f5169d",
                  "score": 0,
                  "is_winner": 0,
                  "created_at": "2025-03-22 03:21:43",
                  "updated_at": "2025-03-22 03:21:43"
                }
              }
            ]
          },
          "relationship": {
            "id": "0b385a53-5a09-47df-b436-e239bd1039ac",
            "group_id": "010e017e-3bd3-4db0-99e4-ad3618b669a5",
            "match_id": "17d17886-c1a2-42c4-a75c-d9bff8f5169d",
            "created_at": "2025-03-22 03:21:43",
            "updated_at": "2025-03-22 03:21:43"
          }
        },
        ...
      ]
    },
    {
      "group": {
        "id": "77669f69-4a91-4488-8837-b8a4924ec7a2",
        "name": "A_2025",
        "description": "A",
        "is_eliminated": 0,
        "is_active": 1,
        "created_at": "2025-03-22 03:21:42",
        "updated_at": "2025-03-22 03:21:42",
        "registration_category": {
          "id": "5d840f53-ffb0-427c-8554-bfff885d6b6a",
          "name": "open",
          "description": "Libre"
        }
      },
      "matches": [
        {
          "match": {
            "id": "3e690b4d-ea5b-439b-bf36-0dc501c36f01",
            "is_active": 1,
            "created_at": "2025-03-22 03:21:42",
            "updated_at": "2025-03-22 03:21:42",
            "registration_category": {
              "id": "5d840f53-ffb0-427c-8554-bfff885d6b6a",
              "name": "open",
              "description": "Libre"
            },
            "match_category": {
              "id": "ad14f6d0-5296-4a6e-a986-6a99a20365b7",
              "name": "qualifier",
              "description": "Clasificación"
            },
            "match_status": {
              "id": "b06b08ff-0f65-456c-ae90-3dd740a26c9b",
              "name": "scheduled",
              "description": "Programado"
            },
            "pairs": [
              {
                "pair": {
                  "id": "8a9a64b2-6311-400d-961d-1cb2e8c5bad6",
                  "is_eliminated": 0,
                  "is_active": 1,
                  "created_at": "2025-03-22 03:13:32",
                  "updated_at": "2025-03-22 03:13:32",
                  "registration_category": {
                    "id": "5d840f53-ffb0-427c-8554-bfff885d6b6a",
                    "name": "open",
                    "description": "Libre"
                  },
                  "players": [
                    {
                      "player": {
                        "id": "1d8c0b70-bbb7-4299-bb5f-d81df7df3385",
                        "fullname": "Valeria Castro",
                        "city": "Acámbaro",
                        "weight": "61.80",
                        "height": "1.66",
                        "age": 22,
                        "experience": 4,
                        "is_active": 1,
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      },
                      "relationship": {
                        "id": "3ebec049-639d-41f4-88b6-1cf3e3ab6116",
                        "player_id": "1d8c0b70-bbb7-4299-bb5f-d81df7df3385",
                        "pair_id": "8a9a64b2-6311-400d-961d-1cb2e8c5bad6",
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      }
                    },
                    {
                      "player": {
                        "id": "666d62b2-48f4-44f9-acc8-3d76cac46894",
                        "fullname": "José Ramírez",
                        "city": "Yuriria",
                        "weight": "74.00",
                        "height": "1.79",
                        "age": 31,
                        "experience": 14,
                        "is_active": 1,
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      },
                      "relationship": {
                        "id": "da155962-bc14-4ab0-99d0-2a5041fb6375",
                        "player_id": "666d62b2-48f4-44f9-acc8-3d76cac46894",
                        "pair_id": "8a9a64b2-6311-400d-961d-1cb2e8c5bad6",
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      }
                    }
                  ]
                },
                "relationship": {
                  "id": "3588b06f-60d4-477b-b808-3f3e7ce59c66",
                  "pair_id": "8a9a64b2-6311-400d-961d-1cb2e8c5bad6",
                  "match_id": "3e690b4d-ea5b-439b-bf36-0dc501c36f01",
                  "score": 0,
                  "is_winner": 0,
                  "created_at": "2025-03-22 03:21:42",
                  "updated_at": "2025-03-22 03:21:42"
                }
              },
              {
                "pair": {
                  "id": "57f1a4fc-e84b-44e1-81ea-9a960cb076f2",
                  "is_eliminated": 0,
                  "is_active": 1,
                  "created_at": "2025-03-22 03:13:32",
                  "updated_at": "2025-03-22 03:13:32",
                  "registration_category": {
                    "id": "5d840f53-ffb0-427c-8554-bfff885d6b6a",
                    "name": "open",
                    "description": "Libre"
                  },
                  "players": [
                    {
                      "player": {
                        "id": "0dd9bfe6-37e8-462b-98e9-00998f179950",
                        "fullname": "Mario Guzmán",
                        "city": "Salvatierra",
                        "weight": "79.20",
                        "height": "1.81",
                        "age": 34,
                        "experience": 15,
                        "is_active": 1,
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      },
                      "relationship": {
                        "id": "47b77c4c-b7aa-43c9-aa8e-07ec144b0342",
                        "player_id": "0dd9bfe6-37e8-462b-98e9-00998f179950",
                        "pair_id": "57f1a4fc-e84b-44e1-81ea-9a960cb076f2",
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      }
                    },
                    {
                      "player": {
                        "id": "7aa7a788-2105-49c9-8ec5-39947fd96fa6",
                        "fullname": "Sandra Paredes",
                        "city": "Jaral del Progreso",
                        "weight": "64.80",
                        "height": "1.68",
                        "age": 27,
                        "experience": 9,
                        "is_active": 1,
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      },
                      "relationship": {
                        "id": "6113b73a-0a60-4fcc-8700-c559e84ad09b",
                        "player_id": "7aa7a788-2105-49c9-8ec5-39947fd96fa6",
                        "pair_id": "57f1a4fc-e84b-44e1-81ea-9a960cb076f2",
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      }
                    }
                  ]
                },
                "relationship": {
                  "id": "efc04a38-1645-4a5c-a813-4bd3aadf3efe",
                  "pair_id": "57f1a4fc-e84b-44e1-81ea-9a960cb076f2",
                  "match_id": "3e690b4d-ea5b-439b-bf36-0dc501c36f01",
                  "score": 0,
                  "is_winner": 0,
                  "created_at": "2025-03-22 03:21:42",
                  "updated_at": "2025-03-22 03:21:42"
                }
              }
            ]
          },
          "relationship": {
            "id": "8111d768-4a63-4b99-aafa-e5b433c920b6",
            "group_id": "77669f69-4a91-4488-8837-b8a4924ec7a2",
            "match_id": "3e690b4d-ea5b-439b-bf36-0dc501c36f01",
            "created_at": "2025-03-22 03:21:42",
            "updated_at": "2025-03-22 03:21:42"
          }
        },
        {
          "match": {
            "id": "4b834126-9be8-46d9-b826-b4b49cc95041",
            "is_active": 1,
            "created_at": "2025-03-22 03:21:42",
            "updated_at": "2025-03-22 03:21:42",
            "registration_category": {
              "id": "5d840f53-ffb0-427c-8554-bfff885d6b6a",
              "name": "open",
              "description": "Libre"
            },
            "match_category": {
              "id": "ad14f6d0-5296-4a6e-a986-6a99a20365b7",
              "name": "qualifier",
              "description": "Clasificación"
            },
            "match_status": {
              "id": "b06b08ff-0f65-456c-ae90-3dd740a26c9b",
              "name": "scheduled",
              "description": "Programado"
            },
            "pairs": [
              {
                "pair": {
                  "id": "e4c8b51b-a393-413d-913e-59d42748eb94",
                  "is_eliminated": 0,
                  "is_active": 1,
                  "created_at": "2025-03-22 03:13:32",
                  "updated_at": "2025-03-22 03:13:32",
                  "registration_category": {
                    "id": "5d840f53-ffb0-427c-8554-bfff885d6b6a",
                    "name": "open",
                    "description": "Libre"
                  },
                  "players": [
                    {
                      "player": {
                        "id": "7c6982bf-5240-45e4-bded-4179aa189be6",
                        "fullname": "Fernando Guerra",
                        "city": "Villagrán",
                        "weight": "73.00",
                        "height": "1.77",
                        "age": 30,
                        "experience": 9,
                        "is_active": 1,
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      },
                      "relationship": {
                        "id": "23a8cddb-65bc-4d30-b5b8-325300033bbf",
                        "player_id": "7c6982bf-5240-45e4-bded-4179aa189be6",
                        "pair_id": "e4c8b51b-a393-413d-913e-59d42748eb94",
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      }
                    },
                    {
                      "player": {
                        "id": "f1bf3056-1b0d-4317-b493-d4710ab8f1d9",
                        "fullname": "Isabel Pérez",
                        "city": "Abasolo",
                        "weight": "60.00",
                        "height": "1.65",
                        "age": 26,
                        "experience": 6,
                        "is_active": 1,
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      },
                      "relationship": {
                        "id": "c127db62-c0fb-47f5-ae5b-708e5d716913",
                        "player_id": "f1bf3056-1b0d-4317-b493-d4710ab8f1d9",
                        "pair_id": "e4c8b51b-a393-413d-913e-59d42748eb94",
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      }
                    }
                  ]
                },
                "relationship": {
                  "id": "2b396588-6605-4f91-ba6b-23b62d75c103",
                  "pair_id": "e4c8b51b-a393-413d-913e-59d42748eb94",
                  "match_id": "4b834126-9be8-46d9-b826-b4b49cc95041",
                  "score": 0,
                  "is_winner": 0,
                  "created_at": "2025-03-22 03:21:42",
                  "updated_at": "2025-03-22 03:21:42"
                }
              },
              {
                "pair": {
                  "id": "57f1a4fc-e84b-44e1-81ea-9a960cb076f2",
                  "is_eliminated": 0,
                  "is_active": 1,
                  "created_at": "2025-03-22 03:13:32",
                  "updated_at": "2025-03-22 03:13:32",
                  "registration_category": {
                    "id": "5d840f53-ffb0-427c-8554-bfff885d6b6a",
                    "name": "open",
                    "description": "Libre"
                  },
                  "players": [
                    {
                      "player": {
                        "id": "0dd9bfe6-37e8-462b-98e9-00998f179950",
                        "fullname": "Mario Guzmán",
                        "city": "Salvatierra",
                        "weight": "79.20",
                        "height": "1.81",
                        "age": 34,
                        "experience": 15,
                        "is_active": 1,
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      },
                      "relationship": {
                        "id": "47b77c4c-b7aa-43c9-aa8e-07ec144b0342",
                        "player_id": "0dd9bfe6-37e8-462b-98e9-00998f179950",
                        "pair_id": "57f1a4fc-e84b-44e1-81ea-9a960cb076f2",
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      }
                    },
                    {
                      "player": {
                        "id": "7aa7a788-2105-49c9-8ec5-39947fd96fa6",
                        "fullname": "Sandra Paredes",
                        "city": "Jaral del Progreso",
                        "weight": "64.80",
                        "height": "1.68",
                        "age": 27,
                        "experience": 9,
                        "is_active": 1,
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      },
                      "relationship": {
                        "id": "6113b73a-0a60-4fcc-8700-c559e84ad09b",
                        "player_id": "7aa7a788-2105-49c9-8ec5-39947fd96fa6",
                        "pair_id": "57f1a4fc-e84b-44e1-81ea-9a960cb076f2",
                        "created_at": "2025-03-22 03:13:32",
                        "updated_at": "2025-03-22 03:13:32"
                      }
                    }
                  ]
                },
                "relationship": {
                  "id": "3668241f-973b-4c40-a46a-b3bf08d72d51",
                  "pair_id": "57f1a4fc-e84b-44e1-81ea-9a960cb076f2",
                  "match_id": "4b834126-9be8-46d9-b826-b4b49cc95041",
                  "score": 0,
                  "is_winner": 0,
                  "created_at": "2025-03-22 03:21:42",
                  "updated_at": "2025-03-22 03:21:42"
                }
              }
            ]
          },
          "relationship": {
            "id": "fc4f832d-97fb-4f51-b283-6513ae6ad182",
            "group_id": "77669f69-4a91-4488-8837-b8a4924ec7a2",
            "match_id": "4b834126-9be8-46d9-b826-b4b49cc95041",
            "created_at": "2025-03-22 03:21:42",
            "updated_at": "2025-03-22 03:21:42"
          }
        },
        ...
      ]
    },
    ...
  ],
  "status": 200,
  "pagination": {
    "page": 1,
    "limit": 4,
    "total": 3,
    "count": 9,
    "offset": 0
  },
  "description": "Information about all the groups matches and pairs players with pagination"
}
```


code:
# 👀 Partidos, parejas y jugadores de un grupo

```
[GET] /v1/groups/@id/matches/pairs/players
```

Parámetros de la ruta:

| Parámetros | Tipo | Requerido | Descripción |
| ---------- | ---- | --------- | ----------- |
| `id` | `string` | `true` | Identificador del grupo. |

Ejemplo:

```bash
 curl -X GET \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-API-KEY: API_KEY' \
  http://localhost:8080/v1/groups/@id/matches/pairs/players
```

Respuesta de la petición:

```json
{
  "data": [
    {
      "match": {
        "id": "0f5fed47-79d3-4428-bb3e-a3e69d196bdf",
        "is_active": 1,
        "created_at": "2025-03-20 21:27:39",
        "updated_at": "2025-03-20 21:27:39",
        "registration_category": {
          "id": "5d840f53-ffb0-427c-8554-bfff885d6b6a",
          "name": "open",
          "description": "Libre"
        },
        "match_category": {
          "id": "ad14f6d0-5296-4a6e-a986-6a99a20365b7",
          "name": "qualifier",
          "description": "Clasificación"
        },
        "match_status": {
          "id": "b06b08ff-0f65-456c-ae90-3dd740a26c9b",
          "name": "scheduled",
          "description": "Programado"
        },
        "pairs": [
          {
            "pair": {
              "id": "94b132c7-7de0-48c0-8990-67c08fc677b7",
              "is_eliminated": 0,
              "is_active": 1,
              "created_at": "2025-03-20 21:23:55",
              "updated_at": "2025-03-20 21:23:55",
              "registration_category": {
                "id": "5d840f53-ffb0-427c-8554-bfff885d6b6a",
                "name": "open",
                "description": "Libre"
              },
              "players": [
                {
                  "player": {
                    "id": "db520e4c-f133-4c2f-8a95-d4ae12115dcf",
                    "fullname": "Enrique Castro",
                    "city": "Juventino Rosas",
                    "weight": "75.00",
                    "height": "1.79",
                    "age": 28,
                    "experience": 12,
                    "is_active": 1,
                    "created_at": "2025-03-20 21:23:55",
                    "updated_at": "2025-03-20 21:23:55"
                  },
                  "relationship": {
                    "id": "d704a086-5b83-4a5d-af30-c3e078bd9994",
                    "player_id": "db520e4c-f133-4c2f-8a95-d4ae12115dcf",
                    "pair_id": "94b132c7-7de0-48c0-8990-67c08fc677b7",
                    "created_at": "2025-03-20 21:23:55",
                    "updated_at": "2025-03-20 21:23:55"
                  }
                },
                {
                  "player": {
                    "id": "4fafb80d-7603-483d-ae88-adc6a3c22030",
                    "fullname": "Lourdes Herrera",
                    "city": "Apaseo el Alto",
                    "weight": "62.50",
                    "height": "1.67",
                    "age": 25,
                    "experience": 7,
                    "is_active": 1,
                    "created_at": "2025-03-20 21:23:55",
                    "updated_at": "2025-03-20 21:23:55"
                  },
                  "relationship": {
                    "id": "e39cb145-dc87-43fc-8658-a9897a823c12",
                    "player_id": "4fafb80d-7603-483d-ae88-adc6a3c22030",
                    "pair_id": "94b132c7-7de0-48c0-8990-67c08fc677b7",
                    "created_at": "2025-03-20 21:23:55",
                    "updated_at": "2025-03-20 21:23:55"
                  }
                }
              ]
            },
            "relationship": {
              "id": "8eb56e51-e000-41ec-961e-0311189decc8",
              "pair_id": "94b132c7-7de0-48c0-8990-67c08fc677b7",
              "match_id": "0f5fed47-79d3-4428-bb3e-a3e69d196bdf",
              "score": 0,
              "is_winner": 0,
              "created_at": "2025-03-20 21:27:39",
              "updated_at": "2025-03-20 21:27:39"
            }
          },
          {
            "pair": {
              "id": "5de44dbe-9953-448f-a9bb-064f737b4111",
              "is_eliminated": 0,
              "is_active": 1,
              "created_at": "2025-03-20 21:23:55",
              "updated_at": "2025-03-20 21:23:55",
              "registration_category": {
                "id": "5d840f53-ffb0-427c-8554-bfff885d6b6a",
                "name": "open",
                "description": "Libre"
              },
              "players": [
                {
                  "player": {
                    "id": "fb093289-8c9b-4ed2-9e71-ef1b4c0cb67b",
                    "fullname": "Roberto Díaz",
                    "city": "Jerécuaro",
                    "weight": "78.00",
                    "height": "1.83",
                    "age": 34,
                    "experience": 13,
                    "is_active": 1,
                    "created_at": "2025-03-20 21:23:55",
                    "updated_at": "2025-03-20 21:23:55"
                  },
                  "relationship": {
                    "id": "14b2533e-f5e7-4792-b858-e62a359c8511",
                    "player_id": "fb093289-8c9b-4ed2-9e71-ef1b4c0cb67b",
                    "pair_id": "5de44dbe-9953-448f-a9bb-064f737b4111",
                    "created_at": "2025-03-20 21:23:55",
                    "updated_at": "2025-03-20 21:23:55"
                  }
                },
                {
                  "player": {
                    "id": "851b6bed-765c-4675-b77d-513fd64e3fc9",
                    "fullname": "Claudia Mendoza",
                    "city": "Tarimoro",
                    "weight": "64.50",
                    "height": "1.70",
                    "age": 27,
                    "experience": 8,
                    "is_active": 1,
                    "created_at": "2025-03-20 21:23:55",
                    "updated_at": "2025-03-20 21:23:55"
                  },
                  "relationship": {
                    "id": "8fb7d4f4-74cb-4911-821a-1f6bcd5154d1",
                    "player_id": "851b6bed-765c-4675-b77d-513fd64e3fc9",
                    "pair_id": "5de44dbe-9953-448f-a9bb-064f737b4111",
                    "created_at": "2025-03-20 21:23:55",
                    "updated_at": "2025-03-20 21:23:55"
                  }
                }
              ]
            },
            "relationship": {
              "id": "a93ccf7e-dbfd-4541-830b-3e607fd94dd4",
              "pair_id": "5de44dbe-9953-448f-a9bb-064f737b4111",
              "match_id": "0f5fed47-79d3-4428-bb3e-a3e69d196bdf",
              "score": 0,
              "is_winner": 0,
              "created_at": "2025-03-20 21:27:39",
              "updated_at": "2025-03-20 21:27:39"
            }
          }
        ]
      },
      "relationship": {
        "id": "8779d8d2-dcab-42f7-a886-2f855224b72c",
        "group_id": "fb983148-d4f6-41c3-8fb5-bda2146f7fa6",
        "match_id": "0f5fed47-79d3-4428-bb3e-a3e69d196bdf",
        "created_at": "2025-03-20 21:27:39",
        "updated_at": "2025-03-20 21:27:39"
      }
    },
    {
      "match": {
        "id": "5ef5e266-002f-4934-a11a-3fcb18d53394",
        "is_active": 1,
        "created_at": "2025-03-20 21:27:39",
        "updated_at": "2025-03-20 21:27:39",
        "registration_category": {
          "id": "5d840f53-ffb0-427c-8554-bfff885d6b6a",
          "name": "open",
          "description": "Libre"
        },
        "match_category": {
          "id": "ad14f6d0-5296-4a6e-a986-6a99a20365b7",
          "name": "qualifier",
          "description": "Clasificación"
        },
        "match_status": {
          "id": "b06b08ff-0f65-456c-ae90-3dd740a26c9b",
          "name": "scheduled",
          "description": "Programado"
        },
        "pairs": [
          {
            "pair": {
              "id": "bc436a6a-57b8-43a2-b407-b4110a11dfe9",
              "is_eliminated": 0,
              "is_active": 1,
              "created_at": "2025-03-20 21:23:55",
              "updated_at": "2025-03-20 21:23:55",
              "registration_category": {
                "id": "5d840f53-ffb0-427c-8554-bfff885d6b6a",
                "name": "open",
                "description": "Libre"
              },
              "players": [
                {
                  "player": {
                    "id": "81c3cb2e-8e8b-451f-bea0-6e80ebb8fc71",
                    "fullname": "Karla Rivas",
                    "city": "Victoria",
                    "weight": "63.00",
                    "height": "1.68",
                    "age": 27,
                    "experience": 7,
                    "is_active": 1,
                    "created_at": "2025-03-20 21:23:55",
                    "updated_at": "2025-03-20 21:23:55"
                  },
                  "relationship": {
                    "id": "6411fcdc-3bda-48b0-a8eb-b8f67bf999ba",
                    "player_id": "81c3cb2e-8e8b-451f-bea0-6e80ebb8fc71",
                    "pair_id": "bc436a6a-57b8-43a2-b407-b4110a11dfe9",
                    "created_at": "2025-03-20 21:23:55",
                    "updated_at": "2025-03-20 21:23:55"
                  }
                },
                {
                  "player": {
                    "id": "fcc16996-934e-4e19-a167-af92457859ae",
                    "fullname": "Ricardo Silva",
                    "city": "Doctor Mora",
                    "weight": "74.50",
                    "height": "1.80",
                    "age": 32,
                    "experience": 12,
                    "is_active": 1,
                    "created_at": "2025-03-20 21:23:55",
                    "updated_at": "2025-03-20 21:23:55"
                  },
                  "relationship": {
                    "id": "e138e8aa-751e-48c2-baa3-04acc2357be3",
                    "player_id": "fcc16996-934e-4e19-a167-af92457859ae",
                    "pair_id": "bc436a6a-57b8-43a2-b407-b4110a11dfe9",
                    "created_at": "2025-03-20 21:23:55",
                    "updated_at": "2025-03-20 21:23:55"
                  }
                }
              ]
            },
            "relationship": {
              "id": "92d1b565-7c42-4961-92c0-b116281c4ea4",
              "pair_id": "bc436a6a-57b8-43a2-b407-b4110a11dfe9",
              "match_id": "5ef5e266-002f-4934-a11a-3fcb18d53394",
              "score": 0,
              "is_winner": 0,
              "created_at": "2025-03-20 21:27:39",
              "updated_at": "2025-03-20 21:27:39"
            }
          },
          {
            "pair": {
              "id": "94b132c7-7de0-48c0-8990-67c08fc677b7",
              "is_eliminated": 0,
              "is_active": 1,
              "created_at": "2025-03-20 21:23:55",
              "updated_at": "2025-03-20 21:23:55",
              "registration_category": {
                "id": "5d840f53-ffb0-427c-8554-bfff885d6b6a",
                "name": "open",
                "description": "Libre"
              },
              "players": [
                {
                  "player": {
                    "id": "db520e4c-f133-4c2f-8a95-d4ae12115dcf",
                    "fullname": "Enrique Castro",
                    "city": "Juventino Rosas",
                    "weight": "75.00",
                    "height": "1.79",
                    "age": 28,
                    "experience": 12,
                    "is_active": 1,
                    "created_at": "2025-03-20 21:23:55",
                    "updated_at": "2025-03-20 21:23:55"
                  },
                  "relationship": {
                    "id": "d704a086-5b83-4a5d-af30-c3e078bd9994",
                    "player_id": "db520e4c-f133-4c2f-8a95-d4ae12115dcf",
                    "pair_id": "94b132c7-7de0-48c0-8990-67c08fc677b7",
                    "created_at": "2025-03-20 21:23:55",
                    "updated_at": "2025-03-20 21:23:55"
                  }
                },
                {
                  "player": {
                    "id": "4fafb80d-7603-483d-ae88-adc6a3c22030",
                    "fullname": "Lourdes Herrera",
                    "city": "Apaseo el Alto",
                    "weight": "62.50",
                    "height": "1.67",
                    "age": 25,
                    "experience": 7,
                    "is_active": 1,
                    "created_at": "2025-03-20 21:23:55",
                    "updated_at": "2025-03-20 21:23:55"
                  },
                  "relationship": {
                    "id": "e39cb145-dc87-43fc-8658-a9897a823c12",
                    "player_id": "4fafb80d-7603-483d-ae88-adc6a3c22030",
                    "pair_id": "94b132c7-7de0-48c0-8990-67c08fc677b7",
                    "created_at": "2025-03-20 21:23:55",
                    "updated_at": "2025-03-20 21:23:55"
                  }
                }
              ]
            },
            "relationship": {
              "id": "bc6137bf-8342-40b2-8a95-29b8ae6f89c0",
              "pair_id": "94b132c7-7de0-48c0-8990-67c08fc677b7",
              "match_id": "5ef5e266-002f-4934-a11a-3fcb18d53394",
              "score": 0,
              "is_winner": 0,
              "created_at": "2025-03-20 21:27:39",
              "updated_at": "2025-03-20 21:27:39"
            }
          }
        ]
      },
      "relationship": {
        "id": "4e68dbaa-759e-47f0-a300-6b0630fe4d26",
        "group_id": "fb983148-d4f6-41c3-8fb5-bda2146f7fa6",
        "match_id": "5ef5e266-002f-4934-a11a-3fcb18d53394",
        "created_at": "2025-03-20 21:27:39",
        "updated_at": "2025-03-20 21:27:39"
      }
    },
    ...
  ],
  "status": 200,
  "description": "Information about the group matches with pairs players"
}
```


code:
# 👥 + 🎾 Grupos y partidos

Partidos asignados a los grupos.

```
[GET] /v1/groups/matches
```

Parámetros de consulta:

| Parámetro | Tipo | Rango | Por defecto | Descripción |
| --------- | ---- | ----- | ----------- | ----------- |
| `page` | `integer` | `min_numeric: 1` | `1` | Número de la página de resultados de los grupos con sus partidos. |
| `filterBy` | `string` | `contains: [name, description]` | `name` | Campo de búsqueda de los grupos con sus partidos. |
| `orderBy` | `string` | `contains: [name, description, created_at, updated_at]` | `name` | Campo de ordenamiento de los grupos con sus partidos. |
| `sortBy` | `string` | `contains: [asc, desc]` | `asc` | Modo de ordenamiento de los grupos con sus partidos. |
| `registration_category_id` | `string` | `exact_len: 36` | `null` | Identificador de la categoría de inscripción de los grupos con sus partidos ([ver](../registration-categories/index.html)). |
| `is_eliminated` | `boolean` | `contains: [yes/no, on/off, 1/0, true/false]` | `null` | Filtrar los grupos con sus partidos por estatus de eliminación. |
| `is_active` | `boolean` | `contains: [yes/no, on/off, 1/0, true/false]` | `null` | Filtrar los grupos con sus partidos por estatus de actividad. |

Ejemplo:

```bash
curl -X GET \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-API-KEY: API_KEY' \
  http://localhost:8080/v1/groups/matches?page=2&filterBy=name&orderBy=name&sortBy=asc&registration_category_id=21c13c24-af5d-45bd-9294-2de7e175ceee&is_eliminated=false&is_active=true
```

Respuesta de la petición:

```json
{
  "data": [
    {
      "group": {
        "id": "af30be04-7be1-47a9-afd7-c2faa611cf5a",
        "name": "A_2025",
        "description": "A",
        "is_eliminated": 0,
        "is_active": 1,
        "created_at": "2025-03-20 21:27:39",
        "updated_at": "2025-03-20 21:27:39",
        "registration_category": {
          "id": "21c13c24-af5d-45bd-9294-2de7e175ceee",
          "name": "seniors",
          "description": "50 y más"
        }
      },
      "matches": [
        {
          "match": {
            "id": "537b09ef-1f93-40cc-b774-8b454cae31f8",
            "is_active": 1,
            "created_at": "2025-03-20 21:27:39",
            "updated_at": "2025-03-20 21:27:39",
            "registration_category": {
              "id": "21c13c24-af5d-45bd-9294-2de7e175ceee",
              "name": "seniors",
              "description": "50 y más"
            },
            "match_category": {
              "id": "ad14f6d0-5296-4a6e-a986-6a99a20365b7",
              "name": "qualifier",
              "description": "Clasificación"
            },
            "match_status": {
              "id": "b06b08ff-0f65-456c-ae90-3dd740a26c9b",
              "name": "scheduled",
              "description": "Programado"
            }
          },
          "relationship": {
            "id": "fce0a11f-1550-465d-914f-a732ba531423",
            "group_id": "af30be04-7be1-47a9-afd7-c2faa611cf5a",
            "match_id": "537b09ef-1f93-40cc-b774-8b454cae31f8",
            "created_at": "2025-03-20 21:27:39",
            "updated_at": "2025-03-20 21:27:39"
          }
        },
        {
          "match": {
            "id": "5d9334eb-6f35-4c28-90bc-d7fe0ebbf50b",
            "is_active": 1,
            "created_at": "2025-03-20 21:27:39",
            "updated_at": "2025-03-20 21:27:39",
            "registration_category": {
              "id": "21c13c24-af5d-45bd-9294-2de7e175ceee",
              "name": "seniors",
              "description": "50 y más"
            },
            "match_category": {
              "id": "ad14f6d0-5296-4a6e-a986-6a99a20365b7",
              "name": "qualifier",
              "description": "Clasificación"
            },
            "match_status": {
              "id": "b06b08ff-0f65-456c-ae90-3dd740a26c9b",
              "name": "scheduled",
              "description": "Programado"
            }
          },
          "relationship": {
            "id": "4158d9fe-54ae-45c4-91fc-d5738880a0a7",
            "group_id": "af30be04-7be1-47a9-afd7-c2faa611cf5a",
            "match_id": "5d9334eb-6f35-4c28-90bc-d7fe0ebbf50b",
            "created_at": "2025-03-20 21:27:39",
            "updated_at": "2025-03-20 21:27:39"
          }
        },
        {
          "match": {
            "id": "fb905589-2dda-43f4-aed3-e7e4323bff36",
            "is_active": 1,
            "created_at": "2025-03-20 21:27:39",
            "updated_at": "2025-03-20 21:27:39",
            "registration_category": {
              "id": "21c13c24-af5d-45bd-9294-2de7e175ceee",
              "name": "seniors",
              "description": "50 y más"
            },
            "match_category": {
              "id": "ad14f6d0-5296-4a6e-a986-6a99a20365b7",
              "name": "qualifier",
              "description": "Clasificación"
            },
            "match_status": {
              "id": "b06b08ff-0f65-456c-ae90-3dd740a26c9b",
              "name": "scheduled",
              "description": "Programado"
            }
          },
          "relationship": {
            "id": "5dae6c51-e966-4d1a-87f0-ccf4fac0c3ca",
            "group_id": "af30be04-7be1-47a9-afd7-c2faa611cf5a",
            "match_id": "fb905589-2dda-43f4-aed3-e7e4323bff36",
            "created_at": "2025-03-20 21:27:39",
            "updated_at": "2025-03-20 21:27:39"
          }
        }
      ]
    },
    {
      "group": {
        "id": "fb983148-d4f6-41c3-8fb5-bda2146f7fa6",
        "name": "A_2025",
        "description": "A",
        "is_eliminated": 0,
        "is_active": 1,
        "created_at": "2025-03-20 21:27:39",
        "updated_at": "2025-03-20 21:27:39",
        "registration_category": {
          "id": "5d840f53-ffb0-427c-8554-bfff885d6b6a",
          "name": "open",
          "description": "Libre"
        }
      },
      "matches": [
        {
          "match": {
            "id": "0f5fed47-79d3-4428-bb3e-a3e69d196bdf",
            "is_active": 1,
            "created_at": "2025-03-20 21:27:39",
            "updated_at": "2025-03-20 21:27:39",
            "registration_category": {
              "id": "5d840f53-ffb0-427c-8554-bfff885d6b6a",
              "name": "open",
              "description": "Libre"
            },
            "match_category": {
              "id": "ad14f6d0-5296-4a6e-a986-6a99a20365b7",
              "name": "qualifier",
              "description": "Clasificación"
            },
            "match_status": {
              "id": "b06b08ff-0f65-456c-ae90-3dd740a26c9b",
              "name": "scheduled",
              "description": "Programado"
            }
          },
          "relationship": {
            "id": "8779d8d2-dcab-42f7-a886-2f855224b72c",
            "group_id": "fb983148-d4f6-41c3-8fb5-bda2146f7fa6",
            "match_id": "0f5fed47-79d3-4428-bb3e-a3e69d196bdf",
            "created_at": "2025-03-20 21:27:39",
            "updated_at": "2025-03-20 21:27:39"
          }
        },
        {
          "match": {
            "id": "5ef5e266-002f-4934-a11a-3fcb18d53394",
            "is_active": 1,
            "created_at": "2025-03-20 21:27:39",
            "updated_at": "2025-03-20 21:27:39",
            "registration_category": {
              "id": "5d840f53-ffb0-427c-8554-bfff885d6b6a",
              "name": "open",
              "description": "Libre"
            },
            "match_category": {
              "id": "ad14f6d0-5296-4a6e-a986-6a99a20365b7",
              "name": "qualifier",
              "description": "Clasificación"
            },
            "match_status": {
              "id": "b06b08ff-0f65-456c-ae90-3dd740a26c9b",
              "name": "scheduled",
              "description": "Programado"
            }
          },
          "relationship": {
            "id": "4e68dbaa-759e-47f0-a300-6b0630fe4d26",
            "group_id": "fb983148-d4f6-41c3-8fb5-bda2146f7fa6",
            "match_id": "5ef5e266-002f-4934-a11a-3fcb18d53394",
            "created_at": "2025-03-20 21:27:39",
            "updated_at": "2025-03-20 21:27:39"
          }
        },
        {
          "match": {
            "id": "66076df0-c5e6-4cab-a79a-ace28bb79421",
            "is_active": 1,
            "created_at": "2025-03-20 21:27:39",
            "updated_at": "2025-03-20 21:27:39",
            "registration_category": {
              "id": "5d840f53-ffb0-427c-8554-bfff885d6b6a",
              "name": "open",
              "description": "Libre"
            },
            "match_category": {
              "id": "ad14f6d0-5296-4a6e-a986-6a99a20365b7",
              "name": "qualifier",
              "description": "Clasificación"
            },
            "match_status": {
              "id": "b06b08ff-0f65-456c-ae90-3dd740a26c9b",
              "name": "scheduled",
              "description": "Programado"
            }
          },
          "relationship": {
            "id": "e9fb6819-991f-4891-a98f-c0c8ae9bc1d6",
            "group_id": "fb983148-d4f6-41c3-8fb5-bda2146f7fa6",
            "match_id": "66076df0-c5e6-4cab-a79a-ace28bb79421",
            "created_at": "2025-03-20 21:27:39",
            "updated_at": "2025-03-20 21:27:39"
          }
        },
        {
          "match": {
            "id": "876608be-f594-4911-98d2-49e9c05cbb99",
            "is_active": 1,
            "created_at": "2025-03-20 21:27:39",
            "updated_at": "2025-03-20 21:27:39",
            "registration_category": {
              "id": "5d840f53-ffb0-427c-8554-bfff885d6b6a",
              "name": "open",
              "description": "Libre"
            },
            "match_category": {
              "id": "ad14f6d0-5296-4a6e-a986-6a99a20365b7",
              "name": "qualifier",
              "description": "Clasificación"
            },
            "match_status": {
              "id": "b06b08ff-0f65-456c-ae90-3dd740a26c9b",
              "name": "scheduled",
              "description": "Programado"
            }
          },
          "relationship": {
            "id": "eb40d282-689a-4cb9-99f5-6c5ca50e0a64",
            "group_id": "fb983148-d4f6-41c3-8fb5-bda2146f7fa6",
            "match_id": "876608be-f594-4911-98d2-49e9c05cbb99",
            "created_at": "2025-03-20 21:27:39",
            "updated_at": "2025-03-20 21:27:39"
          }
        },
        {
          "match": {
            "id": "99348b26-8323-4674-81ea-4e6c93da5798",
            "is_active": 1,
            "created_at": "2025-03-20 21:27:39",
            "updated_at": "2025-03-20 21:27:39",
            "registration_category": {
              "id": "5d840f53-ffb0-427c-8554-bfff885d6b6a",
              "name": "open",
              "description": "Libre"
            },
            "match_category": {
              "id": "ad14f6d0-5296-4a6e-a986-6a99a20365b7",
              "name": "qualifier",
              "description": "Clasificación"
            },
            "match_status": {
              "id": "b06b08ff-0f65-456c-ae90-3dd740a26c9b",
              "name": "scheduled",
              "description": "Programado"
            }
          },
          "relationship": {
            "id": "a12c06fc-3b75-453d-99dd-884ce420d3dc",
            "group_id": "fb983148-d4f6-41c3-8fb5-bda2146f7fa6",
            "match_id": "99348b26-8323-4674-81ea-4e6c93da5798",
            "created_at": "2025-03-20 21:27:39",
            "updated_at": "2025-03-20 21:27:39"
          }
        },
        {
          "match": {
            "id": "b91a8d6b-9063-443d-a627-cc5e07fe6b2c",
            "is_active": 1,
            "created_at": "2025-03-20 21:27:39",
            "updated_at": "2025-03-20 21:27:39",
            "registration_category": {
              "id": "5d840f53-ffb0-427c-8554-bfff885d6b6a",
              "name": "open",
              "description": "Libre"
            },
            "match_category": {
              "id": "ad14f6d0-5296-4a6e-a986-6a99a20365b7",
              "name": "qualifier",
              "description": "Clasificación"
            },
            "match_status": {
              "id": "b06b08ff-0f65-456c-ae90-3dd740a26c9b",
              "name": "scheduled",
              "description": "Programado"
            }
          },
          "relationship": {
            "id": "ce404089-6724-41db-8b13-e66f1e32ec7a",
            "group_id": "fb983148-d4f6-41c3-8fb5-bda2146f7fa6",
            "match_id": "b91a8d6b-9063-443d-a627-cc5e07fe6b2c",
            "created_at": "2025-03-20 21:27:39",
            "updated_at": "2025-03-20 21:27:39"
          }
        }
      ]
    },
    ...
  ],
  "status": 200,
  "pagination": {
    "page": 1,
    "limit": 8,
    "total": 2,
    "count": 10,
    "offset": 0
  },
  "description": "Information about all the groups matches with pagination"
}
```


code:
# 👀 Partidos de un grupo

```
[GET] /v1/groups/@id/matches
```

Parámetros de la ruta:

| Parámetros | Tipo | Requerido | Descripción |
| ---------- | ---- | --------- | ----------- |
| `id` | `string` | `true` | Identificador del grupo. |

Ejemplo:

```bash
 curl -X GET \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-API-KEY: API_KEY' \
  http://localhost:8080/v1/groups/@id/matches
```

Respuesta de la petición:

```json
{
  "data": [
    {
      "match": {
        "id": "0f5fed47-79d3-4428-bb3e-a3e69d196bdf",
        "is_active": 1,
        "created_at": "2025-03-20 21:27:39",
        "updated_at": "2025-03-20 21:27:39",
        "registration_category": {
          "id": "5d840f53-ffb0-427c-8554-bfff885d6b6a",
          "name": "open",
          "description": "Libre"
        },
        "match_category": {
          "id": "ad14f6d0-5296-4a6e-a986-6a99a20365b7",
          "name": "qualifier",
          "description": "Clasificación"
        },
        "match_status": {
          "id": "b06b08ff-0f65-456c-ae90-3dd740a26c9b",
          "name": "scheduled",
          "description": "Programado"
        }
      },
      "relationship": {
        "id": "8779d8d2-dcab-42f7-a886-2f855224b72c",
        "group_id": "fb983148-d4f6-41c3-8fb5-bda2146f7fa6",
        "match_id": "0f5fed47-79d3-4428-bb3e-a3e69d196bdf",
        "created_at": "2025-03-20 21:27:39",
        "updated_at": "2025-03-20 21:27:39"
      }
    },
    {
      "match": {
        "id": "5ef5e266-002f-4934-a11a-3fcb18d53394",
        "is_active": 1,
        "created_at": "2025-03-20 21:27:39",
        "updated_at": "2025-03-20 21:27:39",
        "registration_category": {
          "id": "5d840f53-ffb0-427c-8554-bfff885d6b6a",
          "name": "open",
          "description": "Libre"
        },
        "match_category": {
          "id": "ad14f6d0-5296-4a6e-a986-6a99a20365b7",
          "name": "qualifier",
          "description": "Clasificación"
        },
        "match_status": {
          "id": "b06b08ff-0f65-456c-ae90-3dd740a26c9b",
          "name": "scheduled",
          "description": "Programado"
        }
      },
      "relationship": {
        "id": "4e68dbaa-759e-47f0-a300-6b0630fe4d26",
        "group_id": "fb983148-d4f6-41c3-8fb5-bda2146f7fa6",
        "match_id": "5ef5e266-002f-4934-a11a-3fcb18d53394",
        "created_at": "2025-03-20 21:27:39",
        "updated_at": "2025-03-20 21:27:39"
      }
    },
    ...
  ],
  "status": 200,
  "description": "Information about the group matches"
}
```


code:
# 👥 + 👫 Grupos y parejas

Grupos de parejas asignados.

```
[GET] /v1/groups/pairs
```

Parámetros de consulta:

| Parámetro | Tipo | Rango | Por defecto | Descripción |
| --------- | ---- | ----- | ----------- | ----------- |
| `page` | `integer` | `min_numeric: 1` | `1` | Número de la página de resultados de los grupos con sus parejas. |
| `filterBy` | `string` | `contains: [name, description]` | `name` | Campo de búsqueda de los grupos con sus parejas. |
| `orderBy` | `string` | `contains: [name, description, created_at, updated_at]` | `name` | Campo de ordenamiento de los grupos con sus parejas. |
| `sortBy` | `string` | `contains: [asc, desc]` | `asc` | Modo de ordenamiento de los grupos con sus parejas. |
| `registration_category_id` | `string` | `exact_len: 36` | `null` | Identificador de la categoría de inscripción de los grupos con sus parejas ([ver](../registration-categories/index.html)). |
| `is_eliminated` | `boolean` | `contains: [yes/no, on/off, 1/0, true/false]` | `null` | Filtrar los grupos con sus parejas por estatus de eliminación. |
| `is_active` | `boolean` | `contains: [yes/no, on/off, 1/0, true/false]` | `null` | Filtrar los grupos con sus parejas por estatus de actividad. |

Ejemplo:

```bash
curl -X GET \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-API-KEY: API_KEY' \
  http://localhost:8080/v1/groups/pairs?page=2&filterBy=name&orderBy=name&sortBy=asc&registration_category_id=cba89529-0ba9-49e4-85ad-83e63c8e9d7e&is_eliminated=false&is_active=true
```

Respuesta de la petición:

```json
{
  "data": [
    {
      "group": {
        "id": "2f0a8d32-0e8e-47a8-a7d5-5518150840a4",
        "name": "A_2025",
        "description": "A",
        "is_eliminated": 0,
        "is_active": 1,
        "created_at": "2025-03-18 14:41:31",
        "updated_at": "2025-03-18 14:41:31",
        "registration_category": {
          "id": "76d95a95-0fa3-4d58-a8ce-031a1db25b3c",
          "name": "open",
          "description": "Libre"
        }
      },
      "pairs": [
        {
          "pair": {
            "id": "cef12779-c452-48ac-8643-da4bc2a1b9e6",
            "is_eliminated": 0,
            "is_active": 1,
            "created_at": "2025-03-18 14:37:31",
            "updated_at": "2025-03-18 14:37:31",
            "registration_category": {
              "id": "76d95a95-0fa3-4d58-a8ce-031a1db25b3c",
              "name": "open",
              "description": "Libre"
            }
          },
          "relationship": {
            "id": "14e8b8d1-67ef-4ae0-b744-6cb9073e2117",
            "pair_id": "cef12779-c452-48ac-8643-da4bc2a1b9e6",
            "group_id": "2f0a8d32-0e8e-47a8-a7d5-5518150840a4",
            "created_at": "2025-03-18 14:41:31",
            "updated_at": "2025-03-18 14:41:31"
          }
        },
        {
          "pair": {
            "id": "09d70fe7-a834-4c08-a39b-edf33aa84e6a",
            "is_eliminated": 0,
            "is_active": 1,
            "created_at": "2025-03-18 14:37:30",
            "updated_at": "2025-03-18 14:37:30",
            "registration_category": {
              "id": "76d95a95-0fa3-4d58-a8ce-031a1db25b3c",
              "name": "open",
              "description": "Libre"
            }
          },
          "relationship": {
            "id": "5a2889d0-f8f5-4971-921c-b6b6cc9af7af",
            "pair_id": "09d70fe7-a834-4c08-a39b-edf33aa84e6a",
            "group_id": "2f0a8d32-0e8e-47a8-a7d5-5518150840a4",
            "created_at": "2025-03-18 14:41:31",
            "updated_at": "2025-03-18 14:41:31"
          }
        },
        {
          "pair": {
            "id": "cf5699f7-3b7e-45f1-b693-176f44d7d870",
            "is_eliminated": 0,
            "is_active": 1,
            "created_at": "2025-03-18 14:37:30",
            "updated_at": "2025-03-18 14:37:30",
            "registration_category": {
              "id": "76d95a95-0fa3-4d58-a8ce-031a1db25b3c",
              "name": "open",
              "description": "Libre"
            }
          },
          "relationship": {
            "id": "a027914d-ecc5-483a-ba9a-0b401f9ce1ea",
            "pair_id": "cf5699f7-3b7e-45f1-b693-176f44d7d870",
            "group_id": "2f0a8d32-0e8e-47a8-a7d5-5518150840a4",
            "created_at": "2025-03-18 14:41:31",
            "updated_at": "2025-03-18 14:41:31"
          }
        },
        {
          "pair": {
            "id": "b6fb3f1e-7c0a-4a35-ab1e-2ba95dc8bc29",
            "is_eliminated": 0,
            "is_active": 1,
            "created_at": "2025-03-18 14:37:31",
            "updated_at": "2025-03-18 14:37:31",
            "registration_category": {
              "id": "76d95a95-0fa3-4d58-a8ce-031a1db25b3c",
              "name": "open",
              "description": "Libre"
            }
          },
          "relationship": {
            "id": "deab84a1-0929-4336-80b5-5c749d03ba9f",
            "pair_id": "b6fb3f1e-7c0a-4a35-ab1e-2ba95dc8bc29",
            "group_id": "2f0a8d32-0e8e-47a8-a7d5-5518150840a4",
            "created_at": "2025-03-18 14:41:31",
            "updated_at": "2025-03-18 14:41:31"
          }
        }
      ]
    },
    {
      "group": {
        "id": "5a478de5-5be1-482f-8d44-b98a79d1552c",
        "name": "A_2025",
        "description": "A",
        "is_eliminated": 0,
        "is_active": 1,
        "created_at": "2025-03-18 14:41:31",
        "updated_at": "2025-03-18 14:41:31",
        "registration_category": {
          "id": "eb69a503-6eb3-4f20-b30b-c9a4762a8cfd",
          "name": "seniors",
          "description": "50 y más"
        }
      },
      "pairs": [
        {
          "pair": {
            "id": "ec922b7a-6984-474d-af7b-5afe16e8db5d",
            "is_eliminated": 0,
            "is_active": 1,
            "created_at": "2025-03-18 14:40:07",
            "updated_at": "2025-03-18 14:40:07",
            "registration_category": {
              "id": "eb69a503-6eb3-4f20-b30b-c9a4762a8cfd",
              "name": "seniors",
              "description": "50 y más"
            }
          },
          "relationship": {
            "id": "8812be18-60a0-447d-90c6-1b35554510d1",
            "pair_id": "ec922b7a-6984-474d-af7b-5afe16e8db5d",
            "group_id": "5a478de5-5be1-482f-8d44-b98a79d1552c",
            "created_at": "2025-03-18 14:41:31",
            "updated_at": "2025-03-18 14:41:31"
          }
        },
        {
          "pair": {
            "id": "6417ef86-4a3b-4ee8-b89e-1bbb48696e67",
            "is_eliminated": 0,
            "is_active": 1,
            "created_at": "2025-03-18 14:40:07",
            "updated_at": "2025-03-18 14:40:07",
            "registration_category": {
              "id": "eb69a503-6eb3-4f20-b30b-c9a4762a8cfd",
              "name": "seniors",
              "description": "50 y más"
            }
          },
          "relationship": {
            "id": "9a4e6ddd-ec57-491d-907f-b4b834f2da4d",
            "pair_id": "6417ef86-4a3b-4ee8-b89e-1bbb48696e67",
            "group_id": "5a478de5-5be1-482f-8d44-b98a79d1552c",
            "created_at": "2025-03-18 14:41:31",
            "updated_at": "2025-03-18 14:41:31"
          }
        },
        {
          "pair": {
            "id": "087a1273-19c8-4ccf-8751-b2db6811f1cc",
            "is_eliminated": 0,
            "is_active": 1,
            "created_at": "2025-03-18 14:40:07",
            "updated_at": "2025-03-18 14:40:07",
            "registration_category": {
              "id": "eb69a503-6eb3-4f20-b30b-c9a4762a8cfd",
              "name": "seniors",
              "description": "50 y más"
            }
          },
          "relationship": {
            "id": "d573b626-36e1-46fc-90ab-3adb51f0acb6",
            "pair_id": "087a1273-19c8-4ccf-8751-b2db6811f1cc",
            "group_id": "5a478de5-5be1-482f-8d44-b98a79d1552c",
            "created_at": "2025-03-18 14:41:31",
            "updated_at": "2025-03-18 14:41:31"
          }
        }
      ]
    },
    ...
  ],
  "status": 200,
  "pagination": {
    "page": 1,
    "limit": 8,
    "total": 2,
    "count": 10,
    "offset": 0
  },
  "description": "Information about all the groups pairs with pagination"
}
```