- Rust - Install dari https://rustup.rs/
- MySQL Server - Pastikan berjalan di localhost:3306
- Database - Buat database baru untuk aplikasi ini
Buat database MySQL:
CREATE DATABASE restful_api_db;- Copy file
.env.exampleke.env:
cp .env.example .env- Edit file
.envdengan kredensial MySQL Anda:
DATABASE_URL=mysql://root:your_password@localhost:3306/restful_api_db
RUST_LOG=info- Install dependencies:
cargo build- Jalankan aplikasi:
cargo run- copy rsa key yang sudah di generate kedalam
.envfile
=== PRIVATE KEY ===
-----BEGIN PRIVATE KEY-----
\nMIIEvwIBADANBgkqhkiG9w0BAQEF...
-----END PRIVATE KEY-----\n
=== PUBLIC KEY ===
-----BEGIN PUBLIC KEY-----
\nMIIBIjANBgkqhkiG9w0BAQEFAAOC...
-----END PUBLIC KEY-----\n
Jalankan ulang dan jika berhasil, Anda akan melihat output seperti:
Starting application...
Database URL loaded: mysql://root:password@localhost:3306/restful_api_db
Attempting to connect to MySQL...
Successfully connected to MySQL database!
Setting up database tables...
Database setup completed successfully!
Starting HTTP server...
Server ready at http://localhost:8080
curl -X POST http://localhost:8080/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username": "admin", "password": "password"}'Response:
{"token": "your_jwt_token_here"}curl -X GET http://localhost:8080/api/data \
-H "Authorization: Bearer your_jwt_token_here"curl -X POST http://localhost:8080/api/data \
-H "Authorization: Bearer your_jwt_token_here" \
-H "Content-Type: application/json" \
-d '{
"title": "Task 1",
"description": "First task description",
"status": "pending",
"image": "task1.jpg",
"details": [
{
"name": "Subtask 1",
"progress": "50%",
"target": "100%"
},
{
"name": "Subtask 2",
"progress": "0%",
"target": "100%"
}
]
}'- Pastikan file
.envada di root directory - Pastikan
DATABASE_URLsudah diset dengan benar
- Pastikan MySQL server berjalan
- Pastikan database sudah dibuat
- Periksa username, password, host, dan port
- Pastikan user MySQL memiliki permission untuk CREATE TABLE
- Periksa sintaks SQL di file database.rs
- Pastikan port 8080 tidak digunakan aplikasi lain
- Periksa firewall settings
GET /api/health- Health check (no auth required)POST /api/auth/register- Register a new userPOST /api/auth/login- Login to get tokenGET /api/data- Get all data with paginationGET /api/data/{id}- Get specific dataPOST /api/data- Create new dataPUT /api/data/{id}- Update dataDELETE /api/data/{id}- Delete dataPUT /api/data/{id}/payment- Update payment for specific dataDELETE /api/data/{id}/payment- Delete payment for specific data
idVARCHAR(8) PRIMARY KEYtitleTEXT NOT NULLdescriptionTEXT NOT NULLstatusENUM('pending', 'in progress', 'done') NOT NULL DEFAULT 'pending'imageTEXT NOT NULLstart_date TIMESTAMP NULLend_dateTIMESTAMP NULLcreated_atTIMESTAMP DEFAULT CURRENT_TIMESTAMP
idBIGINT AUTO_INCREMENT PRIMARY KEYlist_idVARCHAR(8) NOT NULLnameTEXT NOT NULLprogressVARCHAR(255) NOT NULLtargetVARCHAR(255) NOT NULL- FOREIGN KEY (list_id) REFERENCES list_data(id) ON DELETE CASCADE
idBIGINT AUTO_INCREMENT PRIMARY KEYlist_idVARCHAR(8) NOT NULLnameTEXT NOT NULLtypeenum('cash', 'cashless') NOT NULLamountBIGINT NOT NULLdateTIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP- FOREIGN KEY (list_id) REFERENCES list_data(id) ON DELETE CASCADE
idBIGINT AUTO_INCREMENT PRIMARY KEYusernameVARCHAR(255) NOT NULL UNIQUEpassword_hashTEXT NOT NULLemailVARCHAR(255) NULL UNIQUEroleENUM('user', 'admin') NOT NULL DEFAULT 'user'activeBOOLEAN DEFAULT TRUEcreated_atTIMESTAMP DEFAULT CURRENT_TIMESTAMPupdated_atTIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMPdeleted_atTIMESTAMP NULL DEFAULT NULL