owned this note
owned this note
Published
Linked with GitHub
## DisperZion
### Origen
Durante algunos años no han sido pocos los intentos por crear la comunidad de __MatCom__, esa que estaría conformada por los egresados de la facultad y todos los que anhelan engrosarla algún día. Con la llegada del Internet apareció el grupo de Telegram _"MatCom Alumni"_, el cual ha sido parte esencial de este subconjunto disperso por el mundo y en el cual surgió la idea que presentamos a continuación.
### El Producto
**DisperZion** es una aplicación web que tiene funcionalidades básicas como registrarse o acceder para los usuarios, un perfil simple y la atracción principal: _Un mapa_ que contiene la ubicación por países de la locación de los usuarios registrados en el sitio.
#### Objetivo
Durante mucho tiempo se ha especulado que el 70% o más de los egresados de MatCom no viven en Cuba. Esta cifra se mantiene incierta ya que no tenemos manera alguna de probarlo, pero aspiramos a que esta aplicación pueda ayudar a precisar un poco más sobre el tema.
#### _Nota_:
_El producto, una aplicacion sencilla en concepto, puede ser enriquecido por los equipos que participen. En este documento se presenta una definición básica de lo que queremos lograr, lo cual no impide que cada desarrollador pueda agregar funcionalidades extras o cumplir con los requerimientos de una manera diferente a la propuesta._ (__Ej__: Usar numero de teléfono o nombre de usuario, en vez de correo para la autenticación, GPDR, etc)
#### Funcionalidades mínimas de la aplicación
- Login
- Register
- Perfil de usuario
- Información adicional (decisión de cada equipo)
- Implementación del Mapa de usuarios (solo visible para usuarios registrados en la app)
- Implementación de los cálculos por países (decisión de los equipos qué calcular aquí)
- API externo (GraphQL/JSON) para apps externas **(Por definir)**
###### Caso de uso registro:
1. Registro
2. Redirección al perfil del usuario
3. Redirección al mapa
4. Link al dashboard con las estadísticas
5. ***Todo lo que el equipo quiera implementar***
###### Caso de uso login:
1. Login
2. Redirección al mapa
3. Link al dashboard con las estadísticas
4. ***Todo lo que el equipo quiera implementar***
#### Requerimientos mínimos
- Pipeline básico en Gitlab (incluye deployment automático).
- Tests Suite.
- Documentación / Wiki.
- Plan de desarrollo de la app (milestones, tickets, boards, etc.)
- App running on production.
#### Reglas
El Proyecto puede ser desarrollado usando cualquier Stack. Es obvio que el problema se puede resolver con Forms y Sheets de Google, pero la idea es competir entre varios equipos para hacer la aplicación mejor si es posible. Y muy importante, fomentar el networking, las buenas prácticas y la organización entre los participantes.
1. El proyecto será desarrollado en 2 semanas -> Esta anotación es principalmente para aquellos que tienen trabajo full-time y quieren participar.
2. Los equipos pueden tener hasta 10 personas.
3. Los equipos deben tener diferentes Stacks, de otra manera tendría sentido que 2 equipos con el mismo Stack se unan.
4. Las funcionalidades extras son creadas e implementadas por los equipos siempre y cuando las funcionalidades básicas estén listas.
5. Los team leaders son los responsables de transmitir cualquier problema en sus equipos. _Por favor, no inundemos el canal con discusiones particulares de los equipos :D_
6. Los medios de comunicación y la estrategia de comunicación son responsabilidades del equipo.
7. Diseños, presentaciones y todo lo que los equipos puedan aportar a sus proyectos son bienvenidos.
## DisperZion API
#### JSON
**Users**:
```
path: GET /users
params:
page (Integer) default: 1
per_page (Integer) default: 25
```
**Response**:
```json
[
{
id: 3,
email: 'testuser@diperzion.dev',
name: 'test user',
country: { name: 'Cuba' }
},
{
id: 5,
email: 'anothertestuser@diperzion.dev',
name: 'another test user',
country: { name: 'Brazil' }
},
...
]
```
**Nota**: Aquellos que es su implementacion definan varios paises deberan presentar `countries` en vez de `country` y el campo seria `Array`
```json
[
{
id: 3,
email: 'testuser@diperzion.dev',
name: 'test user',
countries: [
{ name: 'Cuba' },
{ name: 'Germany' }
]
},
...
]
```
#### GraphQL
**Users Query**:
```grapqhl
{
users {
id,
email,
name,
country {
name
}
}
}
```
**Response**:
```json
{
data: {
users: [
{
id: 3,
email: 'testuser@diperzion.dev',
name: 'test user',
country: {
name: 'Cuba'
}
}
]
}
}
```
**Nota**: Aquellos que es su implementacion definan varios paises deberan presentar `countries` en vez de `country` y el campo seria `Array`
```json
{
data: {
users: [
{
id: 3,
email: 'testuser@diperzion.dev',
name: 'test user',
countries: [
{ name: 'Cuba' },
{ name: 'Germany' }
]
},
...
]
}
}
```