Fork me on GitHub

O Mural é o cerne da comunicação dentro do Redu. Através dele os usuários podem postar comentários, respostas e pedidos de ajuda. Além disso o Mural é o meio pelo qual as movimentações do sistema são mostradas. No contexto da API, qualquer elemento mostrado no Mural é chamado de status.

Tipos de status

O recurso que representa uma movimentação no Redu é o status. Dependendo do tipo de movimentação, o status possui um tipo (diferenciado através do type) diferente.

Todos os tipos de Status possuem as seguintes propriedades:

Atributo Descrição Exemplo
id Identificador único do Status 1
type Tipo do status Activity, Help, Answer e Log
created_at Data de criação do Status 2013-03-13T23:47:25-03:00
user Representação do User que criou o status Ver User
text Texto escrito pelo usuário ou mensagem do sistema "adicionou a sua rede de contatos"

Tipo Activity

Status com o tipo Activity são um tipo de movimentação explicitamente criada pelo usuário. Por exemplo, um post no mural da disciplina ou do usuário cria um status do tipo Activity. Este é o tipo mais comum de status.

O Status do tipo Activity pode ser respondido por outras pessoas. Tais respostas estão acessíveis através do link answers. Além disso, o Activity se relaciona com user e statusable. Ver exemplos abaixo:

Link Descrição Exemplo
user Link para o usuário que criou o status http://www.redu.com.br/api/users/guiocavalcanti
answers Link para respostas do Activity http://www.redu.com.br/api/statuses/107070/answers
statusable Link para o recurso onde o Activity foi criado http://www.redu.com.br/api/lectures/5874-apresentacao. Pode ser User, Space ou Lecture
self Link para o Activity sendo visualizado http://www.redu.com.br/api/statuses/1212
Atributo Descrição Exemplo
answers_count Quantidade de resposta 3

Tipo Help

Bem parecido com o Activity, Status do tipo Help representam pedidos de ajuda ou perguntas dos usuários. Eles só podem ser criados nos murais das aulas (lecture). No fim do dia, Status com o tipo Help têm a mesma função do Activity, só há uma restrição dos locais onde eles podem ser criados e a representação na interface (ver figura).

O Status do tipo Help também pode ser respondido por outras pessoas. Tais respostas estão acessíveis através do link answers. Além disso, o Help se relaciona com user e statusable através de link. Ver exemplos abaixo:

Link Descrição Exemplo
user Link para o usuário que criou o status http://www.redu.com.br/api/users/guiocavalcanti
answers Link para respostas do Help http://www.redu.com.br/api/statuses/107070/answers
statusable Link para o recurso onde o Help foi criado http://www.redu.com.br/api/lectures/5874-apresentacao. Pode ser apenas uma Lecture
self Link para o Help sendo visualizado http://www.redu.com.br/api/statuses/1212
Atributo Descrição Exemplo
answers_count Quantidade de resposta 7

Tipo Answer

Como dito acima, os Activity e Help podem ser respondidos por outros usuários. É aí que precisamos do Status do tipo Answer. Eles se relacionam com um Status através do link in_response_to. Diferente dos Activity e Help, os Answer não podem ser respondidos.

Link Descrição Exemplo
user Link para o usuário que criou o status http://www.redu.com.br/api/users/guiocavalcanti
in_response_to Link do Activity ou Help que originou esta resposta http://www.redu.com.br/api/statuses/107070/answers
self Link para o Answer sendo visualizado http://www.redu.com.br/api/statuses/1212
Atributo Descrição Exemplo
id Identificador único do Status 1
type Tipo do status Activity, Help, Answer e Log
created_at Data de criação do Status 2013-03-13T23:47:25-03:00
user Representação do User que criou o status Ver User
text Texto escrito pelo usuário ou mensagem do sistema "adicionou a sua rede de contatos"

Tipo Log

Este é o único tipo de Status que independe da ação do usuário para serem criados. O Status tipo Log são gerados automáticamente pelo Redu quando certos tipos de ações ocorrem. Por exemplo, quando o usuário atualiza seu perfil no Redu, um Log é criado representando esta ação.

Em geral Logs são utilizados para representar as alterações dos usuários no Redu. As ações que criam Logs são:

  • Adição de Aulas num Módulo (logeable_type Lecture)
  • Criação de Módulo (logeable_type Subject)
  • Criação de Curso (logeable_type Course)
  • Matrícula no Curso (logeable_type Enrollment)
  • Modificação do perfil do Usuário no Curso (logeable_type User)
  • Requisição de conexão no Curso (logeable_type Friendship)

Além dos atributos que o Activity, Help e Answer possuem, o Log possui um atributo logeable_type que representa o tipo do objeto ao qual o Log está associado. Por exemplo, a criação de uma aula gera um Log cujo o logeable_type é Lecture. Além disso, o Log tem associado a sí um link para o logeable. No exemplo dado anteriormente o link logeable conteria o endereço para a aula criada.

GET /api/statuses/:status_id

Retorna um status com o ID especificado.

Parâmetros

Parâmetro Descrição Restrições
:status_id ID do status N/A

GET /api/statuses/:status_id/answers

Retorna as respostas de um status. É aplicado aos tipos Help e Activity.

Parâmetros

Parâmetro Descrição Restrições
:status_id ID do status N/A

POST /api/statuses/:status_id/answers

Cria um status do tipo Answer em resposta a um Activity ou Help.

Parâmetros

Parâmetro Descrição Restrições
status_id ID do status em questão Somente do tipo Activity ou Help
status[text] É uma resposta a um comentário ou um pedido de ajuda Máximo 800 caracteres

GET /api/users/:user_id/statuses

Retorna todos os status do usuário. Também é possível filtrar pelo tipo. Caso :type não seja informado é retornado os status do tipo Activity, Help e Log do usuário.

Parâmetros

Parâmetro Descrição Restrições
user_id ID do usuário em questão N/A
type ou types[] Filtragem pelo tipo de status Pode ser do tipo Activity, Help ou Log. Mais de um type pode ser requisitado utilizando a opção types[].
logeable_type Deve ser usado em conjunto com o type. Permite filtrar Logs baseados no atributo logeable_type User, Friendship, Enrollment
page Paginação dos resultados. As páginas possuem 25 entradas. Padrão é 1 Numérico

Exemplo

Requisição:

GET /api/users/:user_id/statuses?type=Activity

Resposta:

[{
  "type": "Activity",
    "links": [
    {
      "rel": "self",
      "href": "http://www.redu.com.br/api/statuses/34676"
    },
    {
      "rel": "statusable",
      "href": "http://www.redu.com.br/api/spaces/521"
    },
    {
      "rel": "user",
      "href": "http://www.redu.com.br/api/users/guiocavalcanti"
    },
    {
      "rel": "answers",
      "href": "http://www.redu.com.br/api/statuses/34676/answers"
    }
  ],
    "user": {
      "social_networks": [
      {
        "name": "facebook",
        "profile": "www.facebook.com/guiocavalcanti"
      },
      {
        "name": "linkedin",
        "profile": "br.linkedin.com/in/guiocavalcanti"
      },
      {
        "name": "twitter",
        "profile": "www.twitter.com/guiocavalcanti"
      }
      ],
        "thumbnails": [
        {
          "href": "http://s3.amazonaws.com/redu_uploads/users/avatars/4/thumb_32/Guilherme3x4%20copy.jpg?1323711306",
          "size": "32x32"
        },
        {
          "href": "http://s3.amazonaws.com/redu_uploads/users/avatars/4/thumb_110/Guilherme3x4%20copy.jpg?1323711306",
          "size": "110x110"
        }
      ],
        "birthday": "1987-11-24",
        "localization": "Recife, Brasil",
        "first_name": "Guilherme",
        "email": "guilhermec@redu.com.br",
        "links": [
        {
          "rel": "self",
          "href": "http://www.redu.com.br/api/users/guiocavalcanti"
        },
        {
          "rel": "enrollments",
          "href": "http://www.redu.com.br/api/users/guiocavalcanti/enrollments"
        },
        {
          "rel": "statuses",
          "href": "http://www.redu.com.br/api/users/guiocavalcanti/statuses"
        },
        {
          "rel": "timeline",
          "href": "http://www.redu.com.br/api/users/guiocavalcanti/statuses/timeline"
        },
        {
          "rel": "contacts",
          "href": "http://www.redu.com.br/api/users/guiocavalcanti/contacts"
        }
      ],
        "mobile": "+55 (81) 3333-3333",
        "friends_count": 98,
        "last_name": "Cavalcanti",
        "login": "guiocavalcanti",
        "id": 4,
        "birth_localization": "Recife, Brasil"
    },
    "id": 34676,
    "created_at": "2012-07-02T13:53:50-03:00",
    "text": "Todos os componentes da interface do Redu agora são opensource!\r\n\r\nVocês são livres para utilizar os CSS e JavaScript dentro nas suas aplicações. Para incluir e utilizar basta ir em: http://developers.redu.com.br/ui-components\r\n\r\nNo canto superior direito tem um índice de todos os elementos e sobre como cria-los.",
    "answers_count": 6
}]

GET /api/users/:user_id/statuses/timeline

Retorna todos os status do usuário e dos cursos que o usuário faz parte. Diferente do anterior, aqui são mostradas todas as movimentações que interessam ao usuário. É igual ao que se vê na página inicial do Redu.

Parâmetros

Parâmetro Descrição Restrições
user_id ID do usuário em questão N/A
type ou types[] Filtragem pelo tipo de status Pode ser do tipo Activity, Help ou Log. Mais de um type pode ser requisitado utilizando a opção types[].
logeable_type Deve ser usado em conjunto com o type. Permite filtrar Logs baseados no atributo logeable_type User, Friendship, CourseEnrollment
page Paginação dos resultados. As páginas possuem 25 entradas. Padrão é 1 Numérico

POST /api/users/:user_id/statuses

Cria um status do tipo Activity no Mural do usuário.

Parâmetros

Parâmetro Descrição Restrições
user_id ID do usuário em questão N/A
status[text] Conteúdo do status Máximo 800 caracteres

GET /api/spaces/:space_id/statuses/timeline

Retorna todos os status da disciplina e das suas aulas. Diferente do anterior, aqui são agregados tanto as postagens da disciplina quanto as das suas aulas. É igual ao que se vê no mural da disciplina.

Parâmetros

Parâmetro Descrição Restrições
space_id ID do space N/A
type ou types[] Filtragem pelo tipo de status Pode ser do tipo Activity, Help ou Log. Mais de um type pode ser requisitado utilizando a opção types[].
logeable_type Deve ser usado em conjunto com o type. Permite filtrar Logs baseados no atributo logeable_type User, Friendship, CourseEnrollment
page Paginação dos resultados. As páginas possuem 25 entradas. Padrão é 1 Numérico

GET /api/spaces/:space_id/statuses

Retorna todos os status do mural de uma disciplina. Há possibilidade de filtrar os status da disciplina pelo tipo. É importante perceber que os posts listados aqui se limitam àqueles postado diretamente na disciplina.

Parâmetros

Parâmetro Descrição Restrições
space_id ID do space N/A
type ou types[] Filtragem pelo tipo de status Pode ser do tipo Activity, Help ou Log. Mais de um type pode ser requisitado utilizando a opção types[].
logeable_type Deve ser usado em conjunto com o type. Permite filtrar Logs baseados no atributo logeable_type User, Friendship, CourseEnrollment
page Paginação dos resultados. As páginas possuem 25 entradas. Padrão é 1 Numérico

POST /api/spaces/:space_id/statuses

Cria um status no Mural da disciplina.

Parâmetros

Parâmetro Descrição Restrições
space_id ID do space em questão N/A
status[text] Conteúdo do status Máximo 800 caracteres

Mural de uma Aula

GET /api/lectures/:lecture_id/statuses

Retorna todos os status do mural de uma aula. Pode se filtrar os status de uma aula pelo tipo.

Parâmetros

Parâmetro Descrição Restrições
lecture_id ID da lecture em questão N/A
type ou types[] Filtragem pelo tipo de status Pode ser do tipo Activity, Help ou Log. Mais de um type pode ser requisitado utilizando a opção types[].
logeable_type Deve ser usado em conjunto com o type. Permite filtrar Logs baseados no atributo logeable_type User, Friendship, CourseEnrollment

POST /api/lectures/:lecture_id/statuses

Cria um status no Mural da aula. Somente neste caso é permitido criar um Help (pedido de ajuda).

Parâmetros

Parâmetro Descrição Restrições
:lecture_id ID da lecture em questão N/A
status[text] Conteúdo do status Máximo 800 caracteres
status[type] Tipo do status Activity ou Help

DELETE /api/statuses/:status_id

Remove o status.

Parâmetros

Parâmetro Descrição Restrições
:status_id ID do status N/A