---
title: 'Project documentation template'
disqus: hackmd
---
Nautical POS API
===
Dokumentasi dan break down API terkait project Nautical POS
Take me to [pookie](#pookie)
[TOC]
## Login
#### Endpoint
`[POST]`
`{api_url}/login`
#### Header
`Tidak ada`
#### Parameter
`Body [raw json]`
```json=
{
"username": "johndoesianying", //[min=6][max=50]
"password": "1234567890", //[min=8][max=20]
"captcha": "" //[optional]
}
```
#### Response
`status 201`
:::spoiler
```json=
{
"message": "sukses",
"error": false,
"results": {
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJiZWFyZXIiLCJzdWIiOlsxLCJTdXBlcnVzZXIiXSwiaWF0IjoxNjM2NDM4NzYwLCJleHAiOjE2MzY1MjUxNjB9._MTlqFc9Te0AemIhBbTHzSCSJ4mPfhuCUXGiPPrMyCc",
"user_id": 1,
"user_username": "johndoesianying",
"user_fullname": "John Anying",
"user_email": "john@gmail.com",
"user_phone_number":"08912345689"
"user_image_url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/d3/Microsoft_Account.svg/512px-Microsoft_Account.svg.png",
"user_role":"Superuser",
"created_at":"2021-10-06 06:54:15"
}
}
```
:::
---
## Dashboard
#### Endpoint
`[GET]`
`{api_url}/dashboard`
#### Header
| Key | Value |
| -------- | -------- |
| Authorization | Bearer {token} |
#### Parameter
`Tidak ada parameter`
#### Response
`status 200`
:::spoiler
```json=
{
{
"message": "sukses",
"error": false,
"results": {
"summary": {
"total_transaction": 200,
"total_bruto": 5000000,
"total_netto": 4000000,
"total_profit": 3500000
},
"top_product": [
{
"product_id": 1,
"product_name": "Kopi Susu",
"product_sale_qty": 200
},
{
"product_id": 2,
"product_name": "Jus Jeruk",
"product_sale_qty": 300
},
{
"product_id": 3,
"product_name": "Ayam Goreng",
"product_sale_qty": 250
},
],
"top_sales_type": [
{
"sales_type_id": 1,
"sales_type_name": "Dine In"
"sales_total": 100
},
{
"sales_type_id": 2,
"sales_type_name": "Take Away"
"sales_total": 200
},
{
"sales_type_id": 3,
"sales_type_name": "Delivery"
"sales_total": 50
},
],
"top_payment_method": [
{
"payment_method_id": 1
"payment_method_name": "Tunai",
"total_struck": 200
},
{
"payment_method_id": 2
"payment_method_name": "Gopay",
"total_struck": 200
},
{
"payment_method_id": 3
"payment_method_name": "Ovo",
"total_struck": 200
},
{
"payment_method_id": 4
"payment_method_name": "Transfer",
"total_struck": 200
},
],
"total_selling_chart": [
{
"date": "2020-11-07",
"total_transaction": 200,
"total_bruto": 5000000,
"total_netto": 4000000,
"total_profit": 3500000
},
{
"date": "2020-11-08",
"total_transaction": 200,
"total_bruto": 5000000,
"total_netto": 4000000,
"total_profit": 3500000
},
],
"stock_alert": [
{
"product_id": 1,
"product_name": "Susu",
"product_unit": "Mililiter",
"stock_balance": -2,
"category_name": "Bahan"
},
{
"product_id": 2,
"product_name": "Gula",
"product_unit": "Gram",
"stock_balance": -30,
"category_name": "Bahan"
},
]
}
}
}
```
:::
---
## Tipe Penjualan
### List
#### Endpoint
`[GET]`
`{api_url}/sales-types`
#### Header
| Key | Value |
|:------------- | -------------- |
| Authorization | Bearer {token} |
#### Parameter
`Params`
| Key | Value | Description |
|:----------------------- |:---------- |:----------- |
| limit | 1 | optional |
| sort[sales_type_id] | desc | default |
| sort[sales_type_name] | asc | optional |
| sales_type_name[like] | Dine In | optional |
| search[sales_type_name] | Dine | optional |
| created_at[date] | 2021-10-05 | optional |
| page | 5 | optional |
#### Response
`status 200`
:::spoiler
```json=
{
"message": "sukses",
"error": false,
"results": {
"data": [
{
"sales_type_id": "2",
"sales_type_name": "Take Away",
"sales_type_slug": "take_away",
"sales_type_margin": "percent",
"sales_type_value": "0"
},
{
"sales_type_id": "4",
"sales_type_name": "Grab Food",
"sales_type_slug": "grab_food",
"sales_type_margin": "percent",
"sales_type_value": "0"
}
]
"current_page": 1,
"first_page_url": "{api_url}/sales-types?page=1",
"next_page_url": "",
"prev_page_url": "",
"path": "{api_url}/sales-types",
"per_page": 10,
"total_page": 1,
"all_page_url": [
"{api_url}/sales-types?page=1"
]
}
}
```
:::
---
### Create
#### Endpoint
`[POST]`
`{api_url}/sales-types`
#### Header
| Key | Value |
|:------------- | -------------- |
| Authorization | Bearer {token} |
#### Parameter
`Body [raw json]`
```json=
{
"name": "Dine In", //[max=50]
"margin": "percent", //[percent,nominal]
"value": 0 //[optional]
}
```
#### Response
`status 201`
:::spoiler
```json=
{
"message": "sukses",
"error": false,
"results": {
"sales_type_id": "2",
"sales_type_name": "Take Away",
"sales_type_slug": "take_away",
"sales_type_margin": "percent",
"sales_type_value": "0"
}
}
```
:::
---
### Update
#### Endpoint
`[PUT]`
`{api_url}/sales-types/{sales_type_id}`
#### Header
| Key | Value |
|:------------- | -------------- |
| Authorization | Bearer {token} |
#### Parameter
`Body [raw json]`
```json=
{
"name": "Dine In", //[max=50]
"margin": "percent", //[percent,nominal]
"value": 0 //[optional]
}
```
#### Response
`status 200`
:::spoiler
```json=
{
"message": "sukses",
"error": false,
"results": {
"sales_type_id": "2",
"sales_type_name": "Take Away",
"sales_type_slug": "take_away",
"sales_type_margin": "percent",
"sales_type_value": "0"
}
}
```
:::
---
### Delete
#### Endpoint
`[DELETE]`
`{api_url}/sales-types/{sales_type_id}`
#### Header
| Key | Value |
|:------------- | -------------- |
| Authorization | Bearer {token} |
#### Parameter
#### Response
`status 204`
---
## User
### List
#### Endpoint
`[GET]`
:::success
`{api_url}/users`
:::
#### Header
| Key | Value |
| -------- | -------- |
| Authorization | Bearer {token} |
#### Parameter
[Dokumentasi parameter GET](#pookie)
#### Response
`status 200`
:::spoiler
```json=
{
"message": "sukses",
"error": false,
"results": {
"data": [
{
"user_id": 1,
"user_username": "johndoesianying",
"user_fullname": "John Doe Si Anying",
"user_email": "johndoe@nautical.com",
"user_mobilephone": "081234567890",
"user_image": "https://demo.next-pos.my.id/media/images/1631862174_28ef695ebdf99cdb91bf.jpg",
"user_last_login": "2020-11-16 03:21:19",
"user_is_active": "1",
"store_id": 1,
"store_name": "Nautical",
"user_group_id": 3,
"user_group_name": "Kasir"
},
]
"current_page": 1,
"first_page_url": "http://10.10.0.80:8081/users?page=1",
"next_page_url": "http://10.10.0.80:8081/users?page=2",
"prev_page_url": "",
"path": "http://10.10.0.80:8081/users",
"per_page": 10,
"total_page": 1,
"all_page_url": ["http://10.10.0.80:8081/users?page=1"]
}
}
```
:::
### Create
#### Endpoint
`[POST]`
:::success
`{api_url}/users`
:::
#### Header
| Key | Value |
| -------- | -------- |
| Authorization | Bearer {token} |
#### Parameter
```json=
{
"store_id": 1,
"user_group_id": 3,
"user_username": "johndoesianying",
"user_fullname": "John Doe Si Anying",
"user_email": "johndoe@nautical.com",
"user_image": "",
"user_mobilephone": "081234567890"
"user_password": "12345678"
}
```
#### Response
`status 201`
:::spoiler
```json=
{
"message": "sukses",
"error": false,
"results": {
"user_id": 1,
"user_username": "johndoesianying",
"user_fullname": "John Doe Si Anying",
"user_email": "johndoe@nautical.com",
"user_mobilephone": "081234567890",
"user_image": "https://demo.next-pos.my.id/media/images/1631862174_28ef695ebdf99cdb91bf.jpg",
"user_last_login": "2020-11-16 03:21:19",
"user_is_active": "1",
"store_id": 1,
"store_name": "Nautical",
"user_group_id": 3,
"user_group_name": "Kasir"
}
}
```
:::
### Update
#### Endpoint
`[PUT]`
:::success
`{api_url}/users/{user_id}`
:::
#### Header
| Key | Value |
| -------- | -------- |
| Authorization | Bearer {token} |
#### Parameter
```json=
{
"store_id": 1,
"user_group_id": 3,
"user_username": "johndoesianying",
"user_fullname": "John Doe Si Anying",
"user_email": "johndoe@nautical.com",
"user_image": "",
"user_mobilephone": "081234567890"
"user_password": "12345678"
}
```
#### Response
`status 200`
:::spoiler
```json=
{
"message": "sukses",
"error": false,
"results": {
"user_id": 1,
"user_username": "johndoesianying",
"user_fullname": "John Doe Si Anying",
"user_email": "johndoe@nautical.com",
"user_mobilephone": "081234567890",
"user_image": "https://demo.next-pos.my.id/media/images/1631862174_28ef695ebdf99cdb91bf.jpg",
"user_last_login": "2020-11-16 03:21:19",
"user_is_active": "1",
"store_id": 1,
"store_name": "Nautical",
"user_group_id": 3,
"user_group_name": "Kasir"
}
}
```
:::
### Delete
#### Endpoint
`[DELETE]`
:::success
`{api_url}/users/{user_id}`
:::
#### Header
| Key | Value |
|:------------- | -------------- |
| Authorization | Bearer {token} |
#### Parameter
#### Response
`status 204`
---
## Shift
### List
#### Endpoint
`[GET]`
`{api_url}/shift`
#### Header
| Key | Value |
|:------------- | -------------- |
| Authorization | Bearer {token} |
#### Parameter
`Params`
#### Response
`status 200`
:::spoiler
```json=
{
"message": "sukses",
"error": false,
"results": {
"data": [
{
"shift_start_date": "2020-11-07 00:10:15"
"close_register_id": "1",
"close_register_store_id": "1",
"close_register_code": "001",
"close_register_date": "2020-11-07",
"close_register_total_cashier_cash_in": "0.00",
"close_register_total_cash_received": "0.00",
"close_register_total_income_cash": "63000.00",
"close_register_total_income_non_cash": "0.00",
"close_register_total_income_detail_json": "{\"edc\":0,\"transfer\":0,\"ovo\":0,\"gopay\":0}",
"close_register_total_cashier_cash_out": "0.00",
"close_register_grand_total": "63000.00",
"close_register_input_datetime": "2020-11-07 21:16:16",
"close_register_input_user_id": "16",
"close_register_input_user_fullname": "dede",
"close_register_input_user_username": "dede123",
"close_register_update_datetime": "2020-11-07 21:16:16",
"close_register_update_user_fullname": "dede",
"close_register_update_user_username": "dede123",
}
]
"current_page": 1,
"first_page_url": "{api_url}/shift?page=1",
"next_page_url": "",
"prev_page_url": "",
"path": "{api_url}/shift",
"per_page": 10,
"total_page": 1,
"all_page_url": [
"{api_url}/shift?page=1"
]
}
}
```
:::
---
### Detail
#### Endpoint
`[GET]`
`{api_url}/shift/detail/{close_register_id}`
#### Header
| Key | Value |
|:------------- | -------------- |
| Authorization | Bearer {token} |
#### Parameter
`Params`
#### Response
`status 200`
:::spoiler
```json=
{
"message": "sukses",
"error": false,
"results": {
"data": [
{
"sales_order_id": "1",
"sales_order_store_id": "1",
"sales_order_number": "001",
"sales_order_transaction_number": "INV/201107001",
"sales_order_table_number": "Dine In",
"sales_order_note": null,
"sales_order_sales_type_slug": "dine_in",
"sales_order_sales_type_name": "Dine In",
"sales_order_payment_method": "cash",
"sales_order_payment_bank_name": null,
"sales_order_payment_ref_number": null,
"sales_order_date": "2020-11-07",
"sales_order_total_product_qty": "1",
"sales_order_total_product_price": "15000",
"sales_order_total_discount_percent": "0",
"sales_order_total_discount_nominal": "0",
"sales_order_total_discount_item_nominal": "0",
"sales_order_total_nett_price": "15000",
"sales_order_total_charge_percent": null,
"sales_order_total_charge_nominal": null,
"sales_order_total_tax_percent": null,
"sales_order_total_tax_nominal": null,
"sales_order_grand_total": "15000",
"sales_order_customer_id": "0",
"sales_order_customer_name": "Umum",
"sales_order_input_datetime": "2020-11-07 21:05:35",
"sales_order_input_user_id": "16",
"sales_order_input_user_fullname": "dede itel",
"sales_order_input_user_username": "dede123",
"sales_order_status": "complete"
},
{
"sales_order_id": "2",
"sales_order_store_id": "1",
"sales_order_number": "002",
"sales_order_transaction_number": "INV/201107002",
"sales_order_table_number": "Meja 1",
"sales_order_note": null,
"sales_order_sales_type_slug": "dine_in",
"sales_order_sales_type_name": "Dine In",
"sales_order_payment_method": "cash",
"sales_order_payment_bank_name": null,
"sales_order_payment_ref_number": null,
"sales_order_date": "2020-11-07",
"sales_order_total_product_qty": "3",
"sales_order_total_product_price": "48000",
"sales_order_total_discount_percent": "0",
"sales_order_total_discount_nominal": "0",
"sales_order_total_discount_item_nominal": "0",
"sales_order_total_nett_price": "48000",
"sales_order_total_charge_percent": null,
"sales_order_total_charge_nominal": null,
"sales_order_total_tax_percent": null,
"sales_order_total_tax_nominal": null,
"sales_order_grand_total": "48000",
"sales_order_customer_id": "0",
"sales_order_customer_name": "Umum",
"sales_order_input_datetime": "2020-11-07 21:14:18",
"sales_order_input_user_id": "16",
"sales_order_input_user_fullname": "dede",
"sales_order_input_user_username": "dede123",
"sales_order_status": "complete"
}
]
"current_page": 1,
"first_page_url": "{api_url}/shift/detail/{close_register_id}?page=1",
"next_page_url": "",
"prev_page_url": "",
"path": "{api_url}/shift/detail/{close_register_id}",
"per_page": 10,
"total_page": 1,
"all_page_url": [
"{api_url}/shift/detail/{close_register_id}?page=1"
]
}
}
```
:::
---
### Open Shift
#### Endpoint
`[POST]`
`{api_url}/shift/open`
#### Header
| Key | Value |
|:------------- | -------------- |
| Authorization | Bearer {token} |
#### Parameter
`Body [raw json]`
```json=
{
"nominal": 1200000, //[boleh nol]
"note": "catatan ",
}
```
#### Response
`status 201`
:::spoiler
```json=
{
"message": "sukses membuka shift",
"error": false,
"results": {}
}
```
:::
---
### Close Shift
#### Endpoint
`[POST]`
`{api_url}/shift/close`
#### Header
| Key | Value |
|:------------- | -------------- |
| Authorization | Bearer {token} |
#### Parameter
`Body [raw json]`
```json=
{
"nominal": 1200000, //[boleh nol]
"note": "catatan ",
}
```
#### Response
`status 201`
:::spoiler
```json=
{
"message": "sukses menutup shift",
"error": false,
"results": {
"shift_start_date": "2020-11-07 00:10:15"
"close_register_id": "1",
"close_register_store_id": "1",
"close_register_code": "001",
"close_register_date": "2020-11-07",
"close_register_total_cashier_cash_in": "0.00",
"close_register_total_cash_received": "0.00",
"close_register_total_income_cash": "63000.00",
"close_register_total_income_non_cash": "0.00",
"close_register_total_income_detail_json": "{\"edc\":0,\"transfer\":0,\"ovo\":0,\"gopay\":0}",
"close_register_total_cashier_cash_out": "0.00",
"close_register_grand_total": "63000.00",
"close_register_input_datetime": "2020-11-07 21:16:16",
"close_register_input_user_id": "16",
"close_register_input_user_fullname": "dede",
"close_register_input_user_username": "dede123",
"close_register_update_datetime": "2020-11-07 21:16:16",
"close_register_update_user_fullname": "dede",
"close_register_update_user_username": "dede123"
}
}
```
:::
---
User story
---
```php=
$asu = 1;
Feature: Guess the word
# The first example has two steps
Scenario: Maker starts a game
When the Maker starts a game
Then the Maker waits for a Breaker to join
# The second example has three steps
Scenario: Breaker joins a game
Given the Maker has started a game with the word "silky"
When the Breaker joins the Maker's game
Then the Breaker must guess a word with 5 characters
```
> I choose a lazy person to do a hard job. Because a lazy person will find an easy way to do it. [name=Bill Gates]
```gherkin=
Feature: Shopping Cart
As a Shopper
I want to put items in my shopping cart
Because I want to manage items before I check out
Scenario: User adds item to cart
Given I'm a logged-in User
When I go to the Item page
And I click "Add item to cart"
Then the quantity of items in my cart should go up
And my subtotal should increment
And the warehouse inventory should decrement
```
> Read more about Gherkin here: https://docs.cucumber.io/gherkin/reference/
User flows
---
```sequence
Alice->Bob: Hello Bob, how are you?
Note right of Bob: Bob thinks
Bob-->Alice: I am good thanks!
Note left of Alice: Alice responds
Alice->Bob: Where have you been?
```
> Read more about sequence-diagrams here: http://bramp.github.io/js-sequence-diagrams/
Project Timeline
---
```mermaid
gantt
title A Gantt Diagram
section Section
A task :a1, 2014-01-01, 30d
Another task :after a1 , 20d
section Another
Task in sec :2014-01-12 , 12d
anther task : 24d
```
> Read more about mermaid here: http://mermaid-js.github.io/mermaid/
## Appendix and FAQ
:::info
**Find this document incomplete?** Leave a comment!
:::
###### tags: `Templates` `Documentation`
### <a id="pookie"></a>This is the Heading