A full-stack application developed as part of the IPDV Developer Challenge, featuring a modern architecture with a Vue.js frontend, Express.js backend, and PostgreSQL database. The project demonstrates authentication with JWT, user and role management, CRUD operations, and relational database modeling.
The solution follows a clean separation between the client, server, and database layers, simulating a real-world application architecture.
The project is organized into three independent packages:
├── client # Vue.js + Vuetify Frontend
├── server # Express.js REST API
└── data # PostgreSQL Database Scripts
Create the database using the provided SQL scripts or through pgAdmin.
Passwords are stored encrypted.
| Password | |
|---|---|
| maria.oliveira@email.com | senha123 |
OWNER = postgres
ENCODING = UTF8
LC_COLLATE = pt_BR.UTF-8
LC_CTYPE = pt_BR.UTF-8
LOCALE_PROVIDER = libc
TABLESPACE = pg_default
CONNECTION LIMIT = -1
IS_TEMPLATE = false
Run the scripts in the following order:
1_CreateDatabase.sql
2_CreateTable.sql
3_CreateFunctions.sql
4_CreateViews.sql
Navigate to the client folder:
cd clientInstall dependencies:
npm installRun the application:
npm run devNavigate to the server folder:
cd serverInstall dependencies:
npm installRun the API:
npm run dev- JWT authentication
- Session expiration after 60 minutes
- Secure login
- Logout functionality
- Protected routes
- Create users
- Update users
- Soft delete (Deactivate users)
- User listing
- Relationship between users and roles
- Create roles
- Update roles
- Associate users with roles
- PostgreSQL relational database
- Views
- Functions
- Structured SQL scripts
- Normalized schema
- Vue.js
- Vuetify
- JavaScript
- Node.js
- Express.js
- JWT Authentication
- PostgreSQL
The application was built to satisfy the following requirements:
- User registration
- Role registration
- User-role association
- User listing with assigned roles
- Update users and roles
- Deactivate users
- JWT authentication with 60-minute expiration
- Logout functionality
- Independent frontend and backend applications
- Gabriel Campos