diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index 2cc340dd32..0b607cc35f 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -5,11 +5,6 @@ on:
branches:
- main
- develop
- pull_request:
- types: [closed]
- branches:
- - main
- - develop
workflow_dispatch:
inputs:
environment:
@@ -30,8 +25,6 @@ jobs:
backend:
name: Deploy Backend
runs-on: ubuntu-latest
- # Only run this job when a PR is merged (not when closed without merging)
- if: github.event_name != 'pull_request' || github.event.pull_request.merged == true
steps:
- uses: actions/checkout@v3
@@ -67,7 +60,7 @@ jobs:
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
echo "VAPOR_ENV=${{ github.event.inputs.environment }}" >> "$GITHUB_ENV"
echo "TEST_MODE=${{ github.event.inputs.test_mode }}" >> "$GITHUB_ENV"
- elif [[ "${{ github.base_ref }}" == "develop" || "${{ github.ref_name }}" == "develop" ]]; then
+ elif [[ "${{ github.ref_name }}" == "develop" ]]; then
echo "VAPOR_ENV=staging" >> "$GITHUB_ENV"
echo "TEST_MODE=false" >> "$GITHUB_ENV"
else
@@ -99,8 +92,6 @@ jobs:
name: Deploy Frontend
runs-on: ubuntu-latest
needs: backend
- # Only run this job when a PR is merged (not when closed without merging)
- if: github.event_name != 'pull_request' || github.event.pull_request.merged == true
steps:
- uses: actions/checkout@v3
@@ -114,7 +105,7 @@ jobs:
echo "DO_APP_ID=${{ secrets.DIGITALOCEAN_PRODUCTION_APP_ID }}" >> "$GITHUB_ENV"
fi
echo "TEST_MODE=${{ github.event.inputs.test_mode }}" >> "$GITHUB_ENV"
- elif [[ "${{ github.base_ref }}" == "develop" || "${{ github.ref_name }}" == "develop" ]]; then
+ elif [[ "${{ github.ref_name }}" == "develop" ]]; then
echo "DO_APP_ID=${{ secrets.DIGITALOCEAN_STAGING_APP_ID }}" >> "$GITHUB_ENV"
echo "TEST_MODE=false" >> "$GITHUB_ENV"
else
diff --git a/backend/app/Exports/OrdersExport.php b/backend/app/Exports/OrdersExport.php
index ea34a35a2d..d6dc8c57da 100644
--- a/backend/app/Exports/OrdersExport.php
+++ b/backend/app/Exports/OrdersExport.php
@@ -58,7 +58,7 @@ public function headings(): array
__('Currency'),
__('Created At'),
__('Public ID'),
- __('Payment Gateway'),
+ __('Payment Provider'),
__('Is Partially Refunded'),
__('Is Fully Refunded'),
__('Is Free Order'),
@@ -101,7 +101,7 @@ public function map($order): array
$order->getCurrency(),
Carbon::parse($order->getCreatedAt())->format('Y-m-d H:i:s'),
$order->getPublicId(),
- $order->getPaymentGateway(),
+ $order->getPaymentProvider(),
$order->isPartiallyRefunded(),
$order->isFullyRefunded(),
$order->isFreeOrder(),
diff --git a/backend/app/Http/Kernel.php b/backend/app/Http/Kernel.php
index c8fbb3bae7..07e3eeb69d 100644
--- a/backend/app/Http/Kernel.php
+++ b/backend/app/Http/Kernel.php
@@ -12,6 +12,7 @@
use HiEvents\Http\Middleware\TrimStrings;
use HiEvents\Http\Middleware\TrustProxies;
use HiEvents\Http\Middleware\ValidateSignature;
+use HiEvents\Http\Middleware\VaporBinaryResponseMiddleware;
use HiEvents\Http\Middleware\VerifyCsrfToken;
use Illuminate\Auth\Middleware\AuthenticateWithBasicAuth;
use Illuminate\Auth\Middleware\Authorize;
@@ -47,6 +48,7 @@ class Kernel extends HttpKernel
TrimStrings::class,
ConvertEmptyStringsToNull::class,
HandleDeprecatedTimezones::class,
+ VaporBinaryResponseMiddleware::class,
];
/**
diff --git a/backend/app/Http/Middleware/VaporBinaryResponseMiddleware.php b/backend/app/Http/Middleware/VaporBinaryResponseMiddleware.php
new file mode 100644
index 0000000000..36c1955913
--- /dev/null
+++ b/backend/app/Http/Middleware/VaporBinaryResponseMiddleware.php
@@ -0,0 +1,22 @@
+headers->set('X-Vapor-Base64-Encode', 'True');
+ }
+
+ return $response;
+ }
+}
diff --git a/backend/app/Services/Application/Handlers/Product/EditProductHandler.php b/backend/app/Services/Application/Handlers/Product/EditProductHandler.php
index ae02ebe300..5044685eda 100644
--- a/backend/app/Services/Application/Handlers/Product/EditProductHandler.php
+++ b/backend/app/Services/Application/Handlers/Product/EditProductHandler.php
@@ -94,10 +94,6 @@ private function updateProduct(UpsertProductDTO $productsData, array $where): Pr
attributes: [
'title' => $productsData->title,
'type' => $productsData->type->name,
- 'order' => $this->productOrderingService->getOrderForNewProduct(
- eventId: $productsData->event_id,
- productCategoryId: $productCategory->getId(),
- ),
'sale_start_date' => $productsData->sale_start_date
? DateHelper::convertToUTC($productsData->sale_start_date, $event->getTimezone())
: null,
diff --git a/frontend/src/components/routes/event/orders.tsx b/frontend/src/components/routes/event/orders.tsx
index f2767e6dfb..619c6ed3f8 100644
--- a/frontend/src/components/routes/event/orders.tsx
+++ b/frontend/src/components/routes/event/orders.tsx
@@ -1,39 +1,38 @@
-import React, {useEffect, useState} from "react";
-import { useParams } from "react-router";
-import { Button } from "@mantine/core";
-import { IconDownload } from "@tabler/icons-react";
-import { t } from "@lingui/macro";
-import { useGetEvent } from "../../../queries/useGetEvent";
-import { useGetEventOrders } from "../../../queries/useGetEventOrders";
-import { PageTitle } from "../../common/PageTitle";
-import { PageBody } from "../../common/PageBody";
-import { OrdersTable } from "../../common/OrdersTable";
-import { SearchBarWrapper } from "../../common/SearchBar";
-import { Pagination } from "../../common/Pagination";
-import { ToolBar } from "../../common/ToolBar";
-import { useFilterQueryParamSync } from "../../../hooks/useFilterQueryParamSync";
-import { IdParam, QueryFilters, QueryFilterOperator } from "../../../types";
-import { TableSkeleton } from "../../common/TableSkeleton";
-import { orderClient } from "../../../api/order.client";
-import { downloadBinary } from "../../../utilites/download";
-import { showError } from "../../../utilites/notifications";
+import React, {useState} from "react";
+import {useParams} from "react-router";
+import {Button} from "@mantine/core";
+import {IconDownload} from "@tabler/icons-react";
+import {t} from "@lingui/macro";
+import {useGetEvent} from "../../../queries/useGetEvent";
+import {useGetEventOrders} from "../../../queries/useGetEventOrders";
+import {PageTitle} from "../../common/PageTitle";
+import {PageBody} from "../../common/PageBody";
+import {OrdersTable} from "../../common/OrdersTable";
+import {SearchBarWrapper} from "../../common/SearchBar";
+import {Pagination} from "../../common/Pagination";
+import {ToolBar} from "../../common/ToolBar";
+import {useFilterQueryParamSync} from "../../../hooks/useFilterQueryParamSync";
+import {IdParam, QueryFilterOperator, QueryFilters} from "../../../types";
+import {TableSkeleton} from "../../common/TableSkeleton";
+import {orderClient} from "../../../api/order.client";
+import {downloadBinary} from "../../../utilites/download";
import {FilterModal, FilterOption} from "../../common/FilterModal";
import {withLoadingNotification} from "../../../utilites/withLoadingNotification.tsx";
const orderStatuses = [
- { label: t`Completed`, value: 'COMPLETED' },
- { label: t`Cancelled`, value: 'CANCELLED' },
- { label: t`Awaiting Offline Payment`, value: 'AWAITING_OFFLINE_PAYMENT' },
+ {label: t`Completed`, value: 'COMPLETED'},
+ {label: t`Cancelled`, value: 'CANCELLED'},
+ {label: t`Awaiting Offline Payment`, value: 'AWAITING_OFFLINE_PAYMENT'},
];
const refundStatuses = [
- { label: t`Refunded`, value: 'REFUNDED' },
- { label: t`Partially Refunded`, value: 'PARTIALLY_REFUNDED' },
+ {label: t`Refunded`, value: 'REFUNDED'},
+ {label: t`Partially Refunded`, value: 'PARTIALLY_REFUNDED'},
];
export const Orders: React.FC = () => {
- const { eventId } = useParams<{ eventId: string }>();
- const { data: event } = useGetEvent(eventId);
+ const {eventId} = useParams<{ eventId: string }>();
+ const {data: event} = useGetEvent(eventId);
const [searchParams, setSearchParams] = useFilterQueryParamSync();
const ordersQuery = useGetEventOrders(eventId, searchParams as QueryFilters);
const orders = ordersQuery?.data?.data;
@@ -61,10 +60,10 @@ export const Orders: React.FC = () => {
filterFields: {
...(searchParams.filterFields || {}),
status: values.status?.length > 0
- ? { operator: QueryFilterOperator.In, value: values.status }
+ ? {operator: QueryFilterOperator.In, value: values.status}
: undefined,
refund_status: values.refund_status?.length > 0
- ? { operator: QueryFilterOperator.In, value: values.refund_status }
+ ? {operator: QueryFilterOperator.In, value: values.refund_status}
: undefined
}
};
@@ -82,26 +81,26 @@ export const Orders: React.FC = () => {
const handleExport = async (eventId: IdParam) => {
await withLoadingNotification(async () => {
- setDownloadPending(true);
- const blob = await orderClient.exportOrders(eventId);
- downloadBinary(blob, 'orders.xlsx');
- },
- {
- loading: {
- title: t`Exporting Orders`,
- message: t`Please wait while we prepare your orders for export...`
- },
- success: {
- title: t`Orders Exported`,
- message: t`Your orders have been exported successfully.`,
- onRun: () => setDownloadPending(false)
+ setDownloadPending(true);
+ const blob = await orderClient.exportOrders(eventId);
+ downloadBinary(blob, 'orders.xlsx');
},
- error: {
- title: t`Failed to export orders`,
- message: t`Please try again.`,
- onRun: () => setDownloadPending(false)
- }
- });
+ {
+ loading: {
+ title: t`Exporting Orders`,
+ message: t`Please wait while we prepare your orders for export...`
+ },
+ success: {
+ title: t`Orders Exported`,
+ message: t`Your orders have been exported successfully.`,
+ onRun: () => setDownloadPending(false)
+ },
+ error: {
+ title: t`Failed to export orders`,
+ message: t`Please try again.`,
+ onRun: () => setDownloadPending(false)
+ }
+ });
};
const currentFilters = {
@@ -133,7 +132,7 @@ export const Orders: React.FC = () => {
>
-
+
{orders && event && (
-
+
)}
{!!orders?.length && (
setSearchParams({ pageNumber: value })}
+ onChange={(value) => setSearchParams({pageNumber: value})}
total={Number(pagination?.last_page)}
/>
)}
diff --git a/misc/k6/event-hompage-load-test.js b/misc/k6/event-hompage-load-test.js
index d0e1a99af1..c4679e512d 100644
--- a/misc/k6/event-hompage-load-test.js
+++ b/misc/k6/event-hompage-load-test.js
@@ -3,11 +3,11 @@ import { check, sleep } from 'k6';
export let options = {
vus: 50,
- duration: '60s', // Using '60s' instead of '60000' for clarity
+ duration: '5s',
};
export default function () {
- let res = http.get('https://api.hi.events/public/events/1', {
+ let res = http.get('https://api.hi.events/public/events/2', {
headers: {
'Accept': 'application/json',
},