mirror of
https://github.com/dat515-2025/Group-8.git
synced 2026-03-22 15:12:08 +01:00
Compare commits
10 Commits
51-refacto
...
ba1677b2d3
| Author | SHA1 | Date | |
|---|---|---|---|
| ba1677b2d3 | |||
|
|
8ea1ef9eea | ||
|
|
4b614902b2 | ||
| a152ecbe4d | |||
| 7d7dd98d0f | |||
| 5aca071ac2 | |||
|
|
80991c7390 | ||
|
|
1403e0029b | ||
| aa63e51e6a | |||
|
|
4aaaba3956 |
@@ -1,43 +1,6 @@
|
|||||||
# Lab 6: Design Document for Course Project
|
# Personal Finance Tracker
|
||||||
|
## Folder Structure
|
||||||
| Lab 6: | Design Document for Course Project |
|
- meetings: Contains note from meetings
|
||||||
| ----------- | ---------------------------------- |
|
- scr: Source code for the project
|
||||||
| Subject: | DAT515 Cloud Computing |
|
- checklist: Project checklist and self assessment tracking
|
||||||
| Deadline: | **September 19, 2025 23:59** |
|
- report.md: Detailed report of the project
|
||||||
| Grading: | No Grade |
|
|
||||||
| Submission: | Group |
|
|
||||||
|
|
||||||
## Table of Contents
|
|
||||||
|
|
||||||
- [Table of Contents](#table-of-contents)
|
|
||||||
- [1. Design Document (design.md)](#1-design-document-designmd)
|
|
||||||
|
|
||||||
The design document is the first deliverable for your project.
|
|
||||||
We separated this out as a separate deliverable, with its own deadline, to ensure that you have a clear plan before you start coding.
|
|
||||||
This part only needs a cursory review by the teaching staff to ensure it is sufficiently comprehensive, while still realistic.
|
|
||||||
The teaching staff will assign you to a project mentor who will provide guidance and support throughout the development process.
|
|
||||||
|
|
||||||
## 1. Design Document (design.md)
|
|
||||||
|
|
||||||
You are required to prepare a design document for your application.
|
|
||||||
The design doc should be brief, well-organized and easy to understand.
|
|
||||||
The design doc should be prepared in markdown format and named `design.md` and submitted in the project group's repository.
|
|
||||||
Remember that you can use [mermaid diagrams](https://github.com/mermaid-js/mermaid#readme) in markdown files.
|
|
||||||
|
|
||||||
The design doc **should include** the following sections:
|
|
||||||
|
|
||||||
- **Overview**: A brief description of the application and its purpose.
|
|
||||||
- **Architecture**: The high-level architecture of the application, including components, interactions, and data flow.
|
|
||||||
- **Technologies**: The cloud computing technologies or services used in the application.
|
|
||||||
- **Deployment**: The deployment strategy for the application, including any infrastructure requirements.
|
|
||||||
|
|
||||||
The design document should be updated throughout the development process and reflect the final implementation of your project.
|
|
||||||
|
|
||||||
Optional sections may include:
|
|
||||||
|
|
||||||
- Security: The security measures implemented in the application to protect data and resources.
|
|
||||||
- Scalability: The scalability considerations for the application, including load balancing and auto-scaling.
|
|
||||||
- Monitoring: The monitoring and logging strategy for the application to track performance and detect issues.
|
|
||||||
- Disaster Recovery: The disaster recovery plan for the application to ensure business continuity in case of failures.
|
|
||||||
- Cost Analysis: The cost analysis of running the application on the cloud, including pricing models and cost-saving strategies.
|
|
||||||
- References: Any external sources or references used in the design document.
|
|
||||||
@@ -7,64 +7,64 @@ Focus on areas that align with your project goals and interests.
|
|||||||
The core deliverables are required.
|
The core deliverables are required.
|
||||||
This means that you must get at least 2 points for each item in this category.
|
This means that you must get at least 2 points for each item in this category.
|
||||||
|
|
||||||
| **Category** | **Item** | **Max Points** | **Points** |
|
| **Category** | **Item** | **Max Points** | **Points** | **Comments** |
|
||||||
|----------------------------------| --------------------------------------- | -------------- |-------------------------------------------------|
|
|----------------------------------| --------------------------------------- | -------------- |-------------------------------------------------| |
|
||||||
| **Core Deliverables (Required)** | | | |
|
| **Core Deliverables (Required)** | | | | |
|
||||||
| Codebase & Organization | Well-organized project structure | 5 | 5 |
|
| Codebase & Organization | Well-organized project structure | 5 | 5 | |
|
||||||
| | Clean, readable code | 5 | 4 |
|
| | Clean, readable code | 5 | 4 | |
|
||||||
| | Use planning tool (e.g., GitHub issues) | 5 | 4 |
|
| | Use planning tool (e.g., GitHub issues) | 5 | 4 | |
|
||||||
| | Proper version control usage | 5 | 5 |
|
| | Proper version control usage | 5 | 5 | |
|
||||||
| 23 | Complete source code | 5 | 5 |
|
| 23 | Complete source code | 5 | 5 | |
|
||||||
| Documentation | Comprehensive reproducibility report | 10 | 4-5 |
|
| Documentation | Comprehensive reproducibility report | 10 | 4-5 | |
|
||||||
| | Updated design document | 5 | 2 |
|
| | Updated design document | 5 | 2 | |
|
||||||
| | Clear build/deployment instructions | 5 | 2 |
|
| | Clear build/deployment instructions | 5 | 2 | |
|
||||||
| | Troubleshooting guide | 5 | 1 |
|
| | Troubleshooting guide | 5 | 1 | |
|
||||||
| | Completed self-assessment table | 5 | 2 |
|
| | Completed self-assessment table | 5 | 2 | |
|
||||||
| 14 | Hour sheets for all members | 5 | 3 |
|
| 14 | Hour sheets for all members | 5 | 3 | |
|
||||||
| Presentation Video | Project demonstration | 5 | 0 |
|
| Presentation Video | Project demonstration | 5 | 0 | |
|
||||||
| | Code walk-through | 5 | 0 |
|
| | Code walk-through | 5 | 0 | |
|
||||||
| 0 | Deployment showcase | 5 | 0 |
|
| 0 | Deployment showcase | 5 | 0 | |
|
||||||
| **Technical Implementation** | | | |
|
| **Technical Implementation** | | | | |
|
||||||
| Application Functionality | Basic functionality works | 10 | 8 |
|
| Application Functionality | Basic functionality works | 10 | 8 | |
|
||||||
| | Advanced features implemented | 10 | 0 |
|
| | Advanced features implemented | 10 | 0 | |
|
||||||
| | Error handling & robustness | 10 | 4 |
|
| | Error handling & robustness | 10 | 4 | |
|
||||||
| 16 | User-friendly interface | 5 | 4 |
|
| 16 | User-friendly interface | 5 | 4 | |
|
||||||
| Backend & Architecture | Stateless web server | 5 | 5 |
|
| Backend & Architecture | Stateless web server | 5 | 5 | |
|
||||||
| | Stateful application | 10 | ? WHAT DOES THIS MEAN |
|
| | Stateful application | 10 | ? WHAT DOES THIS MEAN | |
|
||||||
| | Database integration | 10 | 10 |
|
| | Database integration | 10 | 10 | |
|
||||||
| | API design | 5 | 5 |
|
| | API design | 5 | 5 | |
|
||||||
| 20 | Microservices architecture | 10 | 0 |
|
| 20 | Microservices architecture | 10 | 0 | |
|
||||||
| Cloud Integration | Basic cloud deployment | 10 | 10 |
|
| Cloud Integration | Basic cloud deployment | 10 | 10 | |
|
||||||
| | Cloud APIs usage | 10 | ? WHAT DOES THIS MEAN |
|
| | Cloud APIs usage | 10 | ? WHAT DOES THIS MEAN | |
|
||||||
| | Serverless components | 10 | 0 |
|
| | Serverless components | 10 | 0 | |
|
||||||
| 10 | Advanced cloud services | 5 | 0 |
|
| 10 | Advanced cloud services | 5 | 0 | |
|
||||||
| **DevOps & Deployment** | | | |
|
| **DevOps & Deployment** | | | | |
|
||||||
| Containerization | Basic Dockerfile | 5 | 5 |
|
| Containerization | Basic Dockerfile | 5 | 5 | |
|
||||||
| | Optimized Dockerfile | 5 | 0 |
|
| | Optimized Dockerfile | 5 | 0 | |
|
||||||
| | Docker Compose | 5 | 5 - dev only |
|
| | Docker Compose | 5 | 5 - dev only | |
|
||||||
| 15 | Persistent storage | 5 | 5 |
|
| 15 | Persistent storage | 5 | 5 | |
|
||||||
| Deployment & Scaling | Manual deployment | 5 | 5 |
|
| Deployment & Scaling | Manual deployment | 5 | 5 | |
|
||||||
| | Automated deployment | 5 | 5 |
|
| | Automated deployment | 5 | 5 | |
|
||||||
| | Multiple replicas | 5 | 5 |
|
| | Multiple replicas | 5 | 5 | |
|
||||||
| 20 | Kubernetes deployment | 10 | 10 |
|
| 20 | Kubernetes deployment | 10 | 10 | |
|
||||||
| **Quality Assurance** | | | |
|
| **Quality Assurance** | | | | |
|
||||||
| Testing | Unit tests | 5 | 2 |
|
| Testing | Unit tests | 5 | 2 | |
|
||||||
| | Integration tests | 5 | 2 |
|
| | Integration tests | 5 | 2 | |
|
||||||
| | End-to-end tests | 5 | 5 |
|
| | End-to-end tests | 5 | 5 | |
|
||||||
| 9 | Performance testing | 5 | 0 |
|
| 9 | Performance testing | 5 | 0 | |
|
||||||
| Monitoring & Operations | Health checks | 5 | 5 |
|
| Monitoring & Operations | Health checks | 5 | 5 | |
|
||||||
| | Logging | 5 | 2 - only to terminal add logstash |
|
| | Logging | 5 | 2 - only to terminal add logstash | |
|
||||||
| 9 | Metrics/Monitoring | 5 | 2 - only DB, need to create Prometheus endpoint |
|
| 9 | Metrics/Monitoring | 5 | 2 - only DB, need to create Prometheus endpoint | |
|
||||||
| Security | HTTPS/TLS | 5 | 5 |
|
| Security | HTTPS/TLS | 5 | 5 | |
|
||||||
| | Authentication | 5 | 5 |
|
| | Authentication | 5 | 5 | |
|
||||||
| 15 | Authorization | 5 | 5 |
|
| 15 | Authorization | 5 | 5 | |
|
||||||
| **Innovation & Excellence** | | | |
|
| **Innovation & Excellence** | | | | |
|
||||||
| Advanced Features and | AI/ML Integration | 10 | 0 |
|
| Advanced Features and | AI/ML Integration | 10 | 0 | |
|
||||||
| Technical Excellence | Real-time features | 10 | 0 |
|
| Technical Excellence | Real-time features | 10 | 0 | |
|
||||||
| | Creative problem solving | 10 | ? |
|
| | Creative problem solving | 10 | ? | |
|
||||||
| | Performance optimization | 5 | 2 |
|
| | Performance optimization | 5 | 2 | |
|
||||||
| 2 | Exceptional user experience | 5 | 0 |
|
| 2 | Exceptional user experience | 5 | 0 | |
|
||||||
| **Total** | | **255** | **153** |
|
| **Total** | | **255** | **153** | |
|
||||||
|
|
||||||
## Grading Scale
|
## Grading Scale
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,8 @@
|
|||||||
|
|
||||||
**Project Name**: Personal Finance Tracker
|
**Project Name**: Personal Finance Tracker
|
||||||
|
|
||||||
|
**Deployment URL**: https://finance.ltrk.cz/
|
||||||
|
|
||||||
**Group Members**:
|
**Group Members**:
|
||||||
|
|
||||||
- 289229, Lukáš Trkan, lukastrkan
|
- 289229, Lukáš Trkan, lukastrkan
|
||||||
@@ -136,10 +138,10 @@ The workflow works in the following way:
|
|||||||
#### Backend
|
#### Backend
|
||||||
|
|
||||||
- `MOJEID_CLIENT_ID`, `MOJEID_CLIENT_SECRET` \- OAuth client ID and secret for
|
- `MOJEID_CLIENT_ID`, `MOJEID_CLIENT_SECRET` \- OAuth client ID and secret for
|
||||||
MojeID - https://www.mojeid.cz/en/provider/
|
[MojeID](https://www.mojeid.cz/en/provider/)
|
||||||
- `BANKID_CLIENT_ID`, `BANKID_CLIENT_SECRET` \- OAuth client ID and secret for BankID - https://developer.bankid.cz/
|
- `BANKID_CLIENT_ID`, `BANKID_CLIENT_SECRET` \- OAuth client ID and secret for [BankID](https://developer.bankid.cz/)
|
||||||
- `CSAS_CLIENT_ID`, `CSAS_CLIENT_SECRET` \- OAuth client ID and secret for Česká
|
- `CSAS_CLIENT_ID`, `CSAS_CLIENT_SECRET` \- OAuth client ID and secret for [Česká
|
||||||
spořitelna - https://developers.erstegroup.com/docs/apis/bank.csas
|
spořitelna](https://developers.erstegroup.com/docs/apis/bank.csas)
|
||||||
- `DATABASE_URL`(or `MARIADB_HOST`, `MARIADB_PORT`, `MARIADB_DB`, `MARIADB_USER`, `MARIADB_PASSWORD`) \- MariaDB
|
- `DATABASE_URL`(or `MARIADB_HOST`, `MARIADB_PORT`, `MARIADB_DB`, `MARIADB_USER`, `MARIADB_PASSWORD`) \- MariaDB
|
||||||
connection details
|
connection details
|
||||||
- `RABBITMQ_USERNAME`, `RABBITMQ_PASSWORD` \- credentials for RabbitMQ
|
- `RABBITMQ_USERNAME`, `RABBITMQ_PASSWORD` \- credentials for RabbitMQ
|
||||||
@@ -166,7 +168,7 @@ You can run the project with Docker Compose and Python virtual environment for t
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/dat515-2025/Group-8.git
|
git clone https://github.com/dat515-2025/Group-8.git
|
||||||
cd Group-8/7project/src
|
cd Group-8/7project
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2) Install dependencies
|
### 2) Install dependencies
|
||||||
@@ -205,7 +207,7 @@ uvicorn app.app:fastApi --reload --host 0.0.0.0 --port 8000
|
|||||||
### 6) Run Celery worker (optional, in another terminal)
|
### 6) Run Celery worker (optional, in another terminal)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd Group-8/7project/backend
|
cd Group-8/7project/src/backend
|
||||||
source .venv/bin/activate
|
source .venv/bin/activate
|
||||||
celery -A app.celery_app.celery_app worker -l info
|
celery -A app.celery_app.celery_app worker -l info
|
||||||
```
|
```
|
||||||
@@ -235,7 +237,7 @@ docker buildx build --platform linux/amd64,linux/arm64 -t CHANGE_ME --push .
|
|||||||
### Frontend
|
### Frontend
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd project7/frontend
|
cd project7/src/frontend
|
||||||
npm ci
|
npm ci
|
||||||
npm run build
|
npm run build
|
||||||
```
|
```
|
||||||
@@ -254,7 +256,7 @@ running on top of Proxmox VE.
|
|||||||
4) Navigate to tofu directory
|
4) Navigate to tofu directory
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd 7project/tofu
|
cd 7project/src/tofu
|
||||||
````
|
````
|
||||||
|
|
||||||
5) Set IP addresses in environment variables
|
5) Set IP addresses in environment variables
|
||||||
@@ -423,16 +425,16 @@ The tests are located in 7project/backend/tests directory. All tests are run by
|
|||||||
push to main.
|
push to main.
|
||||||
See the workflow [here](../.github/workflows/run-tests.yml).
|
See the workflow [here](../.github/workflows/run-tests.yml).
|
||||||
|
|
||||||
If you want to run the tests locally, the preferred way is to use a [bash script](src/backend/test_locally.sh)
|
If you want to run the tests locally, the preferred way is to use a [bash script](backend/test_locally.sh)
|
||||||
that will start a test DB container with [docker compose](src/backend/docker-compose.test.yml) and remove it afterwards.
|
that will start a test DB container with [docker compose](backend/docker-compose.test.yml) and remove it afterwards.
|
||||||
```bash
|
```bash
|
||||||
cd 7project/backend
|
cd 7project/src/backend
|
||||||
bash test_locally.sh
|
bash test_locally.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
### Unit Tests
|
### Unit Tests
|
||||||
|
|
||||||
There are 5 basic unit tests, since our services logic is very simple
|
There are only 5 basic unit tests, since our services logic is very simple
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bash test_locally.sh --only-unit
|
bash test_locally.sh --only-unit
|
||||||
@@ -484,7 +486,10 @@ curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:8000/authenticated-route
|
|||||||
|
|
||||||
### Frontend
|
### Frontend
|
||||||
|
|
||||||
- Start with: npm run dev in 7project/frontend
|
- Start with:
|
||||||
|
```bash
|
||||||
|
npm run dev in 7project/src/frontend
|
||||||
|
```
|
||||||
- Ensure VITE_BACKEND_URL is set to the backend URL (e.g., http://127.0.0.1:8000)
|
- Ensure VITE_BACKEND_URL is set to the backend URL (e.g., http://127.0.0.1:8000)
|
||||||
- Open http://localhost:5173
|
- Open http://localhost:5173
|
||||||
- Login, view latest transactions, filter, and add new transactions from the UI.
|
- Login, view latest transactions, filter, and add new transactions from the UI.
|
||||||
@@ -506,6 +511,9 @@ curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:8000/authenticated-route
|
|||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
|
running on arm
|
||||||
|
tofu apply error
|
||||||
|
|
||||||
### Common Issues
|
### Common Issues
|
||||||
|
|
||||||
#### Issue 1: [Common problem]
|
#### Issue 1: [Common problem]
|
||||||
@@ -584,7 +592,7 @@ curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:8000/authenticated-route
|
|||||||
| 25.9. | Design | 2 | 6design | |
|
| 25.9. | Design | 2 | 6design | |
|
||||||
| 9.10 to 11.10. | Backend APIs | 14 | Implemented Backend APIs | `PR #26`, `20-create-a-controller-layer-on-backend-side` |
|
| 9.10 to 11.10. | Backend APIs | 14 | Implemented Backend APIs | `PR #26`, `20-create-a-controller-layer-on-backend-side` |
|
||||||
| 13.10 to 15.10. | Frontend Development | 8 | Created user interface mockups | `PR #28`, `frontend basics` |
|
| 13.10 to 15.10. | Frontend Development | 8 | Created user interface mockups | `PR #28`, `frontend basics` |
|
||||||
| Continually | Documentation | 8 | Documenting the dev process | |
|
| Continually | Documentation | 7 | Documenting the dev process | |
|
||||||
| 21.10 to 23.10 | Tests, frontend | 10 | Test basics, balance charts, and frontend improvement | `PR #31`, `30 create tests and set up a GitHub pipeline` |
|
| 21.10 to 23.10 | Tests, frontend | 10 | Test basics, balance charts, and frontend improvement | `PR #31`, `30 create tests and set up a GitHub pipeline` |
|
||||||
| 28.10 to 30.10 | CI | 6 | Integrated tests with test database setup on github workflows | `PR #28`, `frontend basics` |
|
| 28.10 to 30.10 | CI | 6 | Integrated tests with test database setup on github workflows | `PR #28`, `frontend basics` |
|
||||||
| 28.10 to 30.10 | Frontend | 8 | UI improvements and exchange rate API integration | `PR #28`, `frontend basics` |
|
| 28.10 to 30.10 | Frontend | 8 | UI improvements and exchange rate API integration | `PR #28`, `frontend basics` |
|
||||||
@@ -594,7 +602,7 @@ curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:8000/authenticated-route
|
|||||||
| 11.11 to 12.11 | Tests | 3 | Local testing DB container, few fixes | `PR #28`, `frontend basics` |
|
| 11.11 to 12.11 | Tests | 3 | Local testing DB container, few fixes | `PR #28`, `frontend basics` |
|
||||||
| 12.11 | Frontend | 3 | Enabled multiple transaction edits at once, CSAS button state | `PR #28`, `frontend basics` |
|
| 12.11 | Frontend | 3 | Enabled multiple transaction edits at once, CSAS button state | `PR #28`, `frontend basics` |
|
||||||
| 13.11 | Video | 3 | Video | |
|
| 13.11 | Video | 3 | Video | |
|
||||||
| **Total** | | **81** | | |
|
| **Total** | | **80** | | |
|
||||||
|
|
||||||
### Group Total: [XXX.X] hours
|
### Group Total: [XXX.X] hours
|
||||||
|
|
||||||
|
|||||||
23
7project/src/README.md
Normal file
23
7project/src/README.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
## Folder structure
|
||||||
|
|
||||||
|
- `src/`
|
||||||
|
- `backend/`
|
||||||
|
- `alembic/` - database migrations
|
||||||
|
- `app/` - main application code
|
||||||
|
- `tests/` - tests
|
||||||
|
- `docker-compose.test.yml` - docker compose for testing database
|
||||||
|
- `Dockerfile` - production Dockerfile
|
||||||
|
- `main.py` - App entrypoint
|
||||||
|
- `requirements.txt` - Python dependencies
|
||||||
|
- `test_locally.sh` - script to run tests with temporary database
|
||||||
|
- `charts/`
|
||||||
|
- `myapp-chart/` - Helm chart for deploying the application, supports prod and dev environments
|
||||||
|
- `frontend/` - React frontend application
|
||||||
|
- `tofu/` - Terraform/OpenTofu services deployment configurations
|
||||||
|
- `modules/` - separated modules for different services
|
||||||
|
- `main.tf` - main deployment configuration
|
||||||
|
- `variables.tf` - deployment variables
|
||||||
|
- `terraform.tfvars.example` - example variables file
|
||||||
|
- `compose.yaml` - Docker Compose file for local development
|
||||||
|
- `create_migration.sh` - script to create new Alembic database migration
|
||||||
|
- `upgrade_database.sh` - script to upgrade database to latest Alembic revision
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import uvicorn
|
import uvicorn
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
uvicorn.run("app.app:app", host="0.0.0.0", log_level="info")
|
uvicorn.run("app.app:fastApi", host="0.0.0.0", log_level="info")
|
||||||
|
|||||||
Reference in New Issue
Block a user