From 8366253bf96e3765aff929a4f132efdf45286c81 Mon Sep 17 00:00:00 2001 From: arielpetit Date: Tue, 22 Oct 2024 15:00:36 +0100 Subject: [PATCH 1/2] Added the Architecture document --- Docs/Architecture.md | 205 +++++++++++++++++++++++++++++++++++ Docs/Images/Architecture.png | Bin 0 -> 79098 bytes 2 files changed, 205 insertions(+) create mode 100644 Docs/Architecture.md create mode 100644 Docs/Images/Architecture.png diff --git a/Docs/Architecture.md b/Docs/Architecture.md new file mode 100644 index 0000000..351552d --- /dev/null +++ b/Docs/Architecture.md @@ -0,0 +1,205 @@ +# **OBS Backend Architecture Documentation** + +### **Table of Contents** +- [**OBS Backend Architecture Documentation**](#obs-backend-architecture-documentation) + - [**Table of Contents**](#table-of-contents) + - [**1. Introduction**](#1-introduction) + - [**2. High-Level System Architecture**](#2-high-level-system-architecture) + - [**3. OBS Interaction with other Modules**](#3-obs-interaction-with-other-modules) + - [**3.1 OBS (Online Banking Service)**](#31-obs-online-banking-service) + - [**3.2 PRS (Personal Registration Service)**](#32-prs-personal-registration-service) + - [**3.3 DAS (Deposit Account Service)**](#33-das-deposit-account-service) + - [**3.4 AAS (Account Access Service)**](#34-aas-account-access-service) + - [**3.5 OBS Module Structure**](#35-obs-module-structure) + - [**Why This Structure Was Chosen**](#why-this-structure-was-chosen) + - [**4. API Design**](#4-api-design) + - [**4.1 Endpoints Overview**](#41-endpoints-overview) + - [**4.2 Payload Structure**](#42-payload-structure) + - [**4.3 Error Handling**](#43-error-handling) + - [**Key Error Types:**](#key-error-types) + - [**5. Data Flow and Sequence Diagrams**](#5-data-flow-and-sequence-diagrams) + - [**6. Security Considerations**](#6-security-considerations) + - [**Key relationships**:](#key-relationships) + - [**9. Conclusion**](#9-conclusion) + +--- + +### **1. Introduction** +The **OBS (Online Banking Service)** is the backend service created with Springboot that handles user registration, OTP verification, and account management within the Webank system. It communicates with several core modules, including the **PRS (Personal Registration Service)**, **DAS (Deposit Account Service)**, and **AAS (Account Access Service)**, to manage user data, balance inquiries, and account creation. + +**Goal of the OBS Module Architecture** + +The goal of this architecture is to clearly define how the **OBS (Online Banking Service) module** interacts with other key backend components, detailing their communication patterns and collaborative workflows. Additionally, it outlines the structure of the OBS module, explaining the reasoning behind the architectural decisions, with a focus on ensuring efficient data flow, modularity, and scalability to support future growth and maintainability. + + +--- + +### **2. High-Level System Architecture** +The OBS system is part of a microservices architecture, designed to handle modular banking functionalities. Each service has its own responsibility, allowing for scalability, separation of concerns, and ease of maintenance. + +- **Frontend (UserApp)** communicates via REST API with the OBS. +- **OBS** A module that Accept request and forwards requests to the appropriate backend modules. +- **Key Modules**: PRS, DAS, AAS, and SMS gateway. +- +![alt text](Images/Architecture.png) + +--- + +### **3. OBS Interaction with other Modules** + +#### **3.1 OBS (Online Banking Service)** +The central hub that handles the flow of user requests. The OBS manages requests related to user registration and OTP verification and coordinates communication between the PRS, DAS, and AAS modules. + +**Responsibilities:** +- Handle API requests from the frontend. +- Forward registration requests to PRS. +- Handle OTP verification by sending it to the PRS for validation. +- Forward account creation requests to DAS. +- Manage user sessions and balance queries. + +#### **3.2 PRS (Personal Registration Service)** +Responsible for registering new users and verifying OTPs. It ensures that the user's phone number and public key are stored securely and validated correctly. + +#### **3.3 DAS (Deposit Account Service)** +Handles account creation and management. When a registration request is approved, the DAS is responsible for creating a bank account and assigning an initial balance. + +#### **3.4 AAS (Account Access Service)** +Manages access to user accounts, storing and managing the connection between user phone numbers, public keys, and account IDs. + +#### **3.5 OBS Module Structure** +The OBS module consists of the following submodules, each responsible for handling user requests and coordinating interactions with other services: + +1. **Online-Banking-REST-API**: + - **Purpose**: Exposes REST endpoints for online banking functionalities. + - **Responsibilities**: + - Receive incoming HTTP requests from the frontend. + - Validate input data and route requests to the appropriate services (PRS, DAS, AAS). + - Return responses to the frontend after processing. + +2. **Online-Banking-REST-Server**: + - **Purpose**: Hosts the server for the REST API. + - **Responsibilities**: + - Listen for incoming API requests. + - Manage server configurations and lifecycle events. + - Handle routing to the appropriate REST API endpoints. + +3. **Online-Banking-Service-API**: + - **Purpose**: Defines interfaces for online banking services. + - **Responsibilities**: + - Specify method signatures for operations such as user registration, account management, and OTP verification. + - Ensure a consistent contract between the OBS and its module implementations. + +4. **Online-Banking-Service-Impl**: + - **Purpose**: Implements the business logic defined in the Service API. + - **Responsibilities**: + - Execute operations like creating user accounts and processing transactions. + - Interact with data access layers to perform CRUD operations. + - Forward requests to relevant services (PRS, DAS, AAS) based on the operation requested. + - Aggregate responses from these services and return them to the REST API layer. + +#### **Why This Structure Was Chosen** + +The structure of the OBS module was carefully designed to align with several key architectural principles: + +1. **Modularity**: + - By breaking the OBS into distinct submodules (REST API, REST Server, Service API, Service Implementation), we achieve a clear separation of concerns. Each module handles specific responsibilities, making it easier to manage and scale the application. This modularity allows for independent development, testing, and deployment of each component. + +2. **Separation of Concerns**: + - Each submodule is designed to focus on a particular aspect of the online banking functionality. For example, the Online-Banking-REST-API is dedicated to handling HTTP requests, while the Online-Banking-Service-Impl focuses on executing business logic. This separation allows developers to make changes or enhancements to one module without affecting others, reducing the risk of introducing bugs. + +3. **Maintainability**: + - A well-structured module architecture enhances maintainability. With clear interfaces defined in the Online-Banking-Service-API, developers can easily understand how to interact with the services. Additionally, changes to business logic can be implemented in the Service Implementation module without impacting the API layer. + +4. **Flexibility**: + - The structure allows for future enhancements and integrations with other services. For instance, if a new payment service needs to be added, it can be implemented as a new module with minimal impact on existing components. + +5. **Improved Collaboration**: + - The clear boundaries between modules facilitate collaboration among team members. Different developers or teams can work on different modules simultaneously, improving productivity and reducing conflicts. + +Overall, this structure was chosen to create a robust, scalable, and maintainable online banking service that can adapt to future requirements while providing a seamless experience for users. + +--- + +### **4. API Design** + +#### **4.1 Endpoints Overview** +The following key API endpoints are exposed by the OBS to handle user registration and OTP verification. + +| Method | Endpoint | Description | +|--------|-------------------|-----------------------------------------| +| POST | /register | Accepts phone number and public key | +| POST | /verify-otp | Verifies the OTP sent to the user | +| GET | /account/balance | Fetches the user’s account balance | + +#### **4.2 Payload Structure** +Define the structure for API requests and responses. For example, for the registration endpoint: + +**Registration Request Payload:** +```json +{ + "phoneNumber": "123456789", + "publicKey": "generatedPublicKey" +} +OTP Verification Payload: + +```json +{ + "otp": "123456", + "publicKey": "userPublicKey" +} +``` + +### **4.3 Error Handling** +#### **Key Error Types:** +Error handling is essential to ensure users receive meaningful feedback when something goes wrong during the process. Standardized HTTP status codes, and descriptive messages are used to handle errors for various scenarios like failed registration and invalid OTPs. + + +1. **Registration Errors**: + - **Invalid Phone Number**: + - **HTTP Status**: `400 Bad Request` + - **Message**: "Invalid or missing phone number." + - **User Already Registered**: + - **HTTP Status**: `409 Conflict` + - **Message**: "User already registered." + - **Public Key Generation Failure**: + - **HTTP Status**: `500 Internal Server Error` + - **Message**: "Error generating public key." + +2. **OTP Verification Errors**: + - **Invalid OTP**: + - **HTTP Status**: `401 Unauthorized` + - **Message**: "Invalid or expired OTP." + - **OTP Expired**: + - **HTTP Status**: `403 Forbidden` + - **Message**: "OTP has expired." + +### **5. Data Flow and Sequence Diagrams** +The sequence diagram demonstrates the interaction between OBS module and other components during the registration and OTP verification process. + +```mermaid +sequenceDiagram + User->>App: Enter phone number + App->>OBS: Register account (phone number, pub key) + OBS->>PRS: Forward registration (phone number, pub key) + PRS-->>SMSGateway: Send OTP + SMSGateway-->>User: OTP sent + User->>App: Enter OTP + App->>OBS: Verify OTP (otp, pub key) + OBS->>PRS: Check OTP + PRS-->>OBS: OTP verified + OBS->>DAS: Create account (balance: 1000) + DAS-->>OBS: AccountID, balance + OBS-->>App: Display accountID and balance +``` + +### **6. Security Considerations** +- **Encryption**: All sensitive data, such as the public key and phone number, is encrypted in transit using HTTPS. +- **Authentication**: OTP verification ensures the authenticity of the user's phone number. +- **Key-Pair Cryptography**: Used to establish a secure link between the user and the server during registration. +- **Security best practices include**: + - Data encryption for all sensitive fields. + - Regular auditing and monitoring of API access logs. + +#### **Key relationships**: +- Each user is linked to an account in the DAS. +- The OTP is temporarily stored in the PRS and removed after verification. diff --git a/Docs/Images/Architecture.png b/Docs/Images/Architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..b125de646d6fec18bd8bf5a6d2ca113a159fa440 GIT binary patch literal 79098 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 Nd{0+Dmvv4FO#tZ{khK5+ literal 0 HcmV?d00001 From bad89117ed07e3969c4e98237ec4e6fab04a8a12 Mon Sep 17 00:00:00 2001 From: arielpetit Date: Tue, 22 Oct 2024 15:05:50 +0100 Subject: [PATCH 2/2] Updated the Architecture document --- Docs/Architecture.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Docs/Architecture.md b/Docs/Architecture.md index 351552d..d8a29ca 100644 --- a/Docs/Architecture.md +++ b/Docs/Architecture.md @@ -203,3 +203,6 @@ sequenceDiagram #### **Key relationships**: - Each user is linked to an account in the DAS. - The OTP is temporarily stored in the PRS and removed after verification. + +### **9. Conclusion** +This architecture document outlines the key components of the OBS backend, their interactions, and the necessary security and scalability considerations. By following this architecture, the Webank backend services will be well-structured.