diff --git a/apps/admin-ui/app/(drawer)/manage-orders/order-details/[id].tsx b/apps/admin-ui/app/(drawer)/manage-orders/order-details/[id].tsx
index c1f8f5a..1545a6b 100644
--- a/apps/admin-ui/app/(drawer)/manage-orders/order-details/[id].tsx
+++ b/apps/admin-ui/app/(drawer)/manage-orders/order-details/[id].tsx
@@ -82,6 +82,16 @@ export default function OrderDetails() {
},
});
+ const removeDeliveryChargeMutation = trpc.admin.order.removeDeliveryCharge.useMutation({
+ onSuccess: () => {
+ Alert.alert("Success", "Delivery charge has been removed");
+ refetch();
+ },
+ onError: (error: any) => {
+ Alert.alert("Error", error.message || "Failed to remove delivery charge");
+ },
+ });
+
if (isLoading) {
return (
@@ -508,6 +518,40 @@ export default function OrderDetails() {
-₹{discountAmount}
+ )}
+ {order.deliveryCharge > 0 && (
+
+
+
+ Delivery Charge
+
+ {
+ Alert.alert(
+ 'Remove Delivery Cost',
+ 'Are you sure you want to remove the delivery cost from this order?',
+ [
+ { text: 'Cancel', style: 'cancel' },
+ {
+ text: 'Remove',
+ style: 'destructive',
+ onPress: () => removeDeliveryChargeMutation.mutate({ orderId: order.id }),
+ },
+ ]
+ );
+ }}
+ disabled={removeDeliveryChargeMutation.isPending}
+ style={tw`ml-2 px-2 py-1 bg-red-100 rounded-md`}
+ >
+
+ {removeDeliveryChargeMutation.isPending ? 'Removing...' : 'Remove'}
+
+
+
+
+ ₹{order.deliveryCharge}
+
+
)}
diff --git a/apps/admin-ui/app/(drawer)/slots/index.tsx b/apps/admin-ui/app/(drawer)/slots/index.tsx
index 992a9f7..a79f642 100644
--- a/apps/admin-ui/app/(drawer)/slots/index.tsx
+++ b/apps/admin-ui/app/(drawer)/slots/index.tsx
@@ -1,7 +1,7 @@
import React, { useState } from 'react';
import { MaterialCommunityIcons, Entypo } from '@expo/vector-icons';
-import { View, TouchableOpacity, FlatList, Alert } from 'react-native';
-import { AppContainer, MyText, tw, MyFlatList , BottomDialog, MyTouchableOpacity } from 'common-ui';
+import { View, TouchableOpacity, FlatList, Alert, ActivityIndicator } from 'react-native';
+import { AppContainer, MyText, tw, MyFlatList , BottomDialog, MyTouchableOpacity, Checkbox } from 'common-ui';
import { trpc } from '@/src/trpc-client';
import { useRouter } from 'expo-router';
import dayjs from 'dayjs';
@@ -12,6 +12,7 @@ interface SlotItemProps {
router: any;
setDialogProducts: React.Dispatch>;
setDialogOpen: React.Dispatch>;
+ refetch: () => void;
}
const SlotItemComponent: React.FC = ({
@@ -19,6 +20,7 @@ const SlotItemComponent: React.FC = ({
router,
setDialogProducts,
setDialogOpen,
+ refetch,
}) => {
const [menuOpen, setMenuOpen] = useState(false);
const slotProducts = slot.products?.map((p: any) => p.name).filter(Boolean) || [];
@@ -28,6 +30,29 @@ const SlotItemComponent: React.FC = ({
const statusColor = isActive ? 'bg-green-100 text-green-700' : 'bg-red-100 text-red-700';
const statusText = isActive ? 'Active' : 'Inactive';
+ const updateSlotCapacity = trpc.admin.slots.updateSlotCapacity.useMutation();
+
+ const handleCapacityToggle = () => {
+ updateSlotCapacity.mutate(
+ { slotId: slot.id, isCapacityFull: !slot.isCapacityFull },
+ {
+ onSuccess: () => {
+ setMenuOpen(false);
+ refetch();
+ Alert.alert(
+ 'Success',
+ slot.isCapacityFull
+ ? 'Slot capacity reset. It will now be visible to users.'
+ : 'Slot marked as full capacity. It will be hidden from users.'
+ );
+ },
+ onError: (error: any) => {
+ Alert.alert('Error', error.message || 'Failed to update slot capacity');
+ },
+ }
+ );
+ };
+
return (
router.push(`/(drawer)/slots/slot-details?slotId=${slot.id}`)}
@@ -55,10 +80,15 @@ const SlotItemComponent: React.FC = ({
Edit
-
- {statusText}
-
-
+ {statusText}
+
+ {slot.isCapacityFull && (
+
+ FULL
+
+ )}
+ setMenuOpen(true)}
style={tw`ml-2 p-1`}
hitSlop={{ top: 10, bottom: 10, left: 10, right: 10 }}
@@ -68,33 +98,75 @@ const SlotItemComponent: React.FC = ({
- {/* Replicate Menu Dialog */}
- setMenuOpen(false)}>
-
- Slot #{slot.id} Actions
+ {/* Replicate Menu Dialog */}
+ setMenuOpen(false)}>
+
+ Slot #{slot.id} Actions
+
+ {/* Capacity Toggle */}
{
- setMenuOpen(false);
- router.push(`/slots/add?baseslot=${slot.id}` as any);
- }}
+ onPress={handleCapacityToggle}
+ disabled={updateSlotCapacity.isPending}
style={tw`py-4 border-b border-gray-200`}
>
-
-
- Replicate Slot
+
+
+ {updateSlotCapacity.isPending ? (
+
+ ) : (
+
+ )}
+
+ Mark as Full Capacity
+
+ {slot.isCapacityFull
+ ? "Slot is hidden from users"
+ : "Hidden from users when full"}
+
+
+
+ {updateSlotCapacity.isPending ? (
+
+ ) : (
+
+ )}
- setMenuOpen(false)}
- style={tw`py-4 mt-2`}
- >
-
-
- Cancel
-
-
-
-
+
+ {
+ setMenuOpen(false);
+ router.push(`/slots/add?baseslot=${slot.id}` as any);
+ }}
+ style={tw`py-4 border-b border-gray-200`}
+ >
+
+
+ Replicate Slot
+
+
+ setMenuOpen(false)}
+ style={tw`py-4 mt-2`}
+ >
+
+
+ Cancel
+
+
+
+
{/* Divider */}
@@ -193,6 +265,7 @@ export default function Slots() {
router={router}
setDialogProducts={setDialogProducts}
setDialogOpen={setDialogOpen}
+ refetch={refetch}
/>
)}
contentContainerStyle={tw`p-4`}
diff --git a/apps/backend/drizzle/0074_outgoing_black_cat.sql b/apps/backend/drizzle/0074_outgoing_black_cat.sql
new file mode 100644
index 0000000..38a9e8b
--- /dev/null
+++ b/apps/backend/drizzle/0074_outgoing_black_cat.sql
@@ -0,0 +1 @@
+ALTER TABLE "mf"."delivery_slot_info" ADD COLUMN "is_capacity_full" boolean DEFAULT false NOT NULL;
\ No newline at end of file
diff --git a/apps/backend/drizzle/meta/0074_snapshot.json b/apps/backend/drizzle/meta/0074_snapshot.json
new file mode 100644
index 0000000..19b344c
--- /dev/null
+++ b/apps/backend/drizzle/meta/0074_snapshot.json
@@ -0,0 +1,3698 @@
+{
+ "id": "d5792792-dff1-4dbc-97e8-ca51c413ce24",
+ "prevId": "96b766f9-646c-4a90-a1b0-19a01fc1188c",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "mf.address_areas": {
+ "name": "address_areas",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "address_areas_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "place_name": {
+ "name": "place_name",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "zone_id": {
+ "name": "zone_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "address_areas_zone_id_address_zones_id_fk": {
+ "name": "address_areas_zone_id_address_zones_id_fk",
+ "tableFrom": "address_areas",
+ "tableTo": "address_zones",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "zone_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.address_zones": {
+ "name": "address_zones",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "address_zones_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "zone_name": {
+ "name": "zone_name",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "added_at": {
+ "name": "added_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.addresses": {
+ "name": "addresses",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "addresses_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "phone": {
+ "name": "phone",
+ "type": "varchar(15)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "address_line1": {
+ "name": "address_line1",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "address_line2": {
+ "name": "address_line2",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "city": {
+ "name": "city",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "state": {
+ "name": "state",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "pincode": {
+ "name": "pincode",
+ "type": "varchar(10)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "is_default": {
+ "name": "is_default",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "latitude": {
+ "name": "latitude",
+ "type": "real",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "longitude": {
+ "name": "longitude",
+ "type": "real",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "google_maps_url": {
+ "name": "google_maps_url",
+ "type": "varchar(500)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "admin_latitude": {
+ "name": "admin_latitude",
+ "type": "real",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "admin_longitude": {
+ "name": "admin_longitude",
+ "type": "real",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "zone_id": {
+ "name": "zone_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "addresses_user_id_users_id_fk": {
+ "name": "addresses_user_id_users_id_fk",
+ "tableFrom": "addresses",
+ "tableTo": "users",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "addresses_zone_id_address_zones_id_fk": {
+ "name": "addresses_zone_id_address_zones_id_fk",
+ "tableFrom": "addresses",
+ "tableTo": "address_zones",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "zone_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.cart_items": {
+ "name": "cart_items",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "cart_items_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "product_id": {
+ "name": "product_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "quantity": {
+ "name": "quantity",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "added_at": {
+ "name": "added_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "cart_items_user_id_users_id_fk": {
+ "name": "cart_items_user_id_users_id_fk",
+ "tableFrom": "cart_items",
+ "tableTo": "users",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "cart_items_product_id_product_info_id_fk": {
+ "name": "cart_items_product_id_product_info_id_fk",
+ "tableFrom": "cart_items",
+ "tableTo": "product_info",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "product_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "unique_user_product": {
+ "name": "unique_user_product",
+ "nullsNotDistinct": false,
+ "columns": [
+ "user_id",
+ "product_id"
+ ]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.complaints": {
+ "name": "complaints",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "complaints_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "order_id": {
+ "name": "order_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "complaint_body": {
+ "name": "complaint_body",
+ "type": "varchar(1000)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "images": {
+ "name": "images",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "response": {
+ "name": "response",
+ "type": "varchar(1000)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_resolved": {
+ "name": "is_resolved",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "complaints_user_id_users_id_fk": {
+ "name": "complaints_user_id_users_id_fk",
+ "tableFrom": "complaints",
+ "tableTo": "users",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "complaints_order_id_orders_id_fk": {
+ "name": "complaints_order_id_orders_id_fk",
+ "tableFrom": "complaints",
+ "tableTo": "orders",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "order_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.coupon_applicable_products": {
+ "name": "coupon_applicable_products",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "coupon_applicable_products_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "coupon_id": {
+ "name": "coupon_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "product_id": {
+ "name": "product_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "coupon_applicable_products_coupon_id_coupons_id_fk": {
+ "name": "coupon_applicable_products_coupon_id_coupons_id_fk",
+ "tableFrom": "coupon_applicable_products",
+ "tableTo": "coupons",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "coupon_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "coupon_applicable_products_product_id_product_info_id_fk": {
+ "name": "coupon_applicable_products_product_id_product_info_id_fk",
+ "tableFrom": "coupon_applicable_products",
+ "tableTo": "product_info",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "product_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "unique_coupon_product": {
+ "name": "unique_coupon_product",
+ "nullsNotDistinct": false,
+ "columns": [
+ "coupon_id",
+ "product_id"
+ ]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.coupon_applicable_users": {
+ "name": "coupon_applicable_users",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "coupon_applicable_users_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "coupon_id": {
+ "name": "coupon_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "coupon_applicable_users_coupon_id_coupons_id_fk": {
+ "name": "coupon_applicable_users_coupon_id_coupons_id_fk",
+ "tableFrom": "coupon_applicable_users",
+ "tableTo": "coupons",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "coupon_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "coupon_applicable_users_user_id_users_id_fk": {
+ "name": "coupon_applicable_users_user_id_users_id_fk",
+ "tableFrom": "coupon_applicable_users",
+ "tableTo": "users",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "unique_coupon_user": {
+ "name": "unique_coupon_user",
+ "nullsNotDistinct": false,
+ "columns": [
+ "coupon_id",
+ "user_id"
+ ]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.coupon_usage": {
+ "name": "coupon_usage",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "coupon_usage_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "coupon_id": {
+ "name": "coupon_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "order_id": {
+ "name": "order_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "order_item_id": {
+ "name": "order_item_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "used_at": {
+ "name": "used_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "coupon_usage_user_id_users_id_fk": {
+ "name": "coupon_usage_user_id_users_id_fk",
+ "tableFrom": "coupon_usage",
+ "tableTo": "users",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "coupon_usage_coupon_id_coupons_id_fk": {
+ "name": "coupon_usage_coupon_id_coupons_id_fk",
+ "tableFrom": "coupon_usage",
+ "tableTo": "coupons",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "coupon_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "coupon_usage_order_id_orders_id_fk": {
+ "name": "coupon_usage_order_id_orders_id_fk",
+ "tableFrom": "coupon_usage",
+ "tableTo": "orders",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "order_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "coupon_usage_order_item_id_order_items_id_fk": {
+ "name": "coupon_usage_order_item_id_order_items_id_fk",
+ "tableFrom": "coupon_usage",
+ "tableTo": "order_items",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "order_item_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.coupons": {
+ "name": "coupons",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "coupons_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "coupon_code": {
+ "name": "coupon_code",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "is_user_based": {
+ "name": "is_user_based",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "discount_percent": {
+ "name": "discount_percent",
+ "type": "numeric(5, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "flat_discount": {
+ "name": "flat_discount",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "min_order": {
+ "name": "min_order",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "product_ids": {
+ "name": "product_ids",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_by": {
+ "name": "created_by",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "max_value": {
+ "name": "max_value",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_apply_for_all": {
+ "name": "is_apply_for_all",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "valid_till": {
+ "name": "valid_till",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "max_limit_for_user": {
+ "name": "max_limit_for_user",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_invalidated": {
+ "name": "is_invalidated",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "exclusive_apply": {
+ "name": "exclusive_apply",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "coupons_created_by_staff_users_id_fk": {
+ "name": "coupons_created_by_staff_users_id_fk",
+ "tableFrom": "coupons",
+ "tableTo": "staff_users",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "created_by"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "unique_coupon_code": {
+ "name": "unique_coupon_code",
+ "nullsNotDistinct": false,
+ "columns": [
+ "coupon_code"
+ ]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.delivery_slot_info": {
+ "name": "delivery_slot_info",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "delivery_slot_info_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "delivery_time": {
+ "name": "delivery_time",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "freeze_time": {
+ "name": "freeze_time",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "is_active": {
+ "name": "is_active",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "is_flash": {
+ "name": "is_flash",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "is_capacity_full": {
+ "name": "is_capacity_full",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "delivery_sequence": {
+ "name": "delivery_sequence",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "group_ids": {
+ "name": "group_ids",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.home_banners": {
+ "name": "home_banners",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "home_banners_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "image_url": {
+ "name": "image_url",
+ "type": "varchar(500)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "varchar(500)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "product_ids": {
+ "name": "product_ids",
+ "type": "integer[]",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "redirect_url": {
+ "name": "redirect_url",
+ "type": "varchar(500)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "serial_num": {
+ "name": "serial_num",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_active": {
+ "name": "is_active",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "last_updated": {
+ "name": "last_updated",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.key_val_store": {
+ "name": "key_val_store",
+ "schema": "mf",
+ "columns": {
+ "key": {
+ "name": "key",
+ "type": "varchar(255)",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "value": {
+ "name": "value",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.notif_creds": {
+ "name": "notif_creds",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "notif_creds_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "token": {
+ "name": "token",
+ "type": "varchar(500)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "added_at": {
+ "name": "added_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "last_verified": {
+ "name": "last_verified",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "notif_creds_user_id_users_id_fk": {
+ "name": "notif_creds_user_id_users_id_fk",
+ "tableFrom": "notif_creds",
+ "tableTo": "users",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "notif_creds_token_unique": {
+ "name": "notif_creds_token_unique",
+ "nullsNotDistinct": false,
+ "columns": [
+ "token"
+ ]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.notifications": {
+ "name": "notifications",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "notifications_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "body": {
+ "name": "body",
+ "type": "varchar(512)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "type": {
+ "name": "type",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_read": {
+ "name": "is_read",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "notifications_user_id_users_id_fk": {
+ "name": "notifications_user_id_users_id_fk",
+ "tableFrom": "notifications",
+ "tableTo": "users",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.order_items": {
+ "name": "order_items",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "order_items_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "order_id": {
+ "name": "order_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "product_id": {
+ "name": "product_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "quantity": {
+ "name": "quantity",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "price": {
+ "name": "price",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "discounted_price": {
+ "name": "discounted_price",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_packaged": {
+ "name": "is_packaged",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "is_package_verified": {
+ "name": "is_package_verified",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "order_items_order_id_orders_id_fk": {
+ "name": "order_items_order_id_orders_id_fk",
+ "tableFrom": "order_items",
+ "tableTo": "orders",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "order_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "order_items_product_id_product_info_id_fk": {
+ "name": "order_items_product_id_product_info_id_fk",
+ "tableFrom": "order_items",
+ "tableTo": "product_info",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "product_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.order_status": {
+ "name": "order_status",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "order_status_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "order_time": {
+ "name": "order_time",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "order_id": {
+ "name": "order_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "is_packaged": {
+ "name": "is_packaged",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "is_delivered": {
+ "name": "is_delivered",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "is_cancelled": {
+ "name": "is_cancelled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "cancel_reason": {
+ "name": "cancel_reason",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_cancelled_by_admin": {
+ "name": "is_cancelled_by_admin",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "payment_state": {
+ "name": "payment_state",
+ "type": "payment_status",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'pending'"
+ },
+ "cancellation_user_notes": {
+ "name": "cancellation_user_notes",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cancellation_admin_notes": {
+ "name": "cancellation_admin_notes",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "cancellation_reviewed": {
+ "name": "cancellation_reviewed",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "cancellation_reviewed_at": {
+ "name": "cancellation_reviewed_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "refund_coupon_id": {
+ "name": "refund_coupon_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "order_status_user_id_users_id_fk": {
+ "name": "order_status_user_id_users_id_fk",
+ "tableFrom": "order_status",
+ "tableTo": "users",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "order_status_order_id_orders_id_fk": {
+ "name": "order_status_order_id_orders_id_fk",
+ "tableFrom": "order_status",
+ "tableTo": "orders",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "order_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "order_status_refund_coupon_id_coupons_id_fk": {
+ "name": "order_status_refund_coupon_id_coupons_id_fk",
+ "tableFrom": "order_status",
+ "tableTo": "coupons",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "refund_coupon_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.orders": {
+ "name": "orders",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "orders_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "address_id": {
+ "name": "address_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "slot_id": {
+ "name": "slot_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_cod": {
+ "name": "is_cod",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "is_online_payment": {
+ "name": "is_online_payment",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "payment_info_id": {
+ "name": "payment_info_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "total_amount": {
+ "name": "total_amount",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "delivery_charge": {
+ "name": "delivery_charge",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'0'"
+ },
+ "readable_id": {
+ "name": "readable_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "admin_notes": {
+ "name": "admin_notes",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "user_notes": {
+ "name": "user_notes",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "order_group_id": {
+ "name": "order_group_id",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "order_group_proportion": {
+ "name": "order_group_proportion",
+ "type": "numeric(10, 4)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_flash_delivery": {
+ "name": "is_flash_delivery",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "orders_user_id_users_id_fk": {
+ "name": "orders_user_id_users_id_fk",
+ "tableFrom": "orders",
+ "tableTo": "users",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "orders_address_id_addresses_id_fk": {
+ "name": "orders_address_id_addresses_id_fk",
+ "tableFrom": "orders",
+ "tableTo": "addresses",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "address_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "orders_slot_id_delivery_slot_info_id_fk": {
+ "name": "orders_slot_id_delivery_slot_info_id_fk",
+ "tableFrom": "orders",
+ "tableTo": "delivery_slot_info",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "slot_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "orders_payment_info_id_payment_info_id_fk": {
+ "name": "orders_payment_info_id_payment_info_id_fk",
+ "tableFrom": "orders",
+ "tableTo": "payment_info",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "payment_info_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.payment_info": {
+ "name": "payment_info",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "payment_info_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "status": {
+ "name": "status",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "gateway": {
+ "name": "gateway",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "order_id": {
+ "name": "order_id",
+ "type": "varchar(500)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "token": {
+ "name": "token",
+ "type": "varchar(500)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "merchant_order_id": {
+ "name": "merchant_order_id",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "payload": {
+ "name": "payload",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "payment_info_merchant_order_id_unique": {
+ "name": "payment_info_merchant_order_id_unique",
+ "nullsNotDistinct": false,
+ "columns": [
+ "merchant_order_id"
+ ]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.payments": {
+ "name": "payments",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "payments_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "status": {
+ "name": "status",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "gateway": {
+ "name": "gateway",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "order_id": {
+ "name": "order_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "token": {
+ "name": "token",
+ "type": "varchar(500)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "merchant_order_id": {
+ "name": "merchant_order_id",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "payload": {
+ "name": "payload",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "payments_order_id_orders_id_fk": {
+ "name": "payments_order_id_orders_id_fk",
+ "tableFrom": "payments",
+ "tableTo": "orders",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "order_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "payments_merchant_order_id_unique": {
+ "name": "payments_merchant_order_id_unique",
+ "nullsNotDistinct": false,
+ "columns": [
+ "merchant_order_id"
+ ]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.product_categories": {
+ "name": "product_categories",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "product_categories_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "varchar(500)",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.product_group_info": {
+ "name": "product_group_info",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "product_group_info_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "group_name": {
+ "name": "group_name",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "varchar(500)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.product_group_membership": {
+ "name": "product_group_membership",
+ "schema": "mf",
+ "columns": {
+ "product_id": {
+ "name": "product_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "group_id": {
+ "name": "group_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "added_at": {
+ "name": "added_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "product_group_membership_product_id_product_info_id_fk": {
+ "name": "product_group_membership_product_id_product_info_id_fk",
+ "tableFrom": "product_group_membership",
+ "tableTo": "product_info",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "product_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "product_group_membership_group_id_product_group_info_id_fk": {
+ "name": "product_group_membership_group_id_product_group_info_id_fk",
+ "tableFrom": "product_group_membership",
+ "tableTo": "product_group_info",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "group_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "product_group_membership_pk": {
+ "name": "product_group_membership_pk",
+ "nullsNotDistinct": false,
+ "columns": [
+ "product_id",
+ "group_id"
+ ]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.product_info": {
+ "name": "product_info",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "product_info_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "short_description": {
+ "name": "short_description",
+ "type": "varchar(500)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "long_description": {
+ "name": "long_description",
+ "type": "varchar(1000)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "unit_id": {
+ "name": "unit_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "price": {
+ "name": "price",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "market_price": {
+ "name": "market_price",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "images": {
+ "name": "images",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_out_of_stock": {
+ "name": "is_out_of_stock",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "is_suspended": {
+ "name": "is_suspended",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "is_flash_available": {
+ "name": "is_flash_available",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "flash_price": {
+ "name": "flash_price",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "increment_step": {
+ "name": "increment_step",
+ "type": "real",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 1
+ },
+ "product_quantity": {
+ "name": "product_quantity",
+ "type": "real",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 1
+ },
+ "store_id": {
+ "name": "store_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "product_info_unit_id_units_id_fk": {
+ "name": "product_info_unit_id_units_id_fk",
+ "tableFrom": "product_info",
+ "tableTo": "units",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "unit_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "product_info_store_id_store_info_id_fk": {
+ "name": "product_info_store_id_store_info_id_fk",
+ "tableFrom": "product_info",
+ "tableTo": "store_info",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "store_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.product_reviews": {
+ "name": "product_reviews",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "product_reviews_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "product_id": {
+ "name": "product_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "review_body": {
+ "name": "review_body",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "image_urls": {
+ "name": "image_urls",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "review_time": {
+ "name": "review_time",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "ratings": {
+ "name": "ratings",
+ "type": "real",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "admin_response": {
+ "name": "admin_response",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "admin_response_images": {
+ "name": "admin_response_images",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "product_reviews_user_id_users_id_fk": {
+ "name": "product_reviews_user_id_users_id_fk",
+ "tableFrom": "product_reviews",
+ "tableTo": "users",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "product_reviews_product_id_product_info_id_fk": {
+ "name": "product_reviews_product_id_product_info_id_fk",
+ "tableFrom": "product_reviews",
+ "tableTo": "product_info",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "product_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {
+ "rating_check": {
+ "name": "rating_check",
+ "value": "\"mf\".\"product_reviews\".\"ratings\" >= 1 AND \"mf\".\"product_reviews\".\"ratings\" <= 5"
+ }
+ },
+ "isRLSEnabled": false
+ },
+ "mf.product_slots": {
+ "name": "product_slots",
+ "schema": "mf",
+ "columns": {
+ "product_id": {
+ "name": "product_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "slot_id": {
+ "name": "slot_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "product_slots_product_id_product_info_id_fk": {
+ "name": "product_slots_product_id_product_info_id_fk",
+ "tableFrom": "product_slots",
+ "tableTo": "product_info",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "product_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "product_slots_slot_id_delivery_slot_info_id_fk": {
+ "name": "product_slots_slot_id_delivery_slot_info_id_fk",
+ "tableFrom": "product_slots",
+ "tableTo": "delivery_slot_info",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "slot_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "product_slot_pk": {
+ "name": "product_slot_pk",
+ "nullsNotDistinct": false,
+ "columns": [
+ "product_id",
+ "slot_id"
+ ]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.product_tag_info": {
+ "name": "product_tag_info",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "product_tag_info_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "tag_name": {
+ "name": "tag_name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "tag_description": {
+ "name": "tag_description",
+ "type": "varchar(500)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "image_url": {
+ "name": "image_url",
+ "type": "varchar(500)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_dashboard_tag": {
+ "name": "is_dashboard_tag",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "related_stores": {
+ "name": "related_stores",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "product_tag_info_tag_name_unique": {
+ "name": "product_tag_info_tag_name_unique",
+ "nullsNotDistinct": false,
+ "columns": [
+ "tag_name"
+ ]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.product_tags": {
+ "name": "product_tags",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "product_tags_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "product_id": {
+ "name": "product_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "tag_id": {
+ "name": "tag_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "assigned_at": {
+ "name": "assigned_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "product_tags_product_id_product_info_id_fk": {
+ "name": "product_tags_product_id_product_info_id_fk",
+ "tableFrom": "product_tags",
+ "tableTo": "product_info",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "product_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "product_tags_tag_id_product_tag_info_id_fk": {
+ "name": "product_tags_tag_id_product_tag_info_id_fk",
+ "tableFrom": "product_tags",
+ "tableTo": "product_tag_info",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "tag_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "unique_product_tag": {
+ "name": "unique_product_tag",
+ "nullsNotDistinct": false,
+ "columns": [
+ "product_id",
+ "tag_id"
+ ]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.refunds": {
+ "name": "refunds",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "refunds_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "order_id": {
+ "name": "order_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "refund_amount": {
+ "name": "refund_amount",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "refund_status": {
+ "name": "refund_status",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'none'"
+ },
+ "merchant_refund_id": {
+ "name": "merchant_refund_id",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "refund_processed_at": {
+ "name": "refund_processed_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "refunds_order_id_orders_id_fk": {
+ "name": "refunds_order_id_orders_id_fk",
+ "tableFrom": "refunds",
+ "tableTo": "orders",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "order_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.reserved_coupons": {
+ "name": "reserved_coupons",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "reserved_coupons_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "secret_code": {
+ "name": "secret_code",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "coupon_code": {
+ "name": "coupon_code",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "discount_percent": {
+ "name": "discount_percent",
+ "type": "numeric(5, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "flat_discount": {
+ "name": "flat_discount",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "min_order": {
+ "name": "min_order",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "product_ids": {
+ "name": "product_ids",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "max_value": {
+ "name": "max_value",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "valid_till": {
+ "name": "valid_till",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "max_limit_for_user": {
+ "name": "max_limit_for_user",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "exclusive_apply": {
+ "name": "exclusive_apply",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "is_redeemed": {
+ "name": "is_redeemed",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "redeemed_by": {
+ "name": "redeemed_by",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "redeemed_at": {
+ "name": "redeemed_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_by": {
+ "name": "created_by",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "reserved_coupons_redeemed_by_users_id_fk": {
+ "name": "reserved_coupons_redeemed_by_users_id_fk",
+ "tableFrom": "reserved_coupons",
+ "tableTo": "users",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "redeemed_by"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "reserved_coupons_created_by_staff_users_id_fk": {
+ "name": "reserved_coupons_created_by_staff_users_id_fk",
+ "tableFrom": "reserved_coupons",
+ "tableTo": "staff_users",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "created_by"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "reserved_coupons_secret_code_unique": {
+ "name": "reserved_coupons_secret_code_unique",
+ "nullsNotDistinct": false,
+ "columns": [
+ "secret_code"
+ ]
+ },
+ "unique_secret_code": {
+ "name": "unique_secret_code",
+ "nullsNotDistinct": false,
+ "columns": [
+ "secret_code"
+ ]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.special_deals": {
+ "name": "special_deals",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "special_deals_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "product_id": {
+ "name": "product_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "quantity": {
+ "name": "quantity",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "price": {
+ "name": "price",
+ "type": "numeric(10, 2)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "valid_till": {
+ "name": "valid_till",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "special_deals_product_id_product_info_id_fk": {
+ "name": "special_deals_product_id_product_info_id_fk",
+ "tableFrom": "special_deals",
+ "tableTo": "product_info",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "product_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.staff_permissions": {
+ "name": "staff_permissions",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "staff_permissions_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "permission_name": {
+ "name": "permission_name",
+ "type": "staff_permission",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "unique_permission_name": {
+ "name": "unique_permission_name",
+ "nullsNotDistinct": false,
+ "columns": [
+ "permission_name"
+ ]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.staff_role_permissions": {
+ "name": "staff_role_permissions",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "staff_role_permissions_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "staff_role_id": {
+ "name": "staff_role_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "staff_permission_id": {
+ "name": "staff_permission_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "staff_role_permissions_staff_role_id_staff_roles_id_fk": {
+ "name": "staff_role_permissions_staff_role_id_staff_roles_id_fk",
+ "tableFrom": "staff_role_permissions",
+ "tableTo": "staff_roles",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "staff_role_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "staff_role_permissions_staff_permission_id_staff_permissions_id_fk": {
+ "name": "staff_role_permissions_staff_permission_id_staff_permissions_id_fk",
+ "tableFrom": "staff_role_permissions",
+ "tableTo": "staff_permissions",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "staff_permission_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "unique_role_permission": {
+ "name": "unique_role_permission",
+ "nullsNotDistinct": false,
+ "columns": [
+ "staff_role_id",
+ "staff_permission_id"
+ ]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.staff_roles": {
+ "name": "staff_roles",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "staff_roles_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "role_name": {
+ "name": "role_name",
+ "type": "staff_role",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "unique_role_name": {
+ "name": "unique_role_name",
+ "nullsNotDistinct": false,
+ "columns": [
+ "role_name"
+ ]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.staff_users": {
+ "name": "staff_users",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "staff_users_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "password": {
+ "name": "password",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "staff_role_id": {
+ "name": "staff_role_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "staff_users_staff_role_id_staff_roles_id_fk": {
+ "name": "staff_users_staff_role_id_staff_roles_id_fk",
+ "tableFrom": "staff_users",
+ "tableTo": "staff_roles",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "staff_role_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.store_info": {
+ "name": "store_info",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "store_info_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "varchar(500)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "image_url": {
+ "name": "image_url",
+ "type": "varchar(500)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "owner": {
+ "name": "owner",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "store_info_owner_staff_users_id_fk": {
+ "name": "store_info_owner_staff_users_id_fk",
+ "tableFrom": "store_info",
+ "tableTo": "staff_users",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "owner"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.units": {
+ "name": "units",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "units_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "short_notation": {
+ "name": "short_notation",
+ "type": "varchar(50)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "full_name": {
+ "name": "full_name",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "unique_short_notation": {
+ "name": "unique_short_notation",
+ "nullsNotDistinct": false,
+ "columns": [
+ "short_notation"
+ ]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.upload_url_status": {
+ "name": "upload_url_status",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "upload_url_status_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "key": {
+ "name": "key",
+ "type": "varchar(500)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "status": {
+ "name": "status",
+ "type": "upload_status",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'pending'"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.user_creds": {
+ "name": "user_creds",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "user_creds_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_password": {
+ "name": "user_password",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "user_creds_user_id_users_id_fk": {
+ "name": "user_creds_user_id_users_id_fk",
+ "tableFrom": "user_creds",
+ "tableTo": "users",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.user_details": {
+ "name": "user_details",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "user_details_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "bio": {
+ "name": "bio",
+ "type": "varchar(500)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "date_of_birth": {
+ "name": "date_of_birth",
+ "type": "date",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "gender": {
+ "name": "gender",
+ "type": "varchar(20)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "occupation": {
+ "name": "occupation",
+ "type": "varchar(100)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "profile_image": {
+ "name": "profile_image",
+ "type": "varchar(500)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_suspended": {
+ "name": "is_suspended",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "user_details_user_id_users_id_fk": {
+ "name": "user_details_user_id_users_id_fk",
+ "tableFrom": "user_details",
+ "tableTo": "users",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "user_details_user_id_unique": {
+ "name": "user_details_user_id_unique",
+ "nullsNotDistinct": false,
+ "columns": [
+ "user_id"
+ ]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.user_notifications": {
+ "name": "user_notifications",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "user_notifications_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "title": {
+ "name": "title",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "image_url": {
+ "name": "image_url",
+ "type": "varchar(500)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "body": {
+ "name": "body",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "applicable_users": {
+ "name": "applicable_users",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.users": {
+ "name": "users",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "users_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "name": {
+ "name": "name",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "email": {
+ "name": "email",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "mobile": {
+ "name": "mobile",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "unique_email": {
+ "name": "unique_email",
+ "nullsNotDistinct": false,
+ "columns": [
+ "email"
+ ]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "mf.vendor_snippets": {
+ "name": "vendor_snippets",
+ "schema": "mf",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "identity": {
+ "type": "always",
+ "name": "vendor_snippets_id_seq",
+ "schema": "mf",
+ "increment": "1",
+ "startWith": "1",
+ "minValue": "1",
+ "maxValue": "2147483647",
+ "cache": "1",
+ "cycle": false
+ }
+ },
+ "snippet_code": {
+ "name": "snippet_code",
+ "type": "varchar(255)",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "slot_id": {
+ "name": "slot_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_permanent": {
+ "name": "is_permanent",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "product_ids": {
+ "name": "product_ids",
+ "type": "integer[]",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "valid_till": {
+ "name": "valid_till",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "vendor_snippets_slot_id_delivery_slot_info_id_fk": {
+ "name": "vendor_snippets_slot_id_delivery_slot_info_id_fk",
+ "tableFrom": "vendor_snippets",
+ "tableTo": "delivery_slot_info",
+ "schemaTo": "mf",
+ "columnsFrom": [
+ "slot_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "vendor_snippets_snippet_code_unique": {
+ "name": "vendor_snippets_snippet_code_unique",
+ "nullsNotDistinct": false,
+ "columns": [
+ "snippet_code"
+ ]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {
+ "public.payment_status": {
+ "name": "payment_status",
+ "schema": "public",
+ "values": [
+ "pending",
+ "success",
+ "cod",
+ "failed"
+ ]
+ },
+ "public.staff_permission": {
+ "name": "staff_permission",
+ "schema": "public",
+ "values": [
+ "crud_product",
+ "make_coupon",
+ "crud_staff_users"
+ ]
+ },
+ "public.staff_role": {
+ "name": "staff_role",
+ "schema": "public",
+ "values": [
+ "super_admin",
+ "admin",
+ "marketer",
+ "delivery_staff"
+ ]
+ },
+ "public.upload_status": {
+ "name": "upload_status",
+ "schema": "public",
+ "values": [
+ "pending",
+ "claimed"
+ ]
+ }
+ },
+ "schemas": {},
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
\ No newline at end of file
diff --git a/apps/backend/drizzle/meta/_journal.json b/apps/backend/drizzle/meta/_journal.json
index de98af1..2df014b 100644
--- a/apps/backend/drizzle/meta/_journal.json
+++ b/apps/backend/drizzle/meta/_journal.json
@@ -519,6 +519,13 @@
"when": 1770561175889,
"tag": "0073_faithful_gravity",
"breakpoints": true
+ },
+ {
+ "idx": 74,
+ "version": "7",
+ "when": 1771674555093,
+ "tag": "0074_outgoing_black_cat",
+ "breakpoints": true
}
]
}
\ No newline at end of file
diff --git a/apps/backend/src/db/schema.ts b/apps/backend/src/db/schema.ts
index 0faea07..dd6b145 100755
--- a/apps/backend/src/db/schema.ts
+++ b/apps/backend/src/db/schema.ts
@@ -192,6 +192,7 @@ export const deliverySlotInfo = mf.table('delivery_slot_info', {
freezeTime: timestamp('freeze_time').notNull(),
isActive: boolean('is_active').notNull().default(true),
isFlash: boolean('is_flash').notNull().default(false),
+ isCapacityFull: boolean('is_capacity_full').notNull().default(false),
deliverySequence: jsonb('delivery_sequence').$defaultFn(() => {}),
groupIds: jsonb('group_ids').$defaultFn(() => []),
});
diff --git a/apps/backend/src/stores/product-store.ts b/apps/backend/src/stores/product-store.ts
index d7a516d..1333ec8 100644
--- a/apps/backend/src/stores/product-store.ts
+++ b/apps/backend/src/stores/product-store.ts
@@ -21,7 +21,7 @@ interface Product {
productQuantity: number;
isFlashAvailable: boolean;
flashPrice: string | null;
- deliverySlots: Array<{ id: number; deliveryTime: Date; freezeTime: Date }>;
+ deliverySlots: Array<{ id: number; deliveryTime: Date; freezeTime: Date; isCapacityFull: boolean }>;
specialDeals: Array<{ quantity: string; price: string; validTill: Date }>;
productTags: string[];
}
@@ -57,19 +57,21 @@ export async function initializeProducts(): Promise {
});
const storeMap = new Map(allStores.map(s => [s.id, s]));
- // Fetch all delivery slots
+ // Fetch all delivery slots (excluding full capacity slots)
const allDeliverySlots = await db
.select({
productId: productSlots.productId,
id: deliverySlotInfo.id,
deliveryTime: deliverySlotInfo.deliveryTime,
freezeTime: deliverySlotInfo.freezeTime,
+ isCapacityFull: deliverySlotInfo.isCapacityFull,
})
.from(productSlots)
.innerJoin(deliverySlotInfo, eq(productSlots.slotId, deliverySlotInfo.id))
.where(
and(
eq(deliverySlotInfo.isActive, true),
+ eq(deliverySlotInfo.isCapacityFull, false),
gt(deliverySlotInfo.deliveryTime, sql`NOW()`)
)
);
@@ -132,7 +134,7 @@ export async function initializeProducts(): Promise {
productQuantity: product.productQuantity,
isFlashAvailable: product.isFlashAvailable,
flashPrice: product.flashPrice?.toString() || null,
- deliverySlots: deliverySlots.map(s => ({ id: s.id, deliveryTime: s.deliveryTime, freezeTime: s.freezeTime })),
+ deliverySlots: deliverySlots.map(s => ({ id: s.id, deliveryTime: s.deliveryTime, freezeTime: s.freezeTime, isCapacityFull: s.isCapacityFull })),
specialDeals: specialDeals.map(d => ({ quantity: d.quantity.toString(), price: d.price.toString(), validTill: d.validTill })),
productTags: productTags,
};
diff --git a/apps/backend/src/stores/slot-store.ts b/apps/backend/src/stores/slot-store.ts
index 9da684b..42a224a 100644
--- a/apps/backend/src/stores/slot-store.ts
+++ b/apps/backend/src/stores/slot-store.ts
@@ -11,6 +11,7 @@ interface SlotWithProducts {
deliveryTime: Date;
freezeTime: Date;
isActive: boolean;
+ isCapacityFull: boolean;
products: Array<{
id: number;
name: string;
@@ -30,6 +31,7 @@ interface SlotInfo {
id: number;
deliveryTime: Date;
freezeTime: Date;
+ isCapacityFull: boolean;
}
export async function initializeSlotStore(): Promise {
@@ -80,6 +82,7 @@ export async function initializeSlotStore(): Promise {
deliveryTime: slot.deliveryTime,
freezeTime: slot.freezeTime,
isActive: slot.isActive,
+ isCapacityFull: slot.isCapacityFull,
products: await Promise.all(
slot.productSlots.map(async (productSlot) => ({
id: productSlot.product.id,
@@ -118,6 +121,7 @@ export async function initializeSlotStore(): Promise {
id: slot.id,
deliveryTime: slot.deliveryTime,
freezeTime: slot.freezeTime,
+ isCapacityFull: slot.isCapacityFull,
});
}
}
@@ -225,7 +229,9 @@ export async function getMultipleProductsSlots(productIds: number[]): Promise !slot.isCapacityFull);
}
}
diff --git a/apps/backend/src/trpc/admin-apis/order.ts b/apps/backend/src/trpc/admin-apis/order.ts
index e4a6e1c..dcb5c2b 100644
--- a/apps/backend/src/trpc/admin-apis/order.ts
+++ b/apps/backend/src/trpc/admin-apis/order.ts
@@ -325,7 +325,8 @@ export const orderRouter = router({
: null,
isCod: orderData.isCod,
isOnlinePayment: orderData.isOnlinePayment,
- totalAmount: orderData.totalAmount,
+ totalAmount: parseFloat(orderData.totalAmount?.toString() || '0') - parseFloat(orderData.deliveryCharge?.toString() || '0'),
+ deliveryCharge: parseFloat(orderData.deliveryCharge?.toString() || '0'),
adminNotes: orderData.adminNotes,
userNotes: orderData.userNotes,
createdAt: orderData.createdAt,
@@ -460,6 +461,34 @@ export const orderRouter = router({
return { success: true };
}),
+ removeDeliveryCharge: protectedProcedure
+ .input(z.object({ orderId: z.number() }))
+ .mutation(async ({ input }) => {
+ const { orderId } = input;
+
+ const order = await db.query.orders.findFirst({
+ where: eq(orders.id, orderId),
+ });
+
+ if (!order) {
+ throw new Error('Order not found');
+ }
+
+ const currentDeliveryCharge = parseFloat(order.deliveryCharge?.toString() || '0');
+ const currentTotalAmount = parseFloat(order.totalAmount?.toString() || '0');
+ const newTotalAmount = currentTotalAmount - currentDeliveryCharge;
+
+ await db
+ .update(orders)
+ .set({
+ deliveryCharge: '0',
+ totalAmount: newTotalAmount.toString()
+ })
+ .where(eq(orders.id, orderId));
+
+ return { success: true, message: 'Delivery charge removed' };
+ }),
+
getSlotOrders: protectedProcedure
.input(getSlotOrdersSchema)
.query(async ({ input }) => {
diff --git a/apps/backend/src/trpc/admin-apis/slots.ts b/apps/backend/src/trpc/admin-apis/slots.ts
index ab2f0b3..4f35401 100644
--- a/apps/backend/src/trpc/admin-apis/slots.ts
+++ b/apps/backend/src/trpc/admin-apis/slots.ts
@@ -574,4 +574,36 @@ export const slotsRouter = router({
message: "Delivery sequence updated successfully",
};
}),
+
+ updateSlotCapacity: protectedProcedure
+ .input(z.object({
+ slotId: z.number(),
+ isCapacityFull: z.boolean(),
+ }))
+ .mutation(async ({ input, ctx }) => {
+ if (!ctx.staffUser?.id) {
+ throw new TRPCError({ code: "UNAUTHORIZED", message: "Access denied" });
+ }
+
+ const { slotId, isCapacityFull } = input;
+
+ const [updatedSlot] = await db
+ .update(deliverySlotInfo)
+ .set({ isCapacityFull })
+ .where(eq(deliverySlotInfo.id, slotId))
+ .returning();
+
+ if (!updatedSlot) {
+ throw new ApiError("Slot not found", 404);
+ }
+
+ // Reinitialize stores to reflect changes
+ await initializeAllStores();
+
+ return {
+ success: true,
+ slot: updatedSlot,
+ message: `Slot ${isCapacityFull ? 'marked as full capacity' : 'capacity reset'}`,
+ };
+ }),
});
diff --git a/apps/backend/src/trpc/common-apis/common.ts b/apps/backend/src/trpc/common-apis/common.ts
index 077f4c6..f7650a7 100644
--- a/apps/backend/src/trpc/common-apis/common.ts
+++ b/apps/backend/src/trpc/common-apis/common.ts
@@ -17,6 +17,7 @@ export const getNextDeliveryDate = async (productId: number): Promise i.slotId !== null).map(i => i.slotId as number))];
+ for (const slotId of slotIds) {
+ const slot = await getSlotById(slotId);
+ if (slot?.isCapacityFull) {
+ throw new ApiError("Selected delivery slot is at full capacity. Please choose another slot.", 403);
+ }
+ }
+ }
+
let processedItems = selectedItems;
// Handle flash delivery slot resolution
diff --git a/apps/backend/src/trpc/user-apis/product.ts b/apps/backend/src/trpc/user-apis/product.ts
index 34432df..ddd5a82 100644
--- a/apps/backend/src/trpc/user-apis/product.ts
+++ b/apps/backend/src/trpc/user-apis/product.ts
@@ -47,10 +47,10 @@ export const productRouter = router({
const cachedProduct = await getProductByIdFromCache(productId);
if (cachedProduct) {
- // Filter delivery slots to only include those with future freeze times
+ // Filter delivery slots to only include those with future freeze times and not at full capacity
const currentTime = new Date();
const filteredSlots = cachedProduct.deliverySlots.filter(slot =>
- dayjs(slot.freezeTime).isAfter(currentTime)
+ dayjs(slot.freezeTime).isAfter(currentTime) && !slot.isCapacityFull
);
return {
@@ -107,6 +107,7 @@ export const productRouter = router({
and(
eq(productSlots.productId, productId),
eq(deliverySlotInfo.isActive, true),
+ eq(deliverySlotInfo.isCapacityFull, false),
gt(deliverySlotInfo.deliveryTime, sql`NOW()`),
gt(deliverySlotInfo.freezeTime, sql`NOW()`)
)
diff --git a/apps/backend/src/trpc/user-apis/slots.ts b/apps/backend/src/trpc/user-apis/slots.ts
index a031a7f..8d36464 100644
--- a/apps/backend/src/trpc/user-apis/slots.ts
+++ b/apps/backend/src/trpc/user-apis/slots.ts
@@ -48,7 +48,7 @@ export const slotsRouter = router({
const allSlots = await getAllSlotsFromCache();
const currentTime = new Date();
const validSlots = allSlots
- .filter((slot) => dayjs(slot.freezeTime).isAfter(currentTime))
+ .filter((slot) => dayjs(slot.freezeTime).isAfter(currentTime) && !slot.isCapacityFull)
.sort((a, b) => dayjs(a.deliveryTime).valueOf() - dayjs(b.deliveryTime).valueOf());
return {
diff --git a/apps/user-ui/src/components/AddToCartDialog.tsx b/apps/user-ui/src/components/AddToCartDialog.tsx
index 5aa717c..66a9ff4 100644
--- a/apps/user-ui/src/components/AddToCartDialog.tsx
+++ b/apps/user-ui/src/components/AddToCartDialog.tsx
@@ -11,6 +11,19 @@ import { useGetEssentialConsts } from '@/src/api-hooks/essential-consts.api';
import dayjs from 'dayjs';
import { SafeAreaView } from 'react-native-safe-area-context';
+const formatTimeRange = (deliveryTime: string) => {
+ const time = dayjs(deliveryTime);
+ const endTime = time.add(1, 'hour');
+ const startPeriod = time.format('A');
+ const endPeriod = endTime.format('A');
+
+ if (startPeriod === endPeriod) {
+ return `${time.format('h')}-${endTime.format('h')} ${startPeriod}`;
+ } else {
+ return `${time.format('h:mm')} ${startPeriod} - ${endTime.format('h:mm')} ${endPeriod}`;
+ }
+};
+
export default function AddToCartDialog() {
const router = useRouter();
const { addedToCartProduct, clearAddedToCartProduct } = useCartStore();
@@ -158,7 +171,7 @@ export default function AddToCartDialog() {
- {dayjs(slot.deliveryTime).format('ddd, DD MMM • h:mm A')}
+ {dayjs(slot.deliveryTime).format('ddd, DD MMM • ')}{formatTimeRange(slot.deliveryTime)}
{selectedSlotId === slot.id ? (
diff --git a/packages/ui/index.ts b/packages/ui/index.ts
index f1b34ad..6da95c7 100755
--- a/packages/ui/index.ts
+++ b/packages/ui/index.ts
@@ -63,7 +63,7 @@ const isDevMode = Constants.executionEnvironment !== "standalone";
// const BASE_API_URL = API_URL;
// const BASE_API_URL = 'http://10.0.2.2:4000';
// const BASE_API_URL = 'http://192.168.100.101:4000';
-const BASE_API_URL = 'http://192.168.1.6:4000';
+const BASE_API_URL = 'http://192.168.100.105:4000';
// let BASE_API_URL = "https://mf.freshyo.in";
// let BASE_API_URL = 'http://192.168.100.104:4000';
// let BASE_API_URL = 'http://192.168.29.176:4000';