This commit is contained in:
shafi54 2026-03-23 11:17:38 +05:30
commit 23be301cc0
201 changed files with 10035 additions and 17 deletions

1
.gitignore vendored
View file

@ -8,6 +8,7 @@ yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*
*.apk
**/appBinaries
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,11 @@
import 'dotenv/config'
import { defineConfig } from 'drizzle-kit'
export default defineConfig({
out: './drizzle/pg',
schema: './src/db/schema-postgres.ts',
dialect: 'postgresql',
dbCredentials: {
url: process.env.DATABASE_URL!,
},
})

View file

@ -0,0 +1,11 @@
import 'dotenv/config'
import { defineConfig } from 'drizzle-kit'
export default defineConfig({
out: './drizzle/sqlite',
schema: './src/db/schema-sqlite.ts',
dialect: 'sqlite',
dbCredentials: {
url: process.env.SQLITE_DB_PATH!,
},
})

View file

@ -0,0 +1,515 @@
CREATE TABLE `address_areas` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`place_name` text NOT NULL,
`zone_id` integer,
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
FOREIGN KEY (`zone_id`) REFERENCES `address_zones`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE TABLE `address_zones` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`zone_name` text NOT NULL,
`added_at` integer DEFAULT (strftime('%s','now')) NOT NULL
);
--> statement-breakpoint
CREATE TABLE `addresses` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`user_id` integer NOT NULL,
`name` text NOT NULL,
`phone` text NOT NULL,
`address_line1` text NOT NULL,
`address_line2` text,
`city` text NOT NULL,
`state` text NOT NULL,
`pincode` text NOT NULL,
`is_default` integer DEFAULT false NOT NULL,
`latitude` real,
`longitude` real,
`google_maps_url` text,
`admin_latitude` real,
`admin_longitude` real,
`zone_id` integer,
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action,
FOREIGN KEY (`zone_id`) REFERENCES `address_zones`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE TABLE `cart_items` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`user_id` integer NOT NULL,
`product_id` integer NOT NULL,
`quantity` text NOT NULL,
`added_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action,
FOREIGN KEY (`product_id`) REFERENCES `product_info`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE UNIQUE INDEX `unique_user_product` ON `cart_items` (`user_id`,`product_id`);--> statement-breakpoint
CREATE TABLE `complaints` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`user_id` integer NOT NULL,
`order_id` integer,
`complaint_body` text NOT NULL,
`images` text,
`response` text,
`is_resolved` integer DEFAULT false NOT NULL,
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action,
FOREIGN KEY (`order_id`) REFERENCES `orders`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE TABLE `coupon_applicable_products` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`coupon_id` integer NOT NULL,
`product_id` integer NOT NULL,
FOREIGN KEY (`coupon_id`) REFERENCES `coupons`(`id`) ON UPDATE no action ON DELETE no action,
FOREIGN KEY (`product_id`) REFERENCES `product_info`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE UNIQUE INDEX `unique_coupon_product` ON `coupon_applicable_products` (`coupon_id`,`product_id`);--> statement-breakpoint
CREATE TABLE `coupon_applicable_users` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`coupon_id` integer NOT NULL,
`user_id` integer NOT NULL,
FOREIGN KEY (`coupon_id`) REFERENCES `coupons`(`id`) ON UPDATE no action ON DELETE no action,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE UNIQUE INDEX `unique_coupon_user` ON `coupon_applicable_users` (`coupon_id`,`user_id`);--> statement-breakpoint
CREATE TABLE `coupon_usage` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`user_id` integer NOT NULL,
`coupon_id` integer NOT NULL,
`order_id` integer,
`order_item_id` integer,
`used_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action,
FOREIGN KEY (`coupon_id`) REFERENCES `coupons`(`id`) ON UPDATE no action ON DELETE no action,
FOREIGN KEY (`order_id`) REFERENCES `orders`(`id`) ON UPDATE no action ON DELETE no action,
FOREIGN KEY (`order_item_id`) REFERENCES `order_items`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE TABLE `coupons` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`coupon_code` text NOT NULL,
`is_user_based` integer DEFAULT false NOT NULL,
`discount_percent` text,
`flat_discount` text,
`min_order` text,
`product_ids` text,
`created_by` integer,
`max_value` text,
`is_apply_for_all` integer DEFAULT false NOT NULL,
`valid_till` integer,
`max_limit_for_user` integer,
`is_invalidated` integer DEFAULT false NOT NULL,
`exclusive_apply` integer DEFAULT false NOT NULL,
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
FOREIGN KEY (`created_by`) REFERENCES `staff_users`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE UNIQUE INDEX `unique_coupon_code` ON `coupons` (`coupon_code`);--> statement-breakpoint
CREATE TABLE `delivery_slot_info` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`delivery_time` integer NOT NULL,
`freeze_time` integer NOT NULL,
`is_active` integer DEFAULT true NOT NULL,
`is_flash` integer DEFAULT false NOT NULL,
`is_capacity_full` integer DEFAULT false NOT NULL,
`delivery_sequence` text DEFAULT '{}',
`group_ids` text DEFAULT '[]'
);
--> statement-breakpoint
CREATE TABLE `home_banners` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`name` text NOT NULL,
`image_url` text NOT NULL,
`description` text,
`product_ids` text,
`redirect_url` text,
`serial_num` integer,
`is_active` integer DEFAULT false NOT NULL,
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
`last_updated` integer DEFAULT (strftime('%s','now')) NOT NULL
);
--> statement-breakpoint
CREATE TABLE `key_val_store` (
`key` text PRIMARY KEY NOT NULL,
`value` text
);
--> statement-breakpoint
CREATE TABLE `notif_creds` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`token` text NOT NULL,
`added_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
`user_id` integer NOT NULL,
`last_verified` integer,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE UNIQUE INDEX `notif_creds_token_unique` ON `notif_creds` (`token`);--> statement-breakpoint
CREATE TABLE `notifications` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`user_id` integer NOT NULL,
`title` text NOT NULL,
`body` text NOT NULL,
`type` text,
`is_read` integer DEFAULT false NOT NULL,
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE TABLE `order_items` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`order_id` integer NOT NULL,
`product_id` integer NOT NULL,
`quantity` text NOT NULL,
`price` text NOT NULL,
`discounted_price` text,
`is_packaged` integer DEFAULT false NOT NULL,
`is_package_verified` integer DEFAULT false NOT NULL,
FOREIGN KEY (`order_id`) REFERENCES `orders`(`id`) ON UPDATE no action ON DELETE no action,
FOREIGN KEY (`product_id`) REFERENCES `product_info`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE TABLE `order_status` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`order_time` integer DEFAULT (strftime('%s','now')) NOT NULL,
`user_id` integer NOT NULL,
`order_id` integer NOT NULL,
`is_packaged` integer DEFAULT false NOT NULL,
`is_delivered` integer DEFAULT false NOT NULL,
`is_cancelled` integer DEFAULT false NOT NULL,
`cancel_reason` text,
`is_cancelled_by_admin` integer,
`payment_state` text DEFAULT 'pending' NOT NULL,
`cancellation_user_notes` text,
`cancellation_admin_notes` text,
`cancellation_reviewed` integer DEFAULT false NOT NULL,
`cancellation_reviewed_at` integer,
`refund_coupon_id` integer,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action,
FOREIGN KEY (`order_id`) REFERENCES `orders`(`id`) ON UPDATE no action ON DELETE no action,
FOREIGN KEY (`refund_coupon_id`) REFERENCES `coupons`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE TABLE `orders` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`user_id` integer NOT NULL,
`address_id` integer NOT NULL,
`slot_id` integer,
`is_cod` integer DEFAULT false NOT NULL,
`is_online_payment` integer DEFAULT false NOT NULL,
`payment_info_id` integer,
`total_amount` text NOT NULL,
`delivery_charge` text DEFAULT '0' NOT NULL,
`readable_id` integer NOT NULL,
`admin_notes` text,
`user_notes` text,
`order_group_id` text,
`order_group_proportion` text,
`is_flash_delivery` integer DEFAULT false NOT NULL,
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action,
FOREIGN KEY (`address_id`) REFERENCES `addresses`(`id`) ON UPDATE no action ON DELETE no action,
FOREIGN KEY (`slot_id`) REFERENCES `delivery_slot_info`(`id`) ON UPDATE no action ON DELETE no action,
FOREIGN KEY (`payment_info_id`) REFERENCES `payment_info`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE TABLE `payment_info` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`status` text NOT NULL,
`gateway` text NOT NULL,
`order_id` text,
`token` text,
`merchant_order_id` text NOT NULL,
`payload` text
);
--> statement-breakpoint
CREATE UNIQUE INDEX `payment_info_merchant_order_id_unique` ON `payment_info` (`merchant_order_id`);--> statement-breakpoint
CREATE TABLE `payments` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`status` text NOT NULL,
`gateway` text NOT NULL,
`order_id` integer NOT NULL,
`token` text,
`merchant_order_id` text NOT NULL,
`payload` text,
FOREIGN KEY (`order_id`) REFERENCES `orders`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE UNIQUE INDEX `payments_merchant_order_id_unique` ON `payments` (`merchant_order_id`);--> statement-breakpoint
CREATE TABLE `product_availability_schedules` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`time` text NOT NULL,
`schedule_name` text NOT NULL,
`action` text NOT NULL,
`product_ids` text DEFAULT '[]' NOT NULL,
`group_ids` text DEFAULT '[]' NOT NULL,
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
`last_updated` integer DEFAULT (strftime('%s','now')) NOT NULL
);
--> statement-breakpoint
CREATE UNIQUE INDEX `product_availability_schedules_schedule_name_unique` ON `product_availability_schedules` (`schedule_name`);--> statement-breakpoint
CREATE TABLE `product_categories` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`name` text NOT NULL,
`description` text
);
--> statement-breakpoint
CREATE TABLE `product_group_info` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`group_name` text NOT NULL,
`description` text,
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL
);
--> statement-breakpoint
CREATE TABLE `product_group_membership` (
`product_id` integer NOT NULL,
`group_id` integer NOT NULL,
`added_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
FOREIGN KEY (`product_id`) REFERENCES `product_info`(`id`) ON UPDATE no action ON DELETE no action,
FOREIGN KEY (`group_id`) REFERENCES `product_group_info`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE UNIQUE INDEX `product_group_membership_pk` ON `product_group_membership` (`product_id`,`group_id`);--> statement-breakpoint
CREATE TABLE `product_info` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`name` text NOT NULL,
`short_description` text,
`long_description` text,
`unit_id` integer NOT NULL,
`price` text NOT NULL,
`market_price` text,
`images` text,
`is_out_of_stock` integer DEFAULT false NOT NULL,
`is_suspended` integer DEFAULT false NOT NULL,
`is_flash_available` integer DEFAULT false NOT NULL,
`flash_price` text,
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
`increment_step` real DEFAULT 1 NOT NULL,
`product_quantity` real DEFAULT 1 NOT NULL,
`store_id` integer,
`scheduled_availability` integer DEFAULT true NOT NULL,
FOREIGN KEY (`unit_id`) REFERENCES `units`(`id`) ON UPDATE no action ON DELETE no action,
FOREIGN KEY (`store_id`) REFERENCES `store_info`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE TABLE `product_reviews` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`user_id` integer NOT NULL,
`product_id` integer NOT NULL,
`review_body` text NOT NULL,
`image_urls` text DEFAULT '[]',
`review_time` integer DEFAULT (strftime('%s','now')) NOT NULL,
`ratings` real NOT NULL,
`admin_response` text,
`admin_response_images` text DEFAULT '[]',
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action,
FOREIGN KEY (`product_id`) REFERENCES `product_info`(`id`) ON UPDATE no action ON DELETE no action,
CONSTRAINT "rating_check" CHECK("product_reviews"."ratings" >= 1 AND "product_reviews"."ratings" <= 5)
);
--> statement-breakpoint
CREATE TABLE `product_slots` (
`product_id` integer NOT NULL,
`slot_id` integer NOT NULL,
FOREIGN KEY (`product_id`) REFERENCES `product_info`(`id`) ON UPDATE no action ON DELETE no action,
FOREIGN KEY (`slot_id`) REFERENCES `delivery_slot_info`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE UNIQUE INDEX `product_slot_pk` ON `product_slots` (`product_id`,`slot_id`);--> statement-breakpoint
CREATE TABLE `product_tag_info` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`tag_name` text NOT NULL,
`tag_description` text,
`image_url` text,
`is_dashboard_tag` integer DEFAULT false NOT NULL,
`related_stores` text DEFAULT '[]',
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL
);
--> statement-breakpoint
CREATE UNIQUE INDEX `product_tag_info_tag_name_unique` ON `product_tag_info` (`tag_name`);--> statement-breakpoint
CREATE TABLE `product_tags` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`product_id` integer NOT NULL,
`tag_id` integer NOT NULL,
`assigned_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
FOREIGN KEY (`product_id`) REFERENCES `product_info`(`id`) ON UPDATE no action ON DELETE no action,
FOREIGN KEY (`tag_id`) REFERENCES `product_tag_info`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE UNIQUE INDEX `unique_product_tag` ON `product_tags` (`product_id`,`tag_id`);--> statement-breakpoint
CREATE TABLE `refunds` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`order_id` integer NOT NULL,
`refund_amount` text,
`refund_status` text DEFAULT 'none',
`merchant_refund_id` text,
`refund_processed_at` integer,
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
FOREIGN KEY (`order_id`) REFERENCES `orders`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE TABLE `reserved_coupons` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`secret_code` text NOT NULL,
`coupon_code` text NOT NULL,
`discount_percent` text,
`flat_discount` text,
`min_order` text,
`product_ids` text,
`max_value` text,
`valid_till` integer,
`max_limit_for_user` integer,
`exclusive_apply` integer DEFAULT false NOT NULL,
`is_redeemed` integer DEFAULT false NOT NULL,
`redeemed_by` integer,
`redeemed_at` integer,
`created_by` integer NOT NULL,
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
FOREIGN KEY (`redeemed_by`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action,
FOREIGN KEY (`created_by`) REFERENCES `staff_users`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE UNIQUE INDEX `reserved_coupons_secret_code_unique` ON `reserved_coupons` (`secret_code`);--> statement-breakpoint
CREATE UNIQUE INDEX `unique_secret_code` ON `reserved_coupons` (`secret_code`);--> statement-breakpoint
CREATE TABLE `special_deals` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`product_id` integer NOT NULL,
`quantity` text NOT NULL,
`price` text NOT NULL,
`valid_till` integer NOT NULL,
FOREIGN KEY (`product_id`) REFERENCES `product_info`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE TABLE `staff_permissions` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`permission_name` text NOT NULL,
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL
);
--> statement-breakpoint
CREATE UNIQUE INDEX `unique_permission_name` ON `staff_permissions` (`permission_name`);--> statement-breakpoint
CREATE TABLE `staff_role_permissions` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`staff_role_id` integer NOT NULL,
`staff_permission_id` integer NOT NULL,
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
FOREIGN KEY (`staff_role_id`) REFERENCES `staff_roles`(`id`) ON UPDATE no action ON DELETE no action,
FOREIGN KEY (`staff_permission_id`) REFERENCES `staff_permissions`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE UNIQUE INDEX `unique_role_permission` ON `staff_role_permissions` (`staff_role_id`,`staff_permission_id`);--> statement-breakpoint
CREATE TABLE `staff_roles` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`role_name` text NOT NULL,
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL
);
--> statement-breakpoint
CREATE UNIQUE INDEX `unique_role_name` ON `staff_roles` (`role_name`);--> statement-breakpoint
CREATE TABLE `staff_users` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`name` text NOT NULL,
`password` text NOT NULL,
`staff_role_id` integer,
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
FOREIGN KEY (`staff_role_id`) REFERENCES `staff_roles`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE TABLE `store_info` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`name` text NOT NULL,
`description` text,
`image_url` text,
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
`owner` integer NOT NULL,
FOREIGN KEY (`owner`) REFERENCES `staff_users`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE TABLE `units` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`short_notation` text NOT NULL,
`full_name` text NOT NULL
);
--> statement-breakpoint
CREATE UNIQUE INDEX `unique_short_notation` ON `units` (`short_notation`);--> statement-breakpoint
CREATE TABLE `unlogged_user_tokens` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`token` text NOT NULL,
`added_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
`last_verified` integer
);
--> statement-breakpoint
CREATE UNIQUE INDEX `unlogged_user_tokens_token_unique` ON `unlogged_user_tokens` (`token`);--> statement-breakpoint
CREATE TABLE `upload_url_status` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
`key` text NOT NULL,
`status` text DEFAULT 'pending' NOT NULL
);
--> statement-breakpoint
CREATE TABLE `user_creds` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`user_id` integer NOT NULL,
`user_password` text NOT NULL,
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE TABLE `user_details` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`user_id` integer NOT NULL,
`bio` text,
`date_of_birth` integer,
`gender` text,
`occupation` text,
`profile_image` text,
`is_suspended` integer DEFAULT false NOT NULL,
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
`updated_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE UNIQUE INDEX `user_details_user_id_unique` ON `user_details` (`user_id`);--> statement-breakpoint
CREATE TABLE `user_incidents` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`user_id` integer NOT NULL,
`order_id` integer,
`date_added` integer DEFAULT (strftime('%s','now')) NOT NULL,
`admin_comment` text,
`added_by` integer,
`negativity_score` integer,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE no action,
FOREIGN KEY (`order_id`) REFERENCES `orders`(`id`) ON UPDATE no action ON DELETE no action,
FOREIGN KEY (`added_by`) REFERENCES `staff_users`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE TABLE `user_notifications` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`title` text NOT NULL,
`image_url` text,
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
`body` text NOT NULL,
`applicable_users` text
);
--> statement-breakpoint
CREATE TABLE `users` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`name` text,
`email` text,
`mobile` text,
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL
);
--> statement-breakpoint
CREATE UNIQUE INDEX `unique_email` ON `users` (`email`);--> statement-breakpoint
CREATE TABLE `vendor_snippets` (
`id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
`snippet_code` text NOT NULL,
`slot_id` integer,
`is_permanent` integer DEFAULT false NOT NULL,
`product_ids` text NOT NULL,
`valid_till` integer,
`created_at` integer DEFAULT (strftime('%s','now')) NOT NULL,
FOREIGN KEY (`slot_id`) REFERENCES `delivery_slot_info`(`id`) ON UPDATE no action ON DELETE no action
);
--> statement-breakpoint
CREATE UNIQUE INDEX `vendor_snippets_snippet_code_unique` ON `vendor_snippets` (`snippet_code`);

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,13 @@
{
"version": "7",
"dialect": "sqlite",
"entries": [
{
"idx": 0,
"version": "6",
"when": 1774244805277,
"tag": "0000_goofy_oracle",
"breakpoints": true
}
]
}

View file

@ -157,6 +157,7 @@ app.onError((err, c) => {
return c.json({ message }, status)
})
<<<<<<< HEAD
// Start server
serve({
fetch: app.fetch,
@ -165,3 +166,8 @@ serve({
})
console.log('🚀 Server running on http://localhost:4000')
=======
app.listen(4000, '::', () => {
console.log("Server is running on http://localhost:4000/api/mobile/");
});
>>>>>>> main

View file

@ -4,10 +4,16 @@
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"migrate": "drizzle-kit generate:pg",
"migrate": "drizzle-kit generate --config drizzle.config.postgres.ts",
"migrate:pg": "drizzle-kit generate --config drizzle.config.postgres.ts",
"migrate:sqlite": "drizzle-kit generate --config drizzle.config.sqlite.ts",
"generate:pg": "bunx drizzle-kit generate --config drizzle.config.postgres.ts",
"generate:sqlite": "bunx drizzle-kit generate --config drizzle.config.sqlite.ts",
"build": "rimraf ./dist && tsc --project tsconfig.json && tsc-alias -p tsconfig.json",
"build2": "rimraf ./dist && tsc",
"db:push": "drizzle-kit push:pg",
"db:push": "drizzle-kit push --config drizzle.config.postgres.ts",
"db:push:pg": "drizzle-kit push --config drizzle.config.postgres.ts",
"db:push:sqlite": "drizzle-kit push --config drizzle.config.sqlite.ts",
"db:seed": "tsx src/db/seed.ts",
"dev:express": "bun --watch index-express.ts",
"dev:hono": "bun --watch index.ts",
@ -40,6 +46,7 @@
"jose": "^5.10.0",
"node-cron": "^4.2.1",
"pg": "^8.16.3",
"razorpay": "^2.9.6",
"redis": "^5.9.0",
"zod": "^4.1.12"
},

View file

@ -35,7 +35,10 @@ const formatOrderMessageWithFullData = (ordersData: any[]): string => {
message += '📦 <b>Items:</b>\n';
order.orderItems?.forEach((item: any) => {
message += `${item.product?.name || 'Unknown'} x${item.quantity}\n`;
const productQuantity = item.product?.productQuantity ?? 1
const unitNotation = item.product?.unit?.shortNotation || ''
const quantityWithUnit = unitNotation ? `${productQuantity}${unitNotation}` : `${productQuantity}`
message += `${item.product?.name || 'Unknown'} ${quantityWithUnit} x${item.quantity}\n`;
});
message += `\n💰 <b>Total:</b> ₹${order.totalAmount}\n`;
@ -72,7 +75,12 @@ const formatCancellationMessage = (orderData: any, cancellationData: Cancellatio
📞 <b>Phone:</b> ${orderData.address?.phone || 'N/A'}
📦 <b>Items:</b>
${orderData.orderItems?.map((item: any) => `${item.product?.name || 'Unknown'} x${item.quantity}`).join('\n') || ' N/A'}
${orderData.orderItems?.map((item: any) => {
const productQuantity = item.product?.productQuantity ?? 1
const unitNotation = item.product?.unit?.shortNotation || ''
const quantityWithUnit = unitNotation ? `${productQuantity}${unitNotation}` : `${productQuantity}`
return `${item.product?.name || 'Unknown'} ${quantityWithUnit} x${item.quantity}`
}).join('\n') || ' N/A'}
💰 <b>Total:</b> ${orderData.totalAmount}
💳 <b>Refund:</b> ${orderData.refundStatus === 'na' ? 'N/A (COD)' : orderData.refundStatus || 'Pending'}
@ -102,7 +110,7 @@ export const startOrderHandler = async (): Promise<void> => {
where: inArray(orders.id, orderIds),
with: {
address: true,
orderItems: { with: { product: true } },
orderItems: { with: { product: { with: { unit: true } } } },
slot: true,
},
});
@ -147,7 +155,7 @@ export const startCancellationHandler = async (): Promise<void> => {
where: eq(orders.id, cancellationData.orderId),
with: {
address: true,
orderItems: { with: { product: true } },
orderItems: { with: { product: { with: { unit: true } } } },
refunds: true,
},
});

58
apps/migrator/README.md Normal file
View file

@ -0,0 +1,58 @@
# Migrator
Data-only migration tool between Postgres and SQLite using Drizzle.
## What it does
- Copies data from source to target
- Does NOT create or alter tables
- Overwrites target data if any rows exist (via `DELETE FROM` in dependency-safe order)
## Requirements
- Tables must already exist on the target database
- Schema must match the backend Drizzle schemas
## Usage
Run from repo root:
```bash
bun --cwd apps/migrator run migrate --from postgres --to sqlite --source "<PG_URL>" --target "<SQLITE_PATH>"
```
```bash
bun --cwd apps/migrator run migrate --from sqlite --to postgres --source "<SQLITE_PATH>" --target "<PG_URL>"
```
### Flags
- `--from`: `postgres` or `sqlite`
- `--to`: `postgres` or `sqlite`
- `--source`: Postgres connection string or SQLite file path
- `--target`: Postgres connection string or SQLite file path
- `--batch`: optional batch size (default: `500`)
## Examples
```bash
bun --cwd apps/migrator run migrate \
--from postgres \
--to sqlite \
--source "postgres://user:pass@host:5432/db" \
--target "./sqlite.db"
```
```bash
bun --cwd apps/migrator run migrate \
--from sqlite \
--to postgres \
--source "./sqlite.db" \
--target "postgres://user:pass@host:5432/db" \
--batch 1000
```
## Notes
- IDs are copied as-is to preserve relationships.
- For Postgres targets, sequences may need manual reset after import.

View file

@ -0,0 +1,13 @@
{
"name": "migrator",
"version": "0.1.0",
"private": true,
"type": "module",
"scripts": {
"migrate": "bun src/index.ts"
},
"dependencies": {
"drizzle-orm": "^0.45.1",
"pg": "^8.11.3"
}
}

View file

@ -0,0 +1,13 @@
import { runPostgresToSqlite } from './postgres_to_sqlite'
import { runSqliteToPostgres } from './sqlite_to_postgres'
import { parseArgs } from './lib/args'
const args = parseArgs(Bun.argv.slice(2))
if (args.from === 'postgres' && args.to === 'sqlite') {
await runPostgresToSqlite(args)
} else if (args.from === 'sqlite' && args.to === 'postgres') {
await runSqliteToPostgres(args)
} else {
throw new Error('Unsupported migration direction. Use --from postgres --to sqlite or --from sqlite --to postgres.')
}

View file

@ -0,0 +1,50 @@
export type MigrationArgs = {
from: 'postgres' | 'sqlite'
to: 'postgres' | 'sqlite'
source: string
target: string
batchSize: number
}
const getFlagValue = (args: string[], flag: string): string | undefined => {
const index = args.indexOf(flag)
if (index === -1) return undefined
return args[index + 1]
}
export const parseArgs = (args: string[]): MigrationArgs => {
const from = getFlagValue(args, '--from')
const to = getFlagValue(args, '--to')
const source = getFlagValue(args, '--source')
const target = getFlagValue(args, '--target')
const batch = getFlagValue(args, '--batch')
if (!from || (from !== 'postgres' && from !== 'sqlite')) {
throw new Error('Missing or invalid --from (postgres|sqlite)')
}
if (!to || (to !== 'postgres' && to !== 'sqlite')) {
throw new Error('Missing or invalid --to (postgres|sqlite)')
}
if (!source) {
throw new Error('Missing --source')
}
if (!target) {
throw new Error('Missing --target')
}
const batchSize = batch ? Number(batch) : 500
if (Number.isNaN(batchSize) || batchSize <= 0) {
throw new Error('Invalid --batch, must be a positive number')
}
return {
from,
to,
source,
target,
batchSize,
}
}

View file

@ -0,0 +1,35 @@
export const parseJsonValue = <T>(value: unknown, fallback: T): T => {
if (value === null || value === undefined) return fallback
if (typeof value === 'string') {
try {
return JSON.parse(value) as T
} catch {
return fallback
}
}
return value as T
}
export const toJsonString = (value: unknown, fallback: string): string => {
if (value === null || value === undefined) return fallback
if (typeof value === 'string') return value
return JSON.stringify(value)
}
export const toEpochSeconds = (value: Date | number): number => {
if (typeof value === 'number') return value
return Math.floor(value.getTime() / 1000)
}
export const toDate = (value: number | Date | null | undefined): Date | null => {
if (value === null || value === undefined) return null
if (value instanceof Date) return value
return new Date(value * 1000)
}
export const toBoolean = (value: unknown): boolean => {
if (typeof value === 'boolean') return value
if (typeof value === 'number') return value !== 0
if (typeof value === 'string') return value === 'true' || value === '1'
return false
}

View file

@ -0,0 +1,92 @@
import type { TableName } from './table-order'
export const jsonColumns: Partial<Record<TableName, string[]>> = {
productInfo: ['images'],
productAvailabilitySchedules: ['productIds', 'groupIds'],
homeBanners: ['productIds'],
productReviews: ['imageUrls', 'adminResponseImages'],
deliverySlotInfo: ['deliverySequence', 'groupIds'],
vendorSnippets: ['productIds'],
paymentInfoTable: ['payload'],
payments: ['payload'],
keyValStore: ['value'],
complaints: ['images'],
coupons: ['productIds'],
reservedCoupons: ['productIds'],
userNotifications: ['applicableUsers'],
productTagInfo: ['relatedStores'],
}
export const jsonArrayColumns: Partial<Record<TableName, string[]>> = {
productInfo: ['images'],
productAvailabilitySchedules: ['productIds', 'groupIds'],
homeBanners: ['productIds'],
productReviews: ['imageUrls', 'adminResponseImages'],
deliverySlotInfo: ['groupIds'],
vendorSnippets: ['productIds'],
complaints: ['images'],
coupons: ['productIds'],
reservedCoupons: ['productIds'],
userNotifications: ['applicableUsers'],
productTagInfo: ['relatedStores'],
}
export const jsonObjectColumns: Partial<Record<TableName, string[]>> = {
deliverySlotInfo: ['deliverySequence'],
paymentInfoTable: ['payload'],
payments: ['payload'],
keyValStore: ['value'],
}
export const timestampColumns: Partial<Record<TableName, string[]>> = {
users: ['createdAt'],
userDetails: ['createdAt', 'updatedAt', 'dateOfBirth'],
userCreds: ['createdAt'],
addresses: ['createdAt'],
addressZones: ['addedAt'],
addressAreas: ['createdAt'],
staffUsers: ['createdAt'],
storeInfo: ['createdAt'],
productInfo: ['createdAt'],
productAvailabilitySchedules: ['createdAt', 'lastUpdated'],
productGroupInfo: ['createdAt'],
productGroupMembership: ['addedAt'],
homeBanners: ['createdAt', 'lastUpdated'],
productReviews: ['reviewTime'],
uploadUrlStatus: ['createdAt'],
productTagInfo: ['createdAt'],
productTags: ['assignedAt'],
deliverySlotInfo: ['deliveryTime', 'freezeTime'],
vendorSnippets: ['validTill', 'createdAt'],
specialDeals: ['validTill'],
orders: ['createdAt'],
orderStatus: ['orderTime', 'cancellationReviewedAt'],
refunds: ['refundProcessedAt', 'createdAt'],
notifications: ['createdAt'],
cartItems: ['addedAt'],
complaints: ['createdAt'],
coupons: ['validTill', 'createdAt'],
couponUsage: ['usedAt'],
userIncidents: ['dateAdded'],
reservedCoupons: ['validTill', 'redeemedAt', 'createdAt'],
notifCreds: ['addedAt', 'lastVerified'],
unloggedUserTokens: ['addedAt', 'lastVerified'],
userNotifications: ['createdAt'],
}
export const booleanColumns: Partial<Record<TableName, string[]>> = {
userDetails: ['isSuspended'],
addresses: ['isDefault'],
productInfo: ['isOutOfStock', 'isSuspended', 'isFlashAvailable', 'scheduledAvailability'],
homeBanners: ['isActive'],
productTagInfo: ['isDashboardTag'],
deliverySlotInfo: ['isActive', 'isFlash', 'isCapacityFull'],
vendorSnippets: ['isPermanent'],
orders: ['isCod', 'isOnlinePayment', 'isFlashDelivery'],
orderItems: ['is_packaged', 'is_package_verified'],
orderStatus: ['isPackaged', 'isDelivered', 'isCancelled', 'isCancelledByAdmin', 'cancellationReviewed'],
notifications: ['isRead'],
complaints: ['isResolved'],
coupons: ['isUserBased', 'isApplyForAll', 'isInvalidated', 'exclusiveApply'],
reservedCoupons: ['exclusiveApply', 'isRedeemed'],
}

View file

@ -0,0 +1,18 @@
import { drizzle as drizzlePostgres } from 'drizzle-orm/node-postgres'
import { drizzle as drizzleSqlite } from 'drizzle-orm/bun-sqlite'
import { Pool } from 'pg'
import { Database } from 'bun:sqlite'
import * as postgresSchema from '../../../backend/src/db/schema-postgres'
import * as sqliteSchema from '../../../backend/src/db/schema-sqlite'
export const createPostgresDb = (connectionString: string) => {
const pool = new Pool({ connectionString })
const db = drizzlePostgres(pool, { schema: postgresSchema })
return { db, pool }
}
export const createSqliteDb = (filePath: string) => {
const sqlite = new Database(filePath)
const db = drizzleSqlite(sqlite, { schema: sqliteSchema })
return { db, sqlite }
}

View file

@ -0,0 +1,142 @@
import { sql, asc } from 'drizzle-orm'
import type { TableName } from './table-order'
import { tableOrder } from './table-order'
import { postgresTables, sqliteTables, type TableMap } from './schema-maps'
import { booleanColumns, jsonArrayColumns, jsonColumns, jsonObjectColumns, timestampColumns } from './column-maps'
import { parseJsonValue, toBoolean, toDate, toEpochSeconds, toJsonString } from './casts'
export type Dialect = 'postgres' | 'sqlite'
type MigrationContext = {
from: Dialect
to: Dialect
sourceDb: any
targetDb: any
batchSize: number
}
const getTables = (dialect: Dialect): TableMap => (dialect === 'postgres' ? postgresTables : sqliteTables)
const getOrderById = (table: any) => {
const idColumn = table?.id
if (!idColumn) return undefined
return asc(idColumn)
}
const getRowCount = async (db: any, table: any): Promise<number> => {
const result = await db.select({ count: sql`count(*)` }).from(table)
const count = result[0]?.count
return Number(count || 0)
}
const shouldOverwriteTarget = async (db: any, tables: TableMap): Promise<boolean> => {
for (const name of tableOrder) {
const count = await getRowCount(db, tables[name])
if (count > 0) return true
}
return false
}
const clearTarget = async (db: any, tables: TableMap) => {
const reversed = [...tableOrder].reverse()
for (const name of reversed) {
await db.delete(tables[name])
}
}
const normalizeJson = (value: unknown, tableName: TableName, column: string, toDialect: Dialect) => {
const isArray = jsonArrayColumns[tableName]?.includes(column)
const isObject = jsonObjectColumns[tableName]?.includes(column)
const fallback = isArray ? [] : isObject ? {} : null
if (toDialect === 'sqlite') {
if (value === null || value === undefined) {
return isArray ? '[]' : isObject ? '{}' : null
}
return toJsonString(value, isArray ? '[]' : isObject ? '{}' : 'null')
}
return parseJsonValue(value, fallback)
}
const normalizeTimestamps = (value: unknown, toDialect: Dialect) => {
if (value === null || value === undefined) return value
if (toDialect === 'sqlite') {
return toEpochSeconds(value as Date | number)
}
return toDate(value as number | Date)
}
const normalizeBoolean = (value: unknown, toDialect: Dialect) => {
if (toDialect === 'postgres') {
return toBoolean(value)
}
return value
}
const transformRow = (row: Record<string, unknown>, tableName: TableName, toDialect: Dialect) => {
const jsonCols = jsonColumns[tableName] || []
const timeCols = timestampColumns[tableName] || []
const boolCols = booleanColumns[tableName] || []
const output: Record<string, unknown> = { ...row }
jsonCols.forEach((column) => {
output[column] = normalizeJson(output[column], tableName, column, toDialect)
})
timeCols.forEach((column) => {
output[column] = normalizeTimestamps(output[column], toDialect)
})
boolCols.forEach((column) => {
output[column] = normalizeBoolean(output[column], toDialect)
})
return output
}
const copyTable = async (context: MigrationContext, tableName: TableName) => {
const fromTables = getTables(context.from)
const toTables = getTables(context.to)
const fromTable = fromTables[tableName]
const toTable = toTables[tableName]
const total = await getRowCount(context.sourceDb, fromTable)
if (total === 0) return
let offset = 0
while (offset < total) {
let query = context.sourceDb.select().from(fromTable)
const orderBy = getOrderById(fromTable)
if (orderBy) {
query = query.orderBy(orderBy)
}
const batch = await query.limit(context.batchSize).offset(offset)
const normalized = batch.map((row: Record<string, unknown>) =>
transformRow(row, tableName, context.to)
)
if (normalized.length > 0) {
await context.targetDb.insert(toTable).values(normalized)
}
offset += context.batchSize
}
}
export const runMigration = async (context: MigrationContext) => {
const targetTables = getTables(context.to)
const overwrite = await shouldOverwriteTarget(context.targetDb, targetTables)
if (overwrite) {
await clearTarget(context.targetDb, targetTables)
}
for (const tableName of tableOrder) {
await copyTable(context, tableName)
}
}

View file

@ -0,0 +1,21 @@
import type { TableName } from './table-order'
import * as postgresSchema from '../../../backend/src/db/schema-postgres'
import * as sqliteSchema from '../../../backend/src/db/schema-sqlite'
import { tableOrder } from './table-order'
export type TableMap = Record<TableName, any>
const buildMap = (schema: Record<string, unknown>): TableMap => {
const map = {} as TableMap
tableOrder.forEach((name) => {
const table = schema[name]
if (!table) {
throw new Error(`Missing table export for ${name}`)
}
map[name] = table
})
return map
}
export const postgresTables = buildMap(postgresSchema as Record<string, unknown>)
export const sqliteTables = buildMap(sqliteSchema as Record<string, unknown>)

View file

@ -0,0 +1,48 @@
export const tableOrder = [
'users',
'staffRoles',
'staffPermissions',
'staffRolePermissions',
'staffUsers',
'storeInfo',
'units',
'productInfo',
'productGroupInfo',
'productGroupMembership',
'productTagInfo',
'productTags',
'addressZones',
'addressAreas',
'addresses',
'deliverySlotInfo',
'productSlots',
'productAvailabilitySchedules',
'homeBanners',
'vendorSnippets',
'specialDeals',
'coupons',
'couponApplicableUsers',
'couponApplicableProducts',
'reservedCoupons',
'paymentInfoTable',
'orders',
'payments',
'orderItems',
'orderStatus',
'refunds',
'complaints',
'couponUsage',
'userDetails',
'userCreds',
'notifications',
'cartItems',
'keyValStore',
'notifCreds',
'unloggedUserTokens',
'userNotifications',
'productReviews',
'uploadUrlStatus',
'userIncidents',
] as const
export type TableName = typeof tableOrder[number]

View file

@ -0,0 +1,21 @@
import type { MigrationArgs } from '../lib/args'
import { createPostgresDb, createSqliteDb } from '../lib/db'
import { runMigration } from '../lib/migrate'
export const runPostgresToSqlite = async (args: MigrationArgs) => {
const { db: sourceDb, pool } = createPostgresDb(args.source)
const { db: targetDb, sqlite } = createSqliteDb(args.target)
try {
await runMigration({
from: 'postgres',
to: 'sqlite',
sourceDb,
targetDb,
batchSize: args.batchSize,
})
} finally {
await pool.end()
sqlite.close()
}
}

View file

@ -0,0 +1,21 @@
import type { MigrationArgs } from '../lib/args'
import { createPostgresDb, createSqliteDb } from '../lib/db'
import { runMigration } from '../lib/migrate'
export const runSqliteToPostgres = async (args: MigrationArgs) => {
const { db: sourceDb, sqlite } = createSqliteDb(args.source)
const { db: targetDb, pool } = createPostgresDb(args.target)
try {
await runMigration({
from: 'sqlite',
to: 'postgres',
sourceDb,
targetDb,
batchSize: args.batchSize,
})
} finally {
sqlite.close()
await pool.end()
}
}

View file

@ -14,7 +14,11 @@ import {
} from '@/hooks/cart-query-hooks';
import { useProductSlotIdentifier } from '@/hooks/useProductSlotIdentifier';
import { useCartStore } from '@/src/store/cartStore';
<<<<<<< HEAD
import { useCentralSlotStore } from '@/src/store/centralSlotStore';
=======
import { trpc } from '@/src/trpc-client';
>>>>>>> main
import { Image as RnImage } from 'react-native'
@ -160,8 +164,12 @@ const ProductCard: React.FC<ProductCardProps> = ({
>
<View style={tw`relative`}>
<RnImage
<<<<<<< HEAD
source={{ uri: imageUri }}
// source={{uri: 'https://pub-6bf1fbc4048a4cbaa533ddbb13bf9de6.r2.dev/product-images/1763796113884-0'}}
=======
source={{ uri: item.images?.[0] }}
>>>>>>> main
style={{ width: "100%", height: itemWidth, resizeMode: "cover" }}
onLoadStart={() => {
setImageStatus('loading')

View file

@ -170,7 +170,9 @@ export default function CartPage({ isFlashDelivery = false }: CartPageProps) {
const getAvailableSlotsForProduct = React.useMemo(() => {
return (productId: number) => {
if (!slotsData || !slotsData[productId]) return [];
return slotsData[productId].map((slot) => {
return slotsData[productId]
.filter((slot) => dayjs(slot.freezeTime).isAfter(dayjs()))
.map((slot) => {
const formatTimeRange = (deliveryTime: string) => {
const time = dayjs(deliveryTime);
const endTime = time.add(1, 'hour');
@ -307,9 +309,9 @@ export default function CartPage({ isFlashDelivery = false }: CartPageProps) {
if (!productSlots || productSlots.length === 0) return;
const now = dayjs();
const upcomingSlots = productSlots.filter(slot =>
dayjs(slot.deliveryTime).isAfter(now)
).sort((a, b) =>
const upcomingSlots = productSlots
.filter((slot) => dayjs(slot.freezeTime).isAfter(now))
.sort((a, b) =>
dayjs(a.deliveryTime).diff(dayjs(b.deliveryTime))
);

View file

@ -65,9 +65,15 @@ const isDevMode = Constants.executionEnvironment !== "standalone";
// 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.5:4000';
<<<<<<< HEAD
// let BASE_API_URL = "https://mf.freshyo.in";
// let BASE_API_URL = "https://freshyo.technocracy.ovh";
let BASE_API_URL = 'http://192.168.100.108:4000';
=======
let BASE_API_URL = "https://raw.freshyo.in";
// let BASE_API_URL = "https://freshyo.technocracy.ovh";
// let BASE_API_URL = 'http://192.168.100.108:4000';
>>>>>>> main
// let BASE_API_URL = 'http://192.168.29.176:4000';
// if(isDevMode) {

Binary file not shown.

After

Width:  |  Height:  |  Size: 9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

View file

@ -0,0 +1 @@
{"name":"Symbuyote Admin","slug":"freshyoadmin","version":"1.0.0","orientation":"portrait","icon":"./assets/images/symbuyoteadmin.png","scheme":"freshyoadmin","userInterfaceStyle":"automatic","newArchEnabled":true,"ios":{"supportsTablet":true,"bundleIdentifier":"in.freshyo.adminui","infoPlist":{"LSApplicationQueriesSchemes":["ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay"],"ITSAppUsesNonExemptEncryption":false}},"android":{"adaptiveIcon":{"foregroundImage":"./assets/images/symbuyoteadmin.png","backgroundColor":"#fff0f6"},"edgeToEdgeEnabled":true,"package":"in.freshyo.adminui"},"web":{"bundler":"metro","output":"static","favicon":"./assets/images/favicon.png"},"plugins":["expo-router",["expo-splash-screen",{"image":"./assets/images/symbuyoteadmin.png","imageWidth":200,"resizeMode":"contain","backgroundColor":"#ffffff"}],"expo-secure-store"],"experiments":{"typedRoutes":true},"extra":{"router":{},"eas":{"projectId":"55e2f200-eb9d-4880-a193-70f59320e054"}},"runtimeVersion":{"policy":"appVersion"},"updates":{"url":"https://u.expo.dev/55e2f200-eb9d-4880-a193-70f59320e054"},"sdkVersion":"53.0.0","platforms":["ios","android","web"],"androidStatusBar":{"backgroundColor":"#ffffff"}}

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyCollectedDataTypes</key>
<array>
</array>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
</array>
</dict>
</plist>

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyCollectedDataTypes</key>
<array>
</array>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
</array>
</dict>
</plist>

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyCollectedDataTypes</key>
<array>
</array>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>35F9.1</string>
</array>
</dict>
</array>
</dict>
</plist>

View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyCollectedDataTypes</key>
<array>
</array>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>0A2A.1</string>
<string>3B52.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryDiskSpace</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>E174.1</string>
<string>85F4.1</string>
</array>
</dict>
</array>
</dict>
</plist>

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyCollectedDataTypes</key>
<array>
</array>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
</array>
</dict>
</plist>

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyCollectedDataTypes</key>
<array>
</array>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
</array>
</dict>
</plist>

View file

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>hermes</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>dev.hermesengine.iphonesimulator</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string></string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>0.12.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.12.0</string>
<key>CSResourcesFileMapped</key>
<true/>
<key>MinimumOSVersion</key>
<string>15.1</string>
</dict>
</plist>

View file

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Info.plist</key>
<data>
4Hno0Ddszl7pNxmsMdj4eZ8APpg=
</data>
</dict>
<key>files2</key>
<dict/>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>

Binary file not shown.

View file

@ -0,0 +1 @@
APPL????

View file

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
<string>0A2A.1</string>
<string>3B52.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>35F9.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryDiskSpace</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>E174.1</string>
<string>85F4.1</string>
</array>
</dict>
</array>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyTracking</key>
<false/>
</dict>
</plist>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyTracking</key>
<false/>
</dict>
</plist>

View file

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
</array>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyTracking</key>
<false/>
</dict>
</plist>

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
</array>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyTracking</key>
<false/>
</dict>
</plist>

View file

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
</array>
</dict>
</plist>

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,535 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>AppIcon60x60@2x.png</key>
<data>
97LNT9kpa48T+CswHSue8trK1eE=
</data>
<key>AppIcon76x76@2x~ipad.png</key>
<data>
VzU6ZM8C95tff2IFjtvjPfEV8Vs=
</data>
<key>Assets.car</key>
<data>
LrIAJ0UWrloOF0ANfYZBMOddVeQ=
</data>
<key>EXConstants.bundle/Info.plist</key>
<data>
Hlxsc20/U0owoVLTeqzSm5ybNIs=
</data>
<key>EXConstants.bundle/app.config</key>
<data>
IFa3PxmiSkaJ0td8DhhIk/PexXY=
</data>
<key>EXUpdates.bundle/Info.plist</key>
<data>
wjdfAxEpgfQFinoWBfIM8p9jaw8=
</data>
<key>Expo.plist</key>
<data>
yXM53emO8rHxLh7yvjjxI7jUS4U=
</data>
<key>ExpoApplication_privacy.bundle/Info.plist</key>
<data>
8BRDaa8J7FLCzhVYdsGF90Fhe6A=
</data>
<key>ExpoApplication_privacy.bundle/PrivacyInfo.xcprivacy</key>
<data>
mUc2YHiDtobIhFXi+Mvm12TXeb8=
</data>
<key>ExpoConstants_privacy.bundle/Info.plist</key>
<data>
gHWCze8PybGkM8T+sLc+3tpj/QE=
</data>
<key>ExpoConstants_privacy.bundle/PrivacyInfo.xcprivacy</key>
<data>
dHAsEQehwJCS8hMOpBoz7emiNj8=
</data>
<key>ExpoDevice_privacy.bundle/Info.plist</key>
<data>
6hGpMQ+NbBTY+ghWXzsUw8XJGyM=
</data>
<key>ExpoDevice_privacy.bundle/PrivacyInfo.xcprivacy</key>
<data>
hWEgzzi+YPgmddeTqWfAi6jGQ0E=
</data>
<key>ExpoFileSystem_privacy.bundle/Info.plist</key>
<data>
WIOt6Nu0S3BZ/+6OsBQFrMyXaNE=
</data>
<key>ExpoFileSystem_privacy.bundle/PrivacyInfo.xcprivacy</key>
<data>
UieOpg4b1PxYR6jA3/cs9mU9rdo=
</data>
<key>ExpoNotifications_privacy.bundle/Info.plist</key>
<data>
BwASpOTXQeKbJUrAWQFpwRpHkM8=
</data>
<key>ExpoNotifications_privacy.bundle/PrivacyInfo.xcprivacy</key>
<data>
dHAsEQehwJCS8hMOpBoz7emiNj8=
</data>
<key>ExpoSystemUI_privacy.bundle/Info.plist</key>
<data>
ZY9+IxqDzlo+4baYZWU5AcIgICQ=
</data>
<key>ExpoSystemUI_privacy.bundle/PrivacyInfo.xcprivacy</key>
<data>
dHAsEQehwJCS8hMOpBoz7emiNj8=
</data>
<key>Frameworks/hermes.framework/Info.plist</key>
<data>
4Hno0Ddszl7pNxmsMdj4eZ8APpg=
</data>
<key>Frameworks/hermes.framework/_CodeSignature/CodeResources</key>
<data>
UltW0Jw9IEI+gE7DBGy5/VsUBrw=
</data>
<key>Frameworks/hermes.framework/hermes</key>
<data>
zNwvRCO4iW9WNlr9JGQIrylk2Ko=
</data>
<key>Info.plist</key>
<data>
4ZwmTOgnIm01EgWvwwqDN/hpTVI=
</data>
<key>PkgInfo</key>
<data>
n57qDP4tZfLD1rCS43W0B4LQjzE=
</data>
<key>PrivacyInfo.xcprivacy</key>
<data>
QWVPQQrLs8XwFZWrDE5vARWvUdA=
</data>
<key>RCT-Folly_privacy.bundle/Info.plist</key>
<data>
QV6mi/fThThHpU2soqgmADF/NUI=
</data>
<key>ReachabilitySwift.bundle/Info.plist</key>
<data>
R1f4iy65ziHGDflHUDJ3rYb7QJw=
</data>
<key>ReachabilitySwift.bundle/PrivacyInfo.xcprivacy</key>
<data>
0RESd+++ZxZWQhIEMSOOvP7phYs=
</data>
<key>React-Core_privacy.bundle/Info.plist</key>
<data>
bwZ/mVvwWYRpCtLUK8MTyiLp/JU=
</data>
<key>React-Core_privacy.bundle/PrivacyInfo.xcprivacy</key>
<data>
ZahcOiTSEcJJdvNh0xqgAKPqbMs=
</data>
<key>React-cxxreact_privacy.bundle/Info.plist</key>
<data>
DHapNtVVUNHS9BKJUN7HbkRj/0E=
</data>
<key>React-cxxreact_privacy.bundle/PrivacyInfo.xcprivacy</key>
<data>
dxJQFdQ77efnBkB0VBZmuIamJ4g=
</data>
<key>SDWebImage.bundle/Info.plist</key>
<data>
MiKmS7AM8ulTkag/cANN1izmsx4=
</data>
<key>SDWebImage.bundle/PrivacyInfo.xcprivacy</key>
<data>
PFHYbs0V3eUFDWQyYQcwEetuqEk=
</data>
<key>SplashScreen.storyboardc/EXPO-VIEWCONTROLLER-1-view-EXPO-ContainerView.nib</key>
<data>
+LtcMiEvVQs2QdoxGRtI33YPCYs=
</data>
<key>SplashScreen.storyboardc/Info.plist</key>
<data>
E68oTK3pecVBbvVw/Td2doSlDiA=
</data>
<key>SplashScreen.storyboardc/SplashScreenViewController.nib</key>
<data>
XO9GpHETPa/KEeOkIqhZoQ6OIvU=
</data>
<key>SymbuyoteAdmin.debug.dylib</key>
<data>
ZwTTt/x0U07XvLmnb3+tTdSeZn0=
</data>
<key>__preview.dylib</key>
<data>
NKNb0Q7QaNmfiMI7dnipVcSb6Bo=
</data>
<key>boost_privacy.bundle/Info.plist</key>
<data>
V94X3Cp8LSj+pZ/hfbsOD4huj5Q=
</data>
<key>glog_privacy.bundle/Info.plist</key>
<data>
MxuR75ZIsXAD5pxH3nEwX9uafJ0=
</data>
</dict>
<key>files2</key>
<dict>
<key>AppIcon60x60@2x.png</key>
<dict>
<key>hash2</key>
<data>
1EdHEGg/ZaMS6Zip6Ie7YlVSaTP8FBbCsE+pAI+y0Yk=
</data>
</dict>
<key>AppIcon76x76@2x~ipad.png</key>
<dict>
<key>hash2</key>
<data>
0FSd2xHbBOAtgMQ4Et7BIh1mcFoPKKSNPELVi5SQJAc=
</data>
</dict>
<key>Assets.car</key>
<dict>
<key>hash2</key>
<data>
VeXk52gO5+lQhdUDpJkX5HFitYSp/HTm9kpkxMmfwws=
</data>
</dict>
<key>EXConstants.bundle/Info.plist</key>
<dict>
<key>hash2</key>
<data>
jZG3+Tzakbtg344R3nPmevDrI3G9hqlhuDM+DGKsmHY=
</data>
</dict>
<key>EXConstants.bundle/app.config</key>
<dict>
<key>hash2</key>
<data>
KZQx0xB/v36dzA1NH6PtrZPUnlG5NMIASOIYzeC36j4=
</data>
</dict>
<key>EXUpdates.bundle/Info.plist</key>
<dict>
<key>hash2</key>
<data>
TSLIu7uoFgEkmWl6rOkXOLHgeB1Z/nLtqptH/f2Kzds=
</data>
</dict>
<key>Expo.plist</key>
<dict>
<key>hash2</key>
<data>
WwvRV3RJHdWPGFQnnyrsouAha0/2EaB+goHuQsVMZ2Q=
</data>
</dict>
<key>ExpoApplication_privacy.bundle/Info.plist</key>
<dict>
<key>hash2</key>
<data>
OF6pzmZB+LuE1u+wzImbqZDIJmhoflDtg2sTmrOtGiY=
</data>
</dict>
<key>ExpoApplication_privacy.bundle/PrivacyInfo.xcprivacy</key>
<dict>
<key>hash2</key>
<data>
tIdj/9KcutgVElrlbhBzJz5BiuCGED/H3/fvvsFnWqo=
</data>
</dict>
<key>ExpoConstants_privacy.bundle/Info.plist</key>
<dict>
<key>hash2</key>
<data>
MGRLpoZ+01WpddRUuE8TLN2RgOiqhzIDZEWy3MA1kNQ=
</data>
</dict>
<key>ExpoConstants_privacy.bundle/PrivacyInfo.xcprivacy</key>
<dict>
<key>hash2</key>
<data>
Ky2O23HVHFsfGs5M2yipS68i/d6bvy4r/BfRh/97X0c=
</data>
</dict>
<key>ExpoDevice_privacy.bundle/Info.plist</key>
<dict>
<key>hash2</key>
<data>
VW+4r911lj+g2ALGOJp8aFap1Y0t3bccy5wunDzTLDs=
</data>
</dict>
<key>ExpoDevice_privacy.bundle/PrivacyInfo.xcprivacy</key>
<dict>
<key>hash2</key>
<data>
2JioNW3Ie3zSsXkh1opGNtQkBns6dcg7eTX9eXcZycs=
</data>
</dict>
<key>ExpoFileSystem_privacy.bundle/Info.plist</key>
<dict>
<key>hash2</key>
<data>
ByWljZT3TE7/EQIJQP/napK+gMwwBFaLiROcsjSHmJk=
</data>
</dict>
<key>ExpoFileSystem_privacy.bundle/PrivacyInfo.xcprivacy</key>
<dict>
<key>hash2</key>
<data>
M7DgdPJz9YimS6VjKQnGqM8fFtuOTNhMaXi9Ii39Zb0=
</data>
</dict>
<key>ExpoNotifications_privacy.bundle/Info.plist</key>
<dict>
<key>hash2</key>
<data>
tKJ+YduFArUfPD3zQIGLIPtXagl8rbk4RDDBfsLvJC8=
</data>
</dict>
<key>ExpoNotifications_privacy.bundle/PrivacyInfo.xcprivacy</key>
<dict>
<key>hash2</key>
<data>
Ky2O23HVHFsfGs5M2yipS68i/d6bvy4r/BfRh/97X0c=
</data>
</dict>
<key>ExpoSystemUI_privacy.bundle/Info.plist</key>
<dict>
<key>hash2</key>
<data>
tGD6qrPgcjmHblKSEqq1CRuX18qzPmRBwHGfZltFSCw=
</data>
</dict>
<key>ExpoSystemUI_privacy.bundle/PrivacyInfo.xcprivacy</key>
<dict>
<key>hash2</key>
<data>
Ky2O23HVHFsfGs5M2yipS68i/d6bvy4r/BfRh/97X0c=
</data>
</dict>
<key>Frameworks/hermes.framework/Info.plist</key>
<dict>
<key>hash2</key>
<data>
JXB+dif18YekowEWiL1F0bJhRmDJCNhC7Yuki1yxMK0=
</data>
</dict>
<key>Frameworks/hermes.framework/_CodeSignature/CodeResources</key>
<dict>
<key>hash2</key>
<data>
1oRx8Mn/IhJGRZOGyHTCY2w0MZ+C71dPBNeLWZ06EJk=
</data>
</dict>
<key>Frameworks/hermes.framework/hermes</key>
<dict>
<key>hash2</key>
<data>
0po9tSLjyYKKx+ArJ1vK4kNtKcwcCF1fCYfIP3UR8M8=
</data>
</dict>
<key>PrivacyInfo.xcprivacy</key>
<dict>
<key>hash2</key>
<data>
0iT0B29OMhTbiXYnweoynu+q6Im8gta4P/eeuquI8zU=
</data>
</dict>
<key>RCT-Folly_privacy.bundle/Info.plist</key>
<dict>
<key>hash2</key>
<data>
0dcC3Z35ltB1Rk2HWpjCzA4wPFt+2WaTjgv/z5AxE1E=
</data>
</dict>
<key>ReachabilitySwift.bundle/Info.plist</key>
<dict>
<key>hash2</key>
<data>
a0Ywukh2Qq/wQxGNTeIC7/8oN2YZMvE9YYIecPYUN1M=
</data>
</dict>
<key>ReachabilitySwift.bundle/PrivacyInfo.xcprivacy</key>
<dict>
<key>hash2</key>
<data>
pwgfFQbJDo5nMQDlwWHnZbi3piREbiC9S9bvrKgICLg=
</data>
</dict>
<key>React-Core_privacy.bundle/Info.plist</key>
<dict>
<key>hash2</key>
<data>
omnNUjXWFudh+cE0TJqsI2YDpTvWTixl77Voxv40Jf4=
</data>
</dict>
<key>React-Core_privacy.bundle/PrivacyInfo.xcprivacy</key>
<dict>
<key>hash2</key>
<data>
fAiWnkWWIabs7AQ8zbkBJlHxhYEZRfdVF8Yj2uLhFic=
</data>
</dict>
<key>React-cxxreact_privacy.bundle/Info.plist</key>
<dict>
<key>hash2</key>
<data>
tKBcBEwmtUE9GGaNVVGdsi6/KnlaX4bi1D54dKd5mm4=
</data>
</dict>
<key>React-cxxreact_privacy.bundle/PrivacyInfo.xcprivacy</key>
<dict>
<key>hash2</key>
<data>
BYfRVcVqb08GR+vGtqC9AmYVzWEO6PIJqXhrealq0zU=
</data>
</dict>
<key>SDWebImage.bundle/Info.plist</key>
<dict>
<key>hash2</key>
<data>
ssr4wetNnB+bGHW2na0M24sSv1inTqC0ReqiCMf6fWU=
</data>
</dict>
<key>SDWebImage.bundle/PrivacyInfo.xcprivacy</key>
<dict>
<key>hash2</key>
<data>
A7LHCDOjMaKx79Ef8WjtAqjq39Xn0fvzDuzHUJpK6kc=
</data>
</dict>
<key>SplashScreen.storyboardc/EXPO-VIEWCONTROLLER-1-view-EXPO-ContainerView.nib</key>
<dict>
<key>hash2</key>
<data>
X+tAJBYf6l0fu6OOgc8+aot/0jOHh5N+R9T2CA7fpzw=
</data>
</dict>
<key>SplashScreen.storyboardc/Info.plist</key>
<dict>
<key>hash2</key>
<data>
dNvO7WzwpeXGmDR5MyjJeD7Ksd5ILUlU4lfKITK3Q68=
</data>
</dict>
<key>SplashScreen.storyboardc/SplashScreenViewController.nib</key>
<dict>
<key>hash2</key>
<data>
nBo0wSHSJHlAjPDqrLNJFUjO0WZVeZuuO19/I4AxS6g=
</data>
</dict>
<key>SymbuyoteAdmin.debug.dylib</key>
<dict>
<key>hash2</key>
<data>
bJ9FzLhQRgwj5TfBA8qj2AMq6UuOeEBnqpn4Mdj7YRc=
</data>
</dict>
<key>__preview.dylib</key>
<dict>
<key>hash2</key>
<data>
JxYb3r7Pg5bMt+qPjY4ibIde7zNM5U7OL6HGGuldoTM=
</data>
</dict>
<key>boost_privacy.bundle/Info.plist</key>
<dict>
<key>hash2</key>
<data>
ewhZPFvqBmGCXr9cyPcgBgi1XfwdibD9dwEvGqRXAFc=
</data>
</dict>
<key>glog_privacy.bundle/Info.plist</key>
<dict>
<key>hash2</key>
<data>
ppv2/Di+oXBAtgOAUjnelHqDc6Xxh7Ki3j5KlqckbEY=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>

Binary file not shown.

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyAccessedAPITypes</key>
<array>
</array>
<key>NSPrivacyCollectedDataTypes</key>
<array>
</array>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyTracking</key>
<false/>
</dict>
</plist>

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

View file

@ -0,0 +1 @@
{"name":"Freshyo","slug":"freshyo","version":"1.2.0","orientation":"portrait","icon":"./assets/images/freshyo-logo.png","scheme":"freshyo","userInterfaceStyle":"automatic","newArchEnabled":true,"ios":{"buildNumber":"1.1.0","supportsTablet":true,"bundleIdentifier":"com.freshyotrial.app","infoPlist":{"LSApplicationQueriesSchemes":["ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay","ppemerchantsdkv1","ppemerchantsdkv2","ppemerchantsdkv3","paytmmp","gpay"],"ITSAppUsesNonExemptEncryption":false,"NSPhotoLibraryUsageDescription":"This app uses photo library to allow users to upload pictures as a part or product's review and feedback.","NSLocationWhenInUseUsageDescription":"This app uses your location to decide if your place is serviceable or not."}},"android":{"softwareKeyboardLayoutMode":"resize","adaptiveIcon":{"foregroundImage":"./assets/images/freshyo-logo.png","backgroundColor":"#fff0f6"},"edgeToEdgeEnabled":true,"package":"in.freshyo.app","googleServicesFile":"./google-services.json"},"web":{"bundler":"metro","output":"static","favicon":"./assets/images/favicon.png"},"plugins":["expo-router",["expo-splash-screen",{"image":"./assets/images/freshyo-logo.png","imageWidth":200,"resizeMode":"contain","backgroundColor":"#ffffff"}],"expo-secure-store","expo-notifications"],"experiments":{"typedRoutes":true},"extra":{"router":{},"eas":{"projectId":"7f3e7611-f7a8-45f9-8a99-c2b1f6454d48"}},"runtimeVersion":{"policy":"appVersion"},"updates":{"url":"https://u.expo.dev/7f3e7611-f7a8-45f9-8a99-c2b1f6454d48"},"owner":"mohammedshafiuddin54","sdkVersion":"53.0.0","platforms":["ios","android","web"],"androidStatusBar":{"backgroundColor":"#ffffff"}}

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyCollectedDataTypes</key>
<array>
</array>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
</array>
</dict>
</plist>

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyCollectedDataTypes</key>
<array>
</array>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
</array>
</dict>
</plist>

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyCollectedDataTypes</key>
<array>
</array>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>35F9.1</string>
</array>
</dict>
</array>
</dict>
</plist>

View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyCollectedDataTypes</key>
<array>
</array>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>0A2A.1</string>
<string>3B52.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryDiskSpace</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>E174.1</string>
<string>85F4.1</string>
</array>
</dict>
</array>
</dict>
</plist>

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyCollectedDataTypes</key>
<array>
</array>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
</array>
</dict>
</plist>

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyCollectedDataTypes</key>
<array>
</array>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
</array>
</dict>
</plist>

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyAccessedAPITypes</key>
<array/>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array/>
</dict>
</plist>

View file

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Info.plist</key>
<data>
m2+OcUVS+NCF/RaQ0NMeexAJIbU=
</data>
</dict>
<key>files2</key>
<dict/>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>

View file

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Info.plist</key>
<data>
IgSq/mUvfi0nncHC2TAKVG0zPwA=
</data>
</dict>
<key>files2</key>
<dict/>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>

Some files were not shown because too many files have changed in this diff Show more