Sistema de Rede Social Corporativa para Conexão de Perfis Afins

Descrição Geral

Com o rápido avanço das tecnologias digitais, plataformas sociais evoluíram como ferramentas essenciais para ampliação de relacionametnos e busca de perfis compatíveis. Diferentemente das plataformas tradicionais focadas em entretenimento, este sistema propõe uma solução especializada em segmentação por interesses profissionais e afinidades específicas. A arquitetura emprega algoritmos de matching inteligente e sistema de categorização de interesses, entregando uma experiência de networking otimizada tanto para indivíduos quanto para organizações em processos de recrutamento e formação de equipes.

A implementação adota uma stack tecnológica composta por SpringBoot para o backend, Vue.js como framework frontend, MyBatis para mapeamento objeto-relacional e MySQL como sistema gerenciador de banco de dados. Os módulos principais incluem: gestão de usuários, engine de compatibilidade, publicação de conteúdos, notificações em tempo real e análise comportamental. O design RESTful das APIs garante escalabilidade e interoperabilidade com outros sistemas corporativos.

Estrutura do Banco de Dados

Tabela de Perfis de Usuários

Armazena dados cadastrais e preferências de interação. O campo perfil_id serve como identificador único, com data de registro gerada automaticamente. A estrutura inclui campos para caracterização demográfica e metadados de interesses.

Campo Tipo Descrição
perfil_id BIGINT Identificador único do usuário
apelido VARCHAR(50) Nome de exibição
senha_hash VARCHAR(100) Credencial criptografada
email VARCHAR(100) Endereço eletrônico
genero TINYINT Classificação (1-M, 2-F, 3-Outros)
data_nascimento DATE Data de nascimento
interesses TEXT Tags categorizadas (formato JSON)
data_registro DATETIME Momento de cadastro
ultimo_acesso DATETIME Data do login mais recente

Tabela de Publicações Dinâmicas

Registra conteúdo gerado pelos usuários, com timestamps automáticos e visibilidade configurável. O campo publicacao_id identifica unicamente cada postagem.

Campo Tipo Descrição
publicacao_id BIGINT Identificador único da publicação
autor_id BIGINT Referência ao usuário autor
conteudo TEXT Texto da publicação
midias TEXT Links de arquivos (formato JSON)
curtidas INT Total de interações positivas
comentarios INT Quantidade de respostas
data_publicacao DATETIME Momento de postagem
visibilidade TINYINT Configuração (1-Público, 2-Privado)

Tabela de Relacionamentos

Gerencia conexões entre perfis, registrando status e histórico de interações. O campo conexao_id identifica cada relação individual.

Campo Tipo Descrição
conexao_id BIGINT Identificador único da relação
solicitante BIGINT ID do perfil que iniciou a conexão
destino BIGINT ID do perfil convidado
status TINYINT Estado da relação (1-Pendente, 2-Ativa)
data_inicio DATETIME Data de estabelecimento
ultima_interacao DATETIME Data da interação mais recente

Arquitetura Tecnológica

Backend: SpringBoot

O framework SpringBoot impleemnta a lógica de negócios com abordagem de configuração automática, reduzindo a necessidade de XMLs. Características principais:

  • Inicialização zero-config: Mecanismos de autoconfiguração integrados
  • Servidor embutido: Suporte a Tomcat/Jetty/Undertow
  • Monitoramento: Componente Actuator para métricas e saúde do sistema
  • Integração distribuída: Compatibilidade com ecossistema Spring Cloud

O modelo de dependências "starter" permite concentração no core da aplicação, enquanto o formato JAR único simplifica deploy e operação.

Frontend: Vue.js

O Vue.js oferece uma arquitetura reativa e modular para interfaces dinâmicas, com estas vantagens:

  • Sistema reativo: Atualização eficiente de interfaces via tracking de dependências
  • Componentização: Estrutura encapsulada com template, estilo e lógica
  • Adaptabilidade: Escalabilidade de pequenas aplicações a SPAs completas
  • Ecosistema rico: Vue Router, Vuex/Pinia e ferramentas CLI integradas

A sintaxe intuitiva combinada com suporte a TypeScript e ferramentas de desenvolvimento oferece robustez para projetos complexos.

Código Exemplo

package br.com.sistema;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.mybatis.spring.annotation.MapperScan;

@SpringBootApplication
@MapperScan("br.com.sistema.persistencia")
public class Aplicacao extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(Aplicacao.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Aplicacao.class);
    }
}

package br.com.sistema.controle;

import java.util.Map;
import java.util.HashMap;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.transaction.annotation.Transactional;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;

import br.com.sistema.modelo.Usuario;
import br.com.sistema.servico.UsuarioServico;
import br.com.sistema.util.R;
import br.com.sistema.util.PageUtils;
import br.com.sistema.util.MPUtil;

@RestController
@RequestMapping("/usuario")
public class UsuarioControle {

    @Autowired
    private UsuarioServico usuarioServico;

    @PostMapping("/login")
    public R autenticar(@RequestParam String login, @RequestParam String senha) {
        Wrapper<Usuario> filtro = new EntityWrapper<>();
        filtro.eq("login", login).eq("senha", senha);
        
        Usuario usuario = usuarioServico.selectOne(filtro);
        if (usuario == null) {
            return R.erro("Credenciais inválidas");
        }
        
        String token = GeradorToken.criar(usuario.getId(), login);
        return R.sucesso().adicionar("token", token);
    }

    @PostMapping("/registro")
    public R cadastrar(@RequestBody Usuario usuario) {
        if (usuarioServico.existeLogin(usuario.getLogin())) {
            return R.erro("Login já cadastrado");
        }
        
        usuario.setId(System.currentTimeMillis());
        usuarioServico.insert(usuario);
        return R.sucesso();
    }

    @GetMapping("/lista")
    public R listar(@RequestParam Map<String, Object> parametros) {
        EntityWrapper<Usuario> filtro = new EntityWrapper<>();
        PageUtils pagina = usuarioServico.paginar(parametros, 
            MPUtil.ordenar(MPUtil.filtrar(filtro, parametros), parametros));
        
        return R.sucesso().adicionar("dados", pagina);
    }

    @GetMapping("/detalhe/{id}")
    public R detalhar(@PathVariable Long id) {
        Usuario usuario = usuarioServico.selectById(id);
        return R.sucesso().adicionar("dados", usuario);
    }

    @PostMapping("/atualizar")
    @Transactional
    public R atualizar(@RequestBody Usuario usuario) {
        if (usuarioServico.existeOutroLogin(usuario.getId(), usuario.getLogin())) {
            return R.erro("Login já em uso");
        }
        
        usuarioServico.updateById(usuario);
        return R.sucesso();
    }

    @PostMapping("/excluir")
    public R excluir(@RequestBody Long[] ids) {
        usuarioServico.deleteBatchIds(Arrays.asList(ids));
        return R.sucesso();
    }
}

Tags: SpringBoot Vue.js MyBatis MySQL RESTful API

Publicado em 9-25 20:26