Auditorium¶
Sobre¶
Auditorium é um sistema de agendamento de auditórios feito sob demanda para o CEULJI/ULBRA, como trabalho final da disciplina de Tópicos Especiais III (frameworks) ministrada pelo professor Edgar Kaiser.
Models¶
Auditorium¶
Auditorium
é o model que representa um auditório. Sua tabela correspondente
no banco de dados se chama auditoria
.
Atributos¶
- name
VARCHAR(20)
- Nome do auditório
- capacity
INTEGER
- Quantas pessoas o auditório comporta.
- accessible
BOOLEAN
- Se o auditório preenche os requisitos de acessibilidade.
- location
VARCHAR(100)
- Localização do auditório.
- obs
TEXT
- Observações adicionais sobre o auditório.
Métodos¶
- statusOn(
Carbon $date
) Retorna um objeto
Status
representando o status do auditório na data$date
.Ver: Status.
Views¶
- index
View onde são exibidos todos os auditórios e seus status para determinado dia.
Recebe como parâmetro GET opcional uma
data
; caso nenhuma seja fornecida, utiliza a data atual. Também recebe os parâmetrosprevious
enext
, que implementam a funcionalidade das setas.
Request¶
Request
é o model que representa um pedido de agendamento de auditório.
Sua tabela correspondente no banco de dados se chama requests
.
Atributos¶
- auditorium_id
INTEGER
- ID do auditório.
- user_id
INTEGER
- ID do usuário que requisitou o agendamento.
- period
TINYINT
Período do agendamento:
- manhã
- tarde
- noite
- date
DATE
- Data do agendamento.
- event
VARCHAR(100)
- Nome que identifica o agendamento, preferencialmente o nome do evento.
- description
TEXT
- Descrição do pedido de agendamento.
- status
TINYINT
Status do pedido:
- pendente
- rejeitado
- aceito
Views¶
- create
View do formulário de criação de uma nova
Request
.Recebe como parâmetros GET obrigatórios a
data
atual e oid
do auditório a ser agendado, além de um parâmetro opcionalperiod
com um código de período.- index
View onde as
Requests
são exibidas e editadas. Recebe como parâmetro GET opcional umfilter
que pode ter um dos seguintes valores:- all
- Todas as
Requests
são exibidas. - pendent
- São exibidas somente as
Requests
pendentes. É o valor padrão. - resolved
- São exibidas somente as
Requests
que não estão mais pendentes. - accepted
- São exibidas somente as
Requests
que foram aceitas. - rejected
- São exibidas somente as
Requests
que foram negadas.
- show
- View que mostra os detalhes de uma
Request
em específico.
User¶
User
é o model que representa um usuário. Sua tabela correspondente no banco de dados
se chama users
.
Atributos¶
- name
VARCHAR
- Nome do usuário.
- email
VARCHAR
- Email do usuário, utilizado para o login. Deve ser único.
- password
VARCHAR
- Senha do usuário, utilizada para o login.
- description
TEXT
- Descrição do usuário, idealmente seu cargo. Ex.: «Coordenador de Sistemas de Informação».
- color
CHAR(7)
- Código de cor do avatar do usuário em formato hexadecimal.
- cel
VARCHAR(19)
- Número de telefone do usuário.
Views¶
- show
- Perfil do usuário.
- index
- Lista de usuários.
- edit
- Página de edição do usuário.
Call¶
Call
é o model que representa uma chamada. Sua tabela correspondente
no banco de dados se chama calls
.
Atributos¶
- title
VARCHAR(40)
- Título da chamada.
- user_to_user
TINYINT
- Se é uma chamada de um para um.
Componentes¶
- Call.vue
- Componente principal de uma chamada.
- CallMember.vue
- Componente que representa um usuário na lista de usuários na chamada.
- CallMessage.vue
- Componente que representa uma mensagem na lista de mensagens na chamada.
- NewCall.vue
- Componente para criação de chamadas.
Helpers¶
Status¶
A classe Status
representa o status de um auditório em uma data específica.
Atributos¶
morning, afternoon e night representam o status do auditório no determinado período:
- pendente
- disponível
- indisponível
- morning
Int
- Representa o status do auditório no período da manhã.
- afternoon
Int
- Representa o status do auditório no período da tarde.
- night
Int
- Representa o status do auditório no período da noite.
- date
Carbon
- A data do
Status
em questão. - requests
Collection
- Uma
Collection
contendo todas asRequests
existentes para o auditório em questão. - morning_requests
Collection
- Uma
Collection
contendo todas asRequests
existentes para o auditório em questão no período da manhã. - afternoon_requests
Collection
- Uma
Collection
contendo todas asRequests
existentes para o auditório em questão no período da tarde. - night_requests
Collection
- Uma
Collection
contendo todas asRequests
existentes para o auditório em questão no período da noite.
Exemplo¶
// retorna o código de status do auditório no período da noite de hoje
$auditorium->statusOn(Carbon::now())->night
Events¶
RequestStatusChanged¶
RequestStatusChanged
é um evento disparado quando o status de uma Request
é
alterado.
CallCreated¶
CallCreated
é um evento disparado quando uma nova chamada é criada.
NotificationRead¶
NotificationRead
é um evento disparado quando uma notificação é lida. É enviado
via broadcasting no canal App.User.{userId}
.
Atributos¶
- user
User
- O usuário que leu a notificação.
RequestCreated¶
RequestCreated
é um evento disparado quando um novo pedido de auditório é feito.
UserRegistered¶
UserRegistered
é um evento disparado quando um usuário é registrado.
MessageCreated¶
MessageCreated
é um evento disparado quando uma nova mensagem é enviada.
Listeners¶
SendStatusChangeNotification¶
SendStatusChangeNotification
é um listener que ouve eventos do tipo
RequestStatusChanged
e envia uma notificação do tipo RequestResolved
para o usuário que fez a Request
.
AssignNewUserToChat¶
AssignNewUserToChat
é um listener que ouve eventos do tipo
UserRegistered
e adiciona uma permissão para que ele participe
do chat universal.
SendNewMessageNotification¶
SendNewMessageNotification
é um listener que ouve eventos do tipo
MessageCreated
e envia uma notificação do tipo NewMessage
para todos
os envolvidos.
SendNewRequestNotification¶
SendNewRequestNotification
é um listener que ouve eventos do tipo
RequestCreated
e envia uma notificação do tipo NewRequest
para os
usuários que tem permissão de secretário.
SetNewUserRole¶
SetNewUserRole
é um listener que ouve eventos do tipo
UserRegistered
e adiciona permissões de coordenador para
o usuário recém registrado.
SetCallMemberPermissions¶
SetCallMemberPermissions
é um listener que ouve eventos do tipo
CallCreated
e adiciona permissões para que todos os usuários
envolvidos possam ver a chamada.
SendNewCallNotification¶
SendNewCallNotification
é um listener que ouve eventos do tipo
CallCreated
e envia uma notificação do tipo NewCall
para todos
os envolvidos.
Notifications¶
RequestResolved¶
RequestResolved
é uma notificação enviada quando o status
de uma Request
é modificado. É armazenada no banco de
dados e enviada via broadcasting no canal App.User.{userId}
,
para o usuário dono da Request
.
NewCall¶
NewCall
é uma notificação enviada quando uma nova chamada
é criada. É armazenada no banco de dados e enviada via broadcasting
no canal App.User.{userId}
, para todos os usuários envolvidos na
chamada.
NewMessage¶
NewMessage
é uma notificação enviada quando uma nova mensagem
é recebida. É armazenada no banco de dados e enviada via broadcasting
no canal App.User.{userId}
, para todos os usuários envolvidos na
chamada.
NewRequest¶
NewRequest
é uma notificação enviada quando um novo pedido
de auditório é feito. É armazenada no banco de dados e enviada via broadcasting
no canal App.User.{userId}
, para todos os usuários do tipo secretário.
Outros¶
Sistema de Notificações¶
O sistema de notificações funciona em tempo real graças à tecnologia WebSockets;
em nossos testes, utilizamos o serviço Pusher. O componente de notificações faz uma
requisição via ajax à rota \notifications
, que retorna uma lista de notificações,
que é adicionada ao menu de notificações. Quando uma notificação é criada,
ou quando um evento do tipo NotificationRead
é disparado, uma mensagem é
enviada via broadcasting no canal App.User.{userId}
, o que faz o componente
de notificações gerar uma nova requisição e recarregar as notificações.
Componentes¶
Notification.vue¶
Notification
é o componente responsável por gerenciar e exibir o menu de
notificações, ele é adicionado na view layouts.app
.
Na função mounted()
, o seguinte pedaço de código é responsável por ouvir
as mensagens que chegam via WebSockets e fazer a requisição ajax para recarregar
as notificações:
function reloadNotifications() {
$.get("/notifications", function (data, status) {
if (status == 'success') {
console.log('Notifications: Reloading notifications');
self.unreadNotifications = data;
}
});
}
Echo.private(`App.User.${this.user_id}`)
.notification((notification) => {
console.log('Notifications: ' + notification.type);
reloadNotifications();
})
.listen('NotificationRead', (e) => {
console.log('Notifications: App\\Events\\NotificationRead');
reloadNotifications();
});
NotificationItem.vue¶
NotificationItem
é o componente que representa cada uma das notificações
que são exibidas no menu de notificações.
Sistema de Chamadas¶
O Sistema de Chamadas permite que sejam criadas janelas de chat entre vários usuários. Assim como o Sistema de Notificações, funciona em tempo real graças à tecnologia WebSockets; O componente de chamada faz diversas requisições via ajax para atualizar as chamadas sem a necessidade de recarregar a página.
Quando uma mensagem é criada, um evento do tipo MessageCreated
é disparado e enviado
via broadcasting ao canal App.Call.{callId}
. O componente de chamada, então, lida com
a atualização das mensagens.
Componentes¶
Call.vue¶
Componente responsável por gerenciar uma chamada. Os métodos refresh
e load
lidam com as requisições ajax, enquanto o método ListenOnEcho
ouve no canal
App.Call.{callId}
.
CallMember.vue¶
Componente que representa um usuário na lista de usuários na chamada.
CallMessage.vue¶
Componente que representa uma mensagem na lista de mensagens na chamada.
NewCall.vue¶
Componente para criação de chamadas.