ChatMessage


Un mensaje dentro de una ChatRoom, escrito por una Account (author). type es text o image; en image, message guarda la URL del archivo subido. Usa soft delete.

Entrega y lectura

is_delivered / is_read indican si este mensaje fue entregado o leído por los demás miembros: se compara su id con el menor last_delivered_message_id / last_read_message_id del resto de miembros (se ignora al autor). is_mine indica si lo escribió la cuenta autenticada. Los endpoints set-delivered / set-read avanzan esos punteros para el miembro actual.

Notas y gotchas

  • last_delivered_message_id / last_read_message_id del mensaje son agregados calculados (mínimo entre los demás miembros), no columnas.
  • loggedAccountMember está en $hidden.

Estructura de Datos

Atributo Tipo Descripción
id int
created_at datetime\|null
updated_at datetime\|null
deleted_at datetime\|null
author_id int {@link Account} que escribió el mensaje
room_id int {@link ChatRoom} del mensaje
message string Texto del mensaje, o URL del archivo si type = image
type string Tipo del mensaje: text o image
allLogs ApiLog>
author Account {@link Account} autora del mensaje
channel string Canal de websocket de la sala
is_delivered bool\|null Si el mensaje fue entregado a los demás miembros
is_mine bool\|null Si lo escribió la cuenta autenticada
is_read bool\|null Si el mensaje fue leído por los demás miembros
last_delivered_message_id int Menor puntero de entrega entre los demás miembros (agregado)
last_read_message_id int Menor puntero de lectura entre los demás miembros (agregado)
loggedAccountMember ChatMember\|null Miembro correspondiente a la cuenta autenticada (oculto)
logs ApiLog>
members ChatMember> Miembros de la sala del mensaje
room ChatRoom {@link ChatRoom} del mensaje
{
    "id": 1,
    "created_at": "2022-07-14 16:38:51",
    "updated_at": "2022-07-14 16:38:51",
    "deleted_at": null,
    "author_id": 753,
    "room_id": 1,
    "message": "Porfa, no te comas mi hamburguesa",
    "type": "text",
    "is_delivered": true,
    "is_read": true,
    "is_mine": false,
    "last_delivered_message_id": 981,
    "last_read_message_id": 981,
    "channel": "private-ch-1"
}

Endpoints

Insertar ChatMessage

Insertar ChatMessage de ChatRoom

Enviar mensaje a una sala

Publica un mensaje (text, o image con el archivo en image) en la ChatRoom indicada.

Método URI Cabeceras
POST /companies/{companyId}/chat-rooms/{chatRoomId}/chat-messages Authorization
{
    "message": "required_if:type,text|string|max:8192",
    "image": "required_if:type,image|image|mimes:jpeg,png,bmp|max:4096",
    "type": "string|in:text,image"
}

Errores de negocio

Código HTTP Cuándo ocurre
EC030 400 La cuenta no es miembro de la sala.
EC031 400 El miembro está restringido para escribir.
EC032 400 La sala no está activa.

Listar ChatMessage

Listar ChatMessage de ChatRoom

{info} Soporta: Paginación Filters Carga dinámica

Listar mensajes de una sala

Mensajes de la ChatRoom indicada, paginados. Si el llamador es miembro, ve su propio hilo; al pedir la primera página se marca como entregado el mensaje más reciente para ese miembro.

Método URI Cabeceras
GET /companies/{companyId}/chat-rooms/{chatRoomId}/chat-messages Authorization

Acciones de ChatMessage

Listar mensajes de un chat directo

{info} Soporta: Paginación Filters Carga dinámica

Mensajes del chat directo entre la cuenta autenticada y la cuenta indicada. Falla si aún no existe la sala directa.

Método URI Cabeceras
GET /companies/{companyId}/accounts/{userId}/chat-messages Authorization

Listar mensajes del chat de una orden

{info} Soporta: Paginación Filters Carga dinámica

Mensajes de la ChatRoom asociada a la Order indicada.

Método URI Cabeceras
GET /companies/{companyId}/orders/{orderId}/chat-messages Authorization

Listar mensajes del chat de una asignación

{info} Soporta: Paginación Filters Carga dinámica

Mensajes de la ChatRoom asociada al OrderProvider indicado (chat entre cliente y repartidor de esa asignación).

Método URI Cabeceras
GET /companies/{companyId}/order-providers/{orderProviderId}/chat-messages Authorization

Enviar mensaje directo a una cuenta

Publica un mensaje en el chat directo con la cuenta indicada; crea la sala y las membresías si aún no existían.

Método URI Cabeceras
POST /companies/{companyId}/accounts/{userId}/chat-messages Authorization
{
    "message": "required_if:type,text|string|max:8192",
    "image": "required_if:type,image|image|mimes:jpeg,png,bmp|max:4096",
    "type": "string|in:text,image"
}

Errores de negocio

Código HTTP Cuándo ocurre
EC030 400 La cuenta no es miembro de la sala.
EC031 400 El miembro está restringido para escribir.
EC032 400 La sala no está activa.

Enviar mensaje al chat de una orden

Publica un mensaje en la ChatRoom de la Order; crea la sala y suma al cliente (y al admin) si hace falta. Solo se admite un administrador por sala.

Método URI Cabeceras
POST /companies/{companyId}/orders/{orderId}/chat-messages Authorization
{
    "message": "required_if:type,text|string|max:8192",
    "image": "required_if:type,image|image|mimes:jpeg,png,bmp|max:4096",
    "type": "string|in:text,image"
}

Errores de negocio

Código HTTP Cuándo ocurre
EC033 400 Ya hay otro administrador en la sala de la orden.
EC030 400 La cuenta no es miembro de la sala.
EC031 400 El miembro está restringido para escribir.
EC032 400 La sala no está activa.

Enviar mensaje al chat de una asignación

Publica un mensaje en la ChatRoom del OrderProvider; crea la sala con el cliente y el repartidor si no existía.

Método URI Cabeceras
POST /companies/{companyId}/order-providers/{orderProviderId}/chat-messages Authorization
{
    "message": "required_if:type,text|string|max:8192",
    "image": "required_if:type,image|image|mimes:jpeg,png,bmp|max:4096",
    "type": "string|in:text,image"
}

Errores de negocio

Código HTTP Cuándo ocurre
EC030 400 La cuenta no es miembro de la sala.
EC031 400 El miembro está restringido para escribir.
EC032 400 La sala no está activa.

Marcar mensaje como entregado

Avanza el puntero de entrega del miembro actual hasta este ChatMessage. Devuelve la ChatMember actualizada.

Método URI Cabeceras
POST /companies/{companyId}/chat-messages/{chatMessageId}/set-delivered Authorization

Marcar mensaje como leído

Avanza el puntero de lectura del miembro actual hasta este ChatMessage (y, con él, el de entrega). Devuelve la ChatMember actualizada.

Método URI Cabeceras
POST /companies/{companyId}/chat-messages/{chatMessageId}/set-read Authorization

Relaciones