This README documents available HTTP routes and high-level behaviour for the microservices in this repository: field_service, order_service, payment_service, and user_service.
-
Base router: Each service uses Gin. Routes shown below are relative to the service base URL (e.g.
http://{host}:{port}) for that service. -
Auth: Services use JWT-based middleware located in each service's
middlewarespackage. Routes marked (public) do not require a token; others require authentication and some also check roles (Admin,Customer). Role checks call middlewareCheckRole([...], client).
Base path: /
-
GET /field (public)
- Description: Get all fields (no pagination).
- Controller:
FieldController.GetAllWithoutPagination - Auth: None (uses
AuthenticateWithoutToken)
-
GET /field/:uuid (public)
- Description: Get field details by UUID.
- Controller:
FieldController.GetByUUID - Auth: None
-
GET /field/pagination
- Description: Get fields with pagination. Query params validated by
dto.FieldRequestParam. - Controller:
FieldController.GetAllWithPagination - Auth: Required. Roles allowed:
Admin,Customer.
- Description: Get fields with pagination. Query params validated by
-
POST /field
- Description: Create a field. Multipart form binding used (
binding.FormMultipart). Validated bydto.FieldRequest. - Controller:
FieldController.Create - Auth: Required. Roles allowed:
Admin.
- Description: Create a field. Multipart form binding used (
-
PUT /field/:uuid
- Description: Update a field (multipart). Validated by
dto.UpdateFieldRequest. - Controller:
FieldController.Update - Auth: Required. Roles allowed:
Admin.
- Description: Update a field (multipart). Validated by
-
DELETE /field/:uuid
- Description: Delete a field by UUID.
- Controller:
FieldController.Delete - Auth: Required. Roles allowed:
Admin.
-
GET /field/schedule/lists/:uuid?date=YYYY-MM-DD (public)
- Description: List field schedules by field UUID and date (query param
date). Validated bydto.FieldScheduleByFieldIDAndDateRequestParam. - Controller:
FieldScheduleController.GetAllByFieldIDAndDate - Auth: None
- Description: List field schedules by field UUID and date (query param
-
PATCH /field/schedule/status (public)
- Description: Update status for one or many schedules. Request validated by
dto.UpdateStatusFieldScheduleRequest. - Controller:
FieldScheduleController.UpdateStatus - Auth: None
- Description: Update status for one or many schedules. Request validated by
-
GET /field/schedule/pagination
- Description: Get field schedules with pagination. Validated by
dto.FieldScheduleRequestParam. - Controller:
FieldScheduleController.GetAllWithPagination - Auth: Required. Roles:
Admin,Customer.
- Description: Get field schedules with pagination. Validated by
-
GET /field/schedule/:uuid
- Description: Get field schedule by UUID.
- Controller:
FieldScheduleController.GetByUUID - Auth: Required. Roles:
Admin,Customer.
-
POST /field/schedule
- Description: Create field schedule. JSON body validated by
dto.FieldScheduleRequest. - Controller:
FieldScheduleController.Create - Auth: Required. Roles:
Admin.
- Description: Create field schedule. JSON body validated by
-
POST /field/schedule/one-month
- Description: Generate schedule for one month. Request validated by
dto.GenerateFieldScheduleForOneMonthRequest. - Controller:
FieldScheduleController.GenerateScheduleForOneMonth - Auth: Required. Roles:
Admin.
- Description: Generate schedule for one month. Request validated by
-
PUT /field/schedule/:uuid
- Description: Update field schedule by UUID. JSON body validated by
dto.UpdateFieldScheduleRequest. - Controller:
FieldScheduleController.Update - Auth: Required. Roles:
Admin.
- Description: Update field schedule by UUID. JSON body validated by
-
DELETE /field/schedule/:uuid
- Description: Delete field schedule by UUID.
- Controller:
FieldScheduleController.Delete - Auth: Required. Roles:
Admin.
-
GET /time
- Description: Get all time slots.
- Controller:
TimeController.GetAll - Auth: Required. Roles:
Admin.
-
GET /time/:uuid
- Description: Get time slot by UUID.
- Controller:
TimeController.GetByUUID - Auth: Required. Roles:
Admin.
-
POST /time
- Description: Create new time slot.
- Controller:
TimeController.Create - Auth: Required. Roles:
Admin.
Base path: /
-
GET /order
- Description: Get orders with pagination. Query validated by
dto.OrderRequestParam. - Controller:
OrderController.GetAllWithPagination - Auth: Required. Roles:
Admin,Customer.
- Description: Get orders with pagination. Query validated by
-
GET /order/:uuid
- Description: Get order by UUID.
- Controller:
OrderController.GetByUUID - Auth: Required. Roles:
Admin,Customer.
-
GET /order/user
- Description: Get orders for the authenticated user.
- Controller:
OrderController.GetOrderByUserID - Auth: Required. Roles:
Customer.
-
POST /order
- Description: Create a new order. JSON body validated by
dto.OrderRequest. - Controller:
OrderController.Create - Auth: Required. Roles:
Customer.
- Description: Create a new order. JSON body validated by
Notes:
OrderController.Createcalls into the order service to create an order, likely interacting with repositories and producing events via Kafka (seecontrollers/kafkaandcontrollers/httpfolders).
Base path: /
-
POST /payment/webhook (public)
- Description: External payment provider webhook endpoint (Midtrans). Accepts JSON webhook payload (
dto.Webhook). - Controller:
PaymentController.Webhook - Auth: None (public webhook)
- Description: External payment provider webhook endpoint (Midtrans). Accepts JSON webhook payload (
-
GET /payment
- Description: Get payments with pagination. Query validated by
dto.PaymentRequestParam. - Controller:
PaymentController.GetAllWithPagination - Auth: Required. Roles:
Admin,Customer.
- Description: Get payments with pagination. Query validated by
-
GET /payment/:uuid
- Description: Get payment by UUID.
- Controller:
PaymentController.GetByUUID - Auth: Required. Roles:
Admin,Customer.
-
POST /payment
- Description: Create a new payment record (likely triggers Midtrans payment flow). JSON body validated by
dto.PaymentRequest. - Controller:
PaymentController.Create - Auth: Required. Roles:
Customer.
- Description: Create a new payment record (likely triggers Midtrans payment flow). JSON body validated by
Notes:
- Webhook handler calls
service.GetPayment().Webhookto update order/payment status; ensureset_ip_public_for_midtrans.txtis followed when running Midtrans locally.
Base path: /
-
POST /user/login
- Description: Authenticate a user. Request JSON validated by
dto.LoginRequest. ReturnsTokenin response. - Controller:
UserController.Login - Auth: None
- Description: Authenticate a user. Request JSON validated by
-
POST /user/register
- Description: Register a new user. Request JSON validated by
dto.RegisterRequest. - Controller:
UserController.Register - Auth: None
- Description: Register a new user. Request JSON validated by
-
PUT /user/:uuid
- Description: Update user by UUID. Request JSON validated by
dto.UpdateRequest. - Controller:
UserController.Update - Auth: Required (middleware applies). Role checks are handled via
middlewares.CheckRolein calling services.
- Description: Update user by UUID. Request JSON validated by
-
GET /user/login
- Description: Get the currently authenticated user.
- Controller:
UserController.GetUserLogin - Auth: Required
-
GET /user/:uuid
- Description: Get user by UUID.
- Controller:
UserController.GetUserByUUID - Auth: Required
-
Validation: Handlers use
github.com/go-playground/validator/v10and return422 Unprocessable Entityfor validation errors with structured error details viacommon/errorpackages. -
Responses: Most handlers use a shared
common/responsehelper that produces structured JSON includingCode,Data,Message, andTokenwhen authentication is performed. -
Authentication & Authorization:
middlewares.Authenticate()ensures the request has a valid JWT.middlewares.AuthenticateWithoutToken()allows some endpoints public access.middlewares.CheckRole([]string{...}, client)enforces roles by consulting theclientspackage (likely callinguser_serviceor a token introspection endpoint in Consul configuration).
-
Inter-service communication:
- Services register clients under
clients/(e.g. user client, field client). These are used for role checks and user lookups. - Kafka producers/consumers exist in
controllers/kafkafor asynchronous flows (order/payment events). Check individual servicecontrollers/kafkafor event names.
- Services register clients under
-
Config: Each service has
config.jsonandconfig.json.exampleand loads configuration from Consul or environment. See top-levelproject/docker-compose.yamlfor local stack composition.