diff --git a/7project/checklist.md b/7project/checklist.md index 0178d3c..5dea47b 100644 --- a/7project/checklist.md +++ b/7project/checklist.md @@ -7,64 +7,64 @@ Focus on areas that align with your project goals and interests. The core deliverables are required. This means that you must get at least 2 points for each item in this category. -| **Category** | **Item** | **Max Points** | **Points** | **Comments** | -|----------------------------------| --------------------------------------- | -------------- |-------------------------------------------------|---------------| -| **Core Deliverables (Required)** | | | | | -| Codebase & Organization | Well-organized project structure | 5 | 5 | | -| | Clean, readable code | 5 | 4 | | -| | Use planning tool (e.g., GitHub issues) | 5 | 4 | | -| | Proper version control usage | 5 | 5 | | -| 23 | Complete source code | 5 | 5 | | -| Documentation | Comprehensive reproducibility report | 10 | 4-5 | | -| | Updated design document | 5 | 2 | | -| | Clear build/deployment instructions | 5 | 2 | | -| | Troubleshooting guide | 5 | 1 | | -| | Completed self-assessment table | 5 | 2 | | -| 14 | Hour sheets for all members | 5 | 3 | | -| Presentation Video | Project demonstration | 5 | 0 | | -| | Code walk-through | 5 | 0 | | -| 0 | Deployment showcase | 5 | 0 | | -| **Technical Implementation** | | | | | -| Application Functionality | Basic functionality works | 10 | 8 | | -| | Advanced features implemented | 10 | 0 | | -| | Error handling & robustness | 10 | 4 | | -| 16 | User-friendly interface | 5 | 4 | | -| Backend & Architecture | Stateless web server | 5 | 5 | | -| | Stateful application | 10 | ? WHAT DOES THIS MEAN | | -| | Database integration | 10 | 10 | | -| | API design | 5 | 5 | | -| 20 | Microservices architecture | 10 | 0 | | -| Cloud Integration | Basic cloud deployment | 10 | 10 | | -| | Cloud APIs usage | 10 | ? WHAT DOES THIS MEAN | | -| | Serverless components | 10 | 0 | | -| 10 | Advanced cloud services | 5 | 0 | | -| **DevOps & Deployment** | | | | | -| Containerization | Basic Dockerfile | 5 | 5 | | -| | Optimized Dockerfile | 5 | 0 | | -| | Docker Compose | 5 | 5 - dev only | | -| 15 | Persistent storage | 5 | 5 | | -| Deployment & Scaling | Manual deployment | 5 | 5 | | -| | Automated deployment | 5 | 5 | | -| | Multiple replicas | 5 | 5 | | -| 20 | Kubernetes deployment | 10 | 10 | | -| **Quality Assurance** | | | | | -| Testing | Unit tests | 5 | 2 | | -| | Integration tests | 5 | 2 | | -| | End-to-end tests | 5 | 5 | | -| 9 | Performance testing | 5 | 0 | | -| Monitoring & Operations | Health checks | 5 | 5 | | -| | Logging | 5 | 2 - only to terminal add logstash | | -| 9 | Metrics/Monitoring | 5 | 2 - only DB, need to create Prometheus endpoint | | -| Security | HTTPS/TLS | 5 | 5 | | -| | Authentication | 5 | 5 | | -| 15 | Authorization | 5 | 5 | | -| **Innovation & Excellence** | | | | | -| Advanced Features and | AI/ML Integration | 10 | 0 | | -| Technical Excellence | Real-time features | 10 | 0 | | -| | Creative problem solving | 10 | ? | | -| | Performance optimization | 5 | 2 | | -| 2 | Exceptional user experience | 5 | 0 | | -| **Total** | | **255** | **153** | | +| **Category** | **Item** | **Max Points** | **Points** | **Comments** | +|----------------------------------|-----------------------------------------|----------------|-------------------------------------------------|--------------| +| **Core Deliverables (Required)** | | | | | +| Codebase & Organization | Well-organized project structure | 5 | 5 | | +| | Clean, readable code | 5 | 4 | | +| | Use planning tool (e.g., GitHub issues) | 5 | 4 | | +| | Proper version control usage | 5 | 5 | | +| 23 | Complete source code | 5 | 5 | | +| Documentation | Comprehensive reproducibility report | 10 | 4-5 | | +| | Updated design document | 5 | 2 | | +| | Clear build/deployment instructions | 5 | 2 | | +| | Troubleshooting guide | 5 | 1 | | +| | Completed self-assessment table | 5 | 2 | | +| 14 | Hour sheets for all members | 5 | 3 | | +| Presentation Video | Project demonstration | 5 | 0 | | +| | Code walk-through | 5 | 0 | | +| 0 | Deployment showcase | 5 | 0 | | +| **Technical Implementation** | | | | | +| Application Functionality | Basic functionality works | 10 | 8 | | +| | Advanced features implemented | 10 | 0 | | +| | Error handling & robustness | 10 | 4 | | +| 16 | User-friendly interface | 5 | 4 | | +| Backend & Architecture | Stateless web server | 5 | 5 | | +| | Stateful application | 10 | ? WHAT DOES THIS MEAN | | +| | Database integration | 10 | 10 | | +| | API design | 5 | 5 | | +| 20 | Microservices architecture | 10 | 0 | | +| Cloud Integration | Basic cloud deployment | 10 | 10 | | +| | Cloud APIs usage | 10 | ? WHAT DOES THIS MEAN | | +| | Serverless components | 10 | 0 | | +| 10 | Advanced cloud services | 5 | 0 | | +| **DevOps & Deployment** | | | | | +| Containerization | Basic Dockerfile | 5 | 5 | | +| | Optimized Dockerfile | 5 | 0 | | +| | Docker Compose | 5 | 5 - dev only | | +| 15 | Persistent storage | 5 | 5 | | +| Deployment & Scaling | Manual deployment | 5 | 5 | | +| | Automated deployment | 5 | 5 | | +| | Multiple replicas | 5 | 5 | | +| 20 | Kubernetes deployment | 10 | 10 | | +| **Quality Assurance** | | | | | +| Testing | Unit tests | 5 | 2 | | +| | Integration tests | 5 | 2 | | +| | End-to-end tests | 5 | 5 | | +| 9 | Performance testing | 5 | 0 | | +| Monitoring & Operations | Health checks | 5 | 5 | | +| | Logging | 5 | 2 - only to terminal add logstash | | +| 9 | Metrics/Monitoring | 5 | 2 - only DB, need to create Prometheus endpoint | | +| Security | HTTPS/TLS | 5 | 5 | | +| | Authentication | 5 | 5 | | +| 15 | Authorization | 5 | 5 | | +| **Innovation & Excellence** | | | | | +| Advanced Features and | AI/ML Integration | 10 | 0 | | +| Technical Excellence | Real-time features | 10 | 0 | | +| | Creative problem solving | 10 | ? | | +| | Performance optimization | 5 | 2 | | +| 2 | Exceptional user experience | 5 | 0 | | +| **Total** | | **255** | **153** | | ## Grading Scale @@ -72,7 +72,7 @@ This means that you must get at least 2 points for each item in this category. - **Maximum: 200+ points** | Grade | Points | -| ----- | -------- | +|-------|----------| | A | 180-200+ | | B | 160-179 | | C | 140-159 | diff --git a/7project/report.md b/7project/report.md index 900acf5..167e24d 100644 --- a/7project/report.md +++ b/7project/report.md @@ -52,54 +52,54 @@ flowchart TB ```mermaid classDiagram -direction BT -class alembic_version { - varchar(32) version_num -} -class categories { - varchar(100) name - varchar(255) description - char(36) user_id - int(11) id -} -class category_transaction { - int(11) category_id - int(11) transaction_id -} -class oauth_account { - char(36) user_id - varchar(100) oauth_name - varchar(4096) access_token - int(11) expires_at - varchar(1024) refresh_token - varchar(320) account_id - varchar(320) account_email - char(36) id -} -class transaction { - blob amount - blob description - char(36) user_id - date date - int(11) id -} -class user { - varchar(100) first_name - varchar(100) last_name - varchar(320) email - varchar(1024) hashed_password - tinyint(1) is_active - tinyint(1) is_superuser - tinyint(1) is_verified - longtext config - char(36) id -} + direction BT + class alembic_version { + varchar(32) version_num + } + class categories { + varchar(100) name + varchar(255) description + char(36) user_id + int(11) id + } + class category_transaction { + int(11) category_id + int(11) transaction_id + } + class oauth_account { + char(36) user_id + varchar(100) oauth_name + varchar(4096) access_token + int(11) expires_at + varchar(1024) refresh_token + varchar(320) account_id + varchar(320) account_email + char(36) id + } + class transaction { + blob amount + blob description + char(36) user_id + date date + int(11) id + } + class user { + varchar(100) first_name + varchar(100) last_name + varchar(320) email + varchar(1024) hashed_password + tinyint(1) is_active + tinyint(1) is_superuser + tinyint(1) is_verified + longtext config + char(36) id + } -categories --> user : user_id -> id -category_transaction --> categories : category_id -> id -category_transaction --> transaction : transaction_id -> id -oauth_account --> user : user_id -> id -transaction --> user : user_id -> id + categories --> user: user_id -> id + category_transaction --> categories: category_id -> id + category_transaction --> transaction: transaction_id -> id + oauth_account --> user: user_id -> id + transaction --> user: user_id -> id ``` The workflow works in the following way: @@ -264,8 +264,9 @@ bash upgrade_database.sh ### 5) Run backend -Before running the backend, make sure to set the necessary environment variables. Either by setting them in your shell +Before running the backend, make sure to set the necessary environment variables. Either by setting them in your shell or by setting them in run configuration in your IDE. + ```bash cd backend uvicorn app.app:fastApi --reload --host 0.0.0.0 --port 8000 @@ -588,7 +589,6 @@ npm run dev in 7project/src/frontend ## Troubleshooting - ### Common Issues #### Issue 1: Unable to apply Cloudflare terraform module @@ -614,26 +614,32 @@ by either hitting docker hub rate limits or by docker hub being down. ### Debug Commands Get a detailed description of the Deployment: + ```bash kubectl describe deployment finance-tracker -n prod ``` Get a list of pods in the Deployment: + ```bash kubectl get pods -n prod ``` -Check the logs of a specific pod copy value for from the command above (--previous flag shows logs of a failing pod, remove it if the pod is not failing): +Check the logs of a specific pod copy value for from the command above (--previous flag shows logs of a +failing pod, remove it if the pod is not failing): + ```bash kubectl logs -n prod --previous ``` See the service description: + ```bash kubectl describe service finance-tracker -n prod ``` Connect to the pod and run a bash shell: + ```bash kubectl exec -it -n prod -- /bin/bash ``` @@ -646,34 +652,30 @@ kubectl exec -it -n prod -- /bin/bash > This information is used for individual grading. > Link to the specific commit on GitHub for each contribution. -| Task/Component | Assigned To | Status | Time Spent | Difficulty | Notes | -|-------------------------------------------------------------------------------------------------------------------|-------------|----------------|------------|------------|-----------------------------------------------------------------------------------------------------| -| [Project Setup & Repository](https://github.com/dat515-2025/Group-8#) | Lukas | ✅ Complete | 40 Hours | Medium | [Any notes] | -| [Design Document](https://github.com/dat515-2025/Group-8/blob/main/6design/design.md) | Both | ✅ Complete | 4 Hours | Easy | [Any notes] | -| [Backend API Development](https://github.com/dat515-2025/Group-8/tree/main/7project/backend/app/api) | Dejan | ✅ Complete | 14 hours | Medium | [Any notes] | -| [Database Setup & Models](https://github.com/dat515-2025/Group-8/tree/main/7project/backend/app/models) | Lukas | ✅ Complete | [X hours] | Medium | [Any notes] | -| [Frontend Development](https://github.com/dat515-2025/Group-8/tree/main/7project/frontend) | Dejan | ✅ Complete | 17 hours | Medium | [Any notes] | -| [Docker Configuration](https://github.com/dat515-2025/Group-8/blob/main/7project/compose.yml) | Lukas | ✅ Complete | 3 hours | Easy | [Any notes] | -| [Cloud Deployment](https://github.com/dat515-2025/Group-8/blob/main/7project/deployment/app-demo-deployment.yaml) | Lukas | ✅ Complete | [X hours] | Hard | Using Talos cluster running in proxmox - easy snapshots etc. Frontend deployed at Cloudflare pages. | -| [Testing Implementation](https://github.com/dat515-2025/group-name) | Dejan | ✅ Complete | 16 hours | Medium | [Any notes] | -| [Documentation](https://github.com/dat515-2025/group-name) | Both | 🔄 In Progress | [X hours] | Easy | [Any notes] | -| [Presentation Video](https://github.com/dat515-2025/group-name) | Both | ❌ Not Started | [X hours] | Medium | [Any notes] | - -**Legend**: ✅ Complete | 🔄 In Progress | ⏳ Pending | ❌ Not Started +| Task/Component | Assigned To | Status | Time Spent | Difficulty | Notes | +|:----------------------------------------------------------------------------------------------------------|:------------|:-----------|:-----------|:-----------|:------| +| [Project Setup & Repository](https://github.com/dat515-2025/Group-8/pull/1) | Both | ✅ Complete | 10 Hours | Medium | | +| [Design Document](https://github.com/dat515-2025/Group-8/commit/f09f9eaa82d0953afe41f33c57ff63e0933a81ef) | Both | ✅ Complete | 4 Hours | Easy | | +| [Cluster setup ](https://github.com/dat515-2025/Group-8/commit/c8048d940df00874c290d99cdb4ad366bca6e95d) | Lukas | ✅ Complete | 30 hours | Hard | | +| [Backend API Development](https://github.com/dat515-2025/Group-8/pull/26) | Dejan | ✅ Complete | 22 hours | Medium | | +| [Database Setup & Models](https://github.com/dat515-2025/Group-8/pull/19) | Lukas | ✅ Complete | 5 hours | Medium | | +| [Frontend Development](https://github.com/dat515-2025/Group-8/pull/28) | Dejan | ✅ Complete | 32 hours | Medium | | +| [Docker Configuration](https://github.com/dat515-2025/Group-8/pull/1) | Lukas | ✅ Complete | 3 hours | Easy | | +| [Authentification](https://github.com/dat515-2025/Group-8/pull/23) | Both | ✅ Complete | 11 hours | Medium | | +| [Transactions loading](https://github.com/dat515-2025/Group-8/pull/32) | Lukas | ✅ Complete | 7 hours | Medium | | +| [Monitoring](https://github.com/dat515-2025/Group-8/pull/42/) | Lukas | ✅ Complete | 9 hours | Medium | | +| [Cloud Deployment](https://github.com/dat515-2025/Group-8/pull/16) | Both | ✅ Complete | 21 hours | Hard | | +| [Testing Implementation](https://github.com/dat515-2025/Group-8/pull/31/) | Both | ✅ Complete | 21 hours | Medium | | +| [Documentation](https://github.com/dat515-2025/Group-8/commit/515106b238bc032d5f7d5dcae931b5cb7ee2a281) | Both | ✅ Complete | 14 hours | Medium | | +| [Presentation Video](https://github.com/dat515-2025/group-name) TODO | Both | Started | 3 hours | Medium | | ## Hour Sheet -> Link to the specific commit on GitHub for each contribution. - -### [Lukáš] - -## Hour Sheet - -**Name:** Lukáš Trkan +### Lukáš | Date | Activity | Hours | Description | Representative Commit / PR | |:----------------|:----------------------------|:--------|:------------------------------------------------------------------------------------|:------------------------------------------------------| -| 18.9. - 19.9. | Initial Setup & Design | 40 | Repository init, system design diagrams, basic Terraform setup | `feat(infrastructure): add basic terraform resources` | +| 18.9. - 19.9. | Initial Setup & Design | 10 | Repository init, system design diagrams, basic Terraform setup | `feat(infrastructure): add basic terraform resources` | | 20.9. - 5.10. | Core Infrastructure & CI/CD | 12 | K8s setup (ArgoCD), CI/CD workflows, RabbitMQ, Redis, Celery workers, DB migrations | `PR #2`, `feat(infrastructure): add rabbitmq cluster` | | 6.10. - 9.10. | Frontend Infra & DB | 5 | Deployed frontend to Cloudflare, setup metrics, created database models | `PR #16` (Cloudflare), `PR #19` (DB structure) | | 10.10. - 11.10. | Backend | 5 | Implemented OAuth support (MojeID, BankID) | `feat(auth): add support for OAuth and MojeID` | @@ -709,7 +711,6 @@ kubectl exec -it -n prod -- /bin/bash | 25.9. to 14.11. | Documentation | 8 | Documenting the dev process | multiple `feat(docs): report.md update` | | **Total** | | **87** | | | - ### Group Total: 192 hours --- @@ -719,10 +720,13 @@ kubectl exec -it -n prod -- /bin/bash ### What We Learned #### Technical + - We learned how to use AI to help us with our project. - We learned how to use Copilot for PR reviews. - We learned how to troubleshoot issues with our project in different areas. + #### Collaboration + - Weekly meetings with the TA were great for syncing up on progress, discussing issues, planning future work. - Using GitHub issues and pull requests was very helpful for keeping track of progress. @@ -739,6 +743,7 @@ namespace that cannot be deleted. This was solved by using snapshots in Proxmox and restoring if this happened. #### Not enough time to implement all features + Since this course is worth only 5 credits, we often had to prioritize other courses we were attending over this project. In the end, we were able to implement all necessary features. @@ -756,7 +761,8 @@ Using private container registry would allow us to include environment variables This would simplify deployment and CI/CD setup. #### Start sooner -The weekly meetings helped us to start planning the project earlier and avoid spending too much time on details, + +The weekly meetings helped us to start planning the project earlier and avoid spending too much time on details, but we could have started earlier if we had more time. [What would you do differently? What worked well that you'd keep?] @@ -776,14 +782,19 @@ used not only by myself. #### [Dejan] -Since I do not have a job and I am more theoretically oriented student (I am more into math, algorithms, cryptography), this project was probably the most complex one I have ever worked on. -For me, it was a great experience to work on an actually deployed fullstack app and not only local development, that I was used to from the past. +Since I do not have a job and I am more theoretically oriented student (I am more into math, algorithms, cryptography), +this project was probably the most complex one I have ever worked on. +For me, it was a great experience to work on an actually deployed fullstack app and not only local development, that I +was used to from the past. -It was also a great experience to collaborate with Lukas who has prior experience with app deployment and infrastructure. +It was also a great experience to collaborate with Lukas who has prior experience with app deployment and +infrastructure. Thanks to this, I learned a lot new technologies and how to work in a team (First time reviewing PRs). -It was challenging to wrap my head around the project structure and how everything was connected (And I still think I have some gaps in my knowledge). -But I think that if I decide to create my own demo project in the future, I will definitely be able to work on it much more efficiently. +It was challenging to wrap my head around the project structure and how everything was connected (And I still think I +have some gaps in my knowledge). +But I think that if I decide to create my own demo project in the future, I will definitely be able to work on it much +more efficiently.