Skip to content
This repository has been archived by the owner on Jan 25, 2022. It is now read-only.

Comunicaciones internas

Guillermo Facundo (Willy) edited this page Feb 27, 2021 · 8 revisions

Kafka

Nombre Descripcion Topico Key Message Emisor Receptor(es)
topics Topicos detectados por el sistema de topic modeling topics <id_post> ["topic_a", "topic_b"] topicmodelingservice PostsService
offensive Respuesta del sistema de detección de texto ofensivo offensive_text <id_post> true|false offensivetextdetectionservice PostsService
lang_detection Respuesta del sistema de detección de idioma lang_detection <id_post> "idioma (ISO Code)" langdetectionservice PostsService
new_post Notificacion de que se ha creado un nuevo post post <id_post> "texto del post" PostsService lang/topics/offensive services
logging Envio de logs service_logs <nombre_servicio_emisor> "el log a enviar" Todos los Servicios logstash

Soap

StatisticsService

1.- Añadir un post

/soap/addPost

Ejemplo de entrada

idioma: "es"

2.- Añadir un 'registro' de usuario

/soap/addRegisteredUser

Ejemplo de entrada

TODO: ver después

3.- Añadir un chat creado

/soap/addCreatedChat

4.- Añadir un follow de usuario

/soap/addFollow

5.- Nueva traducción de un usuario

/soap/addTranslation

Meter id usuario

6.- Nuevo tts de un usuario

/soap/addTextToSpeech

Meter id usuario

Ejemplo de entrada

follower: <id_usuario_follower>,  // el que sigue
followee: <id_usuario_followee>   // al que le siguen

REST

PostsService

1.- Listado de posts con paginación + filtros

GET: /api/posts

Query params:

  • Limit (int): Numero de resultados por consulta (default=10)
  • Offset (int): A partir de qué post se devuelve resultado (default=0)
  • User (long): ID del usuario del que queremos obtener los posts
  • Language (string): String del lenguaje de los posts a obtener

Resultado válido:

{
	“links”: {
		“self”: “url_actual”,
		“first”: “url_primeros_elementos”,
		“prev”: “url_pagina_anterior”,
		“next”: “url_pagina_siguiente”,
		“last”: “url_ultima_pagina”
	},
	“count”: 10,
	“total”: 500,
	“posts”: [
	{
		id: 1,
		content: “”,
		language: “en”,
		topics: [
			“topic_a”, “other topic”, “sample”
		],
		is_offensive: false,
		likes: 150,
		user: <id_usuario_autor>
	},
	…
	{
		id: 10,
		…
	}
	]
}

2.- Obtener datos de un post

GET: /api/posts/

Resultado válido:

{
	id: 1,
	content: “”,
	language: “en”,
	topics: [
		“topic_a”, “other topic”, “sample”
	],
	is_offensive: false,
	likes: 150,
	user: <id_usuario_autor>
}

3.- Crear un nuevo post

POST: /api/posts

Los campos de idioma, id, topics, is_offensive y likes los crea automáticamente el servicio, por lo que no hace falta introducir mucha info aquí.

Ejemplo de entrada (body):

{		
	content: “”,
	user: <id_usuario_autor>
}

Resultado válido:

201 - Created

4.- Eliminar un post existente

DELETE: /api/posts/

Resultado válido:

Código deleted


StatisticsService

1.- Obtener estadísticas del sistema

GET: /api/statistics

Resultado válido:

[{
    "registeredUsers": {
       "total": 11,
       "learning": {
           "en": 6,
           "es": 7
       },
       "native": {
           "es": 10,
           "ru": 1
       }
    },
    "createdPosts": {
        "total": 100,
        "en": 5,
        "es": 6,
        ...
    },
    "createdChats": 7
}]

2.- Obtener estadísticas de un usuario

GET: /api/users/<id>/statistics

Resultado válido

[
{
    "createdPosts": {
        "total": 100,
        "en": 5,
        "es": 6,
        ...
    },
    "numFollowing": 10,
    "numFollowers": 5
    "translationsMade": 20,
    "textToSpeechMade": 10
}
]

UsersService

1.- Listado de usuarios con paginación + filtros

GET: /api/users

Query params:

  • Limit (int): Numero de resultados por consulta (default=10)
  • Offset (int): A partir de qué post se devuelve resultado (default=0)
  • MinAge (int): Edad mínima de los usuarios a buscar
  • MaxAge (int): Edad máxima de los usuarios a buscar
  • WantsToLearn (string[]): Lista de idiomas (ISO) que está aprendiendo los usuarios (or)
  • Speaks (string[]): Lista de idiomas (ISO) que hablan los usuario (or)

Resultado válido:

{
    "links": {
        "self": "",
        "first": "",
        "prev": "",
        "next": "",
        "last": ""
    },
    "hits": 2,
    "total": 2,
    "users": [
        {
            "id": 1,
            "username": "pedro",
            "name": "pedro",
            "surname": "suarez",
            "learning": [
                "es",
                "en"
            ],
            "speaks": "",
            "birthDate": "1970-01-02T10:17:36.789+00:00",
            "avatar": ""
        },
        {
            "id": 3,
            "username": "pedro3",
            "name": "pedro",
            "surname": "suarez",
            "learning": [
                "es",
                "en",
                "ru"
            ],
            "speaks": "cat",
            "birthDate": "1614416676",
            "avatar": ""
        }
    ]
}

200 OK

Resultados inválidos

N/A

2.- Obtener usuario específico

GET: /api/users/<id>

Resultado válido:

{
            "id": 1,
            "username": "pedro",
            "name": "pedro",
            "surname": "suarez",
            "learning": [
                "es",
                "en"
            ],
            "speaks": [],
            "birthDate": 1233254568,
            "avatar": ""
        }

Resultados inválidos

404: Not found

3.- Crear un usuario

POST: /api/users/

Ejemplo de entrada

{
     "username": "pepiiii",
     "password": "admin123",
     "email": "[email protected]",
     "name": "Pepito",
     "surname": "Sanchez Perez"
     "learning": [“en”, "ru"],
     "speaks": "es",
     "birthDate": "<long_time_since_epoch>",
     "avatar": b"imagenCodificadaEnBase64"
}

Resultado válido

201 - Created En la cabecera -> link al recurso { "name": "Pepito", "surname": "Sanchez Perez" "learning": [“en”, "ru"], "speaks": "es", "birthDate": "<long_time_since_epoch>", "avatar": b"imagenCodificadaEnBase64", "followers": [], "following": [] }

Resultado inválido

409 - Conflict: Si el email o el username ya existen.

4.- Editar un usuario

PUT: /api/users/<id>

Ejemplo de entrada

{
     "learning": [“en”, "ru"],
     "speaks": "es",
     "avatar": b"imagenCodificadaEnBase64",
     "following": ["<id_siguiendo1>", "<id_siguiendo2>", ..., "<id_siguiendon>"],
     "followers": ["<id_seguidor1>", "<id_seguidor2>", ..., "<id_seguidorn>"]
}

Resultado válido

200 - Ok (actualización completada) 204 - No Content (no enviaste nada, no hubo nada que actualizar)

Resultado inválido

404 - Not Found

5.- Eliminar un usuario

DELETE: /api/users/

#### Resultado válido 200 - Ok

Resultado inválido

404 - Not Found

ChatsService

1.- Consultar los chats de un usuario

GET: /api/chats

En la cabecera viene el usuario del que sacar los chats.

Resultado válido

[
   {
       "id": 1,
       "lastUpdated": <long_time_since_epoch>,
       "messages": "<url_get_messages>" (/api/chats/1/messages),
       "user1": "<url_get_user1>",
       "user2": "<url_get_user2>"
   },
   ...
]

200 ok

Resultado inválido

N/A

2.- Consultar los mensajes de un chat

GET: /api/chats/<id>/messages

Importante comprobar que en el pasaporte el usuario tenga permisos para ver los chats (p.ej. si es un chat entre menganito y fulanito, que paco no lo pueda ver).

[
   {
       "id": 1,
       "createdAt": <long_time_since_epoch>,
       "text": "Hola, Buenas",
       "sender": "<url_get_user>"
   },
   {
       "id": 2,
       "createdAt": <long_time_since_epoch>,
       "text": "respuesta",
       "sender": "<url_get_user>"
   },
   ...
]

Resultado inválido

404 - Not Found: El chat no existe 401 - Unauthorized: Si un usuario intenta ver mensajes en un chat en el que no participa.

3.- Añadir mensaje a un chat

POST: /api/chats/<id>/messages

Ejemplo de entrada (body)

El id del usuario autor del mensaje viene en el header. Habría que cogerlo y añadirlo al mensaje.

{
    "text": "Hola, Buenas"
}

Resultado válido

201 - Created En la cabecera -> link al recurso

   {
       "id": 1,
       "createdAt": <long_time_since_epoch>,
       "text": "Hola, Buenas",
       "sender": "<url_get_user>"
   }

Resultado inválido

404 - Not Found: El chat no existe 401 - Unauthorized: Si un usuario intenta crear un mensaje en un chat en el que no participa.


TranslationService

1.- Realizar una traducción

POST: /api/translations

Ejemplo de entrada (body)

{
	"sourceLanguage": "es",
	"targetLanguage": "en",
	"text": "texto a traducir"
}

Respuesta válida

{
    "sourceLanguage": "es",
    "targetLanguage": "en",
    "text": "texto a traducir",
    "translation": "text to translate"
}

Respuesta inválida

429 - Too Many Requests: Se nos acabó la plata

TextToSpeechService

1.- Convertir texto a audio

POST: /api/textsToSpeeches

Ejemplo de entrada (body)

{
	“language”: “<codigo-idioma>”,
	“text”: “texto a ttsear”
}

Respuesta válida

{
	“result”: “<audio codificado de alguna manera. Depende de la api…>”
}

Respuesta inválida

429 - Too Many Requests Se nos acabó la plata

Clone this wiki locally