diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4cf9f04f15c297c7025dd3d57e3d9b1960553768..6a635c83368978d7d8d2b227b46cf0e3061d4388 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -8,12 +8,19 @@ variables:
   PIP_CACHE_DIR: $CI_PROJECT_DIR/.pip_cache
 
 cache:
+  key: dependencies-cache
   paths:
     - $PIP_CACHE_DIR
+  policy: pull-push
 
 before_script:
   - python -m venv $VENV_DIR
-  - source $VENV_DIR/Scripts/activate
+  - |
+    if [[ "$OSTYPE" == "msys" ]]; then
+      source $VENV_DIR/Scripts/activate
+    else
+      source $VENV_DIR/bin/activate
+    fi
   - pip install --upgrade pip
   - pip install -r requirements.txt --cache-dir $PIP_CACHE_DIR
 
@@ -21,6 +28,7 @@ install_dependencies:
   stage: install
   script:
     - echo "Dependencies installed successfully."
+  timeout: 20m
 
 run_tests:
   stage: test
diff --git a/app/backend/database.py b/app/backend/database.py
index 51f1c51e33690b2efbda063586678188c91e6dfa..340a31feb280d4c31374a3f97629d4ac2dc4bac6 100644
--- a/app/backend/database.py
+++ b/app/backend/database.py
@@ -7,8 +7,8 @@ engine = create_engine(settings.database_url, echo=settings.debug)
 
 def init_db():
     SQLModel.metadata.create_all(engine, checkfirst=True)
-    # with Session(engine) as session:
-    #     insert_dummy_data(session)
+    with Session(engine) as session:
+        insert_dummy_data(session)
 
 
 def get_session():
diff --git a/app/backend/dummy_data.py b/app/backend/dummy_data.py
index e2550dfc5253d893607822247aa3681f1a514bf9..f7a55b4eebfe187e36075be20138792aa6826c24 100644
--- a/app/backend/dummy_data.py
+++ b/app/backend/dummy_data.py
@@ -34,11 +34,49 @@ def insert_dummy_data(session: Session):
         shops = [
             Shop(
                 owner_id=2,
-                name=f"Shop{i}",
-                description=f"Description for Shop {i}",
+                name="Google HQ",
+                description="Google Headquarters",
                 image_url="app/static/default/default_shop.png",
-            )
-            for i in range(1, 6)
+                address="1600 Amphitheatre Parkway, Mountain View, CA",
+                latitude=37.4220656,
+                longitude=-122.0840897,
+            ),
+            Shop(
+                owner_id=2,
+                name="Apple HQ",
+                description="Apple Headquarters",
+                image_url="app/static/default/default_shop.png",
+                address="1 Infinite Loop, Cupertino, CA",
+                latitude=37.33182,
+                longitude=-122.03118,
+            ),
+            Shop(
+                owner_id=2,
+                name="Empire State Building",
+                description="Famous skyscraper in New York",
+                image_url="app/static/default/default_shop.png",
+                address="350 Fifth Avenue, New York, NY",
+                latitude=40.748817,
+                longitude=-73.985428,
+            ),
+            Shop(
+                owner_id=2,
+                name="Sherlock's Home",
+                description="Fictional detective's residence",
+                image_url="app/static/default/default_shop.png",
+                address="221B Baker Street, London, UK",
+                latitude=51.523767,
+                longitude=-0.1585557,
+            ),
+            Shop(
+                owner_id=2,
+                name="Eiffel Tower",
+                description="Iconic landmark in Paris",
+                image_url="app/static/default/default_shop.png",
+                address="Eiffel Tower, Paris, France",
+                latitude=48.8588443,
+                longitude=2.2943506,
+            ),
         ]
         session.add_all(shops)
         session.commit()
@@ -75,8 +113,56 @@ def insert_dummy_data(session: Session):
 
     if not session.query(Order).first():
         orders = [
-            Order(user_id=1, shop_id=i, total_price=100 + (i * 50), status="pending")
-            for i in range(1, 6)
+            Order(
+                user_id=1,
+                shop_id=1,
+                total_price=150.0,
+                shipping_price=10.0,
+                status="pending",
+                delivery_address="1600 Amphitheatre Parkway, Mountain View, CA",
+                delivery_latitude=37.4220656,
+                delivery_longitude=-122.0840897,
+            ),
+            Order(
+                user_id=1,
+                shop_id=2,
+                total_price=200.0,
+                shipping_price=15.0,
+                status="shipped",
+                delivery_address="1 Infinite Loop, Cupertino, CA",
+                delivery_latitude=37.33182,
+                delivery_longitude=-122.03118,
+            ),
+            Order(
+                user_id=1,
+                shop_id=3,
+                total_price=250.0,
+                shipping_price=20.0,
+                status="delivered",
+                delivery_address="350 Fifth Avenue, New York, NY",
+                delivery_latitude=40.748817,
+                delivery_longitude=-73.985428,
+            ),
+            Order(
+                user_id=1,
+                shop_id=4,
+                total_price=300.0,
+                shipping_price=25.0,
+                status="pending",
+                delivery_address="221B Baker Street, London, UK",
+                delivery_latitude=51.523767,
+                delivery_longitude=-0.1585557,
+            ),
+            Order(
+                user_id=1,
+                shop_id=5,
+                total_price=350.0,
+                shipping_price=30.0,
+                status="canceled",
+                delivery_address="Eiffel Tower, Paris, France",
+                delivery_latitude=48.8588443,
+                delivery_longitude=2.2943506,
+            ),
         ]
         session.add_all(orders)
         session.commit()
diff --git a/app/backend/routes/product.py b/app/backend/routes/product.py
index cadfba24acfe07e4b53d4151e7502f0492174415..fcad951db6c8c2d2cf4b7727a2c555599cb95b6b 100644
--- a/app/backend/routes/product.py
+++ b/app/backend/routes/product.py
@@ -1,7 +1,7 @@
 from fastapi import APIRouter, Depends, HTTPException, UploadFile, File, Form
-from sqlmodel import Session
+from sqlmodel import Session, func
 from datetime import datetime
-from backend.models.models import Product, ProductImage, User, Shop
+from backend.models.models import Product, ProductImage, User, Shop, OrderItem
 from backend.schemas.product import ProductRead, ProductUpdate
 from backend.database import get_session
 from backend.routes.auth import get_current_user
@@ -76,8 +76,21 @@ def create_product(
 
 
 @router.get("/list", response_model=list[ProductRead])
-def read_all_products(session: Session = Depends(get_session)):
-    products = session.query(Product).all()
+def read_all_products(order: str = "desc", session: Session = Depends(get_session)):
+    order_by = (
+        func.count(OrderItem.id).desc()
+        if order == "desc"
+        else func.count(OrderItem.id).asc()
+    )
+
+    products = (
+        session.query(Product)
+        .outerjoin(OrderItem, Product.id == OrderItem.product_id)
+        .group_by(Product.id)
+        .order_by(order_by)
+        .all()
+    )
+
     return products
 
 
diff --git a/app/backend/routes/shop.py b/app/backend/routes/shop.py
index 2ce59c7996df14c40ed37f926e64349a85cb6c88..a240d1be12ee0774988de102a631da60042acbc5 100644
--- a/app/backend/routes/shop.py
+++ b/app/backend/routes/shop.py
@@ -1,7 +1,7 @@
 from fastapi import APIRouter, Depends, HTTPException, UploadFile, File, Form
-from sqlmodel import Session
+from sqlmodel import Session, func
 from geopy.geocoders import Nominatim
-from backend.models.models import Shop, User
+from backend.models.models import Shop, User, Order
 from backend.schemas.shop import ShopRead
 from backend.database import get_session
 from backend.routes.auth import get_current_user
@@ -57,8 +57,19 @@ def create_shop(
 
 
 @router.get("/list", response_model=list[ShopRead])
-def get_all_shops(session: Session = Depends(get_session)):
-    shops = session.query(Shop).all()
+def get_all_shops(order: str = "desc", session: Session = Depends(get_session)):
+    order_by = (
+        func.count(Order.id).desc() if order == "desc" else func.count(Order.id).asc()
+    )
+
+    shops = (
+        session.query(Shop)
+        .outerjoin(Order, Shop.id == Order.shop_id)
+        .group_by(Shop.id)
+        .order_by(order_by)
+        .all()
+    )
+
     return shops