Setelah menyelesaikan pembelajaran tentang Restful API, Anda ditugaskan oleh manajemen Warung Makan Samudra (WMS) yang sedang berkembang pesat untuk menciptakan sebuah API dengan fitur-fitur yang akan meningkatkan efisiensi dan kualitas layanan mereka.
Fitur-fitur yang diminta oleh manajemen WMS adalah:
- Manajemen Cabang
- Manajemen Produk/Menu
- Manajemen Transaksi
- Laporan Penjualan
- Pastikan Anda telah menginstal Java Development Kit (JDK)
Minimal Versi 17
dan Maven di komputer Anda. - Buka terminal atau command prompt dan arahkan ke direktori proyek
Contoh: warung-makan-bahari-api
. - Jalankan perintah berikut untuk menjalankan semua tes:
mvn test -Dtest=TestSuite
- Pastikan Anda telah melakukan konfigurasi yang tepat pada file
application.properties
. - Jika test gagal silakan
truncate
semua table di database Anda.
Request :
- Method : POST
- Endpoint :
/api/branch
- Header :
- Content-Type: application/json
- Accept: application/json
- Body :
{
"branchCode": "string",
"branchName": "string",
"address": "string",
"phoneNumber": "string"
}
Response :
{
"errors": "string",
"data": {
"branchId": "string",
"branchCode": "string",
"branchName": "string",
"address": "string",
"phoneNumber": "string"
},
"paging": null
}
Request :
- Method : GET
- Endpoint :
/api/branch/{id_branch}
- Header :
- Accept: application/json
Response :
{
"errors": "string",
"data": {
"branchId": "string",
"branchCode": "string",
"branchName": "string",
"address": "string",
"phoneNumber": "string"
},
"paging": null
}
Request :
- Method : PUT
- Endpoint :
/api/branch
- Header :
- Content-Type: application/json
- Accept: application/json
- Body :
{
"branchId": "string",
"branchCode": "string",
"branchName": "string",
"address": "string",
"phoneNumber": "string"
}
Response :
{
"errors": "string",
"data": {
"branchId": "string",
"branchCode": "string",
"branchName": "string",
"address": "string",
"phoneNumber": "string"
},
"paging": null
}
Request :
- Method : DELETE
- Endpoint :
/api/branch/{id_branch}
- Header :
- Accept: application/json
- Body :
Response :
{
"errors": "string",
"data": "OK",
"paging": null
}
Request :
- Method : POST
- Endpoint :
/api/products
- Header :
- Content-Type: application/json
- Accept: application/json
- Body :
{
"productCode": "string",
"productName": "string",
"price": "big decimal",
"branchId": "string"
}
Response :
{
"errors": "string",
"data": {
"productId": "string",
"productPriceId": "string",
"productCode": "string",
"productName": "string",
"price": "big decimal",
"branch": {
"branchId": "string",
"branchCode": "string",
"branchName": "string",
"address": "string",
"phoneNumber": "string"
}
},
"paging": null
}
Request :
- Method : GET
- Endpoint :
/api/products
- Header :
- Accept: application/json
- Query Param :
- size : number,
- page : number,
- productCode : string
optional
, - productName : string
optional
, - minPrice : string
optional
, - maxPrice : string
optional
,
Response :
{
"errors": "string",
"data": [
{
"productId": "string",
"productPriceId": "string",
"productCode": "string",
"productName": "string",
"price": "big decimal",
"branch": {
"branchId": "string",
"branchCode": "string",
"branchName": "string",
"address": "string",
"phoneNumber": "string"
}
},
{
"productId": "string",
"productPriceId": "string",
"productCode": "string",
"productName": "string",
"price": "big decimal",
"branch": {
"branchId": "string",
"branchCode": "string",
"branchName": "string",
"address": "string",
"phoneNumber": "string"
}
}
],
"paging": {
"count": "number",
"totalPage": "number",
"page": "number",
"size": "number"
}
}
Request :
- Method : GET
- Endpoint :
/api/products/{id_branch}
- Header :
- Accept: application/json
Response :
{
"errors": "string",
"data": [
{
"productId": "string",
"productPriceId": "string",
"productCode": "string",
"productName": "string",
"price": "big decimal",
"branch": {
"branchId": "string",
"branchCode": "string",
"branchName": "string",
"address": "string",
"phoneNumber": "string"
}
},
{
"productId": "string",
"productPriceId": "string",
"productCode": "string",
"productName": "string",
"price": "big decimal",
"branch": {
"branchId": "string",
"branchCode": "string",
"branchName": "string",
"address": "string",
"phoneNumber": "string"
}
}
],
"paging": {
"count": "number",
"totalPage": "number",
"page": "number",
"size": "number"
}
}
Request :
- Method : PUT
- Endpoint :
/api/products
- Header :
- Content-Type: application/json
- Accept: application/json
- Body :
{
"productId": "string",
"productCode": "string",
"productName": "string",
"price": "big decimal",
"branchId": "string"
}
Response :
{
"errors": "string",
"data": {
"productId": "string",
"productPriceId": "string",
"productCode": "string",
"productName": "string",
"price": "big decimal",
"branch": {
"branchId": "string",
"branchCode": "string",
"branchName": "string",
"address": "string",
"phoneNumber": "string"
}
},
"paging": null
}
Request :
- Method : DELETE
- Endpoint :
/api/products/{id_product}
- Header :
- Accept: application/json
- Body :
Response :
{
"errors": "string",
"data": "OK",
"paging": null
}
Request :
- Method : POST
- Endpoint :
/api/transactions
- Header :
- Content-Type: application/json
- Accept: application/json
- Body :
Request :
Transaction Type :
- "1" :
EAT IN
- "2" :
ONLINE
- "3" :
TAKE AWAY
{
"transactionType": "string",
"billDetails": [
{
"productPriceId": "string",
"quantity": "number"
},
{
"productPriceId": "string",
"quantity": "number"
}
]
}
Response :
- Template Receipt Number :
{branchCode}-{year}-{sequenceNumber}
- Transaction Type :
EAT_IN | TAKE_AWAY | ONLINE
{
"errors": "string",
"data": {
"billId": "string",
"receiptNumber": "string",
"transDate": "string",
"transactionType": "string",
"billDetails": [
{
"billDetailId": "string",
"billId": "string",
"product": {
"productId": "string",
"productPriceId": "string",
"productCode": "string",
"productName": "string",
"price": "bigDecimal",
"branch": {
"branchId": "string",
"branchCode": "string",
"branchName": "string",
"address": "string",
"phoneNumber": "string"
}
},
"quantity": "number",
"totalSales": "bigDecimal"
}
]
},
"paging": null
}
Request :
- Method : GET
- Endpoint :
/api/transactions/{id_bill}
- Header :
- Accept: application/json
- Body :
Response :
- Template Receipt Number :
{branchCode}-{year}-{sequenceNumber}
- Transaction Type :
EAT_IN | TAKE_AWAY | ONLINE
{
"errors": "string",
"data": {
"billId": "string",
"receiptNumber": "string",
"transDate": "localDateTime",
"transactionType": "string",
"billDetails": [
{
"billDetailId": "string",
"billId": "string",
"product": {
"productId": "string",
"productCode": "string",
"productName": "string",
"price": "bigDecimal",
"branch": {
"branchId": "string",
"branchCode": "string",
"branchName": "string",
"address": "string",
"phoneNumber": "string"
}
},
"quantity": "number"
}
]
},
"paging": null
}
Pattern string date : dd-MM-yyyy
Request :
- Method : GET
- Endpoint :
/api/transactions
- Header :
- Accept : application/json
- Query Param :
- page : number
- size : number
- receiptNumber : string
optional
- startDate : string
optional
- endDate : string
optional
- transType : string
optional
- productName : string
optional
- Body :
Response :
- Template Receipt Number :
{branchId}-{year}-{sequenceNumber}
- Transaction Type :
EAT_IN | TAKE_AWAY | ONLINE
{
"errors": "string",
"data": [
{
"billId": "string",
"receiptNumber": "string",
"transDate": "localDateTime",
"transactionType": "string",
"billDetails": [
{
"billDetailId": "string",
"billId": "string",
"product": {
"productId": "string",
"productCode": "string",
"productName": "string",
"price": "bigDecimal",
"branch": {
"branchId": "string",
"branchCode": "string",
"branchName": "string",
"address": "string",
"phoneNumber": "string"
}
},
"quantity": "number"
}
]
}
],
"paging": null
}
Request :
Pattern string date : dd-MM-yyyy
- Method : GET
- Endpoint :
/api/transactions/total-sales
- Header :
- Accept: application/json
- Query Param :
- startDate : string
optional
, - endDate : string
optional
,
- startDate : string
- Body :
Response :
{
"errors": "string",
"data": {
"eatIn": "bigDecimal",
"takeAway": "bigDecimal",
"online": "bigDecimal"
},
"paging": null
}