Compare commits

...

3 Commits

Author SHA1 Message Date
3557b3ea13 updated Dockerfile 2025-11-15 18:23:09 +01:00
4a1a9f03a1 Merge remote-tracking branch 'origin/main' 2025-11-15 13:55:51 +01:00
b1be15f559 updated docs 2025-11-15 13:55:41 +01:00
3 changed files with 150 additions and 139 deletions

View File

@@ -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** | **Comments** | | **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
@@ -72,7 +72,7 @@ This means that you must get at least 2 points for each item in this category.
- **Maximum: 200+ points** - **Maximum: 200+ points**
| Grade | Points | | Grade | Points |
| ----- | -------- | |-------|----------|
| A | 180-200+ | | A | 180-200+ |
| B | 160-179 | | B | 160-179 |
| C | 140-159 | | C | 140-159 |

View File

@@ -59,54 +59,54 @@ The workflow works in the following way:
```mermaid ```mermaid
classDiagram classDiagram
direction BT direction BT
class alembic_version { class alembic_version {
varchar(32) version_num varchar(32) version_num
} }
class categories { class categories {
varchar(100) name varchar(100) name
varchar(255) description varchar(255) description
char(36) user_id char(36) user_id
int(11) id int(11) id
} }
class category_transaction { class category_transaction {
int(11) category_id int(11) category_id
int(11) transaction_id int(11) transaction_id
} }
class oauth_account { class oauth_account {
char(36) user_id char(36) user_id
varchar(100) oauth_name varchar(100) oauth_name
varchar(4096) access_token varchar(4096) access_token
int(11) expires_at int(11) expires_at
varchar(1024) refresh_token varchar(1024) refresh_token
varchar(320) account_id varchar(320) account_id
varchar(320) account_email varchar(320) account_email
char(36) id char(36) id
} }
class transaction { class transaction {
blob amount blob amount
blob description blob description
char(36) user_id char(36) user_id
date date date date
int(11) id int(11) id
} }
class user { class user {
varchar(100) first_name varchar(100) first_name
varchar(100) last_name varchar(100) last_name
varchar(320) email varchar(320) email
varchar(1024) hashed_password varchar(1024) hashed_password
tinyint(1) is_active tinyint(1) is_active
tinyint(1) is_superuser tinyint(1) is_superuser
tinyint(1) is_verified tinyint(1) is_verified
longtext config longtext config
char(36) id char(36) id
} }
categories --> user : user_id -> id categories --> user: user_id -> id
category_transaction --> categories : category_id -> id category_transaction --> categories: category_id -> id
category_transaction --> transaction : transaction_id -> id category_transaction --> transaction: transaction_id -> id
oauth_account --> user : user_id -> id oauth_account --> user: user_id -> id
transaction --> user : user_id -> id transaction --> user: user_id -> id
``` ```
### Features ### Features
@@ -265,6 +265,7 @@ bash upgrade_database.sh
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. or by setting them in run configuration in your IDE.
```bash ```bash
cd backend cd backend
uvicorn app.app:fastApi --reload --host 0.0.0.0 --port 8000 uvicorn app.app:fastApi --reload --host 0.0.0.0 --port 8000
@@ -587,7 +588,6 @@ npm run dev in 7project/src/frontend
## Troubleshooting ## Troubleshooting
### Common Issues ### Common Issues
#### Issue 1: Unable to apply Cloudflare terraform module #### Issue 1: Unable to apply Cloudflare terraform module
@@ -613,26 +613,32 @@ by either hitting docker hub rate limits or by docker hub being down.
### Debug Commands ### Debug Commands
Get a detailed description of the Deployment: Get a detailed description of the Deployment:
```bash ```bash
kubectl describe deployment finance-tracker -n prod kubectl describe deployment finance-tracker -n prod
``` ```
Get a list of pods in the Deployment: Get a list of pods in the Deployment:
```bash ```bash
kubectl get pods -n prod kubectl get pods -n prod
``` ```
Check the logs of a specific pod copy value for <pod-name> 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 <pod-name> from the command above (--previous flag shows logs of a
failing pod, remove it if the pod is not failing):
```bash ```bash
kubectl logs <pod-name> -n prod --previous kubectl logs <pod-name> -n prod --previous
``` ```
See the service description: See the service description:
```bash ```bash
kubectl describe service finance-tracker -n prod kubectl describe service finance-tracker -n prod
``` ```
Connect to the pod and run a bash shell: Connect to the pod and run a bash shell:
```bash ```bash
kubectl exec -it <pod-name> -n prod -- /bin/bash kubectl exec -it <pod-name> -n prod -- /bin/bash
``` ```
@@ -645,34 +651,30 @@ kubectl exec -it <pod-name> -n prod -- /bin/bash
> This information is used for individual grading. > This information is used for individual grading.
> Link to the specific commit on GitHub for each contribution. > Link to the specific commit on GitHub for each contribution.
| Task/Component | Assigned To | Status | Time Spent | Difficulty | Notes | | 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] | | [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/blob/main/6design/design.md) | Both | ✅ Complete | 4 Hours | Easy | [Any notes] | | [Design Document](https://github.com/dat515-2025/Group-8/commit/f09f9eaa82d0953afe41f33c57ff63e0933a81ef) | Both | ✅ Complete | 4 Hours | Easy | |
| [Backend API Development](https://github.com/dat515-2025/Group-8/tree/main/7project/backend/app/api) | Dejan | ✅ Complete | 14 hours | Medium | [Any notes] | | [Cluster setup ](https://github.com/dat515-2025/Group-8/commit/c8048d940df00874c290d99cdb4ad366bca6e95d) | Lukas | ✅ Complete | 30 hours | Hard | |
| [Database Setup & Models](https://github.com/dat515-2025/Group-8/tree/main/7project/backend/app/models) | Lukas | ✅ Complete | [X hours] | Medium | [Any notes] | | [Backend API Development](https://github.com/dat515-2025/Group-8/pull/26) | Dejan | ✅ Complete | 22 hours | Medium | |
| [Frontend Development](https://github.com/dat515-2025/Group-8/tree/main/7project/frontend) | Dejan | ✅ Complete | 17 hours | Medium | [Any notes] | | [Database Setup & Models](https://github.com/dat515-2025/Group-8/pull/19) | Lukas | ✅ Complete | 5 hours | Medium | |
| [Docker Configuration](https://github.com/dat515-2025/Group-8/blob/main/7project/compose.yml) | Lukas | ✅ Complete | 3 hours | Easy | [Any notes] | | [Frontend Development](https://github.com/dat515-2025/Group-8/pull/28) | Dejan | ✅ Complete | 32 hours | Medium | |
| [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. | | [Docker Configuration](https://github.com/dat515-2025/Group-8/pull/1) | Lukas | ✅ Complete | 3 hours | Easy | |
| [Testing Implementation](https://github.com/dat515-2025/group-name) | Dejan | ✅ Complete | 16 hours | Medium | [Any notes] | | [Authentification](https://github.com/dat515-2025/Group-8/pull/23) | Both | ✅ Complete | 11 hours | Medium | |
| [Documentation](https://github.com/dat515-2025/group-name) | Both | 🔄 In Progress | [X hours] | Easy | [Any notes] | | [Transactions loading](https://github.com/dat515-2025/Group-8/pull/32) | Lukas | ✅ Complete | 7 hours | Medium | |
| [Presentation Video](https://github.com/dat515-2025/group-name) | Both | ❌ Not Started | [X hours] | Medium | [Any notes] | | [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 | |
**Legend**: ✅ Complete | 🔄 In Progress | ⏳ Pending | ❌ Not Started | [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 ## Hour Sheet
> Link to the specific commit on GitHub for each contribution. ### Lukáš
### [Lukáš]
## Hour Sheet
**Name:** Lukáš Trkan
| Date | Activity | Hours | Description | Representative Commit / PR | | 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` | | 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) | | 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` | | 10.10. - 11.10. | Backend | 5 | Implemented OAuth support (MojeID, BankID) | `feat(auth): add support for OAuth and MojeID` |
@@ -708,7 +710,6 @@ kubectl exec -it <pod-name> -n prod -- /bin/bash
| 25.9. to 14.11. | Documentation | 8 | Documenting the dev process | multiple `feat(docs): report.md update` | | 25.9. to 14.11. | Documentation | 8 | Documenting the dev process | multiple `feat(docs): report.md update` |
| **Total** | | **87** | | | | **Total** | | **87** | | |
### Group Total: 192 hours ### Group Total: 192 hours
--- ---
@@ -718,10 +719,13 @@ kubectl exec -it <pod-name> -n prod -- /bin/bash
### What We Learned ### What We Learned
#### Technical #### Technical
- We learned how to use AI to help us with our project. - 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 use Copilot for PR reviews.
- We learned how to troubleshoot issues with our project in different areas. - We learned how to troubleshoot issues with our project in different areas.
#### Collaboration #### Collaboration
- Weekly meetings with the TA were great for syncing up on progress, discussing issues, planning future work. - 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. - Using GitHub issues and pull requests was very helpful for keeping track of progress.
@@ -738,6 +742,7 @@ namespace that cannot be deleted.
This was solved by using snapshots in Proxmox and restoring if this happened. This was solved by using snapshots in Proxmox and restoring if this happened.
#### Not enough time to implement all features #### 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. 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. In the end, we were able to implement all necessary features.
@@ -755,6 +760,7 @@ Using private container registry would allow us to include environment variables
This would simplify deployment and CI/CD setup. This would simplify deployment and CI/CD setup.
#### Start sooner #### 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. but we could have started earlier if we had more time.
@@ -775,14 +781,19 @@ used not only by myself.
#### [Dejan] #### [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. Since I do not have a job and I am more theoretically oriented student (I am more into math, algorithms, cryptography),
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. 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). 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). It was challenging to wrap my head around the project structure and how everything was connected (And I still think I
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. 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.

View File

@@ -5,4 +5,4 @@ COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt RUN pip install --no-cache-dir -r requirements.txt
COPY . . COPY . .
EXPOSE 8000 EXPOSE 8000
CMD alembic upgrade head && uvicorn app.app:fastApi --host 0.0.0.0 --port 8000 CMD ["sh", "-c", "alembic upgrade head && uvicorn app.app:fastApi --host 0.0.0.0 --port 8000"]