pattern

Terminal Service

What is the Terminal Service?

Terminal service is a system that registers and manages terminals and their transactions.. It depend on the auth and business services respectively as a core dependency. Both services serves as means of authentication and authorization.

Routes

Banks

GET("/banks") or POST("/banks")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Terminal Branch Location

GET("/terminal-branch-location") or POST("/terminal-branch-location")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Request Body

								
{
	"filter": "boolean | required"
	"more": "boolean | required"
	"pageNumber": 1, // required
	"batchNumber": 10, // required
	"sort": "required", // ASC | DESC
	"orderBy" :"required", // go to GET("/allowed-query/fields/terminal-branch-location") to see accepted fields
	"groups": [{
		"filterGroupCondition":"required" // AND | OR
		"filterSearchCondition":"required" // AND | OR
		"filters": [{
			"filterOption": "eq",
			"field": "", // go to GET("/allowed-query/fields/terminal-branch-location") to see accepted fields
			"value": "user input",
			"dataType": "string" // string | number | bool | date | dateTime
		}]
	}]
}
								
							
GET("/terminal-branch-location/details/:id")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							
POST("/terminal-branch-location/create")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Request Body

								
{
	"businessId": "required",
	"managerFirstName": "required",
	"managerLastName": "required",
	"managerGender": "required",
	"managerPhoneNumber": "required",
	"outletName": "required",
	"outletCountry": "required",
	"outletState": "required",
	"outletCity": "required",
	"outletAddress": "required"
}
								
							
PUT("/terminal-branch-location/update/:id")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Request Body

								
{
	"managerFirstName": "required",
	"managerLastName": "required",
	"managerGender": "required",
	"managerPhoneNumber": "required",
	"outletName": "required",
	"outletCountry": "required",
	"outletState": "required",
	"outletCity": "required",
	"outletAddress": "required"
}
								
							
DELETE("/terminal-branch-location/delete/:id")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Cashier

GET("/cashier") or POST("/cashier")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Request Body

								
{
	"filter": "boolean | required"
	"more": "boolean | required"
	"pageNumber": 1, // required
	"batchNumber": 10, // required
	"sort": "required", // ASC | DESC
	"orderBy" :"required", // go to GET("/allowed-query/fields/cashier") to see accepted fields
	"groups": [{
		"filterGroupCondition":"required" // AND | OR
		"filterSearchCondition":"required" // AND | OR
		"filters": [{
			"filterOption": "eq",
			"field": "", // go to GET("/allowed-query/fields/cashier") to see accepted fields
			"value": "user input",
			"dataType": "string" // string | number | bool | date | dateTime
		}]
	}]
}
								
							
GET("/cashier/details/:id")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							
POST("/cashier/create")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Request Body

								
{
	"businessId": "required",
	"terminalBranchLocationId": "required",
	"firstName": "required",
	"lastName": "required",
	"email": "string",
	"phoneNumber": "required",
	"address": "string",
	"gender": "required",
	"canTransfer": "required | boolean"
}
								
							
POST("/cashier/sign-in/:id")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Request Body

								
{
	"emailOrPhoneNumber": "required",
	"Password": "required"
}
								
							
POST("/cashier/refresh-token/:token")
PUT("/cashier/update/:id")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Request Body

								
{
	"businessId": "string",
	"terminalBranchLocationId": "string",
	"firstName": "string",
	"lastName": "string",
	"email": "string",
	"phoneNumber": "string",
	"address": "string",
	"gender": "string",
	"canTransfer": "boolean",
	"maxTransferDailyLimit": "number naira (use -1 if you don't intend to update) | required "
}
								
							
DELETE("/cashier/delete/:id")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Terminal

GET("/terminal") or POST("/terminal")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Request Body

								
{
	"filter": "boolean | required"
	"more": "boolean | required"
	"pageNumber": 1, // required
	"batchNumber": 10, // required
	"sort": "required", // ASC | DESC
	"orderBy" :"required", // go to GET("/allowed-query/fields/terminal") to see accepted fields
	"groups": [{
		"filterGroupCondition":"required" // AND | OR
		"filterSearchCondition":"required" // AND | OR
		"filters": [{
			"filterOption": "eq",
			"field": "", // go to GET("/allowed-query/fields/terminal") to see accepted fields
			"value": "user input",
			"dataType": "string" // string | number | bool | date | dateTime
		}]
	}]
}
								
							
GET("/terminal/account-name-inquiry/:accountNumber/:bankId")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							
GET("/terminal/details/:id")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							
FOR API terminals: POST("/terminal/create") FOR Soft terminals: POST("/terminal/soft-terminal/create")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Request Body

								
{
	"businessId": "required",
	"terminalBranchLocationId": "required",
	"password", "string",
	"pin": "string",
	"serialNumber": "string"
}
								
							
POST("/terminal/transfer")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Request Body

								
{
	"terminalId": "required",
	"businessId": "required",
	"amount": "required | number",
	"depositorName": "required",
	"receiverBankId": "required",
	"receiverAccountNumber": "required",
	"narration": "required",
	"pin": "required",
}
								
							
PUT("/terminal/update/:id")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Request Body

								
{
	"businessId": "string",
	"terminalBranchLocationId": "string",
	"serialNumber": "string",
	"paymentConfirmed": bool,
	"active": bool
}
								
							
POST("/terminal/send-verify-code/:id")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							
PUT("/terminal/change-password/:id")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Request Body

								
{
	"verifyCode": "required",
	"newPassword": "required"
}
								
							
PUT("/terminal/change-pin/:id")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Request Body

								
{
	"verifyCode": "required",
	"newPin": "required",
}
								
							
DELETE("/terminal/delete/:id")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Terminal Banks

GET("/terminal-banks") or POST("/terminal-banks")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Request Body

								
{
	"filter": "boolean | required"
	"more": "boolean | required"
	"pageNumber": 1, // required
	"batchNumber": 10, // required
	"sort": "required", // ASC | DESC
	"orderBy" :"required", // go to GET("/allowed-query/fields/terminal-banks") to see accepted fields
	"groups": [{
		"filterGroupCondition":"required" // AND | OR
		"filterSearchCondition":"required" // AND | OR
		"filters": [{
			"filterOption": "eq",
			"field": "", // go to GET("/allowed-query/fields/terminal-banks") to see accepted fields
			"value": "user input",
			"dataType": "string" // string | number | bool | date | dateTime
		}]
	}]
}
								
							
GET("/terminal-banks/details/:id")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							
POST("/terminal-banks/create")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Request Body

								
{
	"businessId": "required",
	"terminalId": "required",
	"bankId": "required",
	"firstName": "required",
	"lastName": "required"
}
								
							
DELETE("/terminal-banks/delete/:id")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Terminal Transactions

GET("/terminal-transactions") or POST("/terminal-transactions")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Request Body

								
{
	"filter": "boolean | required"
	"more": "boolean | required"
	"pageNumber": 1, // required
	"batchNumber": 10, // required
	"sort": "required", // ASC | DESC
	"orderBy" :"required", // go to GET("/allowed-query/fields/terminal-transactions") to see accepted fields
	"groups": [{
		"filterGroupCondition":"required" // AND | OR
		"filterSearchCondition":"required" // AND | OR
		"filterSearchCondition":"required" // AND | OR
		"filters": [{
			"filterOption": "eq",
			"field": "", // go to GET("/allowed-query/fields/terminal-transactions") to see accepted fields
			"value": "user input",
			"dataType": "string" // string | number | bool | date | dateTime
		}]
	}]
}
								
							
GET("/terminal-transactions/details/:id")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							
POST("/terminal-transactions/create")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Request Body

								
{
	"businessId": "required",
	"terminalId": "required",
	"status": "required",
	"amount": "required",
	"narration": "required",
	"senderAccountNumber": "required",
	"senderAccountName": "required",
	"receiverAccountNumber": "required",
	"receiverAccountName": "required"
}
								
							
PUT("/terminal-transactions/update/:id")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Request Body

								
{
	"confirmTransaction": "bool",
	"lateTransaction": "bool",
	"markForRefund": "bool",
}
								
							

Stats

GET("/stats/dashboard/:businessId")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							
GET("/stats/branch-location/:businessId")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							
GET("/stats/terminals/:businessId")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							
GET("/stats/terminal-branch-location/:businessId/:terminalBranchLocationId")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							
GET("/stats/terminal-transactions/:businessId/:terminalId")

Request Header

								
{
	 "x-auth-token": "required" or "x-api-token": "required"
}
								
							

Deployment

Docker

Docker is a set of platform as a service products that use OS-level virtualization to deliver software in packages called containers. The service has both free and premium tiers. The software that hosts the containers is called Docker Engine.

VPS

VPS can stand for virtual private server, which is a type of hosting service that uses virtualization technology. VPSs are virtual machines that run their own operating system and have their own dedicated resources, including CPU, RAM, storage, and bandwidth.

NGINX

Nginx is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.

Dockerfile

A Dockerfile is a that contains instructions for building a Docker image. Docker images are used to create Docker containers, which are isolated, lightweight, and portable execution environments. Dockerfiles are made up of a series of commands, each of which tells Docker how to build the image. The commands are executed in order, and each one builds upon the previous one.

Docker Compose File

A Docker Compose file is a file that defines and runs multi-container Docker applications. With Compose, you can create a YAML file to define the services and networks for your application. Then, with a single command, you can create and start all the services from your configuration. To create a Docker Compose file, you need to define the services that make up your application. Each service is defined by a YAML block that specifies the image, ports, volumes, and other configuration options for the container.

CI/CD Pipline

The .gitlab-ci.yml file is a YAML file that defines project configuration in GitLab CI. It is placed at the root of the repository. The .gitlab-ci.yml file defines: