<commit_before># Modelo de datos

![Schema](https://github.com/gcba/hermes/raw/master/docs/images/schema.png)

Consta de 14 tablas, sin contar las necesarias para roles y permisos (no aparecen en la imagen) dado que éstas son creadas y manejadas automáticamente por un componente de autorización.

## Tablas

### User

El usuario del backend.

#### Relaciones

- **One-to-many** con User, a través de `modified_by`
- **Many-to-many** con App, a través de la tabla `User_App`

|Campos          |Tipo                  | FK?   | Null? |Unique?|Index? |
|----------------|----------------------|:-----:|:-----:|:-----:|:-----:|
|id              |int (PK)              |       |       |       |       |
|name            |varchar(70)           |       |       |       |       |
|email           |varchar(100)          |       |       |X      |       |
|password        |varchar(60)           |       |       |       |       |
|created_at      |timestamp             |       |       |       |       |
|modified_at     |timestamp             |       |X      |       |       |
|modified_by     |int                   |X      |X      |       |       |

### AppUser

#### Relaciones

- **Many-to-many** con App, a través de la tabla `AppUser_App`
- **Many-to-many** con Platform, a través de la tabla `AppUser_Platform`
- **Many-to-many** con Device, a través de la tabla `AppUser_Device`

El usuario de las apps que envía calificaciones y comentarios.

|Campos          |Tipo                  | FK?   | Null? |Unique?|Index? |
|----------------|----------------------|:-----:|:-----:|:-----:|:-----:|
|id              |int (PK)              |       |       |       |       |
|name            |varchar(70)           |       |       |       |       |
|email           |varchar(100)          |       |       |       |X      |
|miba_id         |int                   |       |       |X      |X      |
|created_at      |timestamp             |       |       |       |       |
|modified_at     |timestamp             |       |X      |       |       |

### App

Las apps sobre las que se envían calificaciones y comentarios.

#### Relaciones

- **One-to-many** con User, a través de `modified_by`
- **Many-to-many** con User, a través de la tabla `User_App`
- **Many-to-many** con Platform, a través de la tabla `App_Platform`
- **Many-to-many** con AppUser, a través de la tabla `AppUser_App`

|Campos          |Tipo                  | FK?   | Null? |Unique?|Index? |
|----------------|----------------------|:-----:|:-----:|:-----:|:-----:|
|id              |int (PK)              |       |       |       |       |
|name            |varchar(50)           |       |       |X      |X      |
|type            |char                  |       |       |       |       |
|key             |char(32)              |       |       |X      |       |
|created_at      |timestamp             |       |       |       |       |
|modified_at     |timestamp             |       |X      |       |       |
|modified_by     |int                   |X      |X      |       |       |

### Platform

La plataforma donde corren las apps y de donde provienen las calificaciones y comentarios.

#### Relaciones

- **Many-to-many** con App, a través de la tabla `App_Platform`
- **Many-to-many** con AppUser, a través de la tabla `AppUser_Platform`

|Campos          |Tipo                  | FK?   | Null? |Unique?|Index? |
|----------------|----------------------|:-----:|:-----:|:-----:|:-----:|
|id              |int (PK)              |       |       |       |       |
|name            |varchar(15)           |       |       |X      |       |
|key             |char(32)              |       |       |X      |       |
|created_at      |timestamp             |       |       |       |       |
|modified_at     |timestamp             |       |X      |       |       |

### Device

En el caso de las aplicaciones móviles, el dispositivo desde donde se enviaron las calificaciones y comentarios.

#### Relaciones

- **One-to-many** con Brand, a través de `brand_id`
- **Many-to-many** con AppUser, a través de la tabla `AppUser_Device`

|Campos          |Tipo                  | FK?   | Null? |Unique?|Index? |
|----------------|----------------------|:-----:|:-----:|:-----:|:-----:|
|id              |int (PK)              |       |       |       |       |
|name            |varchar(30)           |       |       |X      |X      |
|screen_width    |int                   |       |       |       |       |
|screen_heigth   |int                   |       |       |       |       |
|ppi             |real                  |       |X      |       |       |
|brand_id        |int                   |X      |X      |       |X      |
|platform_id     |int                   |X      |X      |       |X      |
|created_at      |timestamp             |       |       |       |       |
|modified_at     |timestamp             |       |X      |       |       |

### User_App

Tabla intermedia para la relación many-to-many entre User y App.

|Campos          |Tipo                  |Default| FK?   | Null? |Unique?|Index? |
|----------------|----------------------|-------|:-----:|:-----:|:-----:|:-----:|
|id              |int (PK)              |       |       |       |       |       |
|is_owner        |bool                  |false  |       |       |       |       |
|user_id         |int                   |       |X      |       |       |X      |
|app_id          |int                   |       |X      |       |       |X      |

### App_Platform

Tabla intermedia para la relación many-to-many entre App y Platform.

|Campos          |Tipo                  | FK?   | Null? |Unique?|Index? |
|----------------|----------------------|:-----:|:-----:|:-----:|:-----:|
|id              |int (PK)              |       |       |       |       |
|app_id          |int                   |X      |       |       |X      |<commit_msg>Fixed table name<commit_after># Modelo de datos

![Schema](https://github.com/gcba/hermes/raw/master/docs/images/schema.png)

Consta de 14 tablas, sin contar las necesarias para roles y permisos (no aparecen en la imagen) dado que éstas son creadas y manejadas automáticamente por un componente de autorización.

## Tablas

### User

El usuario del backend.

#### Relaciones

- **One-to-many** con User, a través de `modified_by`
- **Many-to-many** con App, a través de la tabla `App_User`

|Campos          |Tipo                  | FK?   | Null? |Unique?|Index? |
|----------------|----------------------|:-----:|:-----:|:-----:|:-----:|
|id              |int (PK)              |       |       |       |       |
|name            |varchar(70)           |       |       |       |       |
|email           |varchar(100)          |       |       |X      |       |
|password        |varchar(60)           |       |       |       |       |
|created_at      |timestamp             |       |       |       |       |
|modified_at     |timestamp             |       |X      |       |       |
|modified_by     |int                   |X      |X      |       |       |

### AppUser

#### Relaciones

- **Many-to-many** con App, a través de la tabla `AppUser_App`
- **Many-to-many** con Platform, a través de la tabla `AppUser_Platform`
- **Many-to-many** con Device, a través de la tabla `AppUser_Device`

El usuario de las apps que envía calificaciones y comentarios.

|Campos          |Tipo                  | FK?   | Null? |Unique?|Index? |
|----------------|----------------------|:-----:|:-----:|:-----:|:-----:|
|id              |int (PK)              |       |       |       |       |
|name            |varchar(70)           |       |       |       |       |
|email           |varchar(100)          |       |       |       |X      |
|miba_id         |int                   |       |       |X      |X      |
|created_at      |timestamp             |       |       |       |       |
|modified_at     |timestamp             |       |X      |       |       |

### App

Las apps sobre las que se envían calificaciones y comentarios.

#### Relaciones

- **One-to-many** con User, a través de `modified_by`
- **Many-to-many** con User, a través de la tabla `App_User`
- **Many-to-many** con Platform, a través de la tabla `App_Platform`
- **Many-to-many** con AppUser, a través de la tabla `AppUser_App`

|Campos          |Tipo                  | FK?   | Null? |Unique?|Index? |
|----------------|----------------------|:-----:|:-----:|:-----:|:-----:|
|id              |int (PK)              |       |       |       |       |
|name            |varchar(50)           |       |       |X      |X      |
|type            |char                  |       |       |       |       |
|key             |char(32)              |       |       |X      |       |
|created_at      |timestamp             |       |       |       |       |
|modified_at     |timestamp             |       |X      |       |       |
|modified_by     |int                   |X      |X      |       |       |

### Platform

La plataforma donde corren las apps y de donde provienen las calificaciones y comentarios.

#### Relaciones

- **Many-to-many** con App, a través de la tabla `App_Platform`
- **Many-to-many** con AppUser, a través de la tabla `AppUser_Platform`

|Campos          |Tipo                  | FK?   | Null? |Unique?|Index? |
|----------------|----------------------|:-----:|:-----:|:-----:|:-----:|
|id              |int (PK)              |       |       |       |       |
|name            |varchar(15)           |       |       |X      |       |
|key             |char(32)              |       |       |X      |       |
|created_at      |timestamp             |       |       |       |       |
|modified_at     |timestamp             |       |X      |       |       |

### Device

En el caso de las aplicaciones móviles, el dispositivo desde donde se enviaron las calificaciones y comentarios.

#### Relaciones

- **One-to-many** con Brand, a través de `brand_id`
- **Many-to-many** con AppUser, a través de la tabla `AppUser_Device`

|Campos          |Tipo                  | FK?   | Null? |Unique?|Index? |
|----------------|----------------------|:-----:|:-----:|:-----:|:-----:|
|id              |int (PK)              |       |       |       |       |
|name            |varchar(30)           |       |       |X      |X      |
|screen_width    |int                   |       |       |       |       |
|screen_heigth   |int                   |       |       |       |       |
|ppi             |real                  |       |X      |       |       |
|brand_id        |int                   |X      |X      |       |X      |
|platform_id     |int                   |X      |X      |       |X      |
|created_at      |timestamp             |       |       |       |       |
|modified_at     |timestamp             |       |X      |       |       |

### App_User

Tabla intermedia para la relación many-to-many entre User y App.

|Campos          |Tipo                  |Default| FK?   | Null? |Unique?|Index? |
|----------------|----------------------|-------|:-----:|:-----:|:-----:|:-----:|
|id              |int (PK)              |       |       |       |       |       |
|is_owner        |bool                  |false  |       |       |       |       |
|user_id         |int                   |       |X      |       |       |X      |
|app_id          |int                   |       |X      |       |       |X      |

### App_Platform

Tabla intermedia para la relación many-to-many entre App y Platform.

|Campos          |Tipo                  | FK?   | Null? |Unique?|Index? |
|----------------|----------------------|:-----:|:-----:|:-----:|:-----:|
|id              |int (PK)              |       |       |       |       |
|app_id          |int                   |X      |       |       |X      |
{'fraction_non_alphanumeric': 0.191505660056175, 'fraction_numerical': 0.0040854540811984, 'mean_word_length': 0.8701257361133217, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 137, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1171287', 'n_tokens_mistral': 3537, 'n_tokens_neox': 3471, 'n_words': 784}