---
# System prepended metadata

title: Goals

---

# Goals
- NFRs exploration
![NFR's](https://i.imgur.com/3OyC8OR.png)
    - Functional Suitabilty
    - Perfomance Efficienty
    - Compatibility
    - Usability
    - Reliability
    - Security
    - Maintability
    - Portability

# Component Diagram

![](https://i.imgur.com/tfXFOgf.png)

# Deployment Diagram
![](https://i.imgur.com/pCYlHnK.png)

https://drive.google.com/drive/u/0/folders/18Z_1EWoo1QRLIkHDtkIQROjRw-YwnG7Z

# Edge Cases
- false positive and false negatives for achievement/loyalty status: handled through support
- database transient downtime: handled by K8S with pod restart
- network transient downtime: : handled by K8S with pod restart

# Risk analysis
## Data assets
- Transactions data topic in Kafka
- Achievements state in DB
- Achievements state snapshot on mobile device
- Loyalty program state in DB
- Commands topic in Kafka
- DB Backups

## Malicious parties
- (External) Application customer
- (External) Hacker
- (Internal) Malicious support team member
- (Internal) Malicious developer
- (Internal) Malicious devops

## Common controls
- Customers authentication with Digital banking app
- Sode review during development
- SAST and DAST in CI/CD pipeline
- Audit trail for DevOps actions on production environment
- Audit trail for the Support team

## Risks by asset
### Transactions data
#### Losses
Confidentiality: High
Integrity: Low
Availability: Low
#### Controls
Access to the topic is limited to selected Kafka accounts
Time-limited credentials to connect to Kafka are pushed on container startup
SELinux to prevent existing connection hijacking

### Loyalty program state in DB
#### Losses
Confidentiality: Low
Integrity: High
Availability: Medium
#### Controls
Read-only access from app servers enforced with DB access controls
Time-limited credentials to connect to DB are pushed on container startup
SELinux to prevent existing connection hijacking

### Achievements state in DB
#### Losses
Confidentiality: Low
Integrity: Low
Availability: Low
#### Controls
Save as for loyalty programs state in DB.

### Achievements state snapshot on mobile device
#### Losses
Confidentiality: Low
Integrity: Low
Availability: Low
#### Controls
Mobile device base level

### Commands topic in Kafka
#### Losses
Confidentiality: Low
Integrity: High
Availability: Low
#### Controls
Application’s Kafka account has no access to command topics

### DB Backups 
#### Losses
Confidentiality: Low (max of achievements state and loyalty program state)
Integrity: Medium
Availability: Low
#### Controls
Backups are stored offsite
Encryption done with asymmetrical cryptography, a private key is stored offline

# Other team's presentation
## ERD

![](https://i.imgur.com/DgnYAyU.png)

(code используется как константа в логике)

## async API
![](https://i.imgur.com/A2vXNu0.png)

![](https://i.imgur.com/ch8y5b7.png)

![](https://i.imgur.com/scXhjEH.png)

![](https://i.imgur.com/ub7WJr1.png)
клиенту сервис не возвращает дату ачивки

## Deployment
![](https://i.imgur.com/ekrIewP.png)


![](https://i.imgur.com/7iDDMDu.png)

![](https://i.imgur.com/7xJ1v6M.png)

No loyalty on ERD