Index: backend/src/main/java/com/tradingmk/backend/config/SecurityConfig.java
===================================================================
--- backend/src/main/java/com/tradingmk/backend/config/SecurityConfig.java	(revision 5bdc89d3a8d3eae05e974c07ac3caaa3c31d62d5)
+++ backend/src/main/java/com/tradingmk/backend/config/SecurityConfig.java	(revision 7379e60618d7d1610343dcaf3c1d54fa4850d1e6)
@@ -33,5 +33,6 @@
                         "/topic/**",
                         "/api/history/upload",
-                        "/api/history/{symbol}","/api/trades/**","/api/auth/link/confirm","/api/watchlist/**")
+                        "/api/history/{symbol}","/api/trades/**","/api/auth/link/confirm","/api/watchlist/**","/api/transactions","/api/transactions/**",
+                        "/api/transactions/export","/api/transactions/import")
                 .permitAll()
                 .anyRequest()
Index: backend/src/main/java/com/tradingmk/backend/controller/TransactionController.java
===================================================================
--- backend/src/main/java/com/tradingmk/backend/controller/TransactionController.java	(revision 7379e60618d7d1610343dcaf3c1d54fa4850d1e6)
+++ backend/src/main/java/com/tradingmk/backend/controller/TransactionController.java	(revision 7379e60618d7d1610343dcaf3c1d54fa4850d1e6)
@@ -0,0 +1,91 @@
+package com.tradingmk.backend.controller;
+
+import com.tradingmk.backend.model.Stock;
+import com.tradingmk.backend.model.Transaction;
+import com.tradingmk.backend.model.User;
+import com.tradingmk.backend.repository.StockRepository;
+import com.tradingmk.backend.repository.TransactionRepository;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.core.annotation.AuthenticationPrincipal;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/transactions")
+public class TransactionController {
+
+    private final TransactionRepository transactionRepository;
+    private final StockRepository stockRepository;
+
+    public TransactionController(TransactionRepository transactionRepository, StockRepository stockRepository) {
+        this.transactionRepository = transactionRepository;
+        this.stockRepository = stockRepository;
+    }
+
+    @GetMapping("/export")
+    public void exportTransactions(HttpServletResponse response, @AuthenticationPrincipal User user) throws IOException {
+        response.setContentType("text/csv");
+        response.setHeader("Content-Disposition", "attachment; filename=transactions.csv");
+
+        List<Transaction> transactions = transactionRepository.findByUserId(user.getId());
+
+        PrintWriter writer = response.getWriter();
+        writer.println("ID,Stock,Type,Quantity,Price,Timestamp");
+
+        for (Transaction t : transactions) {
+            writer.println(
+                    t.getId() + "," +
+                            t.getStock().getSymbol() + "," +
+                            t.getType() + "," +
+                            t.getQuantity() + "," +
+                            t.getPrice() + "," +
+                            t.getTimestamp()
+            );
+        }
+
+        writer.flush();
+    }
+
+
+    @PostMapping("/import")
+    public ResponseEntity<String> importTransactions(@RequestParam("file") MultipartFile file,
+                                                     @AuthenticationPrincipal User user) throws Exception {
+        try (BufferedReader br = new BufferedReader(new InputStreamReader(file.getInputStream()))) {
+            String line;
+            br.readLine(); //header
+
+            while ((line = br.readLine()) != null) {
+                String[] data = line.split(",");
+
+                Transaction transaction = new Transaction();
+                transaction.setUser(user);
+
+                Stock stock = stockRepository.findBySymbol(data[1])
+                        .orElseThrow(() -> new RuntimeException("Stock not found: " + data[1]));
+                transaction.setStock(stock);
+
+                transaction.setType(data[2]);
+                transaction.setQuantity(Integer.parseInt(data[3]));
+                transaction.setPrice(Double.parseDouble(data[4]));
+                transaction.setTimestamp(LocalDateTime.parse(data[5]));
+
+                transactionRepository.save(transaction);
+            }
+        }
+
+        return ResponseEntity.ok("Import successful!");
+    }
+
+    @GetMapping
+    public List<Transaction> getUserTransactions(@AuthenticationPrincipal User user) {
+        return transactionRepository.findByUserId(user.getId());
+    }
+}
Index: backend/src/main/java/com/tradingmk/backend/repository/TransactionRepository.java
===================================================================
--- backend/src/main/java/com/tradingmk/backend/repository/TransactionRepository.java	(revision 5bdc89d3a8d3eae05e974c07ac3caaa3c31d62d5)
+++ backend/src/main/java/com/tradingmk/backend/repository/TransactionRepository.java	(revision 7379e60618d7d1610343dcaf3c1d54fa4850d1e6)
@@ -4,4 +4,7 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 
+import java.util.List;
+
 public interface TransactionRepository extends JpaRepository<Transaction,Long> {
+    List<Transaction> findByUserId(Long id);
 }
Index: frontend/src/main.jsx
===================================================================
--- frontend/src/main.jsx	(revision 5bdc89d3a8d3eae05e974c07ac3caaa3c31d62d5)
+++ frontend/src/main.jsx	(revision 7379e60618d7d1610343dcaf3c1d54fa4850d1e6)
@@ -18,4 +18,5 @@
 import {GoogleOAuthProvider} from "@react-oauth/google";
 import Watchlist from "./pages/Watchlist/Watchlist.jsx";
+import TransactionsPage from "./pages/TransactionsPage/TransactionsPage.jsx";
 
 
@@ -36,4 +37,5 @@
                     <Route path="/admin" element={<AdminTrades />} />
                     <Route path="/watchlist" element={<Watchlist />} />
+                    <Route path="/transactions" element={<TransactionsPage />} />
                 </Routes>
             </BrowserRouter>
Index: frontend/src/pages/TransactionsPage/TransactionsPage.jsx
===================================================================
--- frontend/src/pages/TransactionsPage/TransactionsPage.jsx	(revision 7379e60618d7d1610343dcaf3c1d54fa4850d1e6)
+++ frontend/src/pages/TransactionsPage/TransactionsPage.jsx	(revision 7379e60618d7d1610343dcaf3c1d54fa4850d1e6)
@@ -0,0 +1,154 @@
+import React, {useEffect, useRef, useState} from "react";
+import Menu from "../Menu/Menu.jsx";
+
+const TransactionsPage = () => {
+    const [transactions, setTransactions] = useState([]);
+    const fileInputRef = useRef(null);
+
+    const handleButtonClick = () => {
+        fileInputRef.current.click(); // klik na inpiu
+    };
+
+    useEffect(() => {
+        fetch("http://localhost:8080/api/transactions", {
+            method: "GET",
+            headers: {
+                "Authorization": `Bearer ${localStorage.getItem("accessToken")}`,
+                "Content-Type": "application/json"
+            }
+        })
+            .then(res => {
+                if (!res.ok) {
+                    throw new Error("Failed to fetch transactions");
+                }
+                return res.json();
+            })
+            .then(data => setTransactions(data))
+            .catch(err => console.error(err));
+    }, []);
+
+    const handleExport = () => {
+        fetch("http://localhost:8080/api/transactions/export", {
+            method: "GET",
+            headers: {
+                "Authorization": `Bearer ${localStorage.getItem("accessToken")}`,
+                "Content-Type": "application/json"
+            }
+        })
+            .then(res => res.blob())
+            .then(blob => {
+                const url = window.URL.createObjectURL(new Blob([blob]));
+                const link = document.createElement("a");
+                link.href = url;
+                link.setAttribute("download", "transactions.csv");
+                document.body.appendChild(link);
+                link.click();
+            });
+    };
+
+
+
+
+    const loadTransactions = () => {
+        fetch("http://localhost:8080/api/transactions", {
+            method: "GET",
+            headers: {
+                "Authorization": `Bearer ${localStorage.getItem("accessToken")}`,
+                "Content-Type": "application/json"
+            }
+        })
+            .then(res => {
+                if (!res.ok) {
+                    throw new Error("transactions fail");
+                }
+                return res.json();
+            })
+            .then(data => setTransactions(data))
+            .catch(err => console.error(err));
+    };
+
+    useEffect(() => {
+        loadTransactions();
+    }, []);
+
+    const handleImport = async (e) => {
+        const file = e.target.files[0];
+        const formData = new FormData();
+        formData.append("file", file);
+
+        try {
+            const response = await fetch("http://localhost:8080/api/transactions/import", {
+                method: "POST",
+                headers: {
+                    "Authorization": `Bearer ${localStorage.getItem("accessToken")}`
+                },
+                body: formData,
+            });
+
+            if (!response.ok) {
+                throw new Error("import fail");
+            }
+
+            alert("Import successful!");
+            loadTransactions();
+
+        } catch (err) {
+            console.error(err);
+            alert("import fail");
+        } finally {
+            e.target.value = "";
+        }
+    };
+
+    return (
+        <div className=" max-w-7xl mx-auto space-y-8 pt-20  mb-4">
+            <Menu/>
+            <h3 className="text-4xl  text-gray-300 font-bold mb-8">Transactions</h3>
+
+            <div className="flex gap-4 mb-4">
+                <button onClick={handleExport} className="bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded-lg cursor-pointer">
+                    Export CSV
+                </button>
+
+                <button onClick={handleButtonClick} className="bg-green-500 hover:bg-green-600 text-white px-4 py-2 rounded-lg cursor-pointer">
+                    Import CSV
+                </button>
+                <input
+                    type="file"
+                    accept=".csv"
+                    ref={fileInputRef}
+                    style={{ display: "none" }}
+                    onChange={handleImport}
+                />
+
+            </div>
+
+            <table className="min-w-full border border-gray-300">
+                <thead>
+                <tr className="bg-gray-100">
+                    <th className="border px-2 py-1">ID</th>
+                    <th className="border px-2 py-1">Stock</th>
+                    <th className="border px-2 py-1">Type</th>
+                    <th className="border px-2 py-1">Quantity</th>
+                    <th className="border px-2 py-1">Price</th>
+                    <th className="border px-2 py-1">Timestamp</th>
+                </tr>
+                </thead>
+                <tbody>
+                {transactions.map(t => (
+                    <tr key={t.id}>
+                        <td className="border px-2 py-1">{t.id}</td>
+                        <td className="border px-2 py-1">{t.stock.symbol}</td>
+                        <td className="border px-2 py-1">{t.type}</td>
+                        <td className="border px-2 py-1">{t.quantity}</td>
+                        <td className="border px-2 py-1">{t.price}</td>
+                        <td className="border px-2 py-1">{t.timestamp}</td>
+                    </tr>
+                ))}
+                </tbody>
+            </table>
+        </div>
+    );
+};
+
+export default TransactionsPage;
