Index: app/main.py
===================================================================
--- app/main.py	(revision bf146dbe953045005649aafc304a7525d19e5f42)
+++ app/main.py	(revision b8fed5c0a4fc5b67f4229e05df2c8625daaf4d39)
@@ -40,9 +40,17 @@
         from_attributes = True
 
+class TransactionBreakdownResponse(BaseModel):
+    transaction_account_id: int
+    earned_amount: float
+    spent_amount: float
+
+    class Config:
+        from_attributes = True
+
 class TransactionCreate(BaseModel):
     transaction_name: str
     amount: float
     net_amount: float
-    date: datetime  # Use this format for date strings "2024-12-21 12:00:00+02:00"
+    date: datetime  # Use this format for date strings "2024-12-21T12:00:00+02:00"
 
 class TransactionUpdate(BaseModel):
@@ -179,8 +187,21 @@
 
 @app.get("/transactions/", response_model=List[TransactionResponse])
-def get_transactions(db: Session = Depends(get_db)):
-    transactions = db.query(Transaction).all()
-    
-    # Convert datetime fields to strings manually
+def get_transactions(user: User = Depends(get_current_user), db: Session = Depends(get_db)):
+    """
+    Fetch transactions based on user role.
+    - Admin: Fetch all transactions.
+    - Regular User: Fetch transactions tied to the user's accounts via transaction breakdowns.
+    """
+    if is_admin(user.email):
+        transactions = db.query(Transaction).all()
+    else:
+        transactions = (
+            db.query(Transaction)
+            .join(TransactionBreakdown, Transaction.transaction_id == TransactionBreakdown.transaction_id)
+            .join(TransactionAccount, TransactionBreakdown.transaction_account_id == TransactionAccount.transaction_account_id)
+            .filter(TransactionAccount.user_id == user.user_id)
+            .all()
+        )
+
     return [
         {
@@ -191,4 +212,23 @@
     ]
 
+@app.get("/transactions/{transaction_id}/breakdowns", response_model=List[TransactionBreakdownResponse])
+def get_transaction_breakdowns(transaction_id: int, user: User = Depends(get_current_user), db: Session = Depends(get_db)):
+    """
+    Fetch transaction breakdowns for a specific transaction.
+    """
+    breakdowns = (
+        db.query(TransactionBreakdown)
+        .join(TransactionAccount, TransactionBreakdown.transaction_account_id == TransactionAccount.transaction_account_id)
+        .filter(TransactionBreakdown.transaction_id == transaction_id)
+        .filter(TransactionAccount.user_id == user.user_id)
+        .all()
+    )
+
+    if not breakdowns:
+        raise HTTPException(status_code=404, detail="No breakdowns found for this transaction.")
+
+    return breakdowns
+
+
 @app.put("/transactions/{transaction_id}", response_model=TransactionResponse)
 def update_transaction(transaction_id: int, transaction_update: TransactionUpdate, db: Session = Depends(get_db)):
Index: app/models.py
===================================================================
--- app/models.py	(revision bf146dbe953045005649aafc304a7525d19e5f42)
+++ app/models.py	(revision b8fed5c0a4fc5b67f4229e05df2c8625daaf4d39)
@@ -36,5 +36,5 @@
     amount = Column(Numeric(10, 2), nullable=False)
     net_amount = Column(Numeric(10, 2), nullable=False)
-    date = Column(DateTime, nullable=False)
+    date = Column(DateTime(timezone=True), nullable=False)
     breakdowns = relationship("TransactionBreakdown", back_populates="transaction")
     tags = relationship(
Index: cli/cli_app.py
===================================================================
--- cli/cli_app.py	(revision bf146dbe953045005649aafc304a7525d19e5f42)
+++ cli/cli_app.py	(revision b8fed5c0a4fc5b67f4229e05df2c8625daaf4d39)
@@ -123,5 +123,7 @@
         accounts = response.json()
         for account in accounts:
-            print(f"Account ID: {account['transaction_account_id']}, Name: {account['account_name']}, Balance: {account['balance']}")
+            print(f"Account ID: {account['transaction_account_id']}\n"
+                 +f"    Name: {account['account_name']}\n"
+                 +f"    Balance: {account['balance']}\n")
     else:
         print("Failed to retrieve accounts.")
@@ -210,15 +212,17 @@
 
 def add_transaction():
+    headers = {"Authorization": f"Bearer {access_token}"}
+    
     print("\nAdd Transaction")
     transaction_name = input("Enter transaction name: ")
     amount = float(input("Enter amount: "))
-    date = input("Enter date (YYYY-MM-DDTHH:MM:SS): ")
-
-    response = requests.get(f"{BASE_URL}/transactions/", json={
+    date = input("Enter date (YYYY-MM-DDTHH:MM:SS+HH:MM): ")
+
+    response = requests.post(f"{BASE_URL}/transactions/", json={
         "transaction_name": transaction_name,
         "amount": amount,
         "net_amount": 0,
         "date": date
-    })
+    }, headers=headers)
 
     if response.status_code == 200:
@@ -229,6 +233,7 @@
 
 def view_transactions():
-    print("\nView Transactions")
-    response = requests.get(f"{BASE_URL}/transactions/")
+    headers = {"Authorization": f"Bearer {access_token}"}
+    print("\nYour Transactions:")
+    response = requests.get(f"{BASE_URL}/transactions/", headers=headers)
 
     if response.status_code == 200:
@@ -236,8 +241,23 @@
         for transaction in transactions:
             print(f"Transaction ID: {transaction['transaction_id']}")
-            print(f"Transaction Name: {transaction['transaction_name']}")
-            print(f"Amount: {transaction['amount']}")
-            print(f"Net Amount: {transaction['net_amount']}")
-            print(f"Date: {transaction['date']}")
+            print(f"    Name: {transaction['transaction_name']}")
+            print(f"    Amount: {transaction['amount']}")
+            print(f"    Net Amount: {transaction['net_amount']}")
+            print(f"    Date: {transaction['date']}")
+            print(f"    Breakdowns:")
+
+            breakdown_response = requests.get(
+                f"{BASE_URL}/transactions/{transaction['transaction_id']}/breakdowns",
+                headers=headers
+            )
+
+            if breakdown_response.status_code == 200:
+                breakdowns = breakdown_response.json()
+                for breakdown in breakdowns:
+                    print(f"        Account ID: {breakdown['transaction_account_id']}")
+                    print(f"        Earned: {breakdown['earned_amount']}")
+                    print(f"        Spent: {breakdown['spent_amount']}")
+            else:
+                print(f"        Could not fetch breakdowns. Error: {breakdown_response.json().get('detail', 'Unknown error')}")
             print()
     else:
@@ -251,5 +271,5 @@
     amount = input("Enter new amount (or leave blank): ")
     net_amount = input("Enter new net amount (or leave blank): ")
-    date = input("Enter new date (YYYY-MM-DDTHH:MM:SS) (or leave blank): ")
+    date = input("Enter new date (YYYY-MM-DDTHH:MM:SS+HH:MM) (or leave blank): ")
 
     data = {}
