- Serviço de compras e entregas pela Internet
- Cadastro de prestadores de serviço
- Cadastro de usuários do serviço
- Chat entre usuário e o prestador de serviço
- Cadastro dos serviços
- Divulgação do serviço pelo usuário
- Escolha do serviço que será feito pelo prestador
- Confirmação da entrega do serviço
-
Atores:
- Cliente / Prestador de Serviços
-
Módulo Cliente (Cliente / Prestador de Serviços)
- Login
- Cadastro
- Solicitar Serviços / Listagem de Serviços Solicitados pelos clientes
- Serviços:
- Tipo de serviço
- Descrição
- Pagamento
- Local do cliente
- Local do serviço
- Data
- Hora
- Aceitar serviço (Somente para o Prestador de Serviços)
- Chat
-
Módulo Servidor:
- Login
- CRUD dos usuários
- Listas Serviços
- CRUD de Serviços
- Escolher Serviço (Somente para o Prestador de Serviços)
- Chat
- Login
-
Indica campo obrigatório
-
Cliente (usuário comum / prestador de serviço)
- Tela de Login (-> Tela de cadastro ou -> Tela de Serviços)
- Email*
- Senha*
- Tela de cadastro de usuário (-> Tela de Login)
- Nome*
- CPF*
- Email*
- Senha*
- Endereço
- Telefone
- Tela de Serviços
- Listagem de Serviço
- Descrição do serviço
- Tipo do serviço
- Valor a ser pago
- Data
- Hora
- Local do serviço (* Forma de escolha do serviço - prestador de serviço) - Muda o Status (para fechado) (* Botão de chat)
- Cadastro do Serviço
- Descrição do serviço
- Tipo do serviço*
- Valor a ser pago*
- Local do serviço*
- Hora*
- Data*
- Local do cliente (endereço no cadastro)*
- Status
- Listagem de Serviço
- Tela de Chat
- Tela de Login (-> Tela de cadastro ou -> Tela de Serviços)
- a conexão será feita através do protocolo
TCP
- Uma
Mensagem envioé uma solicitação de um cliente para o servidor - Uma
Mensagem respostaé uma resposta do servidor para o cliente - Sempre deve passar o campo
datamesmo que não esteja enviando um valor dentro dele
- Mensagem envio
{
"id": "user",
"type": "create",
"data": {
"name": "", // obrigatório
"cpf": "", // obrigatório
"email": "", // obrigatório
"password": "", // obrigatório
"address": "", // opcional
"phone": "", // opcional
}
}- Mensagem resposta:
- sucesso:
{ "id": "success", "data": { "id": "", // id do usuário criado "desc": "success create user" } } - erro:
{ "id": "error", "data": { "desc": "error create user" } }
- sucesso:
busca pelos campos passados nos campo "data" sempre vai buscar pelo valor igual ao passado
- Mensagem envio:
{
"id": "user",
"type": "list",
"data": {
"id": "", // opcional
"name": "", // opcional
"cpf": "", // opcional
"email": "", // opcional
"password": "", // opcional
"address": "", // opcional
"phone": "", // opcional
}
}- Mensagem resposta:
- sucesso:
{ "id": "success", "data": { "users": [{ "id": "", "name": "", "cpf": "", "email": "", "password": "", "address": "", "phone": "", }] } } - erro:
{ "id": "error", "data": { "desc": "error list users", "users": [] } }
- sucesso:
atualiza apenas os campos passados no campo "data"
- Mensagem envio:
{
"id": "user",
"type": "update",
"data": {
"id": "", // obrigatorio (ele será o campo para fazer o filtro e os outros campos passados serão atualizados)
"name": "", // opcional
"cpf": "", // opcional
"email": "", // opcional
"password": "", // opcional
"address": "", // opcional
"phone": "", // opcional
}
}- Mensagem resposta:
- sucesso:
{ "id": "success", "data": { "desc": "sucess update user" } } - erro:
{ "id": "error", "data": { "desc": "error update user" } }
- sucesso:
remove a partir de um id passado
- Mensagem envio:
{
"id": "user",
"type": "remove",
"data": {
"id": "", // obrigatório
}
}- Mensagem resposta:
- sucesso:
{ "id": "success", "data": { "desc": "user deleted with success" } } - erro:
{ "id": "error", "data": { "desc": "error on delete user" } }
- sucesso:
- Mensagem envio:
{
"id": "login",
"data": {
"email": "email", // obrigatório
"password": "pass" // obrigatório
}
}- Mensagem resposta:
- sucesso:
{ "id": "success", "data": { "id": "", // id do usuário logado "desc": "success login" } } - error
{ "id": "error", "data": { "desc": "invalid password or user name" } }
- sucesso:
- Mensagem envio:
{
"id": "logout"
}- Mensagem resposta:
- sucesso:
{ "id": "success", "data": { "desc": "success logout" } } - error
{ "id": "error", "data": { "desc": "error on logout" } }
- sucesso:
- Mensagem envio:
{
"id": "service",
"type": "create",
"data": {
"type": "", // obrigatorio
"description": "", // opcional
"value": "", // obrigatorio
"id_user_provider": "", // opcional (enviar na hora de escolher o serviço) - id do usuário que vai executar o serviço
"id_user_client": "", // obrigatorio - id do usuário que pediu o serviço
"user_client_place": "", // obrigatorio - lugar onde o usuario pediu o serviço
"service_place": "", // obrigatorio - lugar onde o cliente quer executar o serviço
"date": "", // obrigatorio (YYYY-MM-DD)
"hour": "", // opcional (HH:mm:ss)
"status": "" // obrigatorio - ("aberto" na hora da criação)(status possiveis: aberto, andamento, fechado)
}
}- Mensagem resposta:
- sucesso:
{ "id": "success", "data": { "id": "", // id do servico criado "desc": "success create service" } } - erro:
{ "id": "error", "data": { "desc": "error create service" } }
- sucesso:
busca pelos campos passados nos campo "data" sempre vai buscar pelo valor igual ao passado
- Mensagem envio:
{
"id": "service",
"type": "list",
"data": {
"id": "", // opcional
"type": "", // opcional
"description": "", // opcional
"id_user_provider": "", // opcional
"id_user_client": "", // opcional
"status": "" // opcional (aberto, andamento, fechado)
}
}- Mensagem resposta:
- sucesso:
{ "id": "success", "data": { "services": [{ "id": "", "type": "", "description": "", "value": "", "id_user_provider": "", "id_user_client": "", "user_client_place": "", "service_place": "", "date": "", "hour": "", "status": "" }] } } - erro:
{ "id": "error", "data": { "desc": "error list service", "services": [] } }
- sucesso:
atualiza apenas os campos passados no campo "data"
- Mensagem envio:
{
"id": "service",
"type": "update",
"data": {
"id": "", // obrigatorio (ele será o campo para fazer o filtro e os outros campos passados serão atualizados)
"type": "", // opcional
"description": "", // opcional
"value": "", // opcional
"id_user_provider": "", // opcional
"id_user_client": "", // opcional
"user_client_place": "", // opcional
"service_place": "", // opcional
"date": "", // opcional (YYYY-MM-DD)
"hour": "", // opcional (HH:mm:ss)
"status": "" // opcional
}
}- Mensagem resposta:
- sucesso:
{ "id": "success", "data": { "desc": "sucess update service" } } - erro:
{ "id": "error", "data": { "desc": "error update service" } }
- sucesso:
remove a partir de um id passado
- Mensagem envio:
{
"id": "service",
"type": "remove",
"data": {
"id": "", // obrigatório
}
}- Mensagem resposta:
- sucesso:
{ "id": "success", "data": { "desc": "service deleted with success" } } - erro:
{ "id": "error", "data": { "desc": "error on delete service" } }
- sucesso:
quando o cliente enviar um JSON inválido; ou quando o cliente enviar um JSON com campo "id" inválido; ou quando o cliente não enviar o campo data; ou quando o cliente não eviar o contrato correto para a ação que ele pediu;
{
"id": "error",
"data": {
"desc": "unprocessable message"
}
}Aqui foi usado JSON-SCHEMA para tentar mitigar os problemas que tivemos com entendimento do contrato. É possivel validar seu JSON usando o seguinte link: JSON-SCHEMA-VALIDATOR
- SCHEMA da "Mensagem de envio"
{
"$schema": "http://json-schema.org/schema",
"title": "send-message",
"description": "Payload para enviar mensagens ao servidor",
"type": "object",
"properties": {
"id": {
"type": "string",
"const": "chat"
},
"data": {
"type": "object",
"properties": {
"message": {
"type": "string",
"description": "Conteúdo da mensagem"
}
},
"required": [
"message"
]
}
},
"required": [
"id",
"data"
]
}- SCHEMA da "Mensagem resposta":
{
"$schema": "http://json-schema.org/schema",
"title": "broadcast-message",
"description": "Payload que o servidor envia a todos os clientes (Chat) - até mesmo para quem enviou a mensagem",
"type": "object",
"properties": {
"id": {
"type": "string",
"const": "chat"
},
"data": {
"type": "object",
"properties": {
"ip": {
"type": "string",
"description": "IP do usuário que enviou a mensagem"
},
"message": {
"type": "string",
"description": "Conteúdo da mensagem"
}
},
"required": [
"ip",
"message"
]
}
},
"required": [
"id",
"data"
]
}