Skip to content

Commit

Permalink
Merge branch 'main' into 11--tk-018-create-rest-endpoint-to-receive-o…
Browse files Browse the repository at this point in the history
…tp-at-obs
  • Loading branch information
Koufan-De-King authored Oct 28, 2024
2 parents 766f70c + 61d16b3 commit d315997
Show file tree
Hide file tree
Showing 12 changed files with 286 additions and 10 deletions.
100 changes: 99 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,99 @@
# webank-OnlineBanking
# Webank Online Banking System
### An Online banking system middleware service
## Table of Contents
- [Project Overview](#project-overview)
- [Features](#features)
- [Technologies Used](#technologies-used)
- [Prerequisites](#prerequisites)
- [Installation Instructions](#installation-instructions)
- [Usage](#usage)
- [Project Documentation](#project-documentation)
- [Development and Contribution](#development-and-contribution)
- [License](#license)
- [Contact Information](#contact-information)
- [Acknowledgements](#acknowledgements)

---

## Project Overview

The **Webank Online Banking System** is a middleware service designed to connect the frontend applications with a core banking system, providing a seamless online banking experience for users. The system consists of various modules to manage key functionalities such as user registration, account management, OTP verification, and access control.

### Key Modules
- **OBS (Online Banking Service)**: Orchestrates requests for registration and OTP verification, forwarding them to the appropriate backend modules.
- **PRS (Personal Registration Service)**: Manages user registration and OTP verification.
- **DAS (Deposit Account Service)**: Handles account creation and balance management.
- **AAS (Account Access Service)**: Manages account access and authorization.
- **SMS Gateway**: Sends OTPs to users for verification purposes.

## Features
- **User Registration**: Users can register by providing their phone numbers and public keys.
- **OTP Verification**: Secure one-time passwords are sent to users’ phones to verify identity.
- **Account Management**: Once registration is complete, users can create bank accounts, check balances, and view transaction histories.
- **Scalable Microservices Architecture**: Each service is designed as an independent microservice, allowing for modularity and scalability.

## Technologies Used
- **Backend**: Spring Boot for the OBS, PRS, DAS, and AAS modules.
- **Database**: PostgreSQL (or any preferred database system) for secure data storage.
- **API Documentation**: OpenAPI for standardized API documentation.
- **Messaging and SMS**: Integrated SMS gateway for OTPs.

## Prerequisites
- **Java 11+**: Required to run the Spring Boot applications.
- **Maven**: Used for project dependency management.
- **Docker** (optional): For containerization and easier deployment.
- **PostgreSQL**: As the primary database for storing user and account data.

## Installation Instructions
1. **Clone the Repository**:
```bash
git clone https://github.com/yourusername/webank-online-banking-system.git
cd webank-online-banking-system
```
2. **Run Database Migration**:
- Ensure PostgreSQL is running and create necessary databases and tables (migration scripts are included in the `db/migrations` folder).

3. **Build and Run Services**:
```bash
mvn clean install
mvn spring-boot:run
```

5. **Access API Documentation**:
- The OpenAPI documentation will be available at `http://localhost:8080/swagger-ui.html` (or the port specified for each module).

## Usage
- **User Registration**:
- Make a `POST` request to `/register` with `phoneNumber` and `publicKey`.
- Receive an OTP on the provided phone number.
- **OTP Verification**:
- Verify OTP by making a `POST` request to `/verify-otp` with the OTP and public key.
- **Account Management**:
- Access endpoints for balance inquiries, transfers, and account details.

For a detailed guide on using each endpoint, refer to the [API Documentation](#project-documentation) section.

## Project Documentation
The architecture documentation and API specifications are available in the `docs` folder. The documentation includes:
- **Architecture Overview**: Detailed information on how OBS interacts with PRS, DAS, and AAS.
- **API Reference**: List of available endpoints, request payloads, and response formats.
- **Security Considerations**: Overview of authentication and data encryption practices.

## Development and Contribution
We welcome contributions! Please follow these steps:
1. Fork the repository and create a new branch for your feature or bug fix.
2. Follow our [contribution guidelines](CONTRIBUTING.md) for best practices.
3. Submit a pull request detailing your changes.

## License
This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.

## Contact Information
For questions or support, please reach out to:
- **Email**: [Adorsys]([email protected])
- **GitHub Issues**: [Submit an issue](https://github.com/ADORSYS-GIS/webank/issues)

## Acknowledgements
- Thanks to the adorsys development team for their contributions.
- Special thanks to the contributors and libraries that supported this project.
- Special thanks to the development team and contributors for their support and dedication in building this project.
1 change: 0 additions & 1 deletion obs/obs-rest-api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
</dependency>

</dependencies>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* Copyright (c) 2018-2024 adorsys GmbH and Co. KG
* All rights are reserved.
*/

package com.adorsys.webank.obs.resource;

import com.adorsys.webank.obs.dto.RegistrationRequest;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;



@RestController
@RequestMapping("/api/registration")
public interface RegistrationResourceApi {

@Operation(summary = "Register a new bank account", description = "Accepts a phone number and public key for registration")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "Registration successful"),
@ApiResponse(responseCode = "400", description = "Invalid input")
})
@PostMapping
ResponseEntity<String> registerAccount(
@RequestBody RegistrationRequest registrationRequest
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.adorsys.webank.obs.resource;

import com.adorsys.webank.obs.dto.RegistrationRequest;
import com.adorsys.webank.obs.service.RegistrationServiceApi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/registration")
public class RegistrationResource implements RegistrationResourceApi {

@Autowired
private RegistrationServiceApi registrationService;

@Override
@PostMapping
public ResponseEntity<String> registerAccount(@RequestBody RegistrationRequest registrationRequest) {
String result = registrationService.registerAccount(registrationRequest);
return ResponseEntity.ok(result);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.adorsys.webank.obs.resource;

import com.adorsys.webank.obs.dto.RegistrationRequest;
import com.adorsys.webank.obs.service.RegistrationServiceApi;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.when;

public class RegistrationResourceTest {

@InjectMocks
private RegistrationResource registrationResource; // Class under test

@Mock
private RegistrationServiceApi registrationService; // Mocked dependency

@BeforeEach
void setUp() {
MockitoAnnotations.openMocks(this);
}

@Test
void registerAccount_ShouldReturnSuccessfulResponse() {
// Arrange
RegistrationRequest registrationRequest = new RegistrationRequest();
registrationRequest.setPhoneNumber(1234567890);
registrationRequest.setPublicKey("testPublicKey");

String expectedResponse = "Registration successful";
when(registrationService.registerAccount(registrationRequest)).thenReturn(expectedResponse);

// Act
ResponseEntity<String> responseEntity = registrationResource.registerAccount(registrationRequest);

// Assert
assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
assertEquals(expectedResponse, responseEntity.getBody());
}
}
1 change: 0 additions & 1 deletion obs/obs-service-api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

<dependency>
<groupId>jakarta.ws.rs</groupId>
<artifactId>jakarta.ws.rs-api</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.adorsys.webank.obs.dto;

public class RegistrationRequest {

private int phoneNumber;
private String publicKey;

// Getters and Setters

public int getPhoneNumber() {
return phoneNumber;
}

public void setPhoneNumber(int phoneNumber) {
this.phoneNumber = phoneNumber;
}

public String getPublicKey() {
return publicKey;
}

public void setPublicKey(String publicKey) {
this.publicKey = publicKey;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.adorsys.webank.obs.service;

import com.adorsys.webank.obs.dto.RegistrationRequest;

public interface RegistrationServiceApi {
String registerAccount(RegistrationRequest registrationRequest);
}
1 change: 1 addition & 0 deletions obs/obs-service-impl/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
</exclusions>
<scope>test</scope>
</dependency>

</dependencies>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.adorsys.webank.obs.serviceimpl;

import com.adorsys.webank.obs.dto.RegistrationRequest;
import com.adorsys.webank.obs.service.RegistrationServiceApi;
import org.springframework.stereotype.Service;

@Service
public class RegistrationServiceImpl implements RegistrationServiceApi {

@Override
public String registerAccount(RegistrationRequest registrationRequest) {
int phoneNumber = registrationRequest.getPhoneNumber();
String publicKey = registrationRequest.getPublicKey();

// Add logic for registering the account with phoneNumber and publicKey

return "Registration successful for phone number: " + phoneNumber; // Return message including the phone number
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.adorsys.webank.obs.serviceimpl;

import com.adorsys.webank.obs.dto.RegistrationRequest;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;

class RegistrationServiceImplTest {

private RegistrationServiceImpl registrationService;

@BeforeEach
void setUp() {
registrationService = new RegistrationServiceImpl();
}

@Test
void registerAccount_ShouldReturnSuccessMessageWithPhoneNumber_WhenGivenValidInput() {
// Arrange
RegistrationRequest request = new RegistrationRequest();
int testPhoneNumber = 123456789; // Set a valid phone number
request.setPhoneNumber(testPhoneNumber);
request.setPublicKey("validPublicKey"); // Set a valid public key

// Act
String result = registrationService.registerAccount(request);

// Assert
assertEquals("Registration successful for phone number: " + testPhoneNumber, result);
}

// You can add more tests here for edge cases, invalid input, etc.
}
11 changes: 4 additions & 7 deletions online-banking-app/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,11 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.4</version>
<relativePath/> <!-- lookup parent from repository -->
<groupId>com.adorsys.webank</groupId>
<artifactId>webank-OnlineBanking</artifactId>
<version>0.1-SNAPSHOT</version>
</parent>
<groupId>com.adorsys.webank</groupId>

<artifactId>online-banking-app</artifactId>
<version>0.1-SNAPSHOT</version>
<name>online-banking-app</name>
Expand Down Expand Up @@ -64,14 +63,12 @@
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.1.0</version>
</dependency>

<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
Expand Down

0 comments on commit d315997

Please sign in to comment.