Sistema academico de biblioteca com Self Checkout, desenvolvido em C17 com PostgreSQL, MongoDB e interface console V5.
O SmartLibrary organiza cadastros de biblioteca, circulacao de exemplares, reservas, autoatendimento, trilha NoSQL, relatorios e testes automatizados. O PostgreSQL e usado como fonte transacional principal e o MongoDB registra eventos, logs e auditoria. A V5 adiciona polimento visual para menus, formularios, mensagens e tabelas no terminal.
Esta entrega implementa as Fases 1 a 20 da evolucao incremental, incluindo as melhorias V2, V3, V4 e a V5 como ultima melhoria planejada:
- fundacao do projeto em C17;
- configuracao por variaveis de ambiente;
- conexoes PostgreSQL/libpq e MongoDB/MongoDB C Driver;
- schema relacional, constraints, indexes e seed inicial;
- modelo documental MongoDB com validators e indexes;
- setup local automatizado por
scripts/setup_local.ps1; - structs das entidades principais;
- menus administrativos para usuarios, autores, editoras, generos, livros e exemplares;
- busca, alteracao, exclusao e desativacao segura de cadastros administrativos;
- auditoria antes/depois real em documentos MongoDB para manutencao de cadastros, registrando o operador autenticado nas alteracoes administrativas;
- login com senha armazenada por hash BCrypt via PostgreSQL pgcrypto;
- troca de senha pelo usuario autenticado, com validacao da senha atual;
- permissoes por perfil para administrador, bibliotecario e usuario;
- validacao de CPF, e-mail, dados editoriais e bloqueios operacionais;
- associacao de livros com autores e generos pela aplicacao;
- emprestimos, devolucoes e renovacoes transacionais;
- reservas com criacao, cancelamento, atendimento, expiracao e listagem;
- Self Checkout com identificacao por CPF, operacoes de circulacao, consultas e pesquisa;
- eventos MongoDB por origem, logs operacionais e auditoria;
- consultas NoSQL pela aplicacao;
- relatorios operacionais;
- interface console V5 com cabecalhos, menus, formularios, mensagens e tabelas padronizadas;
- testes automatizados integrados;
- documentacao final de arquitetura, execucao, dados, fluxos e fases;
- roteiro de apresentacao, roteiro de 5 minutos, video de apresentacao, checklist de avaliacao e matriz de evidencias de teste.
- GCC com suporte a C17.
- pkg-config.
- PostgreSQL com libpq.
- MongoDB Server.
- MongoDB Shell (
mongosh). - MongoDB C Driver.
- GNU Make ou
mingw32-makeno Windows/MSYS2.
No ambiente validado, as bibliotecas sao resolvidas por:
pkg-config --cflags --libs libpq
pkg-config --cflags --libs mongoc2Use as variaveis descritas em .env.example:
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_DB=smartlibrary
POSTGRES_USER=postgres
POSTGRES_PASSWORD=
MONGODB_URI=mongodb://localhost:27017
MONGODB_DATABASE=smartlibraryNao versione senha real no repositorio. Defina POSTGRES_PASSWORD apenas no ambiente da sessao.
Para preparar uma maquina local com um unico comando, defina a senha do PostgreSQL na sessao e execute:
$env:POSTGRES_PASSWORD='sua_senha'
PowerShell -ExecutionPolicy Bypass -File scripts/setup_local.ps1O script cria o banco PostgreSQL quando necessario, aplica validators/indexes MongoDB e compila o projeto. Para recriar o banco principal, use -RecreateDatabase com cuidado.
Fluxo manual equivalente: crie o banco PostgreSQL smartlibrary e aplique os scripts nesta ordem:
$env:PGPASSWORD='sua_senha'
psql -U postgres -d smartlibrary -f database/postgresql/001_schema.sql
psql -U postgres -d smartlibrary -f database/postgresql/002_constraints.sql
psql -U postgres -d smartlibrary -f database/postgresql/003_indexes.sql
psql -U postgres -d smartlibrary -f database/postgresql/004_seed.sqlAplique os scripts MongoDB:
mongosh database/mongodb/validators.js
mongosh database/mongodb/indexes.jsNo Windows/MSYS2 validado:
mingw32-makeEm ambientes onde make esteja disponivel:
make$env:POSTGRES_PASSWORD='sua_senha'
mingw32-make testO alvo test recria bancos isolados chamados smartlibrary_test no PostgreSQL e no MongoDB, aplica fixtures controladas e valida build, login/perfis, regras Fase 14, cadastros V2, auditoria antes/depois com operador autenticado, troca de senha, recuperacao sem administrador ativo, fluxo de emprestimo/devolucao, relatorios e documentos NoSQL. A matriz detalhada esta em docs/evidencias_testes.md.
$env:POSTGRES_PASSWORD='sua_senha'
.\build\smartlibrary.exeOu, depois de configurar a senha no ambiente:
mingw32-make run1 - Cadastros administrativos2 - Circulacao3 - Reservas4 - Self Checkout5 - NoSQL: eventos, logs e auditoria6 - Relatorios7 - Trocar senha
A interface foi polida mantendo a proposta console em C:
- cabecalhos com moldura ASCII;
- menus padronizados;
- prompts de formulario alinhados;
- mensagens visuais para sucesso, erro, aviso e informacao;
- tabelas relacionais com bordas e colunas calculadas.
- Arquitetura
- Guia de execucao
- Entrega final
- Interface Console V5
- Especificacao V5 - interface console
- Especificacao V4 - evolucao planejada
- Especificacao V3
- Especificacao V2
- Resumo das fases
- Modelo relacional
- Modelo NoSQL
- Dicionario de dados
- Cadastros
- Emprestimos
- Reservas
- Self Checkout
- Relatorios
- Testes
- Evidencias de testes
- Roteiro de apresentacao
- Roteiro de demonstracao em 5 minutos
- Checklist de avaliacao
smartlibrary/
|-- src/
| |-- main.c
| |-- auth/
| |-- config/
| |-- database/
| |-- repositories/
| |-- services/
| |-- events/
| |-- ui/
| |-- utils/
| `-- models/
|-- database/
| |-- postgresql/
| `-- mongodb/
|-- tests/
| `-- run_phase9_tests.ps1
|-- scripts/
| `-- setup_local.ps1
|-- docs/
| |-- arquitetura.md
| |-- guia_execucao.md
| |-- entrega_final.md
| |-- interface_console_v5.md
| |-- especificacao_v5.md
| |-- especificacao_v4.md
| |-- especificacao_v3.md
| |-- especificacao_v2.md
| |-- modelo_relacional.md
| |-- modelo_nosql.md
| |-- dicionario_dados.md
| |-- cadastros.md
| |-- emprestimos.md
| |-- reservas.md
| |-- self_checkout.md
| |-- relatorios.md
| |-- testes.md
| |-- evidencias_testes.md
| |-- roteiro_apresentacao.md
| |-- roteiro_5_minutos.md
| |-- checklist_avaliacao.md
| `-- diagrams/
|-- .env.example
|-- .gitignore
|-- Makefile
`-- README.md