Introdução do Projeto
Este sistema é uma aplicação web desenvolvida para gerenciar informações de emprego de graduados universitários. Arquitetado com uma abordagem de separação entre front-end e back-end, o projeto oferece uma estrutura modular e bem documentada, facilitando a compreensão e manutenção. Ele inclui funcionalidades abrangentes para diferentes perfis de usuários, atendendo às necessidades típicas de um sistema de gestão de emprego acadêmico.
O sistema divide-se em quatro papéis principais:
- Estudante: Pode acessar palestras da sua faculdade, navegar por oportunidades de emprego, enviar currículos, registrar informações de emprego, pós-graduação, concursos públicos ou empreendedorismo, visualizar anúncios e atualizar seus dados pessoais.
- Orientador: Tem permissão para visualizar estatísticas, gerenciar informações de estudantes e palestras da sua faculdade, supervisionar dados de emprego, pós-graduação, concursos e empreendedorismos, além de acessar anúncios e modificar seu perfil.
- Administrador: Pode administrar todos os aspectos do sistema, incluindo usuários (estudantes, orientadores, administradores e empresas), organizações acadêmicas, palestras, oportunidades de emprego e registros de diferentes caminhos de carreira.
- Usuário Empresarial: Pode publicar vagas de emprego, revisar currículos recebidos, gerenciar aplicações e atualizar informações da empresa.
Tecnologias Utilizadas
O desenvolvimento baseia-se nas seguintes tecnologias:
- Back-end: Spring Boot com MySQL para banco de dados, MyBatis para mapeamento objeto-relacional e Redis para caching de sessões.
- Front-end: Vue.js 3.0 com Element UI Plus para componentes de interface e Vite como ferramenta de build.
Ambiente de desenvolvimento recomendado inclui IntelliJ IDEA, JDK 1.8, Maven, Node.js e Visual Studio Code, com banco de dados MySQL 5.7 e Redis 5.0.5.
Exemplos de Código
Submissão de Currículo por Estudante
/**
* Processa o envio de um currículo por um estudante.
* @param applicationDTO Dados da aplicação do currículo.
* @return Resposta indicando sucesso ou falha.
*/
@Override
public ResponseDTO<boolean> submitApplication(ApplicationDTO applicationDTO) {
// Validação de campos obrigatórios
if (StringUtils.isEmpty(applicationDTO.getStudentId())) {
return ResponseDTO.errorByMsg(ErrorMessage.INVALID_DATA);
}
if (StringUtils.isEmpty(applicationDTO.getCompanyId())) {
return ResponseDTO.errorByMsg(ErrorMessage.INVALID_DATA);
}
// Conversão e registro da aplicação
Application application = ConversionUtil.convert(applicationDTO, Application.class);
application.setApplicationId(IdGenerator.generateShortId());
application.setTimestamp(new Date());
application.setStatus(ApplicationStatus.PENDING);
// Inserção no banco de dados
if (applicationRepository.save(application) == null) {
return ResponseDTO.errorByMsg(ErrorMessage.SAVE_FAILED);
}
return ResponseDTO.successWithMessage(true, "Aplicação enviada com sucesso!");
}
</boolean>
Consulta de Dados de Emprego com Paginação
/**
* Recupera uma lista paginada de registros de emprego com filtros opcionais.
* @param pageRequest Objeto de solicitação com parâmetros de paginação e filtros.
* @return Uma página de dados de emprego formatados.
*/
@Override
public ResponseDTO<pagedto>> fetchEmploymentRecords(PageDTO<employmentrecorddto> pageRequest) {
// Configuração padrão de paginação se não especificado
int currentPage = pageRequest.getPageNumber() != null ? pageRequest.getPageNumber() : 1;
int pageSize = pageRequest.getPageSize() != null ? pageRequest.getPageSize() : 10;
// Construção de critérios de consulta baseados nos filtros
EmploymentRecordExample example = new EmploymentRecordExample();
EmploymentRecordExample.Criteria criteria = example.createCriteria();
if (pageRequest.getFilter() != null) {
EmploymentRecordDTO filter = pageRequest.getFilter();
if (!StringUtils.isEmpty(filter.getStudentId())) {
criteria.andStudentIdEqualTo(filter.getStudentId());
}
if (!StringUtils.isEmpty(filter.getCityName())) {
criteria.andCityLike("%" + filter.getCityName() + "%");
}
// Adicionar lógica similar para outros campos de filtro, como jobTitle e companyName.
}
// Executar consulta com paginação
PageHelper.startPage(currentPage, pageSize);
List<employmentrecord> records = employmentRecordMapper.selectByExample(example);
PageInfo<employmentrecord> pageInfo = new PageInfo<>(records);
// Converter para DTOs e enriquecer com dados do estudante
List<employmentrecorddto> dtoRecords = ConversionUtil.convertList(records, EmploymentRecordDTO.class);
for (EmploymentRecordDTO dto : dtoRecords) {
Student student = studentRepository.findById(dto.getStudentId());
dto.setStudentInfo(ConversionUtil.convert(
student != null ? student : new Student(), StudentInfoDTO.class));
}
// Montar resposta com metadados de paginação
pageRequest.setTotalElements(pageInfo.getTotal());
pageRequest.setContent(dtoRecords);
return ResponseDTO.success(pageRequest);
}
</employmentrecorddto></employmentrecord></employmentrecord></employmentrecorddto></pagedto>
Autenticação de Usuário
/**
* Realiza a autenticação do usuário e gera um token de sessão.
* @param loginRequest Dados de login incluindo identificador e senha.
* @return Dados do usuário autenticado com token.
*/
@Override
public ResponseDTO<userinfodto> authenticateUser(LoginRequestDTO loginRequest) {
// Verificação de campos obrigatórios
if (StringUtils.isEmpty(loginRequest.getUserIdentifier())) {
return ResponseDTO.errorByMsg(ErrorMessage.IDENTIFIER_REQUIRED);
}
if (StringUtils.isEmpty(loginRequest.getPassword())) {
return ResponseDTO.errorByMsg(ErrorMessage.PASSWORD_REQUIRED);
}
// Consulta ao banco de dados para validação
UserExample userExample = new UserExample();
userExample.createCriteria()
.andIdentifierEqualTo(loginRequest.getUserIdentifier())
.andPasswordEqualTo(loginRequest.getPassword())
.andUserRoleEqualTo(loginRequest.getUserRole());
List<user> users = userMapper.selectByExample(userExample);
if (users == null || users.size() != 1) {
return ResponseDTO.errorByMsg(ErrorMessage.INVALID_CREDENTIALS);
}
// Geração de token e armazenamento em cache
UserInfoDTO userInfo = ConversionUtil.convert(users.get(0), UserInfoDTO.class);
String sessionToken = IdGenerator.generateShortId();
userInfo.setSessionToken(sessionToken);
// Armazenar token no Redis com tempo de expiração
stringRedisTemplate.opsForValue().set(
"SESSION_" + sessionToken,
JsonUtil.toJson(userInfo),
2, TimeUnit.HOURS
);
return ResponseDTO.successWithMessage(userInfo, "Autenticação bem-sucedida!");
}
</user></userinfodto>