Backend dengan fiber, postgresql, jwt
Aplikasi membutuhkan variable yang wajib diisi untuk koneksi ke database dan keamanan JWT
.
copy atau rename file .env-example menjadi .env. Sesuaikan isinya seperti pada contoh
file ini akan diload ketika program dijalankan.
Aplikasi memerlukan database PostgreSQL dengan nama database testsaga.
adapun Table yang dibutuhkan sebagai berikut : (tidak sempat dibuat automigration)
CREATE TABLE users (
username VARCHAR ( 50 ) PRIMARY KEY,
name VARCHAR (100) NOT NULL,
email VARCHAR ( 255 ) UNIQUE NOT NULL,
password VARCHAR (100) NOT NULL,
role VARCHAR(50) NOT NULL,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL
)
CREATE TABLE products (
product_id SERIAL PRIMARY KEY,
name VARCHAR (100) UNIQUE NOT NULL,
price BIGINT,
image VARCHAR(50),
created_by VARCHAR REFERENCES users(username),
created_at BIGINT NOT NULL
)
design database dibuat se flat mungkin hanya untuk mempermudah test ini.
postman config disertakan pada folder postman_file. sedikit sample akan ditulis dibawah ini :
POST{{url}}/api/v1/register-forcemeregister user tanpa auth admin
Body :
{
"username":"muchlis",
"email": "whois.who@gmail.com",
"name": "muchlis",
"password": "Password",
"role": "ADMIN"
}role hanya dapat di isi dengan ADMIN atau NORMAL
POST{{url}}/api/v1/loginlogin dengan mengembalikan access token dan refresh token. token ini nantinya yang akan terus dilampirkan pada setiap request padaheaderkey :Authorizationdan valueBearer {token_tanpa_curly_brace}Body :
{
"username":"muchlis",
"password":"Password"
}GET{{url}}/api/v1/productsmenampilkan list produk, memerlukan tokenPOST{{url}}/api/v1/productsmenambahkan products
Body :
{
"name": "Mangga",
"price": 50000
}POST{{url}}/api/v1/products-image/:idmengupload gambar product.
gunakan form-data dengan key "image" dan value {gambarnya}.
/*
// url mapping
api := app.Group("/api/v1")
//USER
api.Get("/users/:username", userHandler.Get)
api.Get("/users", userHandler.Find)
api.Post("/login", userHandler.Login)
api.Post("/refresh", userHandler.RefreshToken)
api.Get("/profile", middle.NormalAuth(), userHandler.GetProfile)
api.Post("/register-force", userHandler.Register) // <- seharusnya gunakan middleware agar hanya admin yang bisa meregistrasi
api.Post("/register", middle.NormalAuth(config.RoleAdmin), userHandler.Register) // <- hanya admin yang bisa meregistrasi
api.Put("/users/:username", middle.NormalAuth(config.RoleAdmin), userHandler.Edit)
api.Delete("/users/:username", middle.NormalAuth(config.RoleAdmin), userHandler.Delete)
//PRODUCT
api.Get("/products/:id", middle.NormalAuth(), productHandler.Get)
api.Get("/products", middle.NormalAuth(), productHandler.Find)
api.Post("/products", middle.NormalAuth(), productHandler.Insert)
api.Put("/products/:id", middle.NormalAuth(), productHandler.Edit)
api.Delete("/products/:id", middle.NormalAuth(), productHandler.Delete)
api.Post("/products-image/:id", middle.NormalAuth(), productHandler.UploadImage) // <- upload image multipath*/