From 7d32363e4e39aeb87d9afafa4817fee078789c17 Mon Sep 17 00:00:00 2001
From: loischen68 <a8283626@gmail.com>
Date: Fri, 3 Jan 2025 08:43:13 +0800
Subject: [PATCH] feat: add programPackagePlanCard CountDownTimeBlock

---
 .../package/ProgramPackagePlanCard.tsx        |  14 +
 src/hasura.d.ts                               | 872 +++++++++++++++++-
 src/hooks/programPackage.ts                   |   2 +
 src/types/programPackage.ts                   |   1 +
 4 files changed, 857 insertions(+), 32 deletions(-)

diff --git a/src/components/package/ProgramPackagePlanCard.tsx b/src/components/package/ProgramPackagePlanCard.tsx
index 5e6d73f63..a5fb5bddf 100644
--- a/src/components/package/ProgramPackagePlanCard.tsx
+++ b/src/components/package/ProgramPackagePlanCard.tsx
@@ -8,6 +8,7 @@ import { ProgramPackagePlanProps } from '../../types/programPackage'
 import PaymentButton from '../common/PaymentButton'
 import PriceLabel from 'lodestar-app-element/src/components/labels/PriceLabel'
 import { BraftContent } from 'lodestar-app-element/src/components/common/StyledBraftEditor'
+import CountDownTimeBlock from '../common/CountDownTimeBlock'
 
 const StyledCard = styled.div`
   padding: 1.5rem;
@@ -33,6 +34,13 @@ const StyledEnrollment = styled.div`
   letter-spacing: 0.18px;
 `
 
+const StyledCountDownBlock = styled.div`
+  margin-top: 20px;
+  span {
+    font-size: 14px;
+  }
+`
+
 const ProgramPackagePlanCard: React.VFC<
   ProgramPackagePlanProps & {
     programPackageId: string
@@ -46,6 +54,7 @@ const ProgramPackagePlanCard: React.VFC<
   description,
   isSubscription,
   isParticipantsVisible,
+  isCountdownTimerVisible,
   periodAmount,
   periodType,
   listPrice,
@@ -71,6 +80,11 @@ const ProgramPackagePlanCard: React.VFC<
         periodType={isSubscription ? periodType : undefined}
         periodAmount={isSubscription ? periodAmount : undefined}
       />
+      {isCountdownTimerVisible && soldAt && isOnSale && (
+        <StyledCountDownBlock>
+          <CountDownTimeBlock expiredAt={soldAt} />
+        </StyledCountDownBlock>
+      )}
       <Divider className="my-3" />
       {!isSubscription && periodAmount && periodType && (
         <StyledHighlight className="mb-3">
diff --git a/src/hasura.d.ts b/src/hasura.d.ts
index ddc54b371..1cd1aa9e3 100644
--- a/src/hasura.d.ts
+++ b/src/hasura.d.ts
@@ -44025,6 +44025,311 @@ export type member_public_variance_fields = {
   has_backstage_enter_permission?: Maybe<Scalars['Float']>;
 };
 
+/** The ratings given by each manager for each student. */
+export type member_rating = {
+  __typename?: 'member_rating';
+  created_at: Scalars['timestamptz'];
+  id: Scalars['uuid'];
+  /** An array relationship */
+  manager: Array<member>;
+  /** An aggregate relationship */
+  manager_aggregate: member_aggregate;
+  manager_id: Scalars['String'];
+  /** fetch data from the table: "member" */
+  member: Array<member>;
+  /** fetch aggregated fields from the table: "member" */
+  member_aggregate: member_aggregate;
+  member_id: Scalars['String'];
+  rating: Scalars['numeric'];
+  updated_at: Scalars['timestamptz'];
+};
+
+
+/** The ratings given by each manager for each student. */
+export type member_ratingmanagerArgs = {
+  distinct_on?: InputMaybe<Array<member_select_column>>;
+  limit?: InputMaybe<Scalars['Int']>;
+  offset?: InputMaybe<Scalars['Int']>;
+  order_by?: InputMaybe<Array<member_order_by>>;
+  where?: InputMaybe<member_bool_exp>;
+};
+
+
+/** The ratings given by each manager for each student. */
+export type member_ratingmanager_aggregateArgs = {
+  distinct_on?: InputMaybe<Array<member_select_column>>;
+  limit?: InputMaybe<Scalars['Int']>;
+  offset?: InputMaybe<Scalars['Int']>;
+  order_by?: InputMaybe<Array<member_order_by>>;
+  where?: InputMaybe<member_bool_exp>;
+};
+
+
+/** The ratings given by each manager for each student. */
+export type member_ratingmemberArgs = {
+  distinct_on?: InputMaybe<Array<member_select_column>>;
+  limit?: InputMaybe<Scalars['Int']>;
+  offset?: InputMaybe<Scalars['Int']>;
+  order_by?: InputMaybe<Array<member_order_by>>;
+  where?: InputMaybe<member_bool_exp>;
+};
+
+
+/** The ratings given by each manager for each student. */
+export type member_ratingmember_aggregateArgs = {
+  distinct_on?: InputMaybe<Array<member_select_column>>;
+  limit?: InputMaybe<Scalars['Int']>;
+  offset?: InputMaybe<Scalars['Int']>;
+  order_by?: InputMaybe<Array<member_order_by>>;
+  where?: InputMaybe<member_bool_exp>;
+};
+
+/** aggregated selection of "member_rating" */
+export type member_rating_aggregate = {
+  __typename?: 'member_rating_aggregate';
+  aggregate?: Maybe<member_rating_aggregate_fields>;
+  nodes: Array<member_rating>;
+};
+
+/** aggregate fields of "member_rating" */
+export type member_rating_aggregate_fields = {
+  __typename?: 'member_rating_aggregate_fields';
+  avg?: Maybe<member_rating_avg_fields>;
+  count: Scalars['Int'];
+  max?: Maybe<member_rating_max_fields>;
+  min?: Maybe<member_rating_min_fields>;
+  stddev?: Maybe<member_rating_stddev_fields>;
+  stddev_pop?: Maybe<member_rating_stddev_pop_fields>;
+  stddev_samp?: Maybe<member_rating_stddev_samp_fields>;
+  sum?: Maybe<member_rating_sum_fields>;
+  var_pop?: Maybe<member_rating_var_pop_fields>;
+  var_samp?: Maybe<member_rating_var_samp_fields>;
+  variance?: Maybe<member_rating_variance_fields>;
+};
+
+
+/** aggregate fields of "member_rating" */
+export type member_rating_aggregate_fieldscountArgs = {
+  columns?: InputMaybe<Array<member_rating_select_column>>;
+  distinct?: InputMaybe<Scalars['Boolean']>;
+};
+
+/** aggregate avg on columns */
+export type member_rating_avg_fields = {
+  __typename?: 'member_rating_avg_fields';
+  rating?: Maybe<Scalars['Float']>;
+};
+
+/** Boolean expression to filter rows from the table "member_rating". All fields are combined with a logical 'AND'. */
+export type member_rating_bool_exp = {
+  _and?: InputMaybe<Array<member_rating_bool_exp>>;
+  _not?: InputMaybe<member_rating_bool_exp>;
+  _or?: InputMaybe<Array<member_rating_bool_exp>>;
+  created_at?: InputMaybe<timestamptz_comparison_exp>;
+  id?: InputMaybe<uuid_comparison_exp>;
+  manager?: InputMaybe<member_bool_exp>;
+  manager_aggregate?: InputMaybe<member_aggregate_bool_exp>;
+  manager_id?: InputMaybe<String_comparison_exp>;
+  member?: InputMaybe<member_bool_exp>;
+  member_aggregate?: InputMaybe<member_aggregate_bool_exp>;
+  member_id?: InputMaybe<String_comparison_exp>;
+  rating?: InputMaybe<numeric_comparison_exp>;
+  updated_at?: InputMaybe<timestamptz_comparison_exp>;
+};
+
+/** unique or primary key constraints on table "member_rating" */
+export enum member_rating_constraint {
+  /** unique or primary key constraint on columns "member_id", "manager_id" */
+  member_rating_manager_id_member_id_index = 'member_rating_manager_id_member_id_index',
+  /** unique or primary key constraint on columns "member_id", "manager_id" */
+  member_rating_manager_id_member_id_key = 'member_rating_manager_id_member_id_key',
+  /** unique or primary key constraint on columns "id" */
+  member_rating_pkey = 'member_rating_pkey'
+}
+
+/** input type for incrementing numeric columns in table "member_rating" */
+export type member_rating_inc_input = {
+  rating?: InputMaybe<Scalars['numeric']>;
+};
+
+/** input type for inserting data into table "member_rating" */
+export type member_rating_insert_input = {
+  created_at?: InputMaybe<Scalars['timestamptz']>;
+  id?: InputMaybe<Scalars['uuid']>;
+  manager?: InputMaybe<member_arr_rel_insert_input>;
+  manager_id?: InputMaybe<Scalars['String']>;
+  member?: InputMaybe<member_arr_rel_insert_input>;
+  member_id?: InputMaybe<Scalars['String']>;
+  rating?: InputMaybe<Scalars['numeric']>;
+  updated_at?: InputMaybe<Scalars['timestamptz']>;
+};
+
+/** aggregate max on columns */
+export type member_rating_max_fields = {
+  __typename?: 'member_rating_max_fields';
+  created_at?: Maybe<Scalars['timestamptz']>;
+  id?: Maybe<Scalars['uuid']>;
+  manager_id?: Maybe<Scalars['String']>;
+  member_id?: Maybe<Scalars['String']>;
+  rating?: Maybe<Scalars['numeric']>;
+  updated_at?: Maybe<Scalars['timestamptz']>;
+};
+
+/** aggregate min on columns */
+export type member_rating_min_fields = {
+  __typename?: 'member_rating_min_fields';
+  created_at?: Maybe<Scalars['timestamptz']>;
+  id?: Maybe<Scalars['uuid']>;
+  manager_id?: Maybe<Scalars['String']>;
+  member_id?: Maybe<Scalars['String']>;
+  rating?: Maybe<Scalars['numeric']>;
+  updated_at?: Maybe<Scalars['timestamptz']>;
+};
+
+/** response of any mutation on the table "member_rating" */
+export type member_rating_mutation_response = {
+  __typename?: 'member_rating_mutation_response';
+  /** number of rows affected by the mutation */
+  affected_rows: Scalars['Int'];
+  /** data from the rows affected by the mutation */
+  returning: Array<member_rating>;
+};
+
+/** on_conflict condition type for table "member_rating" */
+export type member_rating_on_conflict = {
+  constraint: member_rating_constraint;
+  update_columns?: Array<member_rating_update_column>;
+  where?: InputMaybe<member_rating_bool_exp>;
+};
+
+/** Ordering options when selecting data from "member_rating". */
+export type member_rating_order_by = {
+  created_at?: InputMaybe<order_by>;
+  id?: InputMaybe<order_by>;
+  manager_aggregate?: InputMaybe<member_aggregate_order_by>;
+  manager_id?: InputMaybe<order_by>;
+  member_aggregate?: InputMaybe<member_aggregate_order_by>;
+  member_id?: InputMaybe<order_by>;
+  rating?: InputMaybe<order_by>;
+  updated_at?: InputMaybe<order_by>;
+};
+
+/** primary key columns input for table: member_rating */
+export type member_rating_pk_columns_input = {
+  id: Scalars['uuid'];
+};
+
+/** select columns of table "member_rating" */
+export enum member_rating_select_column {
+  /** column name */
+  created_at = 'created_at',
+  /** column name */
+  id = 'id',
+  /** column name */
+  manager_id = 'manager_id',
+  /** column name */
+  member_id = 'member_id',
+  /** column name */
+  rating = 'rating',
+  /** column name */
+  updated_at = 'updated_at'
+}
+
+/** input type for updating data in table "member_rating" */
+export type member_rating_set_input = {
+  created_at?: InputMaybe<Scalars['timestamptz']>;
+  id?: InputMaybe<Scalars['uuid']>;
+  manager_id?: InputMaybe<Scalars['String']>;
+  member_id?: InputMaybe<Scalars['String']>;
+  rating?: InputMaybe<Scalars['numeric']>;
+  updated_at?: InputMaybe<Scalars['timestamptz']>;
+};
+
+/** aggregate stddev on columns */
+export type member_rating_stddev_fields = {
+  __typename?: 'member_rating_stddev_fields';
+  rating?: Maybe<Scalars['Float']>;
+};
+
+/** aggregate stddev_pop on columns */
+export type member_rating_stddev_pop_fields = {
+  __typename?: 'member_rating_stddev_pop_fields';
+  rating?: Maybe<Scalars['Float']>;
+};
+
+/** aggregate stddev_samp on columns */
+export type member_rating_stddev_samp_fields = {
+  __typename?: 'member_rating_stddev_samp_fields';
+  rating?: Maybe<Scalars['Float']>;
+};
+
+/** Streaming cursor of the table "member_rating" */
+export type member_rating_stream_cursor_input = {
+  /** Stream column input with initial value */
+  initial_value: member_rating_stream_cursor_value_input;
+  /** cursor ordering */
+  ordering?: InputMaybe<cursor_ordering>;
+};
+
+/** Initial value of the column from where the streaming should start */
+export type member_rating_stream_cursor_value_input = {
+  created_at?: InputMaybe<Scalars['timestamptz']>;
+  id?: InputMaybe<Scalars['uuid']>;
+  manager_id?: InputMaybe<Scalars['String']>;
+  member_id?: InputMaybe<Scalars['String']>;
+  rating?: InputMaybe<Scalars['numeric']>;
+  updated_at?: InputMaybe<Scalars['timestamptz']>;
+};
+
+/** aggregate sum on columns */
+export type member_rating_sum_fields = {
+  __typename?: 'member_rating_sum_fields';
+  rating?: Maybe<Scalars['numeric']>;
+};
+
+/** update columns of table "member_rating" */
+export enum member_rating_update_column {
+  /** column name */
+  created_at = 'created_at',
+  /** column name */
+  id = 'id',
+  /** column name */
+  manager_id = 'manager_id',
+  /** column name */
+  member_id = 'member_id',
+  /** column name */
+  rating = 'rating',
+  /** column name */
+  updated_at = 'updated_at'
+}
+
+export type member_rating_updates = {
+  /** increments the numeric columns with given value of the filtered values */
+  _inc?: InputMaybe<member_rating_inc_input>;
+  /** sets the columns of the filtered rows to the given values */
+  _set?: InputMaybe<member_rating_set_input>;
+  /** filter the rows which have to be updated */
+  where: member_rating_bool_exp;
+};
+
+/** aggregate var_pop on columns */
+export type member_rating_var_pop_fields = {
+  __typename?: 'member_rating_var_pop_fields';
+  rating?: Maybe<Scalars['Float']>;
+};
+
+/** aggregate var_samp on columns */
+export type member_rating_var_samp_fields = {
+  __typename?: 'member_rating_var_samp_fields';
+  rating?: Maybe<Scalars['Float']>;
+};
+
+/** aggregate variance on columns */
+export type member_rating_variance_fields = {
+  __typename?: 'member_rating_variance_fields';
+  rating?: Maybe<Scalars['Float']>;
+};
+
 /** select columns of table "member" */
 export enum member_select_column {
   /** column name */
@@ -50417,6 +50722,10 @@ export type mutation_root = {
   delete_member_property?: Maybe<member_property_mutation_response>;
   /** delete single row from the table: "member_property" */
   delete_member_property_by_pk?: Maybe<member_property>;
+  /** delete data from the table: "member_rating" */
+  delete_member_rating?: Maybe<member_rating_mutation_response>;
+  /** delete single row from the table: "member_rating" */
+  delete_member_rating_by_pk?: Maybe<member_rating>;
   /** delete data from the table: "member_shop" */
   delete_member_shop?: Maybe<member_shop_mutation_response>;
   /** delete single row from the table: "member_shop" */
@@ -50559,6 +50868,10 @@ export type mutation_root = {
   delete_permission_by_pk?: Maybe<permission>;
   /** delete data from the table: "permission_group" */
   delete_permission_group?: Maybe<permission_group_mutation_response>;
+  /** delete data from the table: "permission_group_audit_log" */
+  delete_permission_group_audit_log?: Maybe<permission_group_audit_log_mutation_response>;
+  /** delete single row from the table: "permission_group_audit_log" */
+  delete_permission_group_audit_log_by_pk?: Maybe<permission_group_audit_log>;
   /** delete single row from the table: "permission_group" */
   delete_permission_group_by_pk?: Maybe<permission_group>;
   /** delete data from the table: "permission_group_permission" */
@@ -51503,6 +51816,10 @@ export type mutation_root = {
   insert_member_property?: Maybe<member_property_mutation_response>;
   /** insert a single row into the table: "member_property" */
   insert_member_property_one?: Maybe<member_property>;
+  /** insert data into the table: "member_rating" */
+  insert_member_rating?: Maybe<member_rating_mutation_response>;
+  /** insert a single row into the table: "member_rating" */
+  insert_member_rating_one?: Maybe<member_rating>;
   /** insert data into the table: "member_shop" */
   insert_member_shop?: Maybe<member_shop_mutation_response>;
   /** insert a single row into the table: "member_shop" */
@@ -51647,6 +51964,10 @@ export type mutation_root = {
   insert_permission_audit_log_one?: Maybe<permission_audit_log>;
   /** insert data into the table: "permission_group" */
   insert_permission_group?: Maybe<permission_group_mutation_response>;
+  /** insert data into the table: "permission_group_audit_log" */
+  insert_permission_group_audit_log?: Maybe<permission_group_audit_log_mutation_response>;
+  /** insert a single row into the table: "permission_group_audit_log" */
+  insert_permission_group_audit_log_one?: Maybe<permission_group_audit_log>;
   /** insert a single row into the table: "permission_group" */
   insert_permission_group_one?: Maybe<permission_group>;
   /** insert data into the table: "permission_group_permission" */
@@ -52829,6 +53150,12 @@ export type mutation_root = {
   update_member_property_by_pk?: Maybe<member_property>;
   /** update multiples rows of table: "member_property" */
   update_member_property_many?: Maybe<Array<Maybe<member_property_mutation_response>>>;
+  /** update data of the table: "member_rating" */
+  update_member_rating?: Maybe<member_rating_mutation_response>;
+  /** update single row of the table: "member_rating" */
+  update_member_rating_by_pk?: Maybe<member_rating>;
+  /** update multiples rows of table: "member_rating" */
+  update_member_rating_many?: Maybe<Array<Maybe<member_rating_mutation_response>>>;
   /** update data of the table: "member_shop" */
   update_member_shop?: Maybe<member_shop_mutation_response>;
   /** update single row of the table: "member_shop" */
@@ -53041,6 +53368,12 @@ export type mutation_root = {
   update_permission_by_pk?: Maybe<permission>;
   /** update data of the table: "permission_group" */
   update_permission_group?: Maybe<permission_group_mutation_response>;
+  /** update data of the table: "permission_group_audit_log" */
+  update_permission_group_audit_log?: Maybe<permission_group_audit_log_mutation_response>;
+  /** update single row of the table: "permission_group_audit_log" */
+  update_permission_group_audit_log_by_pk?: Maybe<permission_group_audit_log>;
+  /** update multiples rows of table: "permission_group_audit_log" */
+  update_permission_group_audit_log_many?: Maybe<Array<Maybe<permission_group_audit_log_mutation_response>>>;
   /** update single row of the table: "permission_group" */
   update_permission_group_by_pk?: Maybe<permission_group>;
   /** update multiples rows of table: "permission_group" */
@@ -55127,6 +55460,18 @@ export type mutation_rootdelete_member_property_by_pkArgs = {
 };
 
 
+/** mutation root */
+export type mutation_rootdelete_member_ratingArgs = {
+  where: member_rating_bool_exp;
+};
+
+
+/** mutation root */
+export type mutation_rootdelete_member_rating_by_pkArgs = {
+  id: Scalars['uuid'];
+};
+
+
 /** mutation root */
 export type mutation_rootdelete_member_shopArgs = {
   where: member_shop_bool_exp;
@@ -55553,6 +55898,18 @@ export type mutation_rootdelete_permission_groupArgs = {
 };
 
 
+/** mutation root */
+export type mutation_rootdelete_permission_group_audit_logArgs = {
+  where: permission_group_audit_log_bool_exp;
+};
+
+
+/** mutation root */
+export type mutation_rootdelete_permission_group_audit_log_by_pkArgs = {
+  id: Scalars['uuid'];
+};
+
+
 /** mutation root */
 export type mutation_rootdelete_permission_group_by_pkArgs = {
   id: Scalars['uuid'];
@@ -58604,6 +58961,20 @@ export type mutation_rootinsert_member_property_oneArgs = {
 };
 
 
+/** mutation root */
+export type mutation_rootinsert_member_ratingArgs = {
+  objects: Array<member_rating_insert_input>;
+  on_conflict?: InputMaybe<member_rating_on_conflict>;
+};
+
+
+/** mutation root */
+export type mutation_rootinsert_member_rating_oneArgs = {
+  object: member_rating_insert_input;
+  on_conflict?: InputMaybe<member_rating_on_conflict>;
+};
+
+
 /** mutation root */
 export type mutation_rootinsert_member_shopArgs = {
   objects: Array<member_shop_insert_input>;
@@ -59104,6 +59475,20 @@ export type mutation_rootinsert_permission_groupArgs = {
 };
 
 
+/** mutation root */
+export type mutation_rootinsert_permission_group_audit_logArgs = {
+  objects: Array<permission_group_audit_log_insert_input>;
+  on_conflict?: InputMaybe<permission_group_audit_log_on_conflict>;
+};
+
+
+/** mutation root */
+export type mutation_rootinsert_permission_group_audit_log_oneArgs = {
+  object: permission_group_audit_log_insert_input;
+  on_conflict?: InputMaybe<permission_group_audit_log_on_conflict>;
+};
+
+
 /** mutation root */
 export type mutation_rootinsert_permission_group_oneArgs = {
   object: permission_group_insert_input;
@@ -63556,6 +63941,28 @@ export type mutation_rootupdate_member_property_manyArgs = {
 };
 
 
+/** mutation root */
+export type mutation_rootupdate_member_ratingArgs = {
+  _inc?: InputMaybe<member_rating_inc_input>;
+  _set?: InputMaybe<member_rating_set_input>;
+  where: member_rating_bool_exp;
+};
+
+
+/** mutation root */
+export type mutation_rootupdate_member_rating_by_pkArgs = {
+  _inc?: InputMaybe<member_rating_inc_input>;
+  _set?: InputMaybe<member_rating_set_input>;
+  pk_columns: member_rating_pk_columns_input;
+};
+
+
+/** mutation root */
+export type mutation_rootupdate_member_rating_manyArgs = {
+  updates: Array<member_rating_updates>;
+};
+
+
 /** mutation root */
 export type mutation_rootupdate_member_shopArgs = {
   _append?: InputMaybe<member_shop_append_input>;
@@ -64413,6 +64820,36 @@ export type mutation_rootupdate_permission_groupArgs = {
 };
 
 
+/** mutation root */
+export type mutation_rootupdate_permission_group_audit_logArgs = {
+  _append?: InputMaybe<permission_group_audit_log_append_input>;
+  _delete_at_path?: InputMaybe<permission_group_audit_log_delete_at_path_input>;
+  _delete_elem?: InputMaybe<permission_group_audit_log_delete_elem_input>;
+  _delete_key?: InputMaybe<permission_group_audit_log_delete_key_input>;
+  _prepend?: InputMaybe<permission_group_audit_log_prepend_input>;
+  _set?: InputMaybe<permission_group_audit_log_set_input>;
+  where: permission_group_audit_log_bool_exp;
+};
+
+
+/** mutation root */
+export type mutation_rootupdate_permission_group_audit_log_by_pkArgs = {
+  _append?: InputMaybe<permission_group_audit_log_append_input>;
+  _delete_at_path?: InputMaybe<permission_group_audit_log_delete_at_path_input>;
+  _delete_elem?: InputMaybe<permission_group_audit_log_delete_elem_input>;
+  _delete_key?: InputMaybe<permission_group_audit_log_delete_key_input>;
+  _prepend?: InputMaybe<permission_group_audit_log_prepend_input>;
+  _set?: InputMaybe<permission_group_audit_log_set_input>;
+  pk_columns: permission_group_audit_log_pk_columns_input;
+};
+
+
+/** mutation root */
+export type mutation_rootupdate_permission_group_audit_log_manyArgs = {
+  updates: Array<permission_group_audit_log_updates>;
+};
+
+
 /** mutation root */
 export type mutation_rootupdate_permission_group_by_pkArgs = {
   _set?: InputMaybe<permission_group_set_input>;
@@ -77743,6 +78180,260 @@ export type permission_group_aggregate_fieldscountArgs = {
   distinct?: InputMaybe<Scalars['Boolean']>;
 };
 
+/** Record of changes made to the permission group */
+export type permission_group_audit_log = {
+  __typename?: 'permission_group_audit_log';
+  action: Scalars['String'];
+  app_id: Scalars['String'];
+  created_at: Scalars['timestamptz'];
+  id: Scalars['uuid'];
+  member_id: Scalars['String'];
+  new: Scalars['jsonb'];
+  old: Scalars['jsonb'];
+  target: Scalars['uuid'];
+};
+
+
+/** Record of changes made to the permission group */
+export type permission_group_audit_lognewArgs = {
+  path?: InputMaybe<Scalars['String']>;
+};
+
+
+/** Record of changes made to the permission group */
+export type permission_group_audit_logoldArgs = {
+  path?: InputMaybe<Scalars['String']>;
+};
+
+/** aggregated selection of "permission_group_audit_log" */
+export type permission_group_audit_log_aggregate = {
+  __typename?: 'permission_group_audit_log_aggregate';
+  aggregate?: Maybe<permission_group_audit_log_aggregate_fields>;
+  nodes: Array<permission_group_audit_log>;
+};
+
+/** aggregate fields of "permission_group_audit_log" */
+export type permission_group_audit_log_aggregate_fields = {
+  __typename?: 'permission_group_audit_log_aggregate_fields';
+  count: Scalars['Int'];
+  max?: Maybe<permission_group_audit_log_max_fields>;
+  min?: Maybe<permission_group_audit_log_min_fields>;
+};
+
+
+/** aggregate fields of "permission_group_audit_log" */
+export type permission_group_audit_log_aggregate_fieldscountArgs = {
+  columns?: InputMaybe<Array<permission_group_audit_log_select_column>>;
+  distinct?: InputMaybe<Scalars['Boolean']>;
+};
+
+/** append existing jsonb value of filtered columns with new jsonb value */
+export type permission_group_audit_log_append_input = {
+  new?: InputMaybe<Scalars['jsonb']>;
+  old?: InputMaybe<Scalars['jsonb']>;
+};
+
+/** Boolean expression to filter rows from the table "permission_group_audit_log". All fields are combined with a logical 'AND'. */
+export type permission_group_audit_log_bool_exp = {
+  _and?: InputMaybe<Array<permission_group_audit_log_bool_exp>>;
+  _not?: InputMaybe<permission_group_audit_log_bool_exp>;
+  _or?: InputMaybe<Array<permission_group_audit_log_bool_exp>>;
+  action?: InputMaybe<String_comparison_exp>;
+  app_id?: InputMaybe<String_comparison_exp>;
+  created_at?: InputMaybe<timestamptz_comparison_exp>;
+  id?: InputMaybe<uuid_comparison_exp>;
+  member_id?: InputMaybe<String_comparison_exp>;
+  new?: InputMaybe<jsonb_comparison_exp>;
+  old?: InputMaybe<jsonb_comparison_exp>;
+  target?: InputMaybe<uuid_comparison_exp>;
+};
+
+/** unique or primary key constraints on table "permission_group_audit_log" */
+export enum permission_group_audit_log_constraint {
+  /** unique or primary key constraint on columns "id" */
+  permission_group_audit_log_pkey = 'permission_group_audit_log_pkey'
+}
+
+/** delete the field or element with specified path (for JSON arrays, negative integers count from the end) */
+export type permission_group_audit_log_delete_at_path_input = {
+  new?: InputMaybe<Array<Scalars['String']>>;
+  old?: InputMaybe<Array<Scalars['String']>>;
+};
+
+/** delete the array element with specified index (negative integers count from the end). throws an error if top level container is not an array */
+export type permission_group_audit_log_delete_elem_input = {
+  new?: InputMaybe<Scalars['Int']>;
+  old?: InputMaybe<Scalars['Int']>;
+};
+
+/** delete key/value pair or string element. key/value pairs are matched based on their key value */
+export type permission_group_audit_log_delete_key_input = {
+  new?: InputMaybe<Scalars['String']>;
+  old?: InputMaybe<Scalars['String']>;
+};
+
+/** input type for inserting data into table "permission_group_audit_log" */
+export type permission_group_audit_log_insert_input = {
+  action?: InputMaybe<Scalars['String']>;
+  app_id?: InputMaybe<Scalars['String']>;
+  created_at?: InputMaybe<Scalars['timestamptz']>;
+  id?: InputMaybe<Scalars['uuid']>;
+  member_id?: InputMaybe<Scalars['String']>;
+  new?: InputMaybe<Scalars['jsonb']>;
+  old?: InputMaybe<Scalars['jsonb']>;
+  target?: InputMaybe<Scalars['uuid']>;
+};
+
+/** aggregate max on columns */
+export type permission_group_audit_log_max_fields = {
+  __typename?: 'permission_group_audit_log_max_fields';
+  action?: Maybe<Scalars['String']>;
+  app_id?: Maybe<Scalars['String']>;
+  created_at?: Maybe<Scalars['timestamptz']>;
+  id?: Maybe<Scalars['uuid']>;
+  member_id?: Maybe<Scalars['String']>;
+  target?: Maybe<Scalars['uuid']>;
+};
+
+/** aggregate min on columns */
+export type permission_group_audit_log_min_fields = {
+  __typename?: 'permission_group_audit_log_min_fields';
+  action?: Maybe<Scalars['String']>;
+  app_id?: Maybe<Scalars['String']>;
+  created_at?: Maybe<Scalars['timestamptz']>;
+  id?: Maybe<Scalars['uuid']>;
+  member_id?: Maybe<Scalars['String']>;
+  target?: Maybe<Scalars['uuid']>;
+};
+
+/** response of any mutation on the table "permission_group_audit_log" */
+export type permission_group_audit_log_mutation_response = {
+  __typename?: 'permission_group_audit_log_mutation_response';
+  /** number of rows affected by the mutation */
+  affected_rows: Scalars['Int'];
+  /** data from the rows affected by the mutation */
+  returning: Array<permission_group_audit_log>;
+};
+
+/** on_conflict condition type for table "permission_group_audit_log" */
+export type permission_group_audit_log_on_conflict = {
+  constraint: permission_group_audit_log_constraint;
+  update_columns?: Array<permission_group_audit_log_update_column>;
+  where?: InputMaybe<permission_group_audit_log_bool_exp>;
+};
+
+/** Ordering options when selecting data from "permission_group_audit_log". */
+export type permission_group_audit_log_order_by = {
+  action?: InputMaybe<order_by>;
+  app_id?: InputMaybe<order_by>;
+  created_at?: InputMaybe<order_by>;
+  id?: InputMaybe<order_by>;
+  member_id?: InputMaybe<order_by>;
+  new?: InputMaybe<order_by>;
+  old?: InputMaybe<order_by>;
+  target?: InputMaybe<order_by>;
+};
+
+/** primary key columns input for table: permission_group_audit_log */
+export type permission_group_audit_log_pk_columns_input = {
+  id: Scalars['uuid'];
+};
+
+/** prepend existing jsonb value of filtered columns with new jsonb value */
+export type permission_group_audit_log_prepend_input = {
+  new?: InputMaybe<Scalars['jsonb']>;
+  old?: InputMaybe<Scalars['jsonb']>;
+};
+
+/** select columns of table "permission_group_audit_log" */
+export enum permission_group_audit_log_select_column {
+  /** column name */
+  action = 'action',
+  /** column name */
+  app_id = 'app_id',
+  /** column name */
+  created_at = 'created_at',
+  /** column name */
+  id = 'id',
+  /** column name */
+  member_id = 'member_id',
+  /** column name */
+  new = 'new',
+  /** column name */
+  old = 'old',
+  /** column name */
+  target = 'target'
+}
+
+/** input type for updating data in table "permission_group_audit_log" */
+export type permission_group_audit_log_set_input = {
+  action?: InputMaybe<Scalars['String']>;
+  app_id?: InputMaybe<Scalars['String']>;
+  created_at?: InputMaybe<Scalars['timestamptz']>;
+  id?: InputMaybe<Scalars['uuid']>;
+  member_id?: InputMaybe<Scalars['String']>;
+  new?: InputMaybe<Scalars['jsonb']>;
+  old?: InputMaybe<Scalars['jsonb']>;
+  target?: InputMaybe<Scalars['uuid']>;
+};
+
+/** Streaming cursor of the table "permission_group_audit_log" */
+export type permission_group_audit_log_stream_cursor_input = {
+  /** Stream column input with initial value */
+  initial_value: permission_group_audit_log_stream_cursor_value_input;
+  /** cursor ordering */
+  ordering?: InputMaybe<cursor_ordering>;
+};
+
+/** Initial value of the column from where the streaming should start */
+export type permission_group_audit_log_stream_cursor_value_input = {
+  action?: InputMaybe<Scalars['String']>;
+  app_id?: InputMaybe<Scalars['String']>;
+  created_at?: InputMaybe<Scalars['timestamptz']>;
+  id?: InputMaybe<Scalars['uuid']>;
+  member_id?: InputMaybe<Scalars['String']>;
+  new?: InputMaybe<Scalars['jsonb']>;
+  old?: InputMaybe<Scalars['jsonb']>;
+  target?: InputMaybe<Scalars['uuid']>;
+};
+
+/** update columns of table "permission_group_audit_log" */
+export enum permission_group_audit_log_update_column {
+  /** column name */
+  action = 'action',
+  /** column name */
+  app_id = 'app_id',
+  /** column name */
+  created_at = 'created_at',
+  /** column name */
+  id = 'id',
+  /** column name */
+  member_id = 'member_id',
+  /** column name */
+  new = 'new',
+  /** column name */
+  old = 'old',
+  /** column name */
+  target = 'target'
+}
+
+export type permission_group_audit_log_updates = {
+  /** append existing jsonb value of filtered columns with new jsonb value */
+  _append?: InputMaybe<permission_group_audit_log_append_input>;
+  /** delete the field or element with specified path (for JSON arrays, negative integers count from the end) */
+  _delete_at_path?: InputMaybe<permission_group_audit_log_delete_at_path_input>;
+  /** delete the array element with specified index (negative integers count from the end). throws an error if top level container is not an array */
+  _delete_elem?: InputMaybe<permission_group_audit_log_delete_elem_input>;
+  /** delete key/value pair or string element. key/value pairs are matched based on their key value */
+  _delete_key?: InputMaybe<permission_group_audit_log_delete_key_input>;
+  /** prepend existing jsonb value of filtered columns with new jsonb value */
+  _prepend?: InputMaybe<permission_group_audit_log_prepend_input>;
+  /** sets the columns of the filtered rows to the given values */
+  _set?: InputMaybe<permission_group_audit_log_set_input>;
+  /** filter the rows which have to be updated */
+  where: permission_group_audit_log_bool_exp;
+};
+
 /** Boolean expression to filter rows from the table "permission_group". All fields are combined with a logical 'AND'. */
 export type permission_group_bool_exp = {
   _and?: InputMaybe<Array<permission_group_bool_exp>>;
@@ -100133,6 +100824,7 @@ export type program_package_plan = {
   description?: Maybe<Scalars['String']>;
   discount_down_price?: Maybe<Scalars['numeric']>;
   id: Scalars['uuid'];
+  is_countdown_timer_visible: Scalars['Boolean'];
   is_participants_visible: Scalars['Boolean'];
   is_subscription: Scalars['Boolean'];
   is_tempo_delivery: Scalars['Boolean'];
@@ -100285,6 +100977,7 @@ export type program_package_plan_bool_exp = {
   description?: InputMaybe<String_comparison_exp>;
   discount_down_price?: InputMaybe<numeric_comparison_exp>;
   id?: InputMaybe<uuid_comparison_exp>;
+  is_countdown_timer_visible?: InputMaybe<Boolean_comparison_exp>;
   is_participants_visible?: InputMaybe<Boolean_comparison_exp>;
   is_subscription?: InputMaybe<Boolean_comparison_exp>;
   is_tempo_delivery?: InputMaybe<Boolean_comparison_exp>;
@@ -100684,6 +101377,7 @@ export type program_package_plan_insert_input = {
   description?: InputMaybe<Scalars['String']>;
   discount_down_price?: InputMaybe<Scalars['numeric']>;
   id?: InputMaybe<Scalars['uuid']>;
+  is_countdown_timer_visible?: InputMaybe<Scalars['Boolean']>;
   is_participants_visible?: InputMaybe<Scalars['Boolean']>;
   is_subscription?: InputMaybe<Scalars['Boolean']>;
   is_tempo_delivery?: InputMaybe<Scalars['Boolean']>;
@@ -100814,6 +101508,7 @@ export type program_package_plan_order_by = {
   description?: InputMaybe<order_by>;
   discount_down_price?: InputMaybe<order_by>;
   id?: InputMaybe<order_by>;
+  is_countdown_timer_visible?: InputMaybe<order_by>;
   is_participants_visible?: InputMaybe<order_by>;
   is_subscription?: InputMaybe<order_by>;
   is_tempo_delivery?: InputMaybe<order_by>;
@@ -100848,6 +101543,8 @@ export enum program_package_plan_select_column {
   /** column name */
   id = 'id',
   /** column name */
+  is_countdown_timer_visible = 'is_countdown_timer_visible',
+  /** column name */
   is_participants_visible = 'is_participants_visible',
   /** column name */
   is_subscription = 'is_subscription',
@@ -100879,6 +101576,8 @@ export enum program_package_plan_select_column {
 
 /** select "program_package_plan_aggregate_bool_exp_bool_and_arguments_columns" columns of table "program_package_plan" */
 export enum program_package_plan_select_column_program_package_plan_aggregate_bool_exp_bool_and_arguments_columns {
+  /** column name */
+  is_countdown_timer_visible = 'is_countdown_timer_visible',
   /** column name */
   is_participants_visible = 'is_participants_visible',
   /** column name */
@@ -100889,6 +101588,8 @@ export enum program_package_plan_select_column_program_package_plan_aggregate_bo
 
 /** select "program_package_plan_aggregate_bool_exp_bool_or_arguments_columns" columns of table "program_package_plan" */
 export enum program_package_plan_select_column_program_package_plan_aggregate_bool_exp_bool_or_arguments_columns {
+  /** column name */
+  is_countdown_timer_visible = 'is_countdown_timer_visible',
   /** column name */
   is_participants_visible = 'is_participants_visible',
   /** column name */
@@ -100903,6 +101604,7 @@ export type program_package_plan_set_input = {
   description?: InputMaybe<Scalars['String']>;
   discount_down_price?: InputMaybe<Scalars['numeric']>;
   id?: InputMaybe<Scalars['uuid']>;
+  is_countdown_timer_visible?: InputMaybe<Scalars['Boolean']>;
   is_participants_visible?: InputMaybe<Scalars['Boolean']>;
   is_subscription?: InputMaybe<Scalars['Boolean']>;
   is_tempo_delivery?: InputMaybe<Scalars['Boolean']>;
@@ -100997,6 +101699,7 @@ export type program_package_plan_stream_cursor_value_input = {
   description?: InputMaybe<Scalars['String']>;
   discount_down_price?: InputMaybe<Scalars['numeric']>;
   id?: InputMaybe<Scalars['uuid']>;
+  is_countdown_timer_visible?: InputMaybe<Scalars['Boolean']>;
   is_participants_visible?: InputMaybe<Scalars['Boolean']>;
   is_subscription?: InputMaybe<Scalars['Boolean']>;
   is_tempo_delivery?: InputMaybe<Scalars['Boolean']>;
@@ -101046,6 +101749,8 @@ export enum program_package_plan_update_column {
   /** column name */
   id = 'id',
   /** column name */
+  is_countdown_timer_visible = 'is_countdown_timer_visible',
+  /** column name */
   is_participants_visible = 'is_participants_visible',
   /** column name */
   is_subscription = 'is_subscription',
@@ -110778,6 +111483,12 @@ export type query_root = {
   member_public: Array<member_public>;
   /** fetch aggregated fields from the table: "member_public" */
   member_public_aggregate: member_public_aggregate;
+  /** fetch data from the table: "member_rating" */
+  member_rating: Array<member_rating>;
+  /** fetch aggregated fields from the table: "member_rating" */
+  member_rating_aggregate: member_rating_aggregate;
+  /** fetch data from the table: "member_rating" using primary key columns */
+  member_rating_by_pk?: Maybe<member_rating>;
   /** fetch data from the table: "member_shop" */
   member_shop: Array<member_shop>;
   /** fetch aggregated fields from the table: "member_shop" */
@@ -111034,6 +111745,12 @@ export type query_root = {
   permission_group: Array<permission_group>;
   /** fetch aggregated fields from the table: "permission_group" */
   permission_group_aggregate: permission_group_aggregate;
+  /** fetch data from the table: "permission_group_audit_log" */
+  permission_group_audit_log: Array<permission_group_audit_log>;
+  /** fetch aggregated fields from the table: "permission_group_audit_log" */
+  permission_group_audit_log_aggregate: permission_group_audit_log_aggregate;
+  /** fetch data from the table: "permission_group_audit_log" using primary key columns */
+  permission_group_audit_log_by_pk?: Maybe<permission_group_audit_log>;
   /** fetch data from the table: "permission_group" using primary key columns */
   permission_group_by_pk?: Maybe<permission_group>;
   /** fetch data from the table: "permission_group_permission" */
@@ -115113,6 +115830,29 @@ export type query_rootmember_public_aggregateArgs = {
 };
 
 
+export type query_rootmember_ratingArgs = {
+  distinct_on?: InputMaybe<Array<member_rating_select_column>>;
+  limit?: InputMaybe<Scalars['Int']>;
+  offset?: InputMaybe<Scalars['Int']>;
+  order_by?: InputMaybe<Array<member_rating_order_by>>;
+  where?: InputMaybe<member_rating_bool_exp>;
+};
+
+
+export type query_rootmember_rating_aggregateArgs = {
+  distinct_on?: InputMaybe<Array<member_rating_select_column>>;
+  limit?: InputMaybe<Scalars['Int']>;
+  offset?: InputMaybe<Scalars['Int']>;
+  order_by?: InputMaybe<Array<member_rating_order_by>>;
+  where?: InputMaybe<member_rating_bool_exp>;
+};
+
+
+export type query_rootmember_rating_by_pkArgs = {
+  id: Scalars['uuid'];
+};
+
+
 export type query_rootmember_shopArgs = {
   distinct_on?: InputMaybe<Array<member_shop_select_column>>;
   limit?: InputMaybe<Scalars['Int']>;
@@ -116129,6 +116869,29 @@ export type query_rootpermission_group_aggregateArgs = {
 };
 
 
+export type query_rootpermission_group_audit_logArgs = {
+  distinct_on?: InputMaybe<Array<permission_group_audit_log_select_column>>;
+  limit?: InputMaybe<Scalars['Int']>;
+  offset?: InputMaybe<Scalars['Int']>;
+  order_by?: InputMaybe<Array<permission_group_audit_log_order_by>>;
+  where?: InputMaybe<permission_group_audit_log_bool_exp>;
+};
+
+
+export type query_rootpermission_group_audit_log_aggregateArgs = {
+  distinct_on?: InputMaybe<Array<permission_group_audit_log_select_column>>;
+  limit?: InputMaybe<Scalars['Int']>;
+  offset?: InputMaybe<Scalars['Int']>;
+  order_by?: InputMaybe<Array<permission_group_audit_log_order_by>>;
+  where?: InputMaybe<permission_group_audit_log_bool_exp>;
+};
+
+
+export type query_rootpermission_group_audit_log_by_pkArgs = {
+  id: Scalars['uuid'];
+};
+
+
 export type query_rootpermission_group_by_pkArgs = {
   id: Scalars['uuid'];
 };
@@ -128136,6 +128899,14 @@ export type subscription_root = {
   member_public_aggregate: member_public_aggregate;
   /** fetch data from the table in a streaming manner: "member_public" */
   member_public_stream: Array<member_public>;
+  /** fetch data from the table: "member_rating" */
+  member_rating: Array<member_rating>;
+  /** fetch aggregated fields from the table: "member_rating" */
+  member_rating_aggregate: member_rating_aggregate;
+  /** fetch data from the table: "member_rating" using primary key columns */
+  member_rating_by_pk?: Maybe<member_rating>;
+  /** fetch data from the table in a streaming manner: "member_rating" */
+  member_rating_stream: Array<member_rating>;
   /** fetch data from the table: "member_shop" */
   member_shop: Array<member_shop>;
   /** fetch aggregated fields from the table: "member_shop" */
@@ -128484,6 +129255,14 @@ export type subscription_root = {
   permission_group: Array<permission_group>;
   /** fetch aggregated fields from the table: "permission_group" */
   permission_group_aggregate: permission_group_aggregate;
+  /** fetch data from the table: "permission_group_audit_log" */
+  permission_group_audit_log: Array<permission_group_audit_log>;
+  /** fetch aggregated fields from the table: "permission_group_audit_log" */
+  permission_group_audit_log_aggregate: permission_group_audit_log_aggregate;
+  /** fetch data from the table: "permission_group_audit_log" using primary key columns */
+  permission_group_audit_log_by_pk?: Maybe<permission_group_audit_log>;
+  /** fetch data from the table in a streaming manner: "permission_group_audit_log" */
+  permission_group_audit_log_stream: Array<permission_group_audit_log>;
   /** fetch data from the table: "permission_group" using primary key columns */
   permission_group_by_pk?: Maybe<permission_group>;
   /** fetch data from the table: "permission_group_permission" */
@@ -133921,6 +134700,36 @@ export type subscription_rootmember_public_streamArgs = {
 };
 
 
+export type subscription_rootmember_ratingArgs = {
+  distinct_on?: InputMaybe<Array<member_rating_select_column>>;
+  limit?: InputMaybe<Scalars['Int']>;
+  offset?: InputMaybe<Scalars['Int']>;
+  order_by?: InputMaybe<Array<member_rating_order_by>>;
+  where?: InputMaybe<member_rating_bool_exp>;
+};
+
+
+export type subscription_rootmember_rating_aggregateArgs = {
+  distinct_on?: InputMaybe<Array<member_rating_select_column>>;
+  limit?: InputMaybe<Scalars['Int']>;
+  offset?: InputMaybe<Scalars['Int']>;
+  order_by?: InputMaybe<Array<member_rating_order_by>>;
+  where?: InputMaybe<member_rating_bool_exp>;
+};
+
+
+export type subscription_rootmember_rating_by_pkArgs = {
+  id: Scalars['uuid'];
+};
+
+
+export type subscription_rootmember_rating_streamArgs = {
+  batch_size: Scalars['Int'];
+  cursor: Array<InputMaybe<member_rating_stream_cursor_input>>;
+  where?: InputMaybe<member_rating_bool_exp>;
+};
+
+
 export type subscription_rootmember_shopArgs = {
   distinct_on?: InputMaybe<Array<member_shop_select_column>>;
   limit?: InputMaybe<Scalars['Int']>;
@@ -135259,6 +136068,36 @@ export type subscription_rootpermission_group_aggregateArgs = {
 };
 
 
+export type subscription_rootpermission_group_audit_logArgs = {
+  distinct_on?: InputMaybe<Array<permission_group_audit_log_select_column>>;
+  limit?: InputMaybe<Scalars['Int']>;
+  offset?: InputMaybe<Scalars['Int']>;
+  order_by?: InputMaybe<Array<permission_group_audit_log_order_by>>;
+  where?: InputMaybe<permission_group_audit_log_bool_exp>;
+};
+
+
+export type subscription_rootpermission_group_audit_log_aggregateArgs = {
+  distinct_on?: InputMaybe<Array<permission_group_audit_log_select_column>>;
+  limit?: InputMaybe<Scalars['Int']>;
+  offset?: InputMaybe<Scalars['Int']>;
+  order_by?: InputMaybe<Array<permission_group_audit_log_order_by>>;
+  where?: InputMaybe<permission_group_audit_log_bool_exp>;
+};
+
+
+export type subscription_rootpermission_group_audit_log_by_pkArgs = {
+  id: Scalars['uuid'];
+};
+
+
+export type subscription_rootpermission_group_audit_log_streamArgs = {
+  batch_size: Scalars['Int'];
+  cursor: Array<InputMaybe<permission_group_audit_log_stream_cursor_input>>;
+  where?: InputMaybe<permission_group_audit_log_bool_exp>;
+};
+
+
 export type subscription_rootpermission_group_by_pkArgs = {
   id: Scalars['uuid'];
 };
@@ -154649,21 +155488,6 @@ export type GET_BUSINESS_SIGNUP_PROPERTY_ID_MAPVariables = Exact<{
 
 export type GET_BUSINESS_SIGNUP_PROPERTY_ID_MAP = { __typename?: 'query_root', property: Array<{ __typename?: 'property', id: any, name: string }> };
 
-export type GetMailVerificationCodeVariables = Exact<{
-  appId: Scalars['String'];
-  email: Scalars['String'];
-}>;
-
-
-export type GetMailVerificationCode = { __typename?: 'query_root', mail_verification_code: Array<{ __typename?: 'mail_verification_code', id: any, code: string }> };
-
-export type GetOldestMemberDeviceVariables = Exact<{
-  memberId: Scalars['String'];
-}>;
-
-
-export type GetOldestMemberDevice = { __typename?: 'query_root', member_device: Array<{ __typename?: 'member_device', id: any }> };
-
 export type GET_PRODUCT_INVENTORYVariables = Exact<{
   productIds?: InputMaybe<Array<Scalars['String']> | Scalars['String']>;
   activityTicketIds?: InputMaybe<Array<Scalars['uuid']> | Scalars['uuid']>;
@@ -155281,15 +156105,6 @@ export type CANCEL_APPOINTMENTVariables = Exact<{
 
 export type CANCEL_APPOINTMENT = { __typename?: 'mutation_root', update_order_product?: { __typename?: 'order_product_mutation_response', affected_rows: number } | null, update_meet_by_pk?: { __typename?: 'meet', id: any } | null };
 
-export type UpdateMailVerificationCodeExpiredAtToNowVariables = Exact<{
-  appId: Scalars['String'];
-  email: Scalars['String'];
-  code: Scalars['String'];
-}>;
-
-
-export type UpdateMailVerificationCodeExpiredAtToNow = { __typename?: 'mutation_root', update_mail_verification_code?: { __typename?: 'mail_verification_code_mutation_response', affected_rows: number } | null };
-
 export type GET_POST_PREVIEW_COLLECTIONVariables = Exact<{
   authorId?: InputMaybe<Scalars['String']>;
 }>;
@@ -155607,13 +156422,6 @@ export type GET_ORDER_IDVariables = Exact<{
 
 export type GET_ORDER_ID = { __typename?: 'query_root', payment_log: Array<{ __typename?: 'payment_log', order_id: string }> };
 
-export type DeleteMemberDeviceByIdVariables = Exact<{
-  id: Scalars['uuid'];
-}>;
-
-
-export type DeleteMemberDeviceById = { __typename?: 'mutation_root', delete_member_device_by_pk?: { __typename?: 'member_device', id: any } | null };
-
 export type GetEbookTrialPercentageVariables = Exact<{
   programContentId: Scalars['uuid'];
 }>;
@@ -156362,7 +157170,7 @@ export type GET_PROGRAM_PACKAGE_INTRODUCTIONVariables = Exact<{
 }>;
 
 
-export type GET_PROGRAM_PACKAGE_INTRODUCTION = { __typename?: 'query_root', program_package_by_pk?: { __typename?: 'program_package', id: any, title: string, cover_url?: string | null, description?: string | null, meta_tag?: any | null, published_at?: any | null, program_package_programs: Array<{ __typename?: 'program_package_program', id: any, program: { __typename?: 'program', id: any, title: string, cover_url?: string | null, cover_thumbnail_url?: string | null, program_categories: Array<{ __typename?: 'program_category', id: any, category: { __typename?: 'category', id: string, name: string, position: number } }> } }>, program_package_plans: Array<{ __typename?: 'program_package_plan', id: any, title: string, description?: string | null, is_subscription: boolean, is_participants_visible: boolean, period_amount?: any | null, period_type?: string | null, list_price: any, sale_price?: any | null, sold_at?: any | null, discount_down_price?: any | null, program_package_plan_enrollments_aggregate: { __typename?: 'program_package_plan_enrollment_aggregate', aggregate?: { __typename?: 'program_package_plan_enrollment_aggregate_fields', count: number } | null } }> } | null };
+export type GET_PROGRAM_PACKAGE_INTRODUCTION = { __typename?: 'query_root', program_package_by_pk?: { __typename?: 'program_package', id: any, title: string, cover_url?: string | null, description?: string | null, meta_tag?: any | null, published_at?: any | null, program_package_programs: Array<{ __typename?: 'program_package_program', id: any, program: { __typename?: 'program', id: any, title: string, cover_url?: string | null, cover_thumbnail_url?: string | null, program_categories: Array<{ __typename?: 'program_category', id: any, category: { __typename?: 'category', id: string, name: string, position: number } }> } }>, program_package_plans: Array<{ __typename?: 'program_package_plan', id: any, title: string, description?: string | null, is_subscription: boolean, is_participants_visible: boolean, is_countdown_timer_visible: boolean, period_amount?: any | null, period_type?: string | null, list_price: any, sale_price?: any | null, sold_at?: any | null, discount_down_price?: any | null, program_package_plan_enrollments_aggregate: { __typename?: 'program_package_plan_enrollment_aggregate', aggregate?: { __typename?: 'program_package_plan_enrollment_aggregate_fields', count: number } | null } }> } | null };
 
 export type GET_ENROLLED_PROGRAM_PACKAGE_PLAN_IDSVariables = Exact<{
   memberId: Scalars['String'];
diff --git a/src/hooks/programPackage.ts b/src/hooks/programPackage.ts
index d573b4bef..c0391ba78 100644
--- a/src/hooks/programPackage.ts
+++ b/src/hooks/programPackage.ts
@@ -47,6 +47,7 @@ export const useProgramPackageIntroduction = (programPackageId: string) => {
             description
             is_subscription
             is_participants_visible
+            is_countdown_timer_visible
             period_amount
             period_type
             list_price
@@ -89,6 +90,7 @@ export const useProgramPackageIntroduction = (programPackageId: string) => {
             description: programPackagePlan.description || '',
             isSubscription: programPackagePlan.is_subscription,
             isParticipantsVisible: programPackagePlan.is_participants_visible,
+            isCountdownTimerVisible: programPackagePlan.is_countdown_timer_visible,
             periodAmount: programPackagePlan.period_amount,
             periodType: programPackagePlan.period_type as PeriodType,
             listPrice: programPackagePlan.list_price,
diff --git a/src/types/programPackage.ts b/src/types/programPackage.ts
index 4744c3964..ae72e6028 100644
--- a/src/types/programPackage.ts
+++ b/src/types/programPackage.ts
@@ -16,6 +16,7 @@ export type ProgramPackagePlanProps = {
   description: string | null
   isSubscription: boolean
   isParticipantsVisible: boolean
+  isCountdownTimerVisible: boolean
   periodAmount: number
   periodType: PeriodType
   listPrice: number