diff --git a/.github/workflows/k6-perf.yml b/.github/workflows/k6-perf.yml index 00a44c8..182d207 100644 --- a/.github/workflows/k6-perf.yml +++ b/.github/workflows/k6-perf.yml @@ -10,22 +10,27 @@ jobs: k6-perf: runs-on: ubuntu-latest - services: - postgres: - image: postgres:17-alpine - env: - POSTGRES_DB: performance_db - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - ports: - - 5432:5432 - options: >- - --health-cmd="pg_isready -U postgres" --health-interval=10s --health-timeout=5s --health-retries=5 - steps: - name: Checkout uses: actions/checkout@v4 + - name: Start PostgreSQL with Docker Compose + run: docker compose up -d + env: + POSTGRES_PASSWORD: ${{ secrets.POSTGRES_PASSWORD }} + + - name: Wait for PostgreSQL to be ready + run: | + for i in {1..30}; do + if docker compose exec -T postgres pg_isready -U postgres > /dev/null 2>&1; then + echo "PostgreSQL is ready"; + exit 0; + fi; + echo "Waiting for PostgreSQL..."; + sleep 2; + done + echo "PostgreSQL did not start in time" && exit 1 + - name: Set up JDK 21 uses: actions/setup-java@v4 with: @@ -75,3 +80,6 @@ jobs: kill $(cat app.pid) || true fi + - name: Stop Docker Compose + if: always() + run: docker compose down -v diff --git a/.gitignore b/.gitignore index 667aaef..59a1d09 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,7 @@ build/ ### VS Code ### .vscode/ + +### Environment Variables ### +.env + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..1ad897d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,23 @@ +version: '3.8' + +services: + postgres: + image: postgres:17-alpine + container_name: performance-postgres + environment: + POSTGRES_DB: performance_db + POSTGRES_USER: postgres + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + ports: + - "5432:5432" + volumes: + - postgres_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + interval: 10s + timeout: 5s + retries: 5 + +volumes: + postgres_data: + diff --git a/pom.xml b/pom.xml index b01fdac..ca07242 100644 --- a/pom.xml +++ b/pom.xml @@ -32,45 +32,33 @@ org.springframework.boot - spring-boot-starter-graphql + spring-boot-starter-jdbc - org.springframework.boot - spring-boot-starter-webmvc + org.projectlombok + lombok + provided org.springframework.boot - spring-boot-starter-data-jpa - - - org.postgresql - postgresql - runtime - - - org.liquibase - liquibase-core + spring-boot-starter-webmvc - - org.projectlombok - lombok - true + org.springframework.boot + spring-boot-starter-liquibase org.springframework.boot - spring-boot-starter-graphql-test - test + spring-boot-starter-data-jpa org.springframework.boot - spring-boot-starter-webmvc-test - test + spring-boot-starter-test - org.projectlombok - lombok - provided + org.postgresql + postgresql + runtime @@ -100,21 +88,6 @@ - - org.liquibase - liquibase-maven-plugin - - src/main/resources/application.properties - src/main/resources/db/changelog/db.changelog-master.yaml - - - - org.postgresql - postgresql - ${postgresql.version} - - - diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 75b267f..f3061ec 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -3,20 +3,19 @@ spring.application.name=k6-performance-test-poc # PostgreSQL Configuration spring.datasource.url=jdbc:postgresql://localhost:5432/performance_db spring.datasource.username=postgres -spring.datasource.password=postgres +spring.datasource.password=${POSTGRES_PASSWORD:postgres} spring.datasource.driver-class-name=org.postgresql.Driver # JPA Configuration -spring.jpa.hibernate.ddl-auto=validate +spring.jpa.hibernate.ddl-auto=none spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect spring.jpa.properties.hibernate.format_sql=true # Liquibase Configuration -spring.liquibase.change-log=classpath:db/changelog/db.changelog-master.yaml spring.liquibase.enabled=true -spring.liquibase.drop-first=false +spring.liquibase.change-log=classpath:db/changelog/db.changelog-master.xml # Logging -logging.level.liquibase=INFO +logging.level.liquibase=info logging.level.org.hibernate=INFO diff --git a/src/main/resources/db/changelog/changes/001-create-products-table.xml b/src/main/resources/db/changelog/changes/001-create-products-table.xml new file mode 100644 index 0000000..7b99e2c --- /dev/null +++ b/src/main/resources/db/changelog/changes/001-create-products-table.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/db/changelog/changes/001-create-products-table.yaml b/src/main/resources/db/changelog/changes/001-create-products-table.yaml deleted file mode 100644 index d317759..0000000 --- a/src/main/resources/db/changelog/changes/001-create-products-table.yaml +++ /dev/null @@ -1,55 +0,0 @@ -databaseChangeLog: - - changeSet: - id: 001-create-products-table - author: performance-poc - changes: - - createTable: - tableName: products - columns: - - column: - name: id - type: BIGSERIAL - constraints: - primaryKey: true - nullable: false - - column: - name: name - type: VARCHAR(255) - constraints: - nullable: false - - column: - name: description - type: TEXT - - column: - name: price - type: DECIMAL(19,2) - constraints: - nullable: false - - column: - name: quantity - type: INTEGER - constraints: - nullable: false - - column: - name: created_at - type: TIMESTAMP - constraints: - nullable: false - - column: - name: updated_at - type: TIMESTAMP - constraints: - nullable: false - - createIndex: - indexName: idx_products_name - tableName: products - columns: - - column: - name: name - rollback: - - dropIndex: - indexName: idx_products_name - tableName: products - - dropTable: - tableName: products - diff --git a/src/main/resources/db/changelog/changes/002-insert-sample-products.xml b/src/main/resources/db/changelog/changes/002-insert-sample-products.xml new file mode 100644 index 0000000..e03ddb6 --- /dev/null +++ b/src/main/resources/db/changelog/changes/002-insert-sample-products.xml @@ -0,0 +1,22 @@ + + + + + + + + + name IN ('Laptop', 'Wireless Mouse', 'Mechanical Keyboard') + + + + + + diff --git a/src/main/resources/db/changelog/changes/002-insert-sample-products.yaml b/src/main/resources/db/changelog/changes/002-insert-sample-products.yaml deleted file mode 100644 index 2bea8fa..0000000 --- a/src/main/resources/db/changelog/changes/002-insert-sample-products.yaml +++ /dev/null @@ -1,73 +0,0 @@ -databaseChangeLog: - - changeSet: - id: 002-insert-sample-products - author: performance-poc - changes: - - insert: - tableName: products - columns: - - column: - name: name - value: "Laptop" - - column: - name: description - value: "High-performance laptop for developers" - - column: - name: price - valueNumeric: 1299.99 - - column: - name: quantity - valueNumeric: 10 - - column: - name: created_at - valueDate: now() - - column: - name: updated_at - valueDate: now() - - insert: - tableName: products - columns: - - column: - name: name - value: "Wireless Mouse" - - column: - name: description - value: "Ergonomic wireless mouse" - - column: - name: price - valueNumeric: 29.99 - - column: - name: quantity - valueNumeric: 50 - - column: - name: created_at - valueDate: now() - - column: - name: updated_at - valueDate: now() - - insert: - tableName: products - columns: - - column: - name: name - value: "Mechanical Keyboard" - - column: - name: description - value: "RGB mechanical keyboard with blue switches" - - column: - name: price - valueNumeric: 149.99 - - column: - name: quantity - valueNumeric: 25 - - column: - name: created_at - valueDate: now() - - column: - name: updated_at - valueDate: now() - rollback: - - delete: - tableName: products - where: name IN ('Laptop', 'Wireless Mouse', 'Mechanical Keyboard') - diff --git a/src/main/resources/db/changelog/db.changelog-master.xml b/src/main/resources/db/changelog/db.changelog-master.xml new file mode 100644 index 0000000..77acc92 --- /dev/null +++ b/src/main/resources/db/changelog/db.changelog-master.xml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/src/main/resources/db/changelog/db.changelog-master.yaml b/src/main/resources/db/changelog/db.changelog-master.yaml deleted file mode 100644 index 58d0f91..0000000 --- a/src/main/resources/db/changelog/db.changelog-master.yaml +++ /dev/null @@ -1,6 +0,0 @@ -databaseChangeLog: - - include: - file: db/changelog/changes/001-create-products-table.yaml - - include: - file: db/changelog/changes/002-insert-sample-products.yaml - diff --git a/src/main/resources/db/sql/002-insert-sample-products.sql b/src/main/resources/db/sql/002-insert-sample-products.sql new file mode 100644 index 0000000..f8927f3 --- /dev/null +++ b/src/main/resources/db/sql/002-insert-sample-products.sql @@ -0,0 +1,607 @@ +-- Insert sample products for performance testing +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Laptop', 'High-performance laptop for developers', 1299.99, 10, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Wireless Mouse', 'Ergonomic wireless mouse', 29.99, 50, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Mechanical Keyboard', 'RGB mechanical keyboard with blue switches', 149.99, 25, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('USB-C Hub', '7-in-1 USB-C hub with HDMI and ethernet', 49.99, 35, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Monitor 27"', '4K UHD 27-inch monitor with IPS panel', 399.99, 15, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Webcam HD', '1080p HD webcam with auto-focus', 79.99, 40, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Desk Lamp', 'LED desk lamp with adjustable brightness', 34.99, 60, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Headphones', 'Noise-cancelling over-ear headphones', 199.99, 30, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('External SSD 1TB', 'Portable external SSD with 1TB storage', 119.99, 45, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Gaming Chair', 'Ergonomic gaming chair with lumbar support', 249.99, 20, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Microphone', 'USB condenser microphone for streaming', 89.99, 25, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Tablet 10"', '10-inch tablet with 128GB storage', 329.99, 18, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Smartphone', '5G smartphone with 256GB storage', 799.99, 12, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Smartwatch', 'Fitness smartwatch with heart rate monitor', 199.99, 28, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Wireless Earbuds', 'True wireless earbuds with charging case', 149.99, 55, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Portable Charger', '20000mAh power bank with fast charging', 39.99, 70, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('HDMI Cable 2m', 'High-speed HDMI 2.1 cable', 19.99, 100, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Graphics Card', 'High-end graphics card for gaming', 599.99, 8, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('RAM 16GB', 'DDR4 16GB RAM stick 3200MHz', 69.99, 42, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('SSD 500GB', 'NVMe M.2 SSD 500GB', 59.99, 38, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Motherboard', 'ATX motherboard with WiFi', 179.99, 15, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('CPU Cooler', 'RGB CPU cooler with 120mm fan', 44.99, 32, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Power Supply', '750W modular power supply 80+ Gold', 109.99, 22, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('PC Case', 'Mid-tower ATX case with tempered glass', 89.99, 18, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Monitor Arm', 'Dual monitor arm stand', 69.99, 27, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Keyboard Wrist Rest', 'Memory foam keyboard wrist rest', 14.99, 75, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Mouse Pad XL', 'Extended gaming mouse pad', 24.99, 65, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Cable Management Kit', 'Cable management sleeves and clips', 16.99, 80, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Laptop Stand', 'Aluminum laptop stand with cooling', 39.99, 44, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Docking Station', 'Universal laptop docking station', 159.99, 16, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Bluetooth Speaker', 'Portable waterproof Bluetooth speaker', 59.99, 48, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Security Camera', 'WiFi security camera with night vision', 79.99, 33, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Smart Bulb', 'RGB smart LED bulb', 19.99, 90, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Router WiFi 6', 'Dual-band WiFi 6 router', 129.99, 24, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Network Switch', '8-port gigabit network switch', 49.99, 36, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('UPS Battery Backup', '1500VA UPS with surge protection', 149.99, 14, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Printer', 'Wireless all-in-one inkjet printer', 179.99, 19, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Scanner', 'Portable document scanner', 99.99, 21, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Drawing Tablet', 'Graphics drawing tablet with pen', 249.99, 13, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('VR Headset', 'Virtual reality headset', 399.99, 9, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Drone', 'Camera drone with 4K video', 499.99, 7, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Action Camera', 'Waterproof 4K action camera', 199.99, 17, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Tripod', 'Professional camera tripod', 79.99, 26, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Ring Light', 'LED ring light for video', 49.99, 39, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Green Screen', 'Collapsible green screen backdrop', 69.99, 22, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Capture Card', 'HD video capture card for streaming', 139.99, 15, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Stream Deck', 'Customizable stream deck controller', 149.99, 11, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('USB Hub', '10-port USB 3.0 hub', 34.99, 41, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Ethernet Cable 10m', 'Cat 6 ethernet cable', 15.99, 95, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Office Chair', 'Ergonomic mesh office chair with adjustable arms', 279.99, 14, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Standing Desk', 'Electric height-adjustable standing desk', 449.99, 9, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Desk Organizer', 'Bamboo desk organizer with charging station', 34.99, 52, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Whiteboard', 'Magnetic dry-erase whiteboard 48x36', 89.99, 16, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Noise Machine', 'White noise machine for better focus', 44.99, 38, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Footrest', 'Adjustable ergonomic footrest', 29.99, 47, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Cable Tray', 'Under desk cable management tray', 22.99, 61, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Monitor Light Bar', 'E-reading LED monitor light bar', 79.99, 29, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Laptop Backpack', 'Water-resistant laptop backpack with USB port', 49.99, 43, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Wireless Presenter', 'Wireless presenter remote with laser pointer', 24.99, 56, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Document Camera', 'HD document camera for presentations', 199.99, 11, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Conference Speaker', 'Bluetooth speakerphone for video calls', 149.99, 23, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Webcam Privacy Cover', 'Sliding webcam privacy cover 3-pack', 8.99, 150, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Blue Light Glasses', 'Computer glasses with blue light filtering', 29.99, 68, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Surge Protector', '12-outlet surge protector with USB ports', 39.99, 54, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Label Maker', 'Bluetooth label maker with rechargeable battery', 69.99, 27, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Paper Shredder', 'Cross-cut paper shredder for home office', 79.99, 18, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Desk Fan', 'USB desk fan with adjustable speed', 19.99, 72, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Mini Fridge', 'Compact mini fridge for office', 129.99, 8, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Air Purifier', 'HEPA air purifier for desk', 89.99, 31, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Desk Pad', 'Large leather desk pad protector', 34.99, 59, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Monitor Privacy Screen', '24-inch monitor privacy filter', 44.99, 36, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Pen Holder', 'Rotating mesh pen holder with drawer', 16.99, 83, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Calculator', 'Scientific calculator with large display', 24.99, 64, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Stapler', 'Heavy-duty stapler with staple remover', 18.99, 77, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Tape Dispenser', 'Weighted tape dispenser with non-slip base', 12.99, 89, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('File Cabinet', '2-drawer locking file cabinet', 159.99, 12, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Bookshelf', '5-tier wooden bookshelf', 119.99, 15, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Floor Mat', 'Anti-fatigue standing desk mat', 39.99, 42, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Task Light', 'LED clamp task light with dimmer', 32.99, 48, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Wireless Charger', 'Fast wireless charging pad', 24.99, 66, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Phone Stand', 'Adjustable phone stand for desk', 14.99, 91, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Tablet Sleeve', 'Protective tablet sleeve with pocket', 19.99, 58, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Screen Cleaner Kit', 'Screen cleaning spray and microfiber cloths', 12.99, 102, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Compressed Air Duster', 'Electric compressed air duster', 34.99, 45, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Anti-Static Wrist Strap', 'ESD anti-static wrist strap', 9.99, 73, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Screwdriver Set', 'Precision screwdriver set 25-piece', 19.99, 55, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Cable Clips', 'Adhesive cable clips organizer 50-pack', 7.99, 128, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Velcro Cable Ties', 'Reusable cable ties 100-pack', 11.99, 97, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Webcam Cover Slide', 'Ultra-thin webcam cover for laptops 6-pack', 6.99, 145, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Laptop Cooling Pad', 'Laptop cooling pad with 5 fans', 29.99, 37, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Gaming Mouse', 'RGB gaming mouse with programmable buttons', 59.99, 34, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Gaming Headset', 'Surround sound gaming headset with mic', 89.99, 28, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Mousepad RGB', 'Large RGB gaming mousepad', 39.99, 49, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Controller', 'Wireless game controller for PC', 49.99, 32, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Racing Wheel', 'Force feedback racing wheel and pedals', 299.99, 6, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Flight Stick', 'USB flight joystick for simulators', 79.99, 19, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Mechanical Numpad', 'Wireless mechanical numpad', 44.99, 41, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Keycap Set', 'PBT keycap set for mechanical keyboards', 39.99, 26, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Switch Tester', 'Mechanical keyboard switch tester kit', 14.99, 62, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Desk Shelf Organizer', 'Monitor stand with desk organizer', 54.99, 30, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Ergonomic Mouse', 'Vertical ergonomic mouse for wrist comfort', 39.99, 46, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Trackball Mouse', 'Wireless trackball mouse with precision', 54.99, 33, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Presentation Clicker', 'Remote presentation pointer with timer', 29.99, 51, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Digital Notepad', 'Smart digital notepad with cloud sync', 129.99, 19, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('E-Reader', '7-inch e-ink reader with backlight', 139.99, 25, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Portable Monitor', '15.6-inch portable USB-C monitor', 199.99, 22, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Ultrawide Monitor', '34-inch curved ultrawide monitor', 549.99, 11, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Monitor Calibrator', 'Professional monitor color calibrator', 169.99, 8, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Light Therapy Lamp', '10000 Lux therapy lamp for desk', 49.99, 37, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Humidifier', 'USB desk humidifier with LED light', 24.99, 63, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Coffee Warmer', 'Electric mug warmer for desk', 19.99, 71, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Insulated Tumbler', 'Stainless steel insulated tumbler 30oz', 29.99, 85, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Water Bottle', 'Smart water bottle with hydration tracking', 44.99, 41, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Posture Corrector', 'Adjustable back posture corrector', 24.99, 56, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Lumbar Support', 'Memory foam lumbar support cushion', 34.99, 49, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Seat Cushion', 'Gel-infused memory foam seat cushion', 39.99, 44, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Balance Ball Chair', 'Yoga ball chair with back support', 69.99, 17, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Kneeling Chair', 'Ergonomic kneeling chair', 119.99, 13, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Saddle Stool', 'Adjustable saddle seat stool', 89.99, 16, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Drafting Chair', 'Tall drafting chair for standing desk', 159.99, 12, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Conference Chair', 'Executive conference room chair', 189.99, 20, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Folding Table', 'Portable folding table for workspace', 79.99, 24, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Corner Desk', 'L-shaped corner computer desk', 229.99, 14, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Writing Desk', 'Minimalist writing desk with drawer', 169.99, 18, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Gaming Desk', 'RGB gaming desk with cable management', 299.99, 10, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Desk Converter', 'Standing desk converter riser', 139.99, 21, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Monitor Shelf', 'Wooden monitor stand shelf', 29.99, 57, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Drawer Organizer', 'Expandable drawer organizer set', 18.99, 74, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Desktop Shelf', 'Multi-tier desktop storage shelf', 44.99, 39, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Magazine Holder', 'Mesh desktop magazine holder', 14.99, 66, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Letter Tray', 'Stackable letter tray organizer 3-pack', 19.99, 69, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Business Card Holder', 'Professional business card holder desk', 12.99, 81, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Sticky Note Dispenser', 'Pop-up note dispenser for desk', 9.99, 93, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Pencil Sharpener', 'Electric pencil sharpener', 16.99, 58, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Hole Punch', '3-hole punch for documents', 14.99, 62, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Paper Clips Box', 'Assorted paper clips 500-count', 6.99, 112, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Binder Clips', 'Assorted binder clips 200-count', 8.99, 98, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Rubber Bands', 'Rubber bands assorted sizes 1lb', 7.99, 105, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Index Cards', 'Ruled index cards 500-count', 9.99, 87, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Sticky Notes Pack', 'Colorful sticky notes variety pack', 11.99, 94, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Legal Pads', 'Yellow legal pads 12-pack', 18.99, 76, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Notebook Set', 'Spiral notebooks 5-subject 3-pack', 14.99, 69, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Planner', 'Weekly planner organizer', 24.99, 52, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Daily Journal', 'Leather-bound daily journal', 34.99, 38, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Clipboard', 'Heavy-duty clipboard with storage', 12.99, 64, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Presentation Binder', '3-ring presentation binder with pockets', 16.99, 55, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Sheet Protectors', 'Clear sheet protectors 100-pack', 11.99, 78, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('File Folders', 'Manila file folders 100-count', 13.99, 82, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Hanging Folders', 'Hanging file folders 25-pack', 15.99, 71, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Document Box', 'Portable document storage box', 19.99, 48, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Laminator', 'Thermal laminator machine with pouches', 49.99, 29, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Binding Machine', 'Comb binding machine with combs', 69.99, 17, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Badge Holder', 'ID badge holder with lanyard 10-pack', 12.99, 86, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Name Tags', 'Self-adhesive name tags 200-count', 8.99, 101, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Address Labels', 'Printable address labels 3000-count', 14.99, 68, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Shipping Labels', 'Self-adhesive shipping labels 500-count', 16.99, 59, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Packing Tape', 'Heavy-duty packing tape 6-pack', 15.99, 73, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Scissors', 'Professional office scissors set', 13.99, 79, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Paper Trimmer', '12-inch paper trimmer with ruler', 24.99, 34, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Corner Rounder', 'Desktop corner rounding punch', 18.99, 42, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Envelope Sealer', 'Electric envelope sealer machine', 39.99, 23, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Postage Scale', 'Digital postal scale 55lb capacity', 34.99, 31, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Time Clock', 'Electronic time clock machine', 149.99, 9, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Cash Box', 'Locking cash box with tray', 24.99, 46, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Money Counter', 'Automatic bill counter machine', 179.99, 12, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Counterfeit Detector', 'UV counterfeit money detector', 29.99, 38, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Safe Box', 'Digital safe box for office', 89.99, 16, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Key Cabinet', 'Locking key cabinet 48-key capacity', 34.99, 27, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Wall Clock', 'Large wall clock silent movement', 29.99, 53, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Desk Clock', 'Digital desk clock with temperature', 19.99, 67, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Timer', 'Digital countdown timer for desk', 14.99, 61, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Calendar', 'Desk calendar with monthly planner', 16.99, 58, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Wall Calendar', '12-month wall calendar large format', 12.99, 72, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Dry Erase Markers', 'Chisel tip markers 12-pack assorted', 14.99, 84, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Highlighters', 'Fluorescent highlighters 24-pack', 11.99, 88, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Permanent Markers', 'Fine point permanent markers 12-pack', 9.99, 91, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Ballpoint Pens', 'Blue ballpoint pens 50-pack', 8.99, 96, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Gel Pens', 'Assorted color gel pens 30-pack', 16.99, 65, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Mechanical Pencils', 'Mechanical pencils 0.7mm 12-pack', 7.99, 99, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Colored Pencils', 'Professional colored pencils 48-count', 24.99, 43, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Art Markers', 'Dual-tip art markers 60-color set', 34.99, 28, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Fountain Pen', 'Classic fountain pen with ink cartridges', 44.99, 22, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Stylus Pen', 'Universal stylus pen for touchscreens', 18.99, 54, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Apple Pencil', 'Digital stylus for iPad', 129.99, 21, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Graphics Pen', 'Battery-free graphics pen replacement', 29.99, 35, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Eraser Pack', 'White vinyl erasers 12-pack', 6.99, 107, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Correction Tape', 'Quick-dry correction tape 10-pack', 9.99, 89, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Glue Sticks', 'Washable glue sticks 30-pack', 11.99, 85, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Liquid Glue', 'White school glue 1-gallon', 14.99, 51, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Super Glue', 'Precision super glue 12-pack', 12.99, 76, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Double-Sided Tape', 'Heavy-duty double-sided tape roll', 8.99, 92, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Washi Tape Set', 'Decorative washi tape 48-roll set', 19.99, 47, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Masking Tape', 'Painters masking tape 6-pack', 13.99, 68, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Duct Tape', 'Heavy-duty duct tape silver 3-pack', 16.99, 63, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Push Pins', 'Colorful push pins 500-count', 7.99, 103, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Thumbtacks', 'Clear thumbtacks 400-count', 6.99, 109, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Cork Board', 'Framed cork bulletin board 36x24', 29.99, 32, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Fabric Bulletin Board', 'Decorative fabric bulletin board', 34.99, 28, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Magnetic Board', 'Magnetic whiteboard 48x36', 79.99, 19, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Glass Board', 'Tempered glass dry-erase board', 119.99, 13, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Easel Pad', 'Flip chart easel pad 27x34 50-sheets', 24.99, 36, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + +INSERT INTO products (name, description, price, quantity, created_at, updated_at) +VALUES ('Presentation Easel', 'Adjustable tripod presentation easel', 44.99, 15, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); + diff --git a/src/test/java/com/k6performancetestpoc/k6/test.js b/src/test/java/com/k6performancetestpoc/k6/test.js index efcd3da..b25e8f0 100644 --- a/src/test/java/com/k6performancetestpoc/k6/test.js +++ b/src/test/java/com/k6performancetestpoc/k6/test.js @@ -3,11 +3,11 @@ import { sleep, check } from 'k6'; // test configuration export const options = { - vus: 10, // simulate concurrent virtual users + vus: 400, // simulate concurrent virtual users duration: '30s', thresholds: { - http_req_duration: ['p(95)<500'], // 95% of requests must complete under 500ms + http_req_duration: ['p(95)<200'], // 95% of requests must complete under 200ms http_req_failed: ['rate<0.01'] // less than 1% request failure rate } };