From 17e26447598aff5ee2407605b57286cd82b709f2 Mon Sep 17 00:00:00 2001 From: shafi54 <108669266+shafi-aviz@users.noreply.github.com> Date: Tue, 24 Mar 2026 18:48:31 +0530 Subject: [PATCH] enh --- apps/backend/.env | 5 +- apps/backend/drizzle.config.ts | 15 +- apps/backend/index.ts | 6 - apps/backend/package.json | 17 +- apps/backend/sqlite.db | Bin 0 -> 974848 bytes .../apis/common-product.controller.ts | 112 +-- apps/backend/src/db/common-product.ts | 10 + apps/backend/src/db/db_index.ts | 14 +- apps/backend/src/db/db_index_sqlite.ts | 10 - apps/backend/src/db/schema-postgres.ts | 707 +---------------- apps/backend/src/db/schema-sqlite.ts | 736 +----------------- apps/backend/src/db/seed.ts | 140 +--- apps/backend/src/db/sqlite-casts.ts | 35 +- apps/backend/src/db/types.ts | 99 +-- apps/backend/src/db/upload-url.ts | 14 + apps/backend/src/lib/delete-image.ts | 40 +- apps/backend/src/lib/notif-service.ts | 4 +- apps/backend/src/lib/roles-manager.ts | 2 - apps/backend/src/lib/s3-client.ts | 20 +- .../apis/admin-apis/dataAccessors/main.ts | 87 ++- .../trpc/apis/user-apis/dataAccessors/main.ts | 69 +- apps/backend/tsconfig.json | 3 +- apps/backend/types/db-dialect.d.ts | 1 + .../drizzle.config.ts} | 4 +- apps/db-helper-postgres/package.json | 10 + .../src/apis/common-apis/common-product.ts | 84 ++ .../admin-apis}/banner-queries.ts | 6 +- .../admin-apis}/complaint-queries.ts | 6 +- .../admin-apis}/constant-queries.ts | 6 +- .../admin-apis}/coupon-queries.ts | 6 +- .../admin-apis}/order-queries.ts | 6 +- .../admin-apis}/product-queries.ts | 6 +- .../admin-apis}/refund-queries.ts | 6 +- .../admin-apis}/schedule-queries.ts | 6 +- .../dataAccessors/admin-apis}/slot-queries.ts | 6 +- .../admin-apis}/staff-user-queries.ts | 6 +- .../admin-apis}/store-queries.ts | 6 +- .../dataAccessors/admin-apis}/tag-queries.ts | 6 +- .../dataAccessors/admin-apis}/user-queries.ts | 6 +- .../admin-apis}/vendor-snippets-queries.ts | 6 +- .../user-apis}/user-address-queries.ts | 6 +- .../user-apis}/user-auth-queries.ts | 6 +- .../user-apis}/user-banner-queries.ts | 6 +- .../user-apis}/user-cart-queries.ts | 6 +- .../user-apis}/user-complaint-queries.ts | 6 +- .../user-apis}/user-coupon-queries.ts | 6 +- .../user-apis}/user-order-queries.ts | 6 +- .../user-apis}/user-product-queries.ts | 6 +- .../user-apis}/user-profile-queries.ts | 6 +- .../user-apis}/user-slot-queries.ts | 6 +- .../user-apis}/user-store-queries.ts | 6 +- apps/db-helper-postgres/src/db/db_index.ts | 10 + .../src/db/porter.ts | 4 +- apps/db-helper-postgres/src/db/schema.ts | 706 +++++++++++++++++ apps/db-helper-postgres/src/db/seed.ts | 153 ++++ apps/db-helper-postgres/src/db/types.ts | 47 ++ .../src/lib/automatedJobs.ts | 4 +- .../src/lib/cloud_cache.ts | 4 +- .../src/lib/const-store.ts | 4 +- .../src/lib/delete-orders.ts | 4 +- .../src/lib/manage-scheduled-availability.ts | 4 +- .../src/lib/notif-job.ts | 2 +- .../src/lib/post-order-handler.ts | 4 +- apps/db-helper-postgres/src/lib/upload-url.ts | 23 + .../src/middleware/auth.middleware.ts | 4 +- .../src/middleware/staff-auth.ts | 4 +- .../src/services/user/product-service.ts | 10 +- .../src/stores/banner-store.ts | 4 +- .../src/stores/product-store.ts | 8 +- .../src/stores/product-tag-store.ts | 4 +- .../src/stores/slot-store.ts | 4 +- .../src/stores/user-negativity-store.ts | 4 +- .../apis/common-apis/common-trpc-index.ts | 4 +- .../src/trpc/apis/common-apis/common.ts | 6 +- apps/db-helper-postgres/tsconfig.json | 12 + .../drizzle.config.ts} | 4 +- apps/db-helper-sqlite/package.json | 9 + .../src/apis/common-apis/common-product.ts | 102 +++ .../admin-apis}/banner-queries.ts | 8 +- .../admin-apis}/complaint-queries.ts | 6 +- .../admin-apis}/constant-queries.ts | 8 +- .../admin-apis}/coupon-queries.ts | 8 +- .../admin-apis}/order-queries.ts | 6 +- .../admin-apis}/product-queries.ts | 8 +- .../admin-apis}/refund-queries.ts | 6 +- .../admin-apis}/schedule-queries.ts | 8 +- .../dataAccessors/admin-apis}/slot-queries.ts | 8 +- .../admin-apis}/staff-user-queries.ts | 6 +- .../admin-apis}/store-queries.ts | 6 +- .../dataAccessors/admin-apis}/tag-queries.ts | 8 +- .../dataAccessors/admin-apis}/user-queries.ts | 6 +- .../admin-apis}/vendor-snippets-queries.ts | 8 +- .../user-apis}/user-address-queries.ts | 6 +- .../user-apis}/user-auth-queries.ts | 6 +- .../user-apis}/user-banner-queries.ts | 6 +- .../user-apis}/user-cart-queries.ts | 6 +- .../user-apis}/user-complaint-queries.ts | 15 +- .../user-apis}/user-coupon-queries.ts | 6 +- .../user-apis}/user-order-queries.ts | 6 +- .../user-apis}/user-product-queries.ts | 13 +- .../user-apis}/user-profile-queries.ts | 6 +- .../user-apis}/user-slot-queries.ts | 6 +- .../user-apis}/user-store-queries.ts | 6 +- apps/db-helper-sqlite/src/db/db_index.ts | 7 + apps/db-helper-sqlite/src/db/schema.ts | 735 +++++++++++++++++ apps/db-helper-sqlite/src/db/seed.ts | 154 ++++ apps/db-helper-sqlite/src/db/sqlite-casts.ts | 34 + apps/db-helper-sqlite/src/db/types.ts | 47 ++ apps/db-helper-sqlite/src/lib/upload-url.ts | 23 + .../src/services/user/product-service.ts | 143 ++++ .../src/stores/product-store.ts | 188 +++++ .../apis/common-apis/common-trpc-index.ts | 137 ++++ .../src/trpc/apis/common-apis/common.ts | 116 +++ apps/db-helper-sqlite/tsconfig.json | 12 + apps/migrator/README.md | 43 +- apps/migrator/migrator.config.ts | 11 + apps/migrator/mydatabase.db | 0 apps/migrator/sqlite.db | Bin 0 -> 974848 bytes apps/migrator/src/index.ts | 7 +- apps/migrator/src/lib/args.ts | 50 -- apps/migrator/src/lib/migrate.ts | 9 +- apps/migrator/src/lib/types.ts | 7 + apps/migrator/src/postgres_to_sqlite/index.ts | 4 +- .../migrator/src/postgres_to_sqlite/sqlite.db | Bin 0 -> 323584 bytes apps/migrator/src/sqlite_to_postgres/index.ts | 4 +- .../app/(drawer)/(tabs)/home/index.tsx | 1 + apps/user-ui/components/ProductCard.tsx | 77 +- apps/user-ui/src/hooks/prominent-api-hooks.ts | 1 + packages/ui/index.ts | 9 +- sqlite.db | Bin 0 -> 323584 bytes 130 files changed, 3277 insertions(+), 2266 deletions(-) create mode 100644 apps/backend/sqlite.db create mode 100644 apps/backend/src/db/common-product.ts mode change 100755 => 100644 apps/backend/src/db/db_index.ts delete mode 100644 apps/backend/src/db/db_index_sqlite.ts create mode 100644 apps/backend/src/db/upload-url.ts create mode 100644 apps/backend/types/db-dialect.d.ts rename apps/{backend/drizzle.config.postgres.ts => db-helper-postgres/drizzle.config.ts} (74%) create mode 100644 apps/db-helper-postgres/package.json create mode 100644 apps/db-helper-postgres/src/apis/common-apis/common-product.ts rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/postgres => db-helper-postgres/src/dataAccessors/admin-apis}/banner-queries.ts (81%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/sqlite => db-helper-postgres/src/dataAccessors/admin-apis}/complaint-queries.ts (83%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/postgres => db-helper-postgres/src/dataAccessors/admin-apis}/constant-queries.ts (72%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/postgres => db-helper-postgres/src/dataAccessors/admin-apis}/coupon-queries.ts (96%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/postgres => db-helper-postgres/src/dataAccessors/admin-apis}/order-queries.ts (98%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/postgres => db-helper-postgres/src/dataAccessors/admin-apis}/product-queries.ts (97%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/postgres => db-helper-postgres/src/dataAccessors/admin-apis}/refund-queries.ts (84%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/postgres => db-helper-postgres/src/dataAccessors/admin-apis}/schedule-queries.ts (85%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/postgres => db-helper-postgres/src/dataAccessors/admin-apis}/slot-queries.ts (95%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/postgres => db-helper-postgres/src/dataAccessors/admin-apis}/staff-user-queries.ts (94%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/sqlite => db-helper-postgres/src/dataAccessors/admin-apis}/store-queries.ts (84%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/postgres => db-helper-postgres/src/dataAccessors/admin-apis}/tag-queries.ts (82%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/postgres => db-helper-postgres/src/dataAccessors/admin-apis}/user-queries.ts (96%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/postgres => db-helper-postgres/src/dataAccessors/admin-apis}/vendor-snippets-queries.ts (95%) rename apps/{backend/src/trpc/apis/user-apis/dataAccessors/postgres => db-helper-postgres/src/dataAccessors/user-apis}/user-address-queries.ts (91%) rename apps/{backend/src/trpc/apis/user-apis/dataAccessors/postgres => db-helper-postgres/src/dataAccessors/user-apis}/user-auth-queries.ts (96%) rename apps/{backend/src/trpc/apis/user-apis/dataAccessors/sqlite => db-helper-postgres/src/dataAccessors/user-apis}/user-banner-queries.ts (62%) rename apps/{backend/src/trpc/apis/user-apis/dataAccessors/postgres => db-helper-postgres/src/dataAccessors/user-apis}/user-cart-queries.ts (90%) rename apps/{backend/src/trpc/apis/user-apis/dataAccessors/postgres => db-helper-postgres/src/dataAccessors/user-apis}/user-complaint-queries.ts (78%) rename apps/{backend/src/trpc/apis/user-apis/dataAccessors/sqlite => db-helper-postgres/src/dataAccessors/user-apis}/user-coupon-queries.ts (92%) rename apps/{backend/src/trpc/apis/user-apis/dataAccessors/sqlite => db-helper-postgres/src/dataAccessors/user-apis}/user-order-queries.ts (97%) rename apps/{backend/src/trpc/apis/user-apis/dataAccessors/postgres => db-helper-postgres/src/dataAccessors/user-apis}/user-product-queries.ts (93%) rename apps/{backend/src/trpc/apis/user-apis/dataAccessors/postgres => db-helper-postgres/src/dataAccessors/user-apis}/user-profile-queries.ts (92%) rename apps/{backend/src/trpc/apis/user-apis/dataAccessors/postgres => db-helper-postgres/src/dataAccessors/user-apis}/user-slot-queries.ts (75%) rename apps/{backend/src/trpc/apis/user-apis/dataAccessors/sqlite => db-helper-postgres/src/dataAccessors/user-apis}/user-store-queries.ts (89%) create mode 100644 apps/db-helper-postgres/src/db/db_index.ts rename apps/{backend => db-helper-postgres}/src/db/porter.ts (98%) create mode 100644 apps/db-helper-postgres/src/db/schema.ts create mode 100644 apps/db-helper-postgres/src/db/seed.ts create mode 100644 apps/db-helper-postgres/src/db/types.ts rename apps/{backend => db-helper-postgres}/src/lib/automatedJobs.ts (96%) rename apps/{backend => db-helper-postgres}/src/lib/cloud_cache.ts (99%) rename apps/{backend => db-helper-postgres}/src/lib/const-store.ts (95%) rename apps/{backend => db-helper-postgres}/src/lib/delete-orders.ts (94%) rename apps/{backend => db-helper-postgres}/src/lib/manage-scheduled-availability.ts (97%) rename apps/{backend => db-helper-postgres}/src/lib/notif-job.ts (99%) rename apps/{backend => db-helper-postgres}/src/lib/post-order-handler.ts (98%) create mode 100644 apps/db-helper-postgres/src/lib/upload-url.ts rename apps/{backend => db-helper-postgres}/src/middleware/auth.middleware.ts (95%) rename apps/{backend => db-helper-postgres}/src/middleware/staff-auth.ts (95%) rename apps/{backend => db-helper-postgres}/src/services/user/product-service.ts (93%) rename apps/{backend => db-helper-postgres}/src/stores/banner-store.ts (96%) rename apps/{backend => db-helper-postgres}/src/stores/product-store.ts (96%) rename apps/{backend => db-helper-postgres}/src/stores/product-tag-store.ts (97%) rename apps/{backend => db-helper-postgres}/src/stores/slot-store.ts (99%) rename apps/{backend => db-helper-postgres}/src/stores/user-negativity-store.ts (97%) rename apps/{backend => db-helper-postgres}/src/trpc/apis/common-apis/common-trpc-index.ts (97%) rename apps/{backend => db-helper-postgres}/src/trpc/apis/common-apis/common.ts (96%) create mode 100644 apps/db-helper-postgres/tsconfig.json rename apps/{backend/drizzle.config.sqlite.ts => db-helper-sqlite/drizzle.config.ts} (73%) create mode 100644 apps/db-helper-sqlite/package.json create mode 100644 apps/db-helper-sqlite/src/apis/common-apis/common-product.ts rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/sqlite => db-helper-sqlite/src/dataAccessors/admin-apis}/banner-queries.ts (81%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/postgres => db-helper-sqlite/src/dataAccessors/admin-apis}/complaint-queries.ts (83%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/sqlite => db-helper-sqlite/src/dataAccessors/admin-apis}/constant-queries.ts (70%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/sqlite => db-helper-sqlite/src/dataAccessors/admin-apis}/coupon-queries.ts (95%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/sqlite => db-helper-sqlite/src/dataAccessors/admin-apis}/order-queries.ts (98%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/sqlite => db-helper-sqlite/src/dataAccessors/admin-apis}/product-queries.ts (96%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/sqlite => db-helper-sqlite/src/dataAccessors/admin-apis}/refund-queries.ts (84%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/sqlite => db-helper-sqlite/src/dataAccessors/admin-apis}/schedule-queries.ts (86%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/sqlite => db-helper-sqlite/src/dataAccessors/admin-apis}/slot-queries.ts (95%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/sqlite => db-helper-sqlite/src/dataAccessors/admin-apis}/staff-user-queries.ts (93%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/postgres => db-helper-sqlite/src/dataAccessors/admin-apis}/store-queries.ts (84%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/sqlite => db-helper-sqlite/src/dataAccessors/admin-apis}/tag-queries.ts (83%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/sqlite => db-helper-sqlite/src/dataAccessors/admin-apis}/user-queries.ts (96%) rename apps/{backend/src/trpc/apis/admin-apis/dataAccessors/sqlite => db-helper-sqlite/src/dataAccessors/admin-apis}/vendor-snippets-queries.ts (94%) rename apps/{backend/src/trpc/apis/user-apis/dataAccessors/sqlite => db-helper-sqlite/src/dataAccessors/user-apis}/user-address-queries.ts (91%) rename apps/{backend/src/trpc/apis/user-apis/dataAccessors/sqlite => db-helper-sqlite/src/dataAccessors/user-apis}/user-auth-queries.ts (96%) rename apps/{backend/src/trpc/apis/user-apis/dataAccessors/postgres => db-helper-sqlite/src/dataAccessors/user-apis}/user-banner-queries.ts (62%) rename apps/{backend/src/trpc/apis/user-apis/dataAccessors/sqlite => db-helper-sqlite/src/dataAccessors/user-apis}/user-cart-queries.ts (90%) rename apps/{backend/src/trpc/apis/user-apis/dataAccessors/sqlite => db-helper-sqlite/src/dataAccessors/user-apis}/user-complaint-queries.ts (57%) rename apps/{backend/src/trpc/apis/user-apis/dataAccessors/postgres => db-helper-sqlite/src/dataAccessors/user-apis}/user-coupon-queries.ts (92%) rename apps/{backend/src/trpc/apis/user-apis/dataAccessors/postgres => db-helper-sqlite/src/dataAccessors/user-apis}/user-order-queries.ts (97%) rename apps/{backend/src/trpc/apis/user-apis/dataAccessors/sqlite => db-helper-sqlite/src/dataAccessors/user-apis}/user-product-queries.ts (87%) rename apps/{backend/src/trpc/apis/user-apis/dataAccessors/sqlite => db-helper-sqlite/src/dataAccessors/user-apis}/user-profile-queries.ts (92%) rename apps/{backend/src/trpc/apis/user-apis/dataAccessors/sqlite => db-helper-sqlite/src/dataAccessors/user-apis}/user-slot-queries.ts (75%) rename apps/{backend/src/trpc/apis/user-apis/dataAccessors/postgres => db-helper-sqlite/src/dataAccessors/user-apis}/user-store-queries.ts (89%) create mode 100644 apps/db-helper-sqlite/src/db/db_index.ts create mode 100644 apps/db-helper-sqlite/src/db/schema.ts create mode 100644 apps/db-helper-sqlite/src/db/seed.ts create mode 100644 apps/db-helper-sqlite/src/db/sqlite-casts.ts create mode 100644 apps/db-helper-sqlite/src/db/types.ts create mode 100644 apps/db-helper-sqlite/src/lib/upload-url.ts create mode 100644 apps/db-helper-sqlite/src/services/user/product-service.ts create mode 100644 apps/db-helper-sqlite/src/stores/product-store.ts create mode 100644 apps/db-helper-sqlite/src/trpc/apis/common-apis/common-trpc-index.ts create mode 100644 apps/db-helper-sqlite/src/trpc/apis/common-apis/common.ts create mode 100644 apps/db-helper-sqlite/tsconfig.json create mode 100644 apps/migrator/migrator.config.ts create mode 100644 apps/migrator/mydatabase.db create mode 100644 apps/migrator/sqlite.db delete mode 100644 apps/migrator/src/lib/args.ts create mode 100644 apps/migrator/src/lib/types.ts create mode 100644 apps/migrator/src/postgres_to_sqlite/sqlite.db create mode 100644 sqlite.db diff --git a/apps/backend/.env b/apps/backend/.env index be2c9e2..7a02db2 100755 --- a/apps/backend/.env +++ b/apps/backend/.env @@ -1,7 +1,10 @@ ENV_MODE=PROD -DATABASE_URL=postgresql://postgres:meatfarmer_master_password@57.128.212.174:7447/meatfarmer #technocracy +# DATABASE_URL=postgresql://postgres:meatfarmer_master_password@57.128.212.174:7447/meatfarmer #technocracy # DATABASE_URL=postgres://postgres:meatfarmer_master_password@5.223.55.14:7447/meatfarmer #hetzner +SQLITE_DB_PATH='./sqlite.db' +DB_DIALECT='sqlite' PHONE_PE_BASE_URL=https://api-preprod.phonepe.com/ + PHONE_PE_CLIENT_ID=TEST-M23F2IGP34ZAR_25090 PHONE_PE_CLIENT_VERSION=1 PHONE_PE_CLIENT_SECRET=MTU1MmIzOTgtM2Q0Mi00N2M5LTkyMWUtNzBiMjdmYzVmZWUy diff --git a/apps/backend/drizzle.config.ts b/apps/backend/drizzle.config.ts index 0b5c1c9..0dea3b8 100755 --- a/apps/backend/drizzle.config.ts +++ b/apps/backend/drizzle.config.ts @@ -1,11 +1,6 @@ -import 'dotenv/config'; -import { defineConfig } from 'drizzle-kit'; +import postgresConfig from '../db-helper-postgres/drizzle.config' +import sqliteConfig from '../db-helper-sqlite/drizzle.config' -export default defineConfig({ - out: './drizzle', - schema: './src/db/schema.ts', - dialect: 'postgresql', - dbCredentials: { - url: process.env.DATABASE_URL!, - }, -}); +export default process.env.DB_DIALECT === 'sqlite' + ? sqliteConfig + : postgresConfig diff --git a/apps/backend/index.ts b/apps/backend/index.ts index 9f975b4..390aef7 100644 --- a/apps/backend/index.ts +++ b/apps/backend/index.ts @@ -157,7 +157,6 @@ app.onError((err, c) => { return c.json({ message }, status) }) -<<<<<<< HEAD // Start server serve({ fetch: app.fetch, @@ -166,8 +165,3 @@ serve({ }) console.log('🚀 Server running on http://localhost:4000') -======= -app.listen(4000, '::', () => { - console.log("Server is running on http://localhost:4000/api/mobile/"); -}); ->>>>>>> main diff --git a/apps/backend/package.json b/apps/backend/package.json index ff902d1..fdc95fa 100755 --- a/apps/backend/package.json +++ b/apps/backend/package.json @@ -4,16 +4,16 @@ "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "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", + "migrate": "drizzle-kit generate --config ../db-helper-postgres/drizzle.config.ts", + "migrate:pg": "drizzle-kit generate --config ../db-helper-postgres/drizzle.config.ts", + "migrate:sqlite": "drizzle-kit generate --config ../db-helper-sqlite/drizzle.config.ts", + "generate:pg": "bunx drizzle-kit generate --config ../db-helper-postgres/drizzle.config.ts", + "generate:sqlite": "bunx drizzle-kit generate --config ../db-helper-sqlite/drizzle.config.ts", "build": "rimraf ./dist && tsc --project tsconfig.json && tsc-alias -p tsconfig.json", "build2": "rimraf ./dist && tsc", - "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:push": "drizzle-kit push --config ../db-helper-postgres/drizzle.config.ts", + "db:push:pg": "drizzle-kit push --config ../db-helper-postgres/drizzle.config.ts", + "db:push:sqlite": "drizzle-kit push --config ../db-helper-sqlite/drizzle.config.ts", "db:seed": "tsx src/db/seed.ts", "dev:express": "bun --watch index-express.ts", "dev:hono": "bun --watch index.ts", @@ -46,7 +46,6 @@ "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" }, diff --git a/apps/backend/sqlite.db b/apps/backend/sqlite.db new file mode 100644 index 0000000000000000000000000000000000000000..20e8c5158e87727552a658a54bf7d1a2485dd888 GIT binary patch literal 974848 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

ul&jMawCz%EY-=?HE#T*}he23l z!JVto5R}%8M0e6^@^I(e48qUtl{R#jim@3@!6Q=%pCIM#xNLWIfqp-*amQw zt`2oBk7jD)C0Hec@N;MsgRs)blXDq0&6nbVvtkRQ`|si!$xP}+2M=6iA_v@|*z z)A<$c$rY=Z%_dHR+Dkd0Jl#2~(Tb_OTq!b;DLjWPDuVJR^N4657qN&ZCs2g8??OIp z$&)>-VK#9Rzt%n3LmFlmC-E}Jojph~%G(RLwU#}gB4}YfYu>uER~pE~SeTLL+5JXo z6S#5D4lxL~duI1B2siH8y$r&Qd-e(jVVy

>z`1Ga@^{Al#bH_A>~(cY3mY6d^uj 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 omiFsQ7w0~tmzQ;M1& literal 0 HcmV?d00001 diff --git a/apps/backend/src/apis/common-apis/apis/common-product.controller.ts b/apps/backend/src/apis/common-apis/apis/common-product.controller.ts index 2da05b6..366c8a6 100644 --- a/apps/backend/src/apis/common-apis/apis/common-product.controller.ts +++ b/apps/backend/src/apis/common-apis/apis/common-product.controller.ts @@ -1,105 +1,37 @@ -import { eq, gt, and, sql, inArray } from "drizzle-orm"; -import { Context } from "hono"; -import { db } from "@/src/db/db_index" -import { productInfo, units, productSlots, deliverySlotInfo, productTags } from "@/src/db/schema" -import { scaffoldAssetUrl } from "@/src/lib/s3-client" +import { Context } from 'hono' -/** - * Get next delivery date for a product - */ -const getNextDeliveryDate = async (productId: number): Promise => { - const result = await db - .select({ deliveryTime: deliverySlotInfo.deliveryTime }) - .from(productSlots) - .innerJoin(deliverySlotInfo, eq(productSlots.slotId, deliverySlotInfo.id)) - .where( - and( - eq(productSlots.productId, productId), - eq(deliverySlotInfo.isActive, true), - gt(deliverySlotInfo.deliveryTime, sql`NOW()`) - ) - ) - .orderBy(deliverySlotInfo.deliveryTime) - .limit(1); - - - return result[0]?.deliveryTime || null; -}; +import { getProductsSummaryData } from '@/src/db/common-product' +import { scaffoldAssetUrl } from '@/src/lib/s3-client' /** * Get all products summary for dropdown */ export const getAllProductsSummary = async (c: Context) => { try { - const tagId = c.req.query('tagId'); - const tagIdNum = tagId ? parseInt(tagId) : null; + const tagId = c.req.query('tagId') + const tagIdNum = tagId ? parseInt(tagId) : null - let productIds: number[] | null = null; + const productsWithUnits = await getProductsSummaryData(tagIdNum) - // If tagId is provided, get products that have this tag - if (tagIdNum) { - const taggedProducts = await db - .select({ productId: productTags.productId }) - .from(productTags) - .where(eq(productTags.tagId, tagIdNum)); - - productIds = taggedProducts.map(tp => tp.productId); - } - - let whereCondition = undefined; - - // Filter by product IDs if tag filtering is applied - if (productIds && productIds.length > 0) { - whereCondition = inArray(productInfo.id, productIds); - } else if (tagIdNum) { - // If tagId was provided but no products found, return empty array - return c.json({ - products: [], - count: 0, - }); - } - - const productsWithUnits = await db - .select({ - id: productInfo.id, - name: productInfo.name, - shortDescription: productInfo.shortDescription, - price: productInfo.price, - marketPrice: productInfo.marketPrice, - images: productInfo.images, - isOutOfStock: productInfo.isOutOfStock, - unitShortNotation: units.shortNotation, - productQuantity: productInfo.productQuantity, - }) - .from(productInfo) - .innerJoin(units, eq(productInfo.unitId, units.id)) - .where(whereCondition); - - // Generate signed URLs for product images - const formattedProducts = await Promise.all( - productsWithUnits.map(async (product) => { - const nextDeliveryDate = await getNextDeliveryDate(product.id); - return { - id: product.id, - name: product.name, - shortDescription: product.shortDescription, - price: product.price, - marketPrice: product.marketPrice, - unit: product.unitShortNotation, - productQuantity: product.productQuantity, - isOutOfStock: product.isOutOfStock, - nextDeliveryDate: nextDeliveryDate ? nextDeliveryDate.toISOString() : null, - images: scaffoldAssetUrl((product.images as string[]) || []), - }; - }) - ); + const formattedProducts = productsWithUnits.map((product) => ({ + id: product.id, + name: product.name, + shortDescription: product.shortDescription, + price: product.price, + marketPrice: product.marketPrice, + unit: product.unitShortNotation, + productQuantity: product.productQuantity, + isOutOfStock: product.isOutOfStock, + nextDeliveryDate: product.nextDeliveryDate ? product.nextDeliveryDate.toISOString() : null, + images: scaffoldAssetUrl((product.images as string[]) || []), + })) return c.json({ products: formattedProducts, count: formattedProducts.length, - }); + }) } catch (error) { - console.error("Get products summary error:", error); - return c.json({ error: "Failed to fetch products summary" }, 500); + console.error('Get products summary error:', error) + return c.json({ error: 'Failed to fetch products summary' }, 500) } -}; +} diff --git a/apps/backend/src/db/common-product.ts b/apps/backend/src/db/common-product.ts new file mode 100644 index 0000000..ed4ac45 --- /dev/null +++ b/apps/backend/src/db/common-product.ts @@ -0,0 +1,10 @@ +import { getProductsSummaryData as getProductsSummaryDataPostgres } from '@db-helper-postgres/apis/common-apis/common-product' +import { getProductsSummaryData as getProductsSummaryDataSqlite } from '@db-helper-sqlite/apis/common-apis/common-product' + +const dialect = process.env.DB_DIALECT || DB_DIALECT_TYPE + +const getProductsSummaryData = dialect === 'sqlite' + ? getProductsSummaryDataSqlite + : getProductsSummaryDataPostgres + +export { getProductsSummaryData } diff --git a/apps/backend/src/db/db_index.ts b/apps/backend/src/db/db_index.ts old mode 100755 new mode 100644 index 4e2d75a..79f4782 --- a/apps/backend/src/db/db_index.ts +++ b/apps/backend/src/db/db_index.ts @@ -1,8 +1,10 @@ -import { drizzle } from "drizzle-orm/node-postgres" -import { migrate } from "drizzle-orm/node-postgres/migrator" -import path from "path" -import * as schema from "@/src/db/schema-postgres" +import { db as postgresDb } from '@db-helper-postgres/db/db_index' +import { db as sqliteDb } from '@db-helper-sqlite/db/db_index' + +const dialect = process.env.DB_DIALECT || DB_DIALECT_TYPE + +type Db = typeof DB_DIALECT_TYPE extends 'sqlite' ? typeof sqliteDb : typeof postgresDb + +const db = (dialect === 'sqlite' ? sqliteDb : postgresDb) as Db -const db = drizzle({ connection: process.env.DATABASE_URL!, casing: "snake_case", schema: schema }) -// const db = drizzle('postgresql://postgres:postgres@localhost:2345/pooler'); export { db } diff --git a/apps/backend/src/db/db_index_sqlite.ts b/apps/backend/src/db/db_index_sqlite.ts deleted file mode 100644 index c9390d4..0000000 --- a/apps/backend/src/db/db_index_sqlite.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { drizzle } from 'drizzle-orm/bun-sqlite' -import { Database } from 'bun:sqlite' -import * as schema from '@/src/db/schema-sqlite' - -const sqlitePath = process.env.SQLITE_DB_PATH || 'sqlite.db' -const sqlite = new Database(sqlitePath) - -const db = drizzle(sqlite, { schema }) - -export { db } diff --git a/apps/backend/src/db/schema-postgres.ts b/apps/backend/src/db/schema-postgres.ts index 939e04d..ddb97e4 100644 --- a/apps/backend/src/db/schema-postgres.ts +++ b/apps/backend/src/db/schema-postgres.ts @@ -1,706 +1 @@ -import { pgTable, pgSchema, integer, varchar, date, boolean, timestamp, numeric, jsonb, pgEnum, unique, real, text, check, decimal } from "drizzle-orm/pg-core"; -import { relations, sql } from "drizzle-orm"; - -const mf = pgSchema('mf'); - - - -export const users = mf.table('users', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - name: varchar({ length: 255 }), - email: varchar({ length: 255 }), - mobile: varchar({ length: 255 }), - createdAt: timestamp('created_at').notNull().defaultNow(), -}, (t) => ({ - unq_email: unique('unique_email').on(t.email), -})); - -export const userDetails = mf.table('user_details', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - userId: integer('user_id').notNull().references(() => users.id).unique(), - bio: varchar('bio', { length: 500 }), - dateOfBirth: date('date_of_birth'), - gender: varchar('gender', { length: 20 }), - occupation: varchar('occupation', { length: 100 }), - profileImage: varchar('profile_image', { length: 500 }), - isSuspended: boolean('is_suspended').notNull().default(false), - createdAt: timestamp('created_at').notNull().defaultNow(), - updatedAt: timestamp('updated_at').notNull().defaultNow(), -}); - -export const userCreds = mf.table('user_creds', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - userId: integer('user_id').notNull().references(() => users.id), - userPassword: varchar('user_password', { length: 255 }).notNull(), - createdAt: timestamp('created_at').notNull().defaultNow(), -}); - -export const addresses = mf.table('addresses', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - userId: integer('user_id').notNull().references(() => users.id), - name: varchar('name', { length: 255 }).notNull(), - phone: varchar('phone', { length: 15 }).notNull(), - addressLine1: varchar('address_line1', { length: 255 }).notNull(), - addressLine2: varchar('address_line2', { length: 255 }), - city: varchar('city', { length: 100 }).notNull(), - state: varchar('state', { length: 100 }).notNull(), - pincode: varchar('pincode', { length: 10 }).notNull(), - isDefault: boolean('is_default').notNull().default(false), - latitude: real('latitude'), - longitude: real('longitude'), - googleMapsUrl: varchar('google_maps_url', { length: 500 }), - adminLatitude: real('admin_latitude'), - adminLongitude: real('admin_longitude'), - zoneId: integer('zone_id').references(() => addressZones.id), - createdAt: timestamp('created_at').notNull().defaultNow(), -}); - -export const addressZones = mf.table('address_zones', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - zoneName: varchar('zone_name', { length: 255 }).notNull(), - addedAt: timestamp('added_at').notNull().defaultNow(), -}); - -export const addressAreas = mf.table('address_areas', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - placeName: varchar('place_name', { length: 255 }).notNull(), - zoneId: integer('zone_id').references(() => addressZones.id), - createdAt: timestamp('created_at').notNull().defaultNow(), -}); - -export const staffUsers = mf.table('staff_users', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - name: varchar({ length: 255 }).notNull(), - password: varchar({ length: 255 }).notNull(), - staffRoleId: integer('staff_role_id').references(() => staffRoles.id), - createdAt: timestamp('created_at').notNull().defaultNow(), -}); - -export const storeInfo = mf.table('store_info', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - name: varchar({ length: 255 }).notNull(), - description: varchar({ length: 500 }), - imageUrl: varchar('image_url', { length: 500 }), - createdAt: timestamp('created_at').notNull().defaultNow(), - owner: integer('owner').notNull().references(() => staffUsers.id), -}); - -export const units = mf.table('units', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - shortNotation: varchar('short_notation', { length: 50 }).notNull(), - fullName: varchar('full_name', { length: 100 }).notNull(), -}, (t) => ({ - unq_short_notation: unique('unique_short_notation').on(t.shortNotation), -})); - -export const productAvailabilityActionEnum = pgEnum('product_availability_action', ['in', 'out']); - -export const productInfo = mf.table('product_info', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - name: varchar({ length: 255 }).notNull(), - shortDescription: varchar('short_description', { length: 500 }), - longDescription: varchar('long_description', { length: 1000 }), - unitId: integer('unit_id').notNull().references(() => units.id), - price: numeric({ precision: 10, scale: 2 }).notNull(), - marketPrice: numeric('market_price', { precision: 10, scale: 2 }), - images: jsonb('images'), - isOutOfStock: boolean('is_out_of_stock').notNull().default(false), - isSuspended: boolean('is_suspended').notNull().default(false), - isFlashAvailable: boolean('is_flash_available').notNull().default(false), - flashPrice: numeric('flash_price', { precision: 10, scale: 2 }), - createdAt: timestamp('created_at').notNull().defaultNow(), - incrementStep: real('increment_step').notNull().default(1), - productQuantity: real('product_quantity').notNull().default(1), - storeId: integer('store_id').references(() => storeInfo.id), - scheduledAvailability: boolean('scheduled_availability').notNull().default(true), -}); - -export const productAvailabilitySchedules = mf.table('product_availability_schedules', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - time: varchar('time', { length: 10 }).notNull(), - scheduleName: varchar('schedule_name', { length: 255 }).notNull().unique(), - action: productAvailabilityActionEnum('action').notNull(), - productIds: integer('product_ids').array().notNull().default([]), - groupIds: integer('group_ids').array().notNull().default([]), - createdAt: timestamp('created_at').notNull().defaultNow(), - lastUpdated: timestamp('last_updated').notNull().defaultNow(), -}); - -export const productGroupInfo = mf.table('product_group_info', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - groupName: varchar('group_name', { length: 255 }).notNull(), - description: varchar({ length: 500 }), - createdAt: timestamp('created_at').notNull().defaultNow(), -}); - -export const productGroupMembership = mf.table('product_group_membership', { - productId: integer('product_id').notNull().references(() => productInfo.id), - groupId: integer('group_id').notNull().references(() => productGroupInfo.id), - addedAt: timestamp('added_at').notNull().defaultNow(), -}, (t) => ({ - pk: unique('product_group_membership_pk').on(t.productId, t.groupId), -})); - -export const homeBanners = mf.table('home_banners', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - name: varchar('name', { length: 255 }).notNull(), - imageUrl: varchar('image_url', { length: 500 }).notNull(), - description: varchar('description', { length: 500 }), - productIds: integer('product_ids').array(), - redirectUrl: varchar('redirect_url', { length: 500 }), - serialNum: integer('serial_num'), - isActive: boolean('is_active').notNull().default(false), - createdAt: timestamp('created_at').notNull().defaultNow(), - lastUpdated: timestamp('last_updated').notNull().defaultNow(), -}); - -export const productReviews = mf.table('product_reviews', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - userId: integer('user_id').notNull().references(() => users.id), - productId: integer('product_id').notNull().references(() => productInfo.id), - reviewBody: text('review_body').notNull(), - imageUrls: jsonb('image_urls').$defaultFn(() => []), - reviewTime: timestamp('review_time').notNull().defaultNow(), - ratings: real('ratings').notNull(), - adminResponse: text('admin_response'), - adminResponseImages: jsonb('admin_response_images').$defaultFn(() => []), -}, (t) => ({ - ratingCheck: check('rating_check', sql`${t.ratings} >= 1 AND ${t.ratings} <= 5`), -})); - -export const uploadStatusEnum = pgEnum('upload_status', ['pending', 'claimed']); - -export const staffRoleEnum = pgEnum('staff_role', ['super_admin', 'admin', 'marketer', 'delivery_staff']); - -export const staffPermissionEnum = pgEnum('staff_permission', ['crud_product', 'make_coupon', 'crud_staff_users']); - -export const uploadUrlStatus = mf.table('upload_url_status', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - createdAt: timestamp('created_at').notNull().defaultNow(), - key: varchar('key', { length: 500 }).notNull(), - status: uploadStatusEnum('status').notNull().default('pending'), -}); - -export const productTagInfo = mf.table('product_tag_info', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - tagName: varchar('tag_name', { length: 100 }).notNull().unique(), - tagDescription: varchar('tag_description', { length: 500 }), - imageUrl: varchar('image_url', { length: 500 }), - isDashboardTag: boolean('is_dashboard_tag').notNull().default(false), - relatedStores: jsonb('related_stores').$defaultFn(() => []), - createdAt: timestamp('created_at').notNull().defaultNow(), -}); - -export const productTags = mf.table('product_tags', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - productId: integer('product_id').notNull().references(() => productInfo.id), - tagId: integer('tag_id').notNull().references(() => productTagInfo.id), - assignedAt: timestamp('assigned_at').notNull().defaultNow(), -}, (t) => ({ - unq_product_tag: unique('unique_product_tag').on(t.productId, t.tagId), -})); - -export const deliverySlotInfo = mf.table('delivery_slot_info', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - deliveryTime: timestamp('delivery_time').notNull(), - 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(() => []), -}); - -export const vendorSnippets = mf.table('vendor_snippets', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - snippetCode: varchar('snippet_code', { length: 255 }).notNull().unique(), - slotId: integer('slot_id').references(() => deliverySlotInfo.id), - isPermanent: boolean('is_permanent').notNull().default(false), - productIds: integer('product_ids').array().notNull(), - validTill: timestamp('valid_till'), - createdAt: timestamp('created_at').notNull().defaultNow(), -}); - -export const vendorSnippetsRelations = relations(vendorSnippets, ({ one }) => ({ - slot: one(deliverySlotInfo, { fields: [vendorSnippets.slotId], references: [deliverySlotInfo.id] }), -})); - -export const productSlots = mf.table('product_slots', { - productId: integer('product_id').notNull().references(() => productInfo.id), - slotId: integer('slot_id').notNull().references(() => deliverySlotInfo.id), -}, (t) => ({ - pk: unique('product_slot_pk').on(t.productId, t.slotId), -})); - -export const specialDeals = mf.table('special_deals', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - productId: integer('product_id').notNull().references(() => productInfo.id), - quantity: numeric({ precision: 10, scale: 2 }).notNull(), - price: numeric({ precision: 10, scale: 2 }).notNull(), - validTill: timestamp('valid_till').notNull(), -}); - -export const orders = mf.table('orders', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - userId: integer('user_id').notNull().references(() => users.id), - addressId: integer('address_id').notNull().references(() => addresses.id), - slotId: integer('slot_id').references(() => deliverySlotInfo.id), - isCod: boolean('is_cod').notNull().default(false), - isOnlinePayment: boolean('is_online_payment').notNull().default(false), - paymentInfoId: integer('payment_info_id').references(() => paymentInfoTable.id), - totalAmount: numeric('total_amount', { precision: 10, scale: 2 }).notNull(), - deliveryCharge: numeric('delivery_charge', { precision: 10, scale: 2 }).notNull().default('0'), - readableId: integer('readable_id').notNull(), - adminNotes: text('admin_notes'), - userNotes: text('user_notes'), - orderGroupId: varchar('order_group_id', { length: 255 }), - orderGroupProportion: decimal('order_group_proportion', { precision: 10, scale: 4 }), - isFlashDelivery: boolean('is_flash_delivery').notNull().default(false), - createdAt: timestamp('created_at').notNull().defaultNow(), -}); - -export const orderItems = mf.table('order_items', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - orderId: integer('order_id').notNull().references(() => orders.id), - productId: integer('product_id').notNull().references(() => productInfo.id), - quantity: varchar('quantity', { length: 50 }).notNull(), - price: numeric({ precision: 10, scale: 2 }).notNull(), - discountedPrice: numeric('discounted_price', { precision: 10, scale: 2 }), - is_packaged: boolean('is_packaged').notNull().default(false), - is_package_verified: boolean('is_package_verified').notNull().default(false), -}); - -export const paymentStatusEnum = pgEnum('payment_status', ['pending', 'success', 'cod', 'failed']); - -export const orderStatus = mf.table('order_status', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - orderTime: timestamp('order_time').notNull().defaultNow(), - userId: integer('user_id').notNull().references(() => users.id), - orderId: integer('order_id').notNull().references(() => orders.id), - isPackaged: boolean('is_packaged').notNull().default(false), - isDelivered: boolean('is_delivered').notNull().default(false), - isCancelled: boolean('is_cancelled').notNull().default(false), - cancelReason: varchar('cancel_reason', { length: 255 }), - isCancelledByAdmin: boolean('is_cancelled_by_admin'), - paymentStatus: paymentStatusEnum('payment_state').notNull().default('pending'), - cancellationUserNotes: text('cancellation_user_notes'), - cancellationAdminNotes: text('cancellation_admin_notes'), - cancellationReviewed: boolean('cancellation_reviewed').notNull().default(false), - cancellationReviewedAt: timestamp('cancellation_reviewed_at'), - refundCouponId: integer('refund_coupon_id').references(() => coupons.id), -}); - -export const paymentInfoTable = mf.table('payment_info', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - status: varchar({ length: 50 }).notNull(), - gateway: varchar({ length: 50 }).notNull(), - orderId: varchar('order_id', { length: 500 }), - token: varchar({ length: 500 }), - merchantOrderId: varchar('merchant_order_id', { length: 255 }).notNull().unique(), - payload: jsonb('payload'), -}); - -export const payments = mf.table('payments', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - status: varchar({ length: 50 }).notNull(), - gateway: varchar({ length: 50 }).notNull(), - orderId: integer('order_id').notNull().references(() => orders.id), - token: varchar({ length: 500 }), - merchantOrderId: varchar('merchant_order_id', { length: 255 }).notNull().unique(), - payload: jsonb('payload'), -}); - -export const refunds = mf.table('refunds', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - orderId: integer('order_id').notNull().references(() => orders.id), - refundAmount: numeric('refund_amount', { precision: 10, scale: 2 }), - refundStatus: varchar('refund_status', { length: 50 }).default('none'), - merchantRefundId: varchar('merchant_refund_id', { length: 255 }), - refundProcessedAt: timestamp('refund_processed_at'), - createdAt: timestamp('created_at').notNull().defaultNow(), -}); - -export const keyValStore = mf.table('key_val_store', { - key: varchar('key', { length: 255 }).primaryKey(), - value: jsonb('value'), -}); - -export const notifications = mf.table('notifications', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - userId: integer('user_id').notNull().references(() => users.id), - title: varchar({ length: 255 }).notNull(), - body: varchar({ length: 512 }).notNull(), - type: varchar({ length: 50 }), - isRead: boolean('is_read').notNull().default(false), - createdAt: timestamp('created_at').notNull().defaultNow(), -}); - -export const productCategories = mf.table('product_categories', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - name: varchar({ length: 255 }).notNull(), - description: varchar({ length: 500 }), -}); - -export const cartItems = mf.table('cart_items', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - userId: integer('user_id').notNull().references(() => users.id), - productId: integer('product_id').notNull().references(() => productInfo.id), - quantity: numeric({ precision: 10, scale: 2 }).notNull(), - addedAt: timestamp('added_at').notNull().defaultNow(), -}, (t) => ({ - unq_user_product: unique('unique_user_product').on(t.userId, t.productId), -})); - -export const complaints = mf.table('complaints', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - userId: integer('user_id').notNull().references(() => users.id), - orderId: integer('order_id').references(() => orders.id), - complaintBody: varchar('complaint_body', { length: 1000 }).notNull(), - images: jsonb('images'), - response: varchar('response', { length: 1000 }), - isResolved: boolean('is_resolved').notNull().default(false), - createdAt: timestamp('created_at').notNull().defaultNow(), -}); - -export const coupons = mf.table('coupons', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - couponCode: varchar('coupon_code', { length: 50 }).notNull().unique('unique_coupon_code'), - isUserBased: boolean('is_user_based').notNull().default(false), - discountPercent: numeric('discount_percent', { precision: 5, scale: 2 }), - flatDiscount: numeric('flat_discount', { precision: 10, scale: 2 }), - minOrder: numeric('min_order', { precision: 10, scale: 2 }), - productIds: jsonb('product_ids'), - createdBy: integer('created_by').references(() => staffUsers.id), - maxValue: numeric('max_value', { precision: 10, scale: 2 }), - isApplyForAll: boolean('is_apply_for_all').notNull().default(false), - validTill: timestamp('valid_till'), - maxLimitForUser: integer('max_limit_for_user'), - isInvalidated: boolean('is_invalidated').notNull().default(false), - exclusiveApply: boolean('exclusive_apply').notNull().default(false), - createdAt: timestamp('created_at').notNull().defaultNow(), -}); - -export const couponUsage = mf.table('coupon_usage', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - userId: integer('user_id').notNull().references(() => users.id), - couponId: integer('coupon_id').notNull().references(() => coupons.id), - orderId: integer('order_id').references(() => orders.id), - orderItemId: integer('order_item_id').references(() => orderItems.id), - usedAt: timestamp('used_at').notNull().defaultNow(), -}); - -export const couponApplicableUsers = mf.table('coupon_applicable_users', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - couponId: integer('coupon_id').notNull().references(() => coupons.id), - userId: integer('user_id').notNull().references(() => users.id), -}, (t) => ({ - unq_coupon_user: unique('unique_coupon_user').on(t.couponId, t.userId), -})); - -export const couponApplicableProducts = mf.table('coupon_applicable_products', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - couponId: integer('coupon_id').notNull().references(() => coupons.id), - productId: integer('product_id').notNull().references(() => productInfo.id), -}, (t) => ({ - unq_coupon_product: unique('unique_coupon_product').on(t.couponId, t.productId), -})); - -export const userIncidents = mf.table('user_incidents', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - userId: integer('user_id').notNull().references(() => users.id), - orderId: integer('order_id').references(() => orders.id), - dateAdded: timestamp('date_added').notNull().defaultNow(), - adminComment: text('admin_comment'), - addedBy: integer('added_by').references(() => staffUsers.id), - negativityScore: integer('negativity_score'), -}); - -export const reservedCoupons = mf.table('reserved_coupons', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - secretCode: varchar('secret_code', { length: 50 }).notNull().unique(), - couponCode: varchar('coupon_code', { length: 50 }).notNull(), - discountPercent: numeric('discount_percent', { precision: 5, scale: 2 }), - flatDiscount: numeric('flat_discount', { precision: 10, scale: 2 }), - minOrder: numeric('min_order', { precision: 10, scale: 2 }), - productIds: jsonb('product_ids'), - maxValue: numeric('max_value', { precision: 10, scale: 2 }), - validTill: timestamp('valid_till'), - maxLimitForUser: integer('max_limit_for_user'), - exclusiveApply: boolean('exclusive_apply').notNull().default(false), - isRedeemed: boolean('is_redeemed').notNull().default(false), - redeemedBy: integer('redeemed_by').references(() => users.id), - redeemedAt: timestamp('redeemed_at'), - createdBy: integer('created_by').notNull().references(() => staffUsers.id), - createdAt: timestamp('created_at').notNull().defaultNow(), -}, (t) => ({ - unq_secret_code: unique('unique_secret_code').on(t.secretCode), -})); - -export const notifCreds = mf.table('notif_creds', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - token: varchar({ length: 500 }).notNull().unique(), - addedAt: timestamp('added_at').notNull().defaultNow(), - userId: integer('user_id').notNull().references(() => users.id), - lastVerified: timestamp('last_verified'), -}); - -export const unloggedUserTokens = mf.table('unlogged_user_tokens', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - token: varchar({ length: 500 }).notNull().unique(), - addedAt: timestamp('added_at').notNull().defaultNow(), - lastVerified: timestamp('last_verified'), -}); - -export const userNotifications = mf.table('user_notifications', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - title: varchar('title', { length: 255 }).notNull(), - imageUrl: varchar('image_url', { length: 500 }), - createdAt: timestamp('created_at').notNull().defaultNow(), - body: text('body').notNull(), - applicableUsers: jsonb('applicable_users'), -}); - -export const staffRoles = mf.table('staff_roles', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - roleName: staffRoleEnum('role_name').notNull(), - createdAt: timestamp('created_at').notNull().defaultNow(), -}, (t) => ({ - unq_role_name: unique('unique_role_name').on(t.roleName), -})); - -export const staffPermissions = mf.table('staff_permissions', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - permissionName: staffPermissionEnum('permission_name').notNull(), - createdAt: timestamp('created_at').notNull().defaultNow(), -}, (t) => ({ - unq_permission_name: unique('unique_permission_name').on(t.permissionName), -})); - -export const staffRolePermissions = mf.table('staff_role_permissions', { - id: integer().primaryKey().generatedAlwaysAsIdentity(), - staffRoleId: integer('staff_role_id').notNull().references(() => staffRoles.id), - staffPermissionId: integer('staff_permission_id').notNull().references(() => staffPermissions.id), - createdAt: timestamp('created_at').notNull().defaultNow(), -}, (t) => ({ - unq_role_permission: unique('unique_role_permission').on(t.staffRoleId, t.staffPermissionId), -})); - -// Relations -export const usersRelations = relations(users, ({ many, one }) => ({ - addresses: many(addresses), - orders: many(orders), - notifications: many(notifications), - cartItems: many(cartItems), - userCreds: one(userCreds), - coupons: many(coupons), - couponUsages: many(couponUsage), - applicableCoupons: many(couponApplicableUsers), - userDetails: one(userDetails), - notifCreds: many(notifCreds), - userIncidents: many(userIncidents), -})); - -export const userCredsRelations = relations(userCreds, ({ one }) => ({ - user: one(users, { fields: [userCreds.userId], references: [users.id] }), -})); - -export const staffUsersRelations = relations(staffUsers, ({ one, many }) => ({ - role: one(staffRoles, { fields: [staffUsers.staffRoleId], references: [staffRoles.id] }), - coupons: many(coupons), - stores: many(storeInfo), -})); - -export const addressesRelations = relations(addresses, ({ one, many }) => ({ - user: one(users, { fields: [addresses.userId], references: [users.id] }), - orders: many(orders), - zone: one(addressZones, { fields: [addresses.zoneId], references: [addressZones.id] }), -})); - -export const unitsRelations = relations(units, ({ many }) => ({ - products: many(productInfo), -})); - -export const productInfoRelations = relations(productInfo, ({ one, many }) => ({ - unit: one(units, { fields: [productInfo.unitId], references: [units.id] }), - store: one(storeInfo, { fields: [productInfo.storeId], references: [storeInfo.id] }), - productSlots: many(productSlots), - specialDeals: many(specialDeals), - orderItems: many(orderItems), - cartItems: many(cartItems), - tags: many(productTags), - applicableCoupons: many(couponApplicableProducts), - reviews: many(productReviews), - groups: many(productGroupMembership), -})); - -export const productTagInfoRelations = relations(productTagInfo, ({ many }) => ({ - products: many(productTags), -})); - -export const productTagsRelations = relations(productTags, ({ one }) => ({ - product: one(productInfo, { fields: [productTags.productId], references: [productInfo.id] }), - tag: one(productTagInfo, { fields: [productTags.tagId], references: [productTagInfo.id] }), -})); - -export const deliverySlotInfoRelations = relations(deliverySlotInfo, ({ many }) => ({ - productSlots: many(productSlots), - orders: many(orders), - vendorSnippets: many(vendorSnippets), -})); - -export const productSlotsRelations = relations(productSlots, ({ one }) => ({ - product: one(productInfo, { fields: [productSlots.productId], references: [productInfo.id] }), - slot: one(deliverySlotInfo, { fields: [productSlots.slotId], references: [deliverySlotInfo.id] }), -})); - -export const specialDealsRelations = relations(specialDeals, ({ one }) => ({ - product: one(productInfo, { fields: [specialDeals.productId], references: [productInfo.id] }), -})); - -export const ordersRelations = relations(orders, ({ one, many }) => ({ - user: one(users, { fields: [orders.userId], references: [users.id] }), - address: one(addresses, { fields: [orders.addressId], references: [addresses.id] }), - slot: one(deliverySlotInfo, { fields: [orders.slotId], references: [deliverySlotInfo.id] }), - orderItems: many(orderItems), - payment: one(payments), - paymentInfo: one(paymentInfoTable, { fields: [orders.paymentInfoId], references: [paymentInfoTable.id] }), - orderStatus: many(orderStatus), - refunds: many(refunds), - couponUsages: many(couponUsage), - userIncidents: many(userIncidents), -})); - -export const orderItemsRelations = relations(orderItems, ({ one }) => ({ - order: one(orders, { fields: [orderItems.orderId], references: [orders.id] }), - product: one(productInfo, { fields: [orderItems.productId], references: [productInfo.id] }), -})); - -export const orderStatusRelations = relations(orderStatus, ({ one }) => ({ - order: one(orders, { fields: [orderStatus.orderId], references: [orders.id] }), - user: one(users, { fields: [orderStatus.userId], references: [users.id] }), - refundCoupon: one(coupons, { fields: [orderStatus.refundCouponId], references: [coupons.id] }), -})); - -export const paymentInfoRelations = relations(paymentInfoTable, ({ one }) => ({ - order: one(orders, { fields: [paymentInfoTable.id], references: [orders.paymentInfoId] }), -})); - -export const paymentsRelations = relations(payments, ({ one }) => ({ - order: one(orders, { fields: [payments.orderId], references: [orders.id] }), -})); - -export const refundsRelations = relations(refunds, ({ one }) => ({ - order: one(orders, { fields: [refunds.orderId], references: [orders.id] }), -})); - -export const notificationsRelations = relations(notifications, ({ one }) => ({ - user: one(users, { fields: [notifications.userId], references: [users.id] }), -})); - -export const productCategoriesRelations = relations(productCategories, ({}) => ({})); - -export const cartItemsRelations = relations(cartItems, ({ one }) => ({ - user: one(users, { fields: [cartItems.userId], references: [users.id] }), - product: one(productInfo, { fields: [cartItems.productId], references: [productInfo.id] }), -})); - -export const complaintsRelations = relations(complaints, ({ one }) => ({ - user: one(users, { fields: [complaints.userId], references: [users.id] }), - order: one(orders, { fields: [complaints.orderId], references: [orders.id] }), -})); - -export const couponsRelations = relations(coupons, ({ one, many }) => ({ - creator: one(staffUsers, { fields: [coupons.createdBy], references: [staffUsers.id] }), - usages: many(couponUsage), - applicableUsers: many(couponApplicableUsers), - applicableProducts: many(couponApplicableProducts), -})); - -export const couponUsageRelations = relations(couponUsage, ({ one }) => ({ - user: one(users, { fields: [couponUsage.userId], references: [users.id] }), - coupon: one(coupons, { fields: [couponUsage.couponId], references: [coupons.id] }), - order: one(orders, { fields: [couponUsage.orderId], references: [orders.id] }), - orderItem: one(orderItems, { fields: [couponUsage.orderItemId], references: [orderItems.id] }), -})); - -export const userDetailsRelations = relations(userDetails, ({ one }) => ({ - user: one(users, { fields: [userDetails.userId], references: [users.id] }), -})); - -export const notifCredsRelations = relations(notifCreds, ({ one }) => ({ - user: one(users, { fields: [notifCreds.userId], references: [users.id] }), -})); - -export const userNotificationsRelations = relations(userNotifications, ({}) => ({ - // No relations needed for now -})); - -export const storeInfoRelations = relations(storeInfo, ({ one, many }) => ({ - owner: one(staffUsers, { fields: [storeInfo.owner], references: [staffUsers.id] }), - products: many(productInfo), -})); - -export const couponApplicableUsersRelations = relations(couponApplicableUsers, ({ one }) => ({ - coupon: one(coupons, { fields: [couponApplicableUsers.couponId], references: [coupons.id] }), - user: one(users, { fields: [couponApplicableUsers.userId], references: [users.id] }), -})); - -export const couponApplicableProductsRelations = relations(couponApplicableProducts, ({ one }) => ({ - coupon: one(coupons, { fields: [couponApplicableProducts.couponId], references: [coupons.id] }), - product: one(productInfo, { fields: [couponApplicableProducts.productId], references: [productInfo.id] }), -})); - -export const reservedCouponsRelations = relations(reservedCoupons, ({ one }) => ({ - redeemedUser: one(users, { fields: [reservedCoupons.redeemedBy], references: [users.id] }), - creator: one(staffUsers, { fields: [reservedCoupons.createdBy], references: [staffUsers.id] }), -})); - -export const productReviewsRelations = relations(productReviews, ({ one }) => ({ - user: one(users, { fields: [productReviews.userId], references: [users.id] }), - product: one(productInfo, { fields: [productReviews.productId], references: [productInfo.id] }), -})); - -export const addressZonesRelations = relations(addressZones, ({ many }) => ({ - addresses: many(addresses), - areas: many(addressAreas), -})); - -export const addressAreasRelations = relations(addressAreas, ({ one }) => ({ - zone: one(addressZones, { fields: [addressAreas.zoneId], references: [addressZones.id] }), -})); - -export const productGroupInfoRelations = relations(productGroupInfo, ({ many }) => ({ - memberships: many(productGroupMembership), -})); - -export const productGroupMembershipRelations = relations(productGroupMembership, ({ one }) => ({ - product: one(productInfo, { fields: [productGroupMembership.productId], references: [productInfo.id] }), - group: one(productGroupInfo, { fields: [productGroupMembership.groupId], references: [productGroupInfo.id] }), -})); - -export const homeBannersRelations = relations(homeBanners, ({}) => ({ - // Relations for productIds array would be more complex, skipping for now -})); - -export const staffRolesRelations = relations(staffRoles, ({ many }) => ({ - staffUsers: many(staffUsers), - rolePermissions: many(staffRolePermissions), -})); - -export const staffPermissionsRelations = relations(staffPermissions, ({ many }) => ({ - rolePermissions: many(staffRolePermissions), -})); - -export const staffRolePermissionsRelations = relations(staffRolePermissions, ({ one }) => ({ - role: one(staffRoles, { fields: [staffRolePermissions.staffRoleId], references: [staffRoles.id] }), - permission: one(staffPermissions, { fields: [staffRolePermissions.staffPermissionId], references: [staffPermissions.id] }), -})); - -export const userIncidentsRelations = relations(userIncidents, ({ one }) => ({ - user: one(users, { fields: [userIncidents.userId], references: [users.id] }), - order: one(orders, { fields: [userIncidents.orderId], references: [orders.id] }), - addedBy: one(staffUsers, { fields: [userIncidents.addedBy], references: [staffUsers.id] }), -})); - -export const productAvailabilitySchedulesRelations = relations(productAvailabilitySchedules, ({}) => ({ -})); +export * from '@/db-helper-postgres/db/schema' diff --git a/apps/backend/src/db/schema-sqlite.ts b/apps/backend/src/db/schema-sqlite.ts index 568653d..154451a 100644 --- a/apps/backend/src/db/schema-sqlite.ts +++ b/apps/backend/src/db/schema-sqlite.ts @@ -1,735 +1 @@ -import { - sqliteTable, - integer, - text, - real, - unique, - check, -} from 'drizzle-orm/sqlite-core' -import { relations, sql } from 'drizzle-orm' - -const epochSeconds = sql`(strftime('%s','now'))` - -const sqliteEnum = ( - _name: string, - values: T -) => (columnName: string) => text(columnName, { enum: values }) - -export const users = sqliteTable('users', { - id: integer('id').primaryKey({ autoIncrement: true }), - name: text('name'), - email: text('email'), - mobile: text('mobile'), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), -}, (t) => ({ - unq_email: unique('unique_email').on(t.email), -})) - -export const userDetails = sqliteTable('user_details', { - id: integer('id').primaryKey({ autoIncrement: true }), - userId: integer('user_id').notNull().references(() => users.id).unique(), - bio: text('bio'), - dateOfBirth: integer('date_of_birth', { mode: 'timestamp' }), - gender: text('gender'), - occupation: text('occupation'), - profileImage: text('profile_image'), - isSuspended: integer('is_suspended', { mode: 'boolean' }).notNull().default(false), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), - updatedAt: integer('updated_at', { mode: 'timestamp' }).notNull().default(epochSeconds), -}) - -export const userCreds = sqliteTable('user_creds', { - id: integer('id').primaryKey({ autoIncrement: true }), - userId: integer('user_id').notNull().references(() => users.id), - userPassword: text('user_password').notNull(), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), -}) - -export const addressZones = sqliteTable('address_zones', { - id: integer('id').primaryKey({ autoIncrement: true }), - zoneName: text('zone_name').notNull(), - addedAt: integer('added_at', { mode: 'timestamp' }).notNull().default(epochSeconds), -}) - -export const addresses = sqliteTable('addresses', { - id: integer('id').primaryKey({ autoIncrement: true }), - userId: integer('user_id').notNull().references(() => users.id), - name: text('name').notNull(), - phone: text('phone').notNull(), - addressLine1: text('address_line1').notNull(), - addressLine2: text('address_line2'), - city: text('city').notNull(), - state: text('state').notNull(), - pincode: text('pincode').notNull(), - isDefault: integer('is_default', { mode: 'boolean' }).notNull().default(false), - latitude: real('latitude'), - longitude: real('longitude'), - googleMapsUrl: text('google_maps_url'), - adminLatitude: real('admin_latitude'), - adminLongitude: real('admin_longitude'), - zoneId: integer('zone_id').references(() => addressZones.id), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), -}) - -export const addressAreas = sqliteTable('address_areas', { - id: integer('id').primaryKey({ autoIncrement: true }), - placeName: text('place_name').notNull(), - zoneId: integer('zone_id').references(() => addressZones.id), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), -}) - -export const staffRoleEnum = sqliteEnum('staff_role', [ - 'super_admin', - 'admin', - 'marketer', - 'delivery_staff', -]) - -export const staffPermissionEnum = sqliteEnum('staff_permission', [ - 'crud_product', - 'make_coupon', - 'crud_staff_users', -]) - -export const staffRoles = sqliteTable('staff_roles', { - id: integer('id').primaryKey({ autoIncrement: true }), - roleName: staffRoleEnum('role_name').notNull(), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), -}, (t) => ({ - unq_role_name: unique('unique_role_name').on(t.roleName), -})) - -export const staffPermissions = sqliteTable('staff_permissions', { - id: integer('id').primaryKey({ autoIncrement: true }), - permissionName: staffPermissionEnum('permission_name').notNull(), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), -}, (t) => ({ - unq_permission_name: unique('unique_permission_name').on(t.permissionName), -})) - -export const staffRolePermissions = sqliteTable('staff_role_permissions', { - id: integer('id').primaryKey({ autoIncrement: true }), - staffRoleId: integer('staff_role_id').notNull().references(() => staffRoles.id), - staffPermissionId: integer('staff_permission_id').notNull().references(() => staffPermissions.id), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), -}, (t) => ({ - unq_role_permission: unique('unique_role_permission').on( - t.staffRoleId, - t.staffPermissionId - ), -})) - -export const staffUsers = sqliteTable('staff_users', { - id: integer('id').primaryKey({ autoIncrement: true }), - name: text('name').notNull(), - password: text('password').notNull(), - staffRoleId: integer('staff_role_id').references(() => staffRoles.id), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), -}) - -export const storeInfo = sqliteTable('store_info', { - id: integer('id').primaryKey({ autoIncrement: true }), - name: text('name').notNull(), - description: text('description'), - imageUrl: text('image_url'), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), - owner: integer('owner').notNull().references(() => staffUsers.id), -}) - -export const units = sqliteTable('units', { - id: integer('id').primaryKey({ autoIncrement: true }), - shortNotation: text('short_notation').notNull(), - fullName: text('full_name').notNull(), -}, (t) => ({ - unq_short_notation: unique('unique_short_notation').on(t.shortNotation), -})) - -export const productAvailabilityActionEnum = sqliteEnum( - 'product_availability_action', - ['in', 'out'] -) - -export const productInfo = sqliteTable('product_info', { - id: integer('id').primaryKey({ autoIncrement: true }), - name: text('name').notNull(), - shortDescription: text('short_description'), - longDescription: text('long_description'), - unitId: integer('unit_id').notNull().references(() => units.id), - price: text('price').notNull(), - marketPrice: text('market_price'), - images: text('images'), - isOutOfStock: integer('is_out_of_stock', { mode: 'boolean' }).notNull().default(false), - isSuspended: integer('is_suspended', { mode: 'boolean' }).notNull().default(false), - isFlashAvailable: integer('is_flash_available', { mode: 'boolean' }).notNull().default(false), - flashPrice: text('flash_price'), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), - incrementStep: real('increment_step').notNull().default(1), - productQuantity: real('product_quantity').notNull().default(1), - storeId: integer('store_id').references(() => storeInfo.id), - scheduledAvailability: integer('scheduled_availability', { mode: 'boolean' }).notNull().default(true), -}) - -export const productAvailabilitySchedules = sqliteTable('product_availability_schedules', { - id: integer('id').primaryKey({ autoIncrement: true }), - time: text('time').notNull(), - scheduleName: text('schedule_name').notNull().unique(), - action: productAvailabilityActionEnum('action').notNull(), - productIds: text('product_ids').notNull().default('[]'), - groupIds: text('group_ids').notNull().default('[]'), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), - lastUpdated: integer('last_updated', { mode: 'timestamp' }).notNull().default(epochSeconds), -}) - -export const productGroupInfo = sqliteTable('product_group_info', { - id: integer('id').primaryKey({ autoIncrement: true }), - groupName: text('group_name').notNull(), - description: text('description'), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), -}) - -export const productGroupMembership = sqliteTable('product_group_membership', { - productId: integer('product_id').notNull().references(() => productInfo.id), - groupId: integer('group_id').notNull().references(() => productGroupInfo.id), - addedAt: integer('added_at', { mode: 'timestamp' }).notNull().default(epochSeconds), -}, (t) => ({ - pk: unique('product_group_membership_pk').on(t.productId, t.groupId), -})) - -export const homeBanners = sqliteTable('home_banners', { - id: integer('id').primaryKey({ autoIncrement: true }), - name: text('name').notNull(), - imageUrl: text('image_url').notNull(), - description: text('description'), - productIds: text('product_ids'), - redirectUrl: text('redirect_url'), - serialNum: integer('serial_num'), - isActive: integer('is_active', { mode: 'boolean' }).notNull().default(false), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), - lastUpdated: integer('last_updated', { mode: 'timestamp' }).notNull().default(epochSeconds), -}) - -export const productReviews = sqliteTable('product_reviews', { - id: integer('id').primaryKey({ autoIncrement: true }), - userId: integer('user_id').notNull().references(() => users.id), - productId: integer('product_id').notNull().references(() => productInfo.id), - reviewBody: text('review_body').notNull(), - imageUrls: text('image_urls').default('[]'), - reviewTime: integer('review_time', { mode: 'timestamp' }).notNull().default(epochSeconds), - ratings: real('ratings').notNull(), - adminResponse: text('admin_response'), - adminResponseImages: text('admin_response_images').default('[]'), -}, (t) => ({ - ratingCheck: check('rating_check', sql`${t.ratings} >= 1 AND ${t.ratings} <= 5`), -})) - -export const uploadStatusEnum = sqliteEnum('upload_status', ['pending', 'claimed']) - -export const uploadUrlStatus = sqliteTable('upload_url_status', { - id: integer('id').primaryKey({ autoIncrement: true }), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), - key: text('key').notNull(), - status: uploadStatusEnum('status').notNull().default('pending'), -}) - -export const productTagInfo = sqliteTable('product_tag_info', { - id: integer('id').primaryKey({ autoIncrement: true }), - tagName: text('tag_name').notNull().unique(), - tagDescription: text('tag_description'), - imageUrl: text('image_url'), - isDashboardTag: integer('is_dashboard_tag', { mode: 'boolean' }).notNull().default(false), - relatedStores: text('related_stores').default('[]'), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), -}) - -export const productTags = sqliteTable('product_tags', { - id: integer('id').primaryKey({ autoIncrement: true }), - productId: integer('product_id').notNull().references(() => productInfo.id), - tagId: integer('tag_id').notNull().references(() => productTagInfo.id), - assignedAt: integer('assigned_at', { mode: 'timestamp' }).notNull().default(epochSeconds), -}, (t) => ({ - unq_product_tag: unique('unique_product_tag').on(t.productId, t.tagId), -})) - -export const deliverySlotInfo = sqliteTable('delivery_slot_info', { - id: integer('id').primaryKey({ autoIncrement: true }), - deliveryTime: integer('delivery_time', { mode: 'timestamp' }).notNull(), - freezeTime: integer('freeze_time', { mode: 'timestamp' }).notNull(), - isActive: integer('is_active', { mode: 'boolean' }).notNull().default(true), - isFlash: integer('is_flash', { mode: 'boolean' }).notNull().default(false), - isCapacityFull: integer('is_capacity_full', { mode: 'boolean' }).notNull().default(false), - deliverySequence: text('delivery_sequence').default('{}'), - groupIds: text('group_ids').default('[]'), -}) - -export const vendorSnippets = sqliteTable('vendor_snippets', { - id: integer('id').primaryKey({ autoIncrement: true }), - snippetCode: text('snippet_code').notNull().unique(), - slotId: integer('slot_id').references(() => deliverySlotInfo.id), - isPermanent: integer('is_permanent', { mode: 'boolean' }).notNull().default(false), - productIds: text('product_ids').notNull(), - validTill: integer('valid_till', { mode: 'timestamp' }), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), -}) - -export const productSlots = sqliteTable('product_slots', { - productId: integer('product_id').notNull().references(() => productInfo.id), - slotId: integer('slot_id').notNull().references(() => deliverySlotInfo.id), -}, (t) => ({ - pk: unique('product_slot_pk').on(t.productId, t.slotId), -})) - -export const specialDeals = sqliteTable('special_deals', { - id: integer('id').primaryKey({ autoIncrement: true }), - productId: integer('product_id').notNull().references(() => productInfo.id), - quantity: text('quantity').notNull(), - price: text('price').notNull(), - validTill: integer('valid_till', { mode: 'timestamp' }).notNull(), -}) - -export const paymentInfoTable = sqliteTable('payment_info', { - id: integer('id').primaryKey({ autoIncrement: true }), - status: text('status').notNull(), - gateway: text('gateway').notNull(), - orderId: text('order_id'), - token: text('token'), - merchantOrderId: text('merchant_order_id').notNull().unique(), - payload: text('payload'), -}) - -export const orders = sqliteTable('orders', { - id: integer('id').primaryKey({ autoIncrement: true }), - userId: integer('user_id').notNull().references(() => users.id), - addressId: integer('address_id').notNull().references(() => addresses.id), - slotId: integer('slot_id').references(() => deliverySlotInfo.id), - isCod: integer('is_cod', { mode: 'boolean' }).notNull().default(false), - isOnlinePayment: integer('is_online_payment', { mode: 'boolean' }).notNull().default(false), - paymentInfoId: integer('payment_info_id').references(() => paymentInfoTable.id), - totalAmount: text('total_amount').notNull(), - deliveryCharge: text('delivery_charge').notNull().default('0'), - readableId: integer('readable_id').notNull(), - adminNotes: text('admin_notes'), - userNotes: text('user_notes'), - orderGroupId: text('order_group_id'), - orderGroupProportion: text('order_group_proportion'), - isFlashDelivery: integer('is_flash_delivery', { mode: 'boolean' }).notNull().default(false), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), -}) - -export const orderItems = sqliteTable('order_items', { - id: integer('id').primaryKey({ autoIncrement: true }), - orderId: integer('order_id').notNull().references(() => orders.id), - productId: integer('product_id').notNull().references(() => productInfo.id), - quantity: text('quantity').notNull(), - price: text('price').notNull(), - discountedPrice: text('discounted_price'), - is_packaged: integer('is_packaged', { mode: 'boolean' }).notNull().default(false), - is_package_verified: integer('is_package_verified', { mode: 'boolean' }).notNull().default(false), -}) - -export const paymentStatusEnum = sqliteEnum('payment_status', [ - 'pending', - 'success', - 'cod', - 'failed', -]) - -export const orderStatus = sqliteTable('order_status', { - id: integer('id').primaryKey({ autoIncrement: true }), - orderTime: integer('order_time', { mode: 'timestamp' }).notNull().default(epochSeconds), - userId: integer('user_id').notNull().references(() => users.id), - orderId: integer('order_id').notNull().references(() => orders.id), - isPackaged: integer('is_packaged', { mode: 'boolean' }).notNull().default(false), - isDelivered: integer('is_delivered', { mode: 'boolean' }).notNull().default(false), - isCancelled: integer('is_cancelled', { mode: 'boolean' }).notNull().default(false), - cancelReason: text('cancel_reason'), - isCancelledByAdmin: integer('is_cancelled_by_admin', { mode: 'boolean' }), - paymentStatus: paymentStatusEnum('payment_state').notNull().default('pending'), - cancellationUserNotes: text('cancellation_user_notes'), - cancellationAdminNotes: text('cancellation_admin_notes'), - cancellationReviewed: integer('cancellation_reviewed', { mode: 'boolean' }).notNull().default(false), - cancellationReviewedAt: integer('cancellation_reviewed_at', { mode: 'timestamp' }), - refundCouponId: integer('refund_coupon_id').references(() => coupons.id), -}) - -export const payments = sqliteTable('payments', { - id: integer('id').primaryKey({ autoIncrement: true }), - status: text('status').notNull(), - gateway: text('gateway').notNull(), - orderId: integer('order_id').notNull().references(() => orders.id), - token: text('token'), - merchantOrderId: text('merchant_order_id').notNull().unique(), - payload: text('payload'), -}) - -export const refunds = sqliteTable('refunds', { - id: integer('id').primaryKey({ autoIncrement: true }), - orderId: integer('order_id').notNull().references(() => orders.id), - refundAmount: text('refund_amount'), - refundStatus: text('refund_status').default('none'), - merchantRefundId: text('merchant_refund_id'), - refundProcessedAt: integer('refund_processed_at', { mode: 'timestamp' }), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), -}) - -export const keyValStore = sqliteTable('key_val_store', { - key: text('key').primaryKey(), - value: text('value'), -}) - -export const notifications = sqliteTable('notifications', { - id: integer('id').primaryKey({ autoIncrement: true }), - userId: integer('user_id').notNull().references(() => users.id), - title: text('title').notNull(), - body: text('body').notNull(), - type: text('type'), - isRead: integer('is_read', { mode: 'boolean' }).notNull().default(false), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), -}) - -export const productCategories = sqliteTable('product_categories', { - id: integer('id').primaryKey({ autoIncrement: true }), - name: text('name').notNull(), - description: text('description'), -}) - -export const cartItems = sqliteTable('cart_items', { - id: integer('id').primaryKey({ autoIncrement: true }), - userId: integer('user_id').notNull().references(() => users.id), - productId: integer('product_id').notNull().references(() => productInfo.id), - quantity: text('quantity').notNull(), - addedAt: integer('added_at', { mode: 'timestamp' }).notNull().default(epochSeconds), -}, (t) => ({ - unq_user_product: unique('unique_user_product').on(t.userId, t.productId), -})) - -export const complaints = sqliteTable('complaints', { - id: integer('id').primaryKey({ autoIncrement: true }), - userId: integer('user_id').notNull().references(() => users.id), - orderId: integer('order_id').references(() => orders.id), - complaintBody: text('complaint_body').notNull(), - images: text('images'), - response: text('response'), - isResolved: integer('is_resolved', { mode: 'boolean' }).notNull().default(false), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), -}) - -export const coupons = sqliteTable('coupons', { - id: integer('id').primaryKey({ autoIncrement: true }), - couponCode: text('coupon_code').notNull().unique('unique_coupon_code'), - isUserBased: integer('is_user_based', { mode: 'boolean' }).notNull().default(false), - discountPercent: text('discount_percent'), - flatDiscount: text('flat_discount'), - minOrder: text('min_order'), - productIds: text('product_ids'), - createdBy: integer('created_by').references(() => staffUsers.id), - maxValue: text('max_value'), - isApplyForAll: integer('is_apply_for_all', { mode: 'boolean' }).notNull().default(false), - validTill: integer('valid_till', { mode: 'timestamp' }), - maxLimitForUser: integer('max_limit_for_user'), - isInvalidated: integer('is_invalidated', { mode: 'boolean' }).notNull().default(false), - exclusiveApply: integer('exclusive_apply', { mode: 'boolean' }).notNull().default(false), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), -}) - -export const couponUsage = sqliteTable('coupon_usage', { - id: integer('id').primaryKey({ autoIncrement: true }), - userId: integer('user_id').notNull().references(() => users.id), - couponId: integer('coupon_id').notNull().references(() => coupons.id), - orderId: integer('order_id').references(() => orders.id), - orderItemId: integer('order_item_id').references(() => orderItems.id), - usedAt: integer('used_at', { mode: 'timestamp' }).notNull().default(epochSeconds), -}) - -export const couponApplicableUsers = sqliteTable('coupon_applicable_users', { - id: integer('id').primaryKey({ autoIncrement: true }), - couponId: integer('coupon_id').notNull().references(() => coupons.id), - userId: integer('user_id').notNull().references(() => users.id), -}, (t) => ({ - unq_coupon_user: unique('unique_coupon_user').on(t.couponId, t.userId), -})) - -export const couponApplicableProducts = sqliteTable('coupon_applicable_products', { - id: integer('id').primaryKey({ autoIncrement: true }), - couponId: integer('coupon_id').notNull().references(() => coupons.id), - productId: integer('product_id').notNull().references(() => productInfo.id), -}, (t) => ({ - unq_coupon_product: unique('unique_coupon_product').on(t.couponId, t.productId), -})) - -export const userIncidents = sqliteTable('user_incidents', { - id: integer('id').primaryKey({ autoIncrement: true }), - userId: integer('user_id').notNull().references(() => users.id), - orderId: integer('order_id').references(() => orders.id), - dateAdded: integer('date_added', { mode: 'timestamp' }).notNull().default(epochSeconds), - adminComment: text('admin_comment'), - addedBy: integer('added_by').references(() => staffUsers.id), - negativityScore: integer('negativity_score'), -}) - -export const reservedCoupons = sqliteTable('reserved_coupons', { - id: integer('id').primaryKey({ autoIncrement: true }), - secretCode: text('secret_code').notNull().unique(), - couponCode: text('coupon_code').notNull(), - discountPercent: text('discount_percent'), - flatDiscount: text('flat_discount'), - minOrder: text('min_order'), - productIds: text('product_ids'), - maxValue: text('max_value'), - validTill: integer('valid_till', { mode: 'timestamp' }), - maxLimitForUser: integer('max_limit_for_user'), - exclusiveApply: integer('exclusive_apply', { mode: 'boolean' }).notNull().default(false), - isRedeemed: integer('is_redeemed', { mode: 'boolean' }).notNull().default(false), - redeemedBy: integer('redeemed_by').references(() => users.id), - redeemedAt: integer('redeemed_at', { mode: 'timestamp' }), - createdBy: integer('created_by').notNull().references(() => staffUsers.id), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), -}, (t) => ({ - unq_secret_code: unique('unique_secret_code').on(t.secretCode), -})) - -export const notifCreds = sqliteTable('notif_creds', { - id: integer('id').primaryKey({ autoIncrement: true }), - token: text('token').notNull().unique(), - addedAt: integer('added_at', { mode: 'timestamp' }).notNull().default(epochSeconds), - userId: integer('user_id').notNull().references(() => users.id), - lastVerified: integer('last_verified', { mode: 'timestamp' }), -}) - -export const unloggedUserTokens = sqliteTable('unlogged_user_tokens', { - id: integer('id').primaryKey({ autoIncrement: true }), - token: text('token').notNull().unique(), - addedAt: integer('added_at', { mode: 'timestamp' }).notNull().default(epochSeconds), - lastVerified: integer('last_verified', { mode: 'timestamp' }), -}) - -export const userNotifications = sqliteTable('user_notifications', { - id: integer('id').primaryKey({ autoIncrement: true }), - title: text('title').notNull(), - imageUrl: text('image_url'), - createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), - body: text('body').notNull(), - applicableUsers: text('applicable_users'), -}) - -export const uploadUrlStatusRelations = relations(uploadUrlStatus, ({}) => ({})) - -export const userCredsRelations = relations(userCreds, ({ one }) => ({ - user: one(users, { fields: [userCreds.userId], references: [users.id] }), -})) - -export const staffUsersRelations = relations(staffUsers, ({ one, many }) => ({ - role: one(staffRoles, { fields: [staffUsers.staffRoleId], references: [staffRoles.id] }), - coupons: many(coupons), - stores: many(storeInfo), -})) - -export const addressesRelations = relations(addresses, ({ one, many }) => ({ - user: one(users, { fields: [addresses.userId], references: [users.id] }), - orders: many(orders), - zone: one(addressZones, { fields: [addresses.zoneId], references: [addressZones.id] }), -})) - -export const unitsRelations = relations(units, ({ many }) => ({ - products: many(productInfo), -})) - -export const productInfoRelations = relations(productInfo, ({ one, many }) => ({ - unit: one(units, { fields: [productInfo.unitId], references: [units.id] }), - store: one(storeInfo, { fields: [productInfo.storeId], references: [storeInfo.id] }), - productSlots: many(productSlots), - specialDeals: many(specialDeals), - orderItems: many(orderItems), - cartItems: many(cartItems), - tags: many(productTags), - applicableCoupons: many(couponApplicableProducts), - reviews: many(productReviews), - groups: many(productGroupMembership), -})) - -export const productTagInfoRelations = relations(productTagInfo, ({ many }) => ({ - products: many(productTags), -})) - -export const productTagsRelations = relations(productTags, ({ one }) => ({ - product: one(productInfo, { fields: [productTags.productId], references: [productInfo.id] }), - tag: one(productTagInfo, { fields: [productTags.tagId], references: [productTagInfo.id] }), -})) - -export const deliverySlotInfoRelations = relations(deliverySlotInfo, ({ many }) => ({ - productSlots: many(productSlots), - orders: many(orders), - vendorSnippets: many(vendorSnippets), -})) - -export const vendorSnippetsRelations = relations(vendorSnippets, ({ one }) => ({ - slot: one(deliverySlotInfo, { fields: [vendorSnippets.slotId], references: [deliverySlotInfo.id] }), -})) - -export const productSlotsRelations = relations(productSlots, ({ one }) => ({ - product: one(productInfo, { fields: [productSlots.productId], references: [productInfo.id] }), - slot: one(deliverySlotInfo, { fields: [productSlots.slotId], references: [deliverySlotInfo.id] }), -})) - -export const specialDealsRelations = relations(specialDeals, ({ one }) => ({ - product: one(productInfo, { fields: [specialDeals.productId], references: [productInfo.id] }), -})) - -export const ordersRelations = relations(orders, ({ one, many }) => ({ - user: one(users, { fields: [orders.userId], references: [users.id] }), - address: one(addresses, { fields: [orders.addressId], references: [addresses.id] }), - slot: one(deliverySlotInfo, { fields: [orders.slotId], references: [deliverySlotInfo.id] }), - orderItems: many(orderItems), - payment: one(payments), - paymentInfo: one(paymentInfoTable, { fields: [orders.paymentInfoId], references: [paymentInfoTable.id] }), - orderStatus: many(orderStatus), - refunds: many(refunds), - couponUsages: many(couponUsage), - userIncidents: many(userIncidents), -})) - -export const orderItemsRelations = relations(orderItems, ({ one }) => ({ - order: one(orders, { fields: [orderItems.orderId], references: [orders.id] }), - product: one(productInfo, { fields: [orderItems.productId], references: [productInfo.id] }), -})) - -export const orderStatusRelations = relations(orderStatus, ({ one }) => ({ - order: one(orders, { fields: [orderStatus.orderId], references: [orders.id] }), - user: one(users, { fields: [orderStatus.userId], references: [users.id] }), - refundCoupon: one(coupons, { fields: [orderStatus.refundCouponId], references: [coupons.id] }), -})) - -export const paymentInfoRelations = relations(paymentInfoTable, ({ one }) => ({ - order: one(orders, { fields: [paymentInfoTable.id], references: [orders.paymentInfoId] }), -})) - -export const paymentsRelations = relations(payments, ({ one }) => ({ - order: one(orders, { fields: [payments.orderId], references: [orders.id] }), -})) - -export const refundsRelations = relations(refunds, ({ one }) => ({ - order: one(orders, { fields: [refunds.orderId], references: [orders.id] }), -})) - -export const notificationsRelations = relations(notifications, ({ one }) => ({ - user: one(users, { fields: [notifications.userId], references: [users.id] }), -})) - -export const productCategoriesRelations = relations(productCategories, ({}) => ({})) - -export const cartItemsRelations = relations(cartItems, ({ one }) => ({ - user: one(users, { fields: [cartItems.userId], references: [users.id] }), - product: one(productInfo, { fields: [cartItems.productId], references: [productInfo.id] }), -})) - -export const complaintsRelations = relations(complaints, ({ one }) => ({ - user: one(users, { fields: [complaints.userId], references: [users.id] }), - order: one(orders, { fields: [complaints.orderId], references: [orders.id] }), -})) - -export const couponsRelations = relations(coupons, ({ one, many }) => ({ - creator: one(staffUsers, { fields: [coupons.createdBy], references: [staffUsers.id] }), - usages: many(couponUsage), - applicableUsers: many(couponApplicableUsers), - applicableProducts: many(couponApplicableProducts), -})) - -export const couponUsageRelations = relations(couponUsage, ({ one }) => ({ - user: one(users, { fields: [couponUsage.userId], references: [users.id] }), - coupon: one(coupons, { fields: [couponUsage.couponId], references: [coupons.id] }), - order: one(orders, { fields: [couponUsage.orderId], references: [orders.id] }), - orderItem: one(orderItems, { fields: [couponUsage.orderItemId], references: [orderItems.id] }), -})) - -export const userDetailsRelations = relations(userDetails, ({ one }) => ({ - user: one(users, { fields: [userDetails.userId], references: [users.id] }), -})) - -export const notifCredsRelations = relations(notifCreds, ({ one }) => ({ - user: one(users, { fields: [notifCreds.userId], references: [users.id] }), -})) - -export const userNotificationsRelations = relations(userNotifications, ({}) => ({})) - -export const storeInfoRelations = relations(storeInfo, ({ one, many }) => ({ - owner: one(staffUsers, { fields: [storeInfo.owner], references: [staffUsers.id] }), - products: many(productInfo), -})) - -export const couponApplicableUsersRelations = relations(couponApplicableUsers, ({ one }) => ({ - coupon: one(coupons, { fields: [couponApplicableUsers.couponId], references: [coupons.id] }), - user: one(users, { fields: [couponApplicableUsers.userId], references: [users.id] }), -})) - -export const couponApplicableProductsRelations = relations(couponApplicableProducts, ({ one }) => ({ - coupon: one(coupons, { fields: [couponApplicableProducts.couponId], references: [coupons.id] }), - product: one(productInfo, { fields: [couponApplicableProducts.productId], references: [productInfo.id] }), -})) - -export const reservedCouponsRelations = relations(reservedCoupons, ({ one }) => ({ - redeemedUser: one(users, { fields: [reservedCoupons.redeemedBy], references: [users.id] }), - creator: one(staffUsers, { fields: [reservedCoupons.createdBy], references: [staffUsers.id] }), -})) - -export const productReviewsRelations = relations(productReviews, ({ one }) => ({ - user: one(users, { fields: [productReviews.userId], references: [users.id] }), - product: one(productInfo, { fields: [productReviews.productId], references: [productInfo.id] }), -})) - -export const addressZonesRelations = relations(addressZones, ({ many }) => ({ - addresses: many(addresses), - areas: many(addressAreas), -})) - -export const addressAreasRelations = relations(addressAreas, ({ one }) => ({ - zone: one(addressZones, { fields: [addressAreas.zoneId], references: [addressZones.id] }), -})) - -export const productGroupInfoRelations = relations(productGroupInfo, ({ many }) => ({ - memberships: many(productGroupMembership), -})) - -export const productGroupMembershipRelations = relations(productGroupMembership, ({ one }) => ({ - product: one(productInfo, { fields: [productGroupMembership.productId], references: [productInfo.id] }), - group: one(productGroupInfo, { fields: [productGroupMembership.groupId], references: [productGroupInfo.id] }), -})) - -export const homeBannersRelations = relations(homeBanners, ({}) => ({})) - -export const staffRolesRelations = relations(staffRoles, ({ many }) => ({ - staffUsers: many(staffUsers), - rolePermissions: many(staffRolePermissions), -})) - -export const staffPermissionsRelations = relations(staffPermissions, ({ many }) => ({ - rolePermissions: many(staffRolePermissions), -})) - -export const staffRolePermissionsRelations = relations(staffRolePermissions, ({ one }) => ({ - role: one(staffRoles, { fields: [staffRolePermissions.staffRoleId], references: [staffRoles.id] }), - permission: one(staffPermissions, { fields: [staffRolePermissions.staffPermissionId], references: [staffPermissions.id] }), -})) - -export const userIncidentsRelations = relations(userIncidents, ({ one }) => ({ - user: one(users, { fields: [userIncidents.userId], references: [users.id] }), - order: one(orders, { fields: [userIncidents.orderId], references: [orders.id] }), - addedBy: one(staffUsers, { fields: [userIncidents.addedBy], references: [staffUsers.id] }), -})) - -export const productAvailabilitySchedulesRelations = relations( - productAvailabilitySchedules, - ({}) => ({}) -) - -export const usersRelations = relations(users, ({ many, one }) => ({ - addresses: many(addresses), - orders: many(orders), - notifications: many(notifications), - cartItems: many(cartItems), - userCreds: one(userCreds), - coupons: many(coupons), - couponUsages: many(couponUsage), - applicableCoupons: many(couponApplicableUsers), - userDetails: one(userDetails), - notifCreds: many(notifCreds), - userIncidents: many(userIncidents), -})) +export * from '@/db-helper-sqlite/db/schema' diff --git a/apps/backend/src/db/seed.ts b/apps/backend/src/db/seed.ts index f894534..9763923 100644 --- a/apps/backend/src/db/seed.ts +++ b/apps/backend/src/db/seed.ts @@ -1,138 +1,8 @@ -import { db } from "@/src/db/db_index" -import { units, productInfo, deliverySlotInfo, productSlots, keyValStore, staffRoles, staffPermissions, staffRolePermissions } from "@/src/db/schema" -import { eq } from "drizzle-orm"; -import { minOrderValue, deliveryCharge } from '@/src/lib/env-exporter' -import { CONST_KEYS } from '@/src/lib/const-keys' +import { seed as seedPostgres } from '@db-helper-postgres/db/seed' +import { seed as seedSqlite } from '@db-helper-sqlite/db/seed' -export async function seed() { - console.log("Seeding database..."); +const dialect = process.env.DB_DIALECT || DB_DIALECT_TYPE - // Seed units individually - const unitsToSeed = [ - { shortNotation: "Kg", fullName: "Kilogram" }, - { shortNotation: "L", fullName: "Litre" }, - { shortNotation: "Dz", fullName: "Dozen" }, - { shortNotation: "Pc", fullName: "Unit Piece" }, - ]; +const seedImpl = dialect === 'sqlite' ? seedSqlite : seedPostgres - for (const unit of unitsToSeed) { - const existingUnit = await db.query.units.findFirst({ - where: eq(units.shortNotation, unit.shortNotation), - }); - if (!existingUnit) { - await db.insert(units).values(unit); - } - } - - // Seed staff roles individually - const rolesToSeed = ['super_admin', 'admin', 'marketer', 'delivery_staff'] as const; - - for (const roleName of rolesToSeed) { - const existingRole = await db.query.staffRoles.findFirst({ - where: eq(staffRoles.roleName, roleName), - }); - if (!existingRole) { - await db.insert(staffRoles).values({ roleName }); - } - } - - // Seed staff permissions individually - const permissionsToSeed = ['crud_product', 'make_coupon', 'crud_staff_users'] as const; - - for (const permissionName of permissionsToSeed) { - const existingPermission = await db.query.staffPermissions.findFirst({ - where: eq(staffPermissions.permissionName, permissionName), - }); - if (!existingPermission) { - await db.insert(staffPermissions).values({ permissionName }); - } - } - - // Seed role-permission assignments - await db.transaction(async (tx) => { - // Get role IDs - const superAdminRole = await tx.query.staffRoles.findFirst({ where: eq(staffRoles.roleName, 'super_admin') }); - const adminRole = await tx.query.staffRoles.findFirst({ where: eq(staffRoles.roleName, 'admin') }); - const marketerRole = await tx.query.staffRoles.findFirst({ where: eq(staffRoles.roleName, 'marketer') }); - - // Get permission IDs - const crudProductPerm = await tx.query.staffPermissions.findFirst({ where: eq(staffPermissions.permissionName, 'crud_product') }); - const makeCouponPerm = await tx.query.staffPermissions.findFirst({ where: eq(staffPermissions.permissionName, 'make_coupon') }); - const crudStaffUsersPerm = await tx.query.staffPermissions.findFirst({ where: eq(staffPermissions.permissionName, 'crud_staff_users') }); - - // Assign all permissions to super_admin - [crudProductPerm, makeCouponPerm, crudStaffUsersPerm].forEach(async (perm) => { - if (superAdminRole && perm) { - const existingSuperAdminPerm = await tx.query.staffRolePermissions.findFirst({ - where: eq(staffRolePermissions.staffRoleId, superAdminRole.id) && eq(staffRolePermissions.staffPermissionId, perm.id), - }); - if (!existingSuperAdminPerm) { - await tx.insert(staffRolePermissions).values({ - staffRoleId: superAdminRole.id, - staffPermissionId: perm.id, - }); - } - } - }); - - // Assign all permissions to admin - [crudProductPerm, makeCouponPerm].forEach(async (perm) => { - if (adminRole && perm) { - const existingAdminPerm = await tx.query.staffRolePermissions.findFirst({ - where: eq(staffRolePermissions.staffRoleId, adminRole.id) && eq(staffRolePermissions.staffPermissionId, perm.id), - }); - if (!existingAdminPerm) { - await tx.insert(staffRolePermissions).values({ - staffRoleId: adminRole.id, - staffPermissionId: perm.id, - }); - } - } - }); - - // Assign make_coupon to marketer - if (marketerRole && makeCouponPerm) { - const existingMarketerCoupon = await tx.query.staffRolePermissions.findFirst({ - where: eq(staffRolePermissions.staffRoleId, marketerRole.id) && eq(staffRolePermissions.staffPermissionId, makeCouponPerm.id), - }); - if (!existingMarketerCoupon) { - await tx.insert(staffRolePermissions).values({ - staffRoleId: marketerRole.id, - staffPermissionId: makeCouponPerm.id, - }); - } - } - }); - - // Seed key-val store constants using CONST_KEYS - const constantsToSeed = [ - { key: CONST_KEYS.readableOrderId, value: 0 }, - { key: CONST_KEYS.minRegularOrderValue, value: minOrderValue }, - { key: CONST_KEYS.freeDeliveryThreshold, value: minOrderValue }, - { key: CONST_KEYS.deliveryCharge, value: deliveryCharge }, - { key: CONST_KEYS.flashFreeDeliveryThreshold, value: 500 }, - { key: CONST_KEYS.flashDeliveryCharge, value: 69 }, - { key: CONST_KEYS.popularItems, value: [] }, - { key: CONST_KEYS.allItemsOrder, value: [] }, - { key: CONST_KEYS.versionNum, value: '1.1.0' }, - { key: CONST_KEYS.playStoreUrl, value: 'https://play.google.com/store/apps/details?id=in.freshyo.app' }, - { key: CONST_KEYS.appStoreUrl, value: 'https://apps.apple.com/in/app/freshyo/id6756889077' }, - { key: CONST_KEYS.isFlashDeliveryEnabled, value: false }, - { key: CONST_KEYS.supportMobile, value: '8688182552' }, - { key: CONST_KEYS.supportEmail, value: 'qushammohd@gmail.com' }, - ]; - - for (const constant of constantsToSeed) { - const existing = await db.query.keyValStore.findFirst({ - where: eq(keyValStore.key, constant.key), - }); - if (!existing) { - await db.insert(keyValStore).values({ - key: constant.key, - value: constant.value, - }); - } - } - - console.log("Seeding completed."); -} +export const seed = async () => seedImpl() diff --git a/apps/backend/src/db/sqlite-casts.ts b/apps/backend/src/db/sqlite-casts.ts index e59d9cf..f92b8b5 100644 --- a/apps/backend/src/db/sqlite-casts.ts +++ b/apps/backend/src/db/sqlite-casts.ts @@ -1,34 +1 @@ -export const parseJsonValue = (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 parseNumberArray = (value: unknown): number[] => { - const parsed = parseJsonValue(value, []) - return parsed - .map((item) => Number(item)) - .filter((item) => !Number.isNaN(item)) -} - -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 fromEpochSeconds = (value: number | null | undefined): Date | null => { - if (value === null || value === undefined) return null - return new Date(value * 1000) -} +export * from '@/db-helper-sqlite/db/sqlite-casts' diff --git a/apps/backend/src/db/types.ts b/apps/backend/src/db/types.ts index 64d42de..4051042 100755 --- a/apps/backend/src/db/types.ts +++ b/apps/backend/src/db/types.ts @@ -1,47 +1,58 @@ -import type { InferSelectModel } from "drizzle-orm"; import type { - users, - addresses, - units, - productInfo, - deliverySlotInfo, - productSlots, - specialDeals, - orders, - orderItems, - payments, - notifications, - productCategories, - cartItems, - coupons, -} from "@/src/db/schema"; + User as PostgresUser, + Address as PostgresAddress, + Unit as PostgresUnit, + ProductInfo as PostgresProductInfo, + DeliverySlotInfo as PostgresDeliverySlotInfo, + ProductSlot as PostgresProductSlot, + SpecialDeal as PostgresSpecialDeal, + Order as PostgresOrder, + OrderItem as PostgresOrderItem, + Payment as PostgresPayment, + Notification as PostgresNotification, + ProductCategory as PostgresProductCategory, + CartItem as PostgresCartItem, + Coupon as PostgresCoupon, + ProductWithUnit as PostgresProductWithUnit, + OrderWithItems as PostgresOrderWithItems, + CartItemWithProduct as PostgresCartItemWithProduct, +} from '@db-helper-postgres/db/types' +import type { + User as SqliteUser, + Address as SqliteAddress, + Unit as SqliteUnit, + ProductInfo as SqliteProductInfo, + DeliverySlotInfo as SqliteDeliverySlotInfo, + ProductSlot as SqliteProductSlot, + SpecialDeal as SqliteSpecialDeal, + Order as SqliteOrder, + OrderItem as SqliteOrderItem, + Payment as SqlitePayment, + Notification as SqliteNotification, + ProductCategory as SqliteProductCategory, + CartItem as SqliteCartItem, + Coupon as SqliteCoupon, + ProductWithUnit as SqliteProductWithUnit, + OrderWithItems as SqliteOrderWithItems, + CartItemWithProduct as SqliteCartItemWithProduct, +} from '@db-helper-sqlite/db/types' -export type User = InferSelectModel; -export type Address = InferSelectModel; -export type Unit = InferSelectModel; -export type ProductInfo = InferSelectModel; -export type DeliverySlotInfo = InferSelectModel; -export type ProductSlot = InferSelectModel; -export type SpecialDeal = InferSelectModel; -export type Order = InferSelectModel; -export type OrderItem = InferSelectModel; -export type Payment = InferSelectModel; -export type Notification = InferSelectModel; -export type ProductCategory = InferSelectModel; -export type CartItem = InferSelectModel; -export type Coupon = InferSelectModel; +type UseSqlite = typeof DB_DIALECT_TYPE extends 'sqlite' ? true : false -// Combined types -export type ProductWithUnit = ProductInfo & { - unit: Unit; -}; - -export type OrderWithItems = Order & { - items: (OrderItem & { product: ProductInfo })[]; - address: Address; - slot: DeliverySlotInfo; -}; - -export type CartItemWithProduct = CartItem & { - product: ProductInfo; -}; +export type User = UseSqlite extends true ? SqliteUser : PostgresUser +export type Address = UseSqlite extends true ? SqliteAddress : PostgresAddress +export type Unit = UseSqlite extends true ? SqliteUnit : PostgresUnit +export type ProductInfo = UseSqlite extends true ? SqliteProductInfo : PostgresProductInfo +export type DeliverySlotInfo = UseSqlite extends true ? SqliteDeliverySlotInfo : PostgresDeliverySlotInfo +export type ProductSlot = UseSqlite extends true ? SqliteProductSlot : PostgresProductSlot +export type SpecialDeal = UseSqlite extends true ? SqliteSpecialDeal : PostgresSpecialDeal +export type Order = UseSqlite extends true ? SqliteOrder : PostgresOrder +export type OrderItem = UseSqlite extends true ? SqliteOrderItem : PostgresOrderItem +export type Payment = UseSqlite extends true ? SqlitePayment : PostgresPayment +export type Notification = UseSqlite extends true ? SqliteNotification : PostgresNotification +export type ProductCategory = UseSqlite extends true ? SqliteProductCategory : PostgresProductCategory +export type CartItem = UseSqlite extends true ? SqliteCartItem : PostgresCartItem +export type Coupon = UseSqlite extends true ? SqliteCoupon : PostgresCoupon +export type ProductWithUnit = UseSqlite extends true ? SqliteProductWithUnit : PostgresProductWithUnit +export type OrderWithItems = UseSqlite extends true ? SqliteOrderWithItems : PostgresOrderWithItems +export type CartItemWithProduct = UseSqlite extends true ? SqliteCartItemWithProduct : PostgresCartItemWithProduct diff --git a/apps/backend/src/db/upload-url.ts b/apps/backend/src/db/upload-url.ts new file mode 100644 index 0000000..44ae085 --- /dev/null +++ b/apps/backend/src/db/upload-url.ts @@ -0,0 +1,14 @@ +import { claimUploadUrlStatus as claimUploadUrlStatusPostgres, createUploadUrlStatus as createUploadUrlStatusPostgres } from '@db-helper-postgres/lib/upload-url' +import { claimUploadUrlStatus as claimUploadUrlStatusSqlite, createUploadUrlStatus as createUploadUrlStatusSqlite } from '@db-helper-sqlite/lib/upload-url' + +const dialect = process.env.DB_DIALECT || DB_DIALECT_TYPE + +const createUploadUrlStatus = dialect === 'sqlite' + ? createUploadUrlStatusSqlite + : createUploadUrlStatusPostgres + +const claimUploadUrlStatus = dialect === 'sqlite' + ? claimUploadUrlStatusSqlite + : claimUploadUrlStatusPostgres + +export { claimUploadUrlStatus, createUploadUrlStatus } diff --git a/apps/backend/src/lib/delete-image.ts b/apps/backend/src/lib/delete-image.ts index 3edcfeb..13771a8 100644 --- a/apps/backend/src/lib/delete-image.ts +++ b/apps/backend/src/lib/delete-image.ts @@ -1,56 +1,54 @@ -import { eq } from "drizzle-orm"; -import { db } from "@/src/db/db_index" -import { deleteImageUtil, getOriginalUrlFromSignedUrl } from "@/src/lib/s3-client" -import { assetsDomain, s3Url } from "@/src/lib/env-exporter" +import { deleteImageUtil, getOriginalUrlFromSignedUrl } from '@/src/lib/s3-client' +import { assetsDomain, s3Url } from '@/src/lib/env-exporter' function extractS3Key(url: string): string | null { try { // Check if this is a signed URL first and get the original if it is - const originalUrl = getOriginalUrlFromSignedUrl(url) || url; + const originalUrl = getOriginalUrlFromSignedUrl(url) || url // Find the index of '.com/' in the URL // const comIndex = originalUrl.indexOf(".com/"); - const baseUrlIndex = originalUrl.indexOf(s3Url); + const baseUrlIndex = originalUrl.indexOf(s3Url) // If '.com/' is found, return everything after it if (baseUrlIndex !== -1) { - return originalUrl.substring(baseUrlIndex + s3Url.length); // +5 to skip '.com/' + return originalUrl.substring(baseUrlIndex + s3Url.length) // +5 to skip '.com/' } } catch (error) { - console.error("Error extracting key from URL:", error); + console.error('Error extracting key from URL:', error) } // Return null if the pattern isn't found or there was an error - return null; + return null } export async function deleteS3Image(imageUrl: string) { try { - let key:string | null = ''; + let key: string | null = '' - if(imageUrl.includes(assetsDomain)) { + if (imageUrl.includes(assetsDomain)) { key = imageUrl.replace(assetsDomain, '') } - else if(imageUrl.startsWith('http')){ - // First check if this is a signed URL and get the original if it is - const originalUrl = getOriginalUrlFromSignedUrl(imageUrl) || imageUrl; - - key = extractS3Key(originalUrl || ""); + else if (imageUrl.startsWith('http')) { + // First check if this is a signed URL and get the original if it is + const originalUrl = getOriginalUrlFromSignedUrl(imageUrl) || imageUrl + + key = extractS3Key(originalUrl || '') } else { - key = imageUrl; + key = imageUrl } if (!key) { - throw new Error("Invalid image URL format"); + throw new Error('Invalid image URL format') } - const deleteS3 = await deleteImageUtil({keys: [key] }); + const deleteS3 = await deleteImageUtil({ keys: [key] }) if (!deleteS3) { - throw new Error("Failed to delete image from S3"); + throw new Error('Failed to delete image from S3') } } catch (error) { - console.error("Error deleting image from S3:", error); + console.error('Error deleting image from S3:', error) } } diff --git a/apps/backend/src/lib/notif-service.ts b/apps/backend/src/lib/notif-service.ts index ee1a0d5..2c34765 100755 --- a/apps/backend/src/lib/notif-service.ts +++ b/apps/backend/src/lib/notif-service.ts @@ -1,7 +1,5 @@ -import { db } from "@/src/db/db_index" -import { sendPushNotificationsMany } from "@/src/lib/expo-service" +import { sendPushNotificationsMany } from '@/src/lib/expo-service' // import { usersTable, notifCredsTable, notificationTable } from "@/src/db/schema"; -import { eq, inArray } from "drizzle-orm"; // Core notification dispatch methods (renamed for clarity) export async function dispatchBulkNotification({ diff --git a/apps/backend/src/lib/roles-manager.ts b/apps/backend/src/lib/roles-manager.ts index 7242bce..80d49c6 100755 --- a/apps/backend/src/lib/roles-manager.ts +++ b/apps/backend/src/lib/roles-manager.ts @@ -1,5 +1,3 @@ -import { db } from "@/src/db/db_index" - /** * Constants for role names to avoid hardcoding and typos */ diff --git a/apps/backend/src/lib/s3-client.ts b/apps/backend/src/lib/s3-client.ts index 58a8c01..9280587 100755 --- a/apps/backend/src/lib/s3-client.ts +++ b/apps/backend/src/lib/s3-client.ts @@ -3,9 +3,7 @@ import { DeleteObjectCommand, DeleteObjectsCommand, PutObjectCommand, S3Client, import { getSignedUrl } from "@aws-sdk/s3-request-presigner" import signedUrlCache from "@/src/lib/signed-url-cache" import { s3AccessKeyId, s3Region, s3Url, s3SecretAccessKey, s3BucketName, assetsDomain } from "@/src/lib/env-exporter" -import { db } from "@/src/db/db_index"; // Adjust path if needed -import { uploadUrlStatus } from "@/src/db/schema" -import { and, eq } from 'drizzle-orm'; +import { claimUploadUrlStatus, createUploadUrlStatus } from '@/src/db/upload-url' const s3Client = new S3Client({ region: s3Region, @@ -161,10 +159,7 @@ export async function generateSignedUrlsFromS3Urls(s3Urls: (string|null)[], expi export async function generateUploadUrl(key: string, mimeType: string, expiresIn: number = 180): Promise { try { // Insert record into upload_url_status - await db.insert(uploadUrlStatus).values({ - key: key, - status: 'pending', - }); + await createUploadUrlStatus(key) // Generate signed upload URL const command = new PutObjectCommand({ @@ -207,16 +202,7 @@ export async function claimUploadUrl(url: string): Promise { semiKey = extractKeyFromPresignedUrl(url); else semiKey = url - // Update status to 'claimed' if currently 'pending' - const result = await db - .update(uploadUrlStatus) - .set({ status: 'claimed' }) - .where(and(eq(uploadUrlStatus.key, semiKey), eq(uploadUrlStatus.status, 'pending'))) - .returning(); - - if (result.length === 0) { - throw new Error('Upload URL not found or already claimed'); - } + await claimUploadUrlStatus(semiKey) } catch (error) { console.error('Error claiming upload URL:', error); throw new Error('Failed to claim upload URL'); diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/main.ts b/apps/backend/src/trpc/apis/admin-apis/dataAccessors/main.ts index 0705d1c..d472b40 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/main.ts +++ b/apps/backend/src/trpc/apis/admin-apis/dataAccessors/main.ts @@ -1,55 +1,60 @@ export type { IBannerDbService, Banner, NewBanner } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/banner-db-service.interface' -// export { bannerDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/postgres/banner-queries' -export { bannerDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/sqlite/banner-queries' - export type { IComplaintDbService, Complaint, NewComplaint } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/complaint-db-service.interface' -// export { complaintDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/postgres/complaint-queries' -export { complaintDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/sqlite/complaint-queries' - export type { IConstantDbService, Constant, NewConstant } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/constant-db-service.interface' -// export { constantDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/postgres/constant-queries' -export { constantDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/sqlite/constant-queries' - export type { ICouponDbService, Coupon, NewCoupon, ReservedCoupon, NewReservedCoupon, CouponWithRelations } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/coupon-db-service.interface' -// export { couponDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/postgres/coupon-queries' -export { couponDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/sqlite/coupon-queries' - export type { IOrderDbService, Order, OrderItem, OrderStatus, OrderWithRelations, OrderWithStatus, OrderWithCouponUsages } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/order-db-service.interface' -// export { orderDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/postgres/order-queries' -export { orderDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/sqlite/order-queries' - export type { IProductDbService, Product, NewProduct, ProductGroup, NewProductGroup } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/product-db-service.interface' -// export { productDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/postgres/product-queries' -export { productDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/sqlite/product-queries' - export type { IRefundDbService, Refund, NewRefund } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/refund-db-service.interface' -// export { refundDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/postgres/refund-queries' -export { refundDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/sqlite/refund-queries' - export type { IScheduleDbService, Schedule, NewSchedule } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/schedule-db-service.interface' -// export { scheduleDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/postgres/schedule-queries' -export { scheduleDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/sqlite/schedule-queries' - export type { ISlotDbService, Slot, NewSlot, ProductSlot, NewProductSlot, SlotWithRelations } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/slot-db-service.interface' -// export { slotDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/postgres/slot-queries' -export { slotDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/sqlite/slot-queries' - export type { IStaffUserDbService, StaffUser, NewStaffUser, StaffRole, StaffUserWithRole } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/staff-user-db-service.interface' -// export { staffUserDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/postgres/staff-user-queries' -export { staffUserDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/sqlite/staff-user-queries' - export type { IStoreDbService, Store, NewStore } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/store-db-service.interface' -// export { storeDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/postgres/store-queries' -export { storeDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/sqlite/store-queries' - export type { ITagDbService, Tag, NewTag } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/tag-db-service.interface' -// export { tagDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/postgres/tag-queries' -export { tagDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/sqlite/tag-queries' - export type { IUserDbService, User, NewUser, UserDetail } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/user-db-service.interface' -// export { userDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/postgres/user-queries' -export { userDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/sqlite/user-queries' - export type { IVendorSnippetDbService, VendorSnippet, NewVendorSnippet } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/vendor-snippet-db-service.interface' -// export { vendorSnippetDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/postgres/vendor-snippets-queries' -export { vendorSnippetDbService } from '@/src/trpc/apis/admin-apis/dataAccessors/sqlite/vendor-snippets-queries' + +import { bannerDbService as sqliteBannerDbService } from '@db-helper-sqlite/dataAccessors/admin-apis/banner-queries' +import { bannerDbService as postgresBannerDbService } from '@db-helper-postgres/dataAccessors/admin-apis/banner-queries' +import { complaintDbService as sqliteComplaintDbService } from '@db-helper-sqlite/dataAccessors/admin-apis/complaint-queries' +import { complaintDbService as postgresComplaintDbService } from '@db-helper-postgres/dataAccessors/admin-apis/complaint-queries' +import { constantDbService as sqliteConstantDbService } from '@db-helper-sqlite/dataAccessors/admin-apis/constant-queries' +import { constantDbService as postgresConstantDbService } from '@db-helper-postgres/dataAccessors/admin-apis/constant-queries' +import { couponDbService as sqliteCouponDbService } from '@db-helper-sqlite/dataAccessors/admin-apis/coupon-queries' +import { couponDbService as postgresCouponDbService } from '@db-helper-postgres/dataAccessors/admin-apis/coupon-queries' +import { orderDbService as sqliteOrderDbService } from '@db-helper-sqlite/dataAccessors/admin-apis/order-queries' +import { orderDbService as postgresOrderDbService } from '@db-helper-postgres/dataAccessors/admin-apis/order-queries' +import { productDbService as sqliteProductDbService } from '@db-helper-sqlite/dataAccessors/admin-apis/product-queries' +import { productDbService as postgresProductDbService } from '@db-helper-postgres/dataAccessors/admin-apis/product-queries' +import { refundDbService as sqliteRefundDbService } from '@db-helper-sqlite/dataAccessors/admin-apis/refund-queries' +import { refundDbService as postgresRefundDbService } from '@db-helper-postgres/dataAccessors/admin-apis/refund-queries' +import { scheduleDbService as sqliteScheduleDbService } from '@db-helper-sqlite/dataAccessors/admin-apis/schedule-queries' +import { scheduleDbService as postgresScheduleDbService } from '@db-helper-postgres/dataAccessors/admin-apis/schedule-queries' +import { slotDbService as sqliteSlotDbService } from '@db-helper-sqlite/dataAccessors/admin-apis/slot-queries' +import { slotDbService as postgresSlotDbService } from '@db-helper-postgres/dataAccessors/admin-apis/slot-queries' +import { staffUserDbService as sqliteStaffUserDbService } from '@db-helper-sqlite/dataAccessors/admin-apis/staff-user-queries' +import { staffUserDbService as postgresStaffUserDbService } from '@db-helper-postgres/dataAccessors/admin-apis/staff-user-queries' +import { storeDbService as sqliteStoreDbService } from '@db-helper-sqlite/dataAccessors/admin-apis/store-queries' +import { storeDbService as postgresStoreDbService } from '@db-helper-postgres/dataAccessors/admin-apis/store-queries' +import { tagDbService as sqliteTagDbService } from '@db-helper-sqlite/dataAccessors/admin-apis/tag-queries' +import { tagDbService as postgresTagDbService } from '@db-helper-postgres/dataAccessors/admin-apis/tag-queries' +import { userDbService as sqliteUserDbService } from '@db-helper-sqlite/dataAccessors/admin-apis/user-queries' +import { userDbService as postgresUserDbService } from '@db-helper-postgres/dataAccessors/admin-apis/user-queries' +import { vendorSnippetDbService as sqliteVendorSnippetDbService } from '@db-helper-sqlite/dataAccessors/admin-apis/vendor-snippets-queries' +import { vendorSnippetDbService as postgresVendorSnippetDbService } from '@db-helper-postgres/dataAccessors/admin-apis/vendor-snippets-queries' + +const isSqlite = process.env.DB_DIALECT === 'sqlite' + +export const bannerDbService = isSqlite ? sqliteBannerDbService : postgresBannerDbService +export const complaintDbService = isSqlite ? sqliteComplaintDbService : postgresComplaintDbService +export const constantDbService = isSqlite ? sqliteConstantDbService : postgresConstantDbService +export const couponDbService = isSqlite ? sqliteCouponDbService : postgresCouponDbService +export const orderDbService = isSqlite ? sqliteOrderDbService : postgresOrderDbService +export const productDbService = isSqlite ? sqliteProductDbService : postgresProductDbService +export const refundDbService = isSqlite ? sqliteRefundDbService : postgresRefundDbService +export const scheduleDbService = isSqlite ? sqliteScheduleDbService : postgresScheduleDbService +export const slotDbService = isSqlite ? sqliteSlotDbService : postgresSlotDbService +export const staffUserDbService = isSqlite ? sqliteStaffUserDbService : postgresStaffUserDbService +export const storeDbService = isSqlite ? sqliteStoreDbService : postgresStoreDbService +export const tagDbService = isSqlite ? sqliteTagDbService : postgresTagDbService +export const userDbService = isSqlite ? sqliteUserDbService : postgresUserDbService +export const vendorSnippetDbService = isSqlite ? sqliteVendorSnippetDbService : postgresVendorSnippetDbService diff --git a/apps/backend/src/trpc/apis/user-apis/dataAccessors/main.ts b/apps/backend/src/trpc/apis/user-apis/dataAccessors/main.ts index b878f1f..dac3bf8 100644 --- a/apps/backend/src/trpc/apis/user-apis/dataAccessors/main.ts +++ b/apps/backend/src/trpc/apis/user-apis/dataAccessors/main.ts @@ -1,43 +1,48 @@ export type { IUserBannerDbService, UserBanner } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-banner-db-service.interface' -// export { userBannerDbService } from '@/src/trpc/apis/user-apis/dataAccessors/postgres/user-banner-queries' -export { userBannerDbService } from '@/src/trpc/apis/user-apis/dataAccessors/sqlite/user-banner-queries' - export type { IUserStoreDbService, Store as UserStore, StoreBasic } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-store-db-service.interface' -// export { userStoreDbService } from '@/src/trpc/apis/user-apis/dataAccessors/postgres/user-store-queries' -export { userStoreDbService } from '@/src/trpc/apis/user-apis/dataAccessors/sqlite/user-store-queries' - export type { IUserAddressDbService, Address, NewAddress } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-address-db-service.interface' -// export { userAddressDbService } from '@/src/trpc/apis/user-apis/dataAccessors/postgres/user-address-queries' -export { userAddressDbService } from '@/src/trpc/apis/user-apis/dataAccessors/sqlite/user-address-queries' - export type { IUserCartDbService, CartItem } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-cart-db-service.interface' -// export { userCartDbService } from '@/src/trpc/apis/user-apis/dataAccessors/postgres/user-cart-queries' -export { userCartDbService } from '@/src/trpc/apis/user-apis/dataAccessors/sqlite/user-cart-queries' - export type { IUserComplaintDbService, Complaint, NewComplaint } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-complaint-db-service.interface' -// export { userComplaintDbService } from '@/src/trpc/apis/user-apis/dataAccessors/postgres/user-complaint-queries' -export { userComplaintDbService } from '@/src/trpc/apis/user-apis/dataAccessors/sqlite/user-complaint-queries' - export type { IUserProductDbService, Product, Store as ProductStore, Review, ProductWithUnit } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-product-db-service.interface' -// export { userProductDbService } from '@/src/trpc/apis/user-apis/dataAccessors/postgres/user-product-queries' -export { userProductDbService } from '@/src/trpc/apis/user-apis/dataAccessors/sqlite/user-product-queries' - export type { IUserAuthDbService, User, UserCred, UserDetail } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-auth-db-service.interface' -// export { userAuthDbService } from '@/src/trpc/apis/user-apis/dataAccessors/postgres/user-auth-queries' -export { userAuthDbService } from '@/src/trpc/apis/user-apis/dataAccessors/sqlite/user-auth-queries' - export type { IUserProfileDbService, User as ProfileUser, UserDetail as ProfileUserDetail, UserCred as ProfileUserCred, NotifCred, UnloggedToken } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-profile-db-service.interface' -// export { userProfileDbService } from '@/src/trpc/apis/user-apis/dataAccessors/postgres/user-profile-queries' -export { userProfileDbService } from '@/src/trpc/apis/user-apis/dataAccessors/sqlite/user-profile-queries' - export type { IUserSlotDbService, Slot } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-slot-db-service.interface' -// export { userSlotDbService } from '@/src/trpc/apis/user-apis/dataAccessors/postgres/user-slot-queries' -export { userSlotDbService } from '@/src/trpc/apis/user-apis/dataAccessors/sqlite/user-slot-queries' - export type { IUserCouponDbService, Coupon, CouponWithRelations, ReservedCoupon } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-coupon-db-service.interface' -// export { userCouponDbService } from '@/src/trpc/apis/user-apis/dataAccessors/postgres/user-coupon-queries' -export { userCouponDbService } from '@/src/trpc/apis/user-apis/dataAccessors/sqlite/user-coupon-queries' - export type { IUserOrderDbService, Order, OrderInsert, OrderItemInsert, OrderStatusInsert, Coupon as OrderCoupon } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-order-db-service.interface' -// export { userOrderDbService } from '@/src/trpc/apis/user-apis/dataAccessors/postgres/user-order-queries' -export { userOrderDbService } from '@/src/trpc/apis/user-apis/dataAccessors/sqlite/user-order-queries' + +import { userBannerDbService as sqliteUserBannerDbService } from '@db-helper-sqlite/dataAccessors/user-apis/user-banner-queries' +import { userBannerDbService as postgresUserBannerDbService } from '@db-helper-postgres/dataAccessors/user-apis/user-banner-queries' +import { userStoreDbService as sqliteUserStoreDbService } from '@db-helper-sqlite/dataAccessors/user-apis/user-store-queries' +import { userStoreDbService as postgresUserStoreDbService } from '@db-helper-postgres/dataAccessors/user-apis/user-store-queries' +import { userAddressDbService as sqliteUserAddressDbService } from '@db-helper-sqlite/dataAccessors/user-apis/user-address-queries' +import { userAddressDbService as postgresUserAddressDbService } from '@db-helper-postgres/dataAccessors/user-apis/user-address-queries' +import { userCartDbService as sqliteUserCartDbService } from '@db-helper-sqlite/dataAccessors/user-apis/user-cart-queries' +import { userCartDbService as postgresUserCartDbService } from '@db-helper-postgres/dataAccessors/user-apis/user-cart-queries' +import { userComplaintDbService as sqliteUserComplaintDbService } from '@db-helper-sqlite/dataAccessors/user-apis/user-complaint-queries' +import { userComplaintDbService as postgresUserComplaintDbService } from '@db-helper-postgres/dataAccessors/user-apis/user-complaint-queries' +import { userProductDbService as sqliteUserProductDbService } from '@db-helper-sqlite/dataAccessors/user-apis/user-product-queries' +import { userProductDbService as postgresUserProductDbService } from '@db-helper-postgres/dataAccessors/user-apis/user-product-queries' +import { userAuthDbService as sqliteUserAuthDbService } from '@db-helper-sqlite/dataAccessors/user-apis/user-auth-queries' +import { userAuthDbService as postgresUserAuthDbService } from '@db-helper-postgres/dataAccessors/user-apis/user-auth-queries' +import { userProfileDbService as sqliteUserProfileDbService } from '@db-helper-sqlite/dataAccessors/user-apis/user-profile-queries' +import { userProfileDbService as postgresUserProfileDbService } from '@db-helper-postgres/dataAccessors/user-apis/user-profile-queries' +import { userSlotDbService as sqliteUserSlotDbService } from '@db-helper-sqlite/dataAccessors/user-apis/user-slot-queries' +import { userSlotDbService as postgresUserSlotDbService } from '@db-helper-postgres/dataAccessors/user-apis/user-slot-queries' +import { userCouponDbService as sqliteUserCouponDbService } from '@db-helper-sqlite/dataAccessors/user-apis/user-coupon-queries' +import { userCouponDbService as postgresUserCouponDbService } from '@db-helper-postgres/dataAccessors/user-apis/user-coupon-queries' +import { userOrderDbService as sqliteUserOrderDbService } from '@db-helper-sqlite/dataAccessors/user-apis/user-order-queries' +import { userOrderDbService as postgresUserOrderDbService } from '@db-helper-postgres/dataAccessors/user-apis/user-order-queries' + +const isSqlite = process.env.DB_DIALECT === 'sqlite' + +export const userBannerDbService = isSqlite ? sqliteUserBannerDbService : postgresUserBannerDbService +export const userStoreDbService = isSqlite ? sqliteUserStoreDbService : postgresUserStoreDbService +export const userAddressDbService = isSqlite ? sqliteUserAddressDbService : postgresUserAddressDbService +export const userCartDbService = isSqlite ? sqliteUserCartDbService : postgresUserCartDbService +export const userComplaintDbService = isSqlite ? sqliteUserComplaintDbService : postgresUserComplaintDbService +export const userProductDbService = isSqlite ? sqliteUserProductDbService : postgresUserProductDbService +export const userAuthDbService = isSqlite ? sqliteUserAuthDbService : postgresUserAuthDbService +export const userProfileDbService = isSqlite ? sqliteUserProfileDbService : postgresUserProfileDbService +export const userSlotDbService = isSqlite ? sqliteUserSlotDbService : postgresUserSlotDbService +export const userCouponDbService = isSqlite ? sqliteUserCouponDbService : postgresUserCouponDbService +export const userOrderDbService = isSqlite ? sqliteUserOrderDbService : postgresUserOrderDbService diff --git a/apps/backend/tsconfig.json b/apps/backend/tsconfig.json index 137ac12..a323f4a 100755 --- a/apps/backend/tsconfig.json +++ b/apps/backend/tsconfig.json @@ -30,6 +30,8 @@ // "baseUrl": ".", "paths": { "@/*": ["./*"], + "@db-helper-postgres/*": ["../db-helper-postgres/src/*"], + "@db-helper-sqlite/*": ["../db-helper-sqlite/src/*"], "shared-types": ["../shared-types"], "@commonTypes": ["../../packages/ui/shared-types"], "@commonTypes/*": ["../../packages/ui/shared-types/*"], @@ -122,4 +124,3 @@ }, "include": ["src", "types", "index.ts", "../shared-types", "../../packages/shared"] } - diff --git a/apps/backend/types/db-dialect.d.ts b/apps/backend/types/db-dialect.d.ts new file mode 100644 index 0000000..fbf1401 --- /dev/null +++ b/apps/backend/types/db-dialect.d.ts @@ -0,0 +1 @@ +declare const DB_DIALECT_TYPE: 'postgres' diff --git a/apps/backend/drizzle.config.postgres.ts b/apps/db-helper-postgres/drizzle.config.ts similarity index 74% rename from apps/backend/drizzle.config.postgres.ts rename to apps/db-helper-postgres/drizzle.config.ts index 39a9121..6622da0 100644 --- a/apps/backend/drizzle.config.postgres.ts +++ b/apps/db-helper-postgres/drizzle.config.ts @@ -2,8 +2,8 @@ import 'dotenv/config' import { defineConfig } from 'drizzle-kit' export default defineConfig({ - out: './drizzle/pg', - schema: './src/db/schema-postgres.ts', + out: './drizzle', + schema: './src/db/schema.ts', dialect: 'postgresql', dbCredentials: { url: process.env.DATABASE_URL!, diff --git a/apps/db-helper-postgres/package.json b/apps/db-helper-postgres/package.json new file mode 100644 index 0000000..c5da9ce --- /dev/null +++ b/apps/db-helper-postgres/package.json @@ -0,0 +1,10 @@ +{ + "name": "db-helper-postgres", + "version": "0.1.0", + "private": true, + "type": "module", + "dependencies": { + "drizzle-orm": "^0.45.1", + "pg": "^8.16.3" + } +} diff --git a/apps/db-helper-postgres/src/apis/common-apis/common-product.ts b/apps/db-helper-postgres/src/apis/common-apis/common-product.ts new file mode 100644 index 0000000..70ab4f9 --- /dev/null +++ b/apps/db-helper-postgres/src/apis/common-apis/common-product.ts @@ -0,0 +1,84 @@ +import { and, eq, gt, inArray } from 'drizzle-orm' + +import { db } from '../../db/db_index' +import { deliverySlotInfo, productInfo, productSlots, productTags, units } from '../../db/schema' + +type ProductSummaryRow = { + id: number + name: string + shortDescription: string | null + price: string + marketPrice: string + images: unknown + isOutOfStock: boolean | null + unitShortNotation: string + productQuantity: number | null + nextDeliveryDate: Date | null +} + +const getNextDeliveryDate = async (productId: number): Promise => { + const result = await db + .select({ deliveryTime: deliverySlotInfo.deliveryTime }) + .from(productSlots) + .innerJoin(deliverySlotInfo, eq(productSlots.slotId, deliverySlotInfo.id)) + .where( + and( + eq(productSlots.productId, productId), + eq(deliverySlotInfo.isActive, true), + gt(deliverySlotInfo.deliveryTime, new Date()) + ) + ) + .orderBy(deliverySlotInfo.deliveryTime) + .limit(1) + + return result[0]?.deliveryTime || null +} + +export const getProductsSummaryData = async (tagId?: number | null): Promise => { + let productIds: number[] | null = null + + if (tagId) { + const taggedProducts = await db + .select({ productId: productTags.productId }) + .from(productTags) + .where(eq(productTags.tagId, tagId)) + + productIds = taggedProducts.map((taggedProduct) => taggedProduct.productId) + + if (productIds.length === 0) { + return [] + } + } + + const whereCondition = productIds && productIds.length > 0 + ? inArray(productInfo.id, productIds) + : undefined + + const productsWithUnits = await db + .select({ + id: productInfo.id, + name: productInfo.name, + shortDescription: productInfo.shortDescription, + price: productInfo.price, + marketPrice: productInfo.marketPrice, + images: productInfo.images, + isOutOfStock: productInfo.isOutOfStock, + unitShortNotation: units.shortNotation, + productQuantity: productInfo.productQuantity, + }) + .from(productInfo) + .innerJoin(units, eq(productInfo.unitId, units.id)) + .where(whereCondition) + + const productsWithDelivery = await Promise.all( + productsWithUnits.map(async (product) => { + const nextDeliveryDate = await getNextDeliveryDate(product.id) + return { + ...product, + nextDeliveryDate, + } + }) + ) + + return productsWithDelivery +} diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/banner-queries.ts b/apps/db-helper-postgres/src/dataAccessors/admin-apis/banner-queries.ts similarity index 81% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/banner-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/admin-apis/banner-queries.ts index 6db5999..8e912fc 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/banner-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/admin-apis/banner-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index' -import { homeBanners } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { homeBanners } from '../../db/schema' import { eq, desc } from 'drizzle-orm' -import { IBannerDbService, Banner, NewBanner } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/banner-db-service.interface' +import { IBannerDbService, Banner, NewBanner } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/banner-db-service.interface' export class BannerDbService implements IBannerDbService { async getAllBanners(): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/complaint-queries.ts b/apps/db-helper-postgres/src/dataAccessors/admin-apis/complaint-queries.ts similarity index 83% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/complaint-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/admin-apis/complaint-queries.ts index b792066..f5b9fff 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/complaint-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/admin-apis/complaint-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index_sqlite' -import { complaints, users } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { complaints, users } from '../../db/schema' import { eq, desc, lt } from 'drizzle-orm' -import { IComplaintDbService, Complaint, NewComplaint } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/complaint-db-service.interface' +import { IComplaintDbService, Complaint, NewComplaint } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/complaint-db-service.interface' export class ComplaintDbService implements IComplaintDbService { async getComplaints( diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/constant-queries.ts b/apps/db-helper-postgres/src/dataAccessors/admin-apis/constant-queries.ts similarity index 72% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/constant-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/admin-apis/constant-queries.ts index b6aceca..910c134 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/constant-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/admin-apis/constant-queries.ts @@ -1,6 +1,6 @@ -import { db } from '@/src/db/db_index' -import { keyValStore } from '@/src/db/schema' -import { IConstantDbService, Constant, NewConstant } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/constant-db-service.interface' +import { db } from '../../db/db_index' +import { keyValStore } from '../../db/schema' +import { IConstantDbService, Constant, NewConstant } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/constant-db-service.interface' export class ConstantDbService implements IConstantDbService { async getAllConstants(): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/coupon-queries.ts b/apps/db-helper-postgres/src/dataAccessors/admin-apis/coupon-queries.ts similarity index 96% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/coupon-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/admin-apis/coupon-queries.ts index 82e5644..ee23ab1 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/coupon-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/admin-apis/coupon-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index' -import { coupons, couponApplicableUsers, couponApplicableProducts, reservedCoupons, users, orders, orderStatus } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { coupons, couponApplicableUsers, couponApplicableProducts, reservedCoupons, users, orders, orderStatus } from '../../db/schema' import { eq, and, like, or, inArray, lt, asc } from 'drizzle-orm' -import { ICouponDbService, Coupon, NewCoupon, ReservedCoupon, NewReservedCoupon, CouponWithRelations } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/coupon-db-service.interface' +import { ICouponDbService, Coupon, NewCoupon, ReservedCoupon, NewReservedCoupon, CouponWithRelations } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/coupon-db-service.interface' export class CouponDbService implements ICouponDbService { async createCoupon(data: NewCoupon): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/order-queries.ts b/apps/db-helper-postgres/src/dataAccessors/admin-apis/order-queries.ts similarity index 98% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/order-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/admin-apis/order-queries.ts index c68967a..7d2dc90 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/order-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/admin-apis/order-queries.ts @@ -1,4 +1,4 @@ -import { db } from '@/src/db/db_index' +import { db } from '../../db/db_index' import { orders, orderItems, @@ -14,7 +14,7 @@ import { productInfo, units, paymentInfoTable, -} from '@/src/db/schema' +} from '../../db/schema' import { eq, and, gte, lt, desc, inArray, SQL } from 'drizzle-orm' import { IOrderDbService, @@ -26,7 +26,7 @@ import { OrderWithRelations, OrderWithStatus, OrderWithCouponUsages, -} from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/order-db-service.interface' +} from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/order-db-service.interface' export class OrderDbService implements IOrderDbService { async updateOrderNotes(orderId: number, adminNotes: string | null): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/product-queries.ts b/apps/db-helper-postgres/src/dataAccessors/admin-apis/product-queries.ts similarity index 97% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/product-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/admin-apis/product-queries.ts index 8eb7091..bdf314f 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/product-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/admin-apis/product-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index' -import { productInfo, units, specialDeals, productSlots, productTags, productReviews, productGroupInfo, productGroupMembership, users } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { productInfo, units, specialDeals, productSlots, productTags, productReviews, productGroupInfo, productGroupMembership, users } from '../../db/schema' import { eq, and, inArray, desc, sql } from 'drizzle-orm' -import { IProductDbService, Product, NewProduct, ProductGroup, NewProductGroup } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/product-db-service.interface' +import { IProductDbService, Product, NewProduct, ProductGroup, NewProductGroup } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/product-db-service.interface' export class ProductDbService implements IProductDbService { async getAllProducts(): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/refund-queries.ts b/apps/db-helper-postgres/src/dataAccessors/admin-apis/refund-queries.ts similarity index 84% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/refund-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/admin-apis/refund-queries.ts index 3374d80..691722d 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/refund-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/admin-apis/refund-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index' -import { refunds, orders, orderStatus, payments } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { refunds, orders, orderStatus, payments } from '../../db/schema' import { eq, and } from 'drizzle-orm' -import { IRefundDbService, Refund, NewRefund } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/refund-db-service.interface' +import { IRefundDbService, Refund, NewRefund } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/refund-db-service.interface' export class RefundDbService implements IRefundDbService { async createRefund(data: NewRefund): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/schedule-queries.ts b/apps/db-helper-postgres/src/dataAccessors/admin-apis/schedule-queries.ts similarity index 85% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/schedule-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/admin-apis/schedule-queries.ts index da2e5e4..6744a88 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/schedule-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/admin-apis/schedule-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index' -import { productAvailabilitySchedules } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { productAvailabilitySchedules } from '../../db/schema' import { eq, desc } from 'drizzle-orm' -import { IScheduleDbService, Schedule, NewSchedule } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/schedule-db-service.interface' +import { IScheduleDbService, Schedule, NewSchedule } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/schedule-db-service.interface' export class ScheduleDbService implements IScheduleDbService { async createSchedule(data: NewSchedule): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/slot-queries.ts b/apps/db-helper-postgres/src/dataAccessors/admin-apis/slot-queries.ts similarity index 95% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/slot-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/admin-apis/slot-queries.ts index 6da0dd1..1154210 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/slot-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/admin-apis/slot-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index' -import { deliverySlotInfo, productSlots, vendorSnippets, productInfo, productGroupInfo } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { deliverySlotInfo, productSlots, vendorSnippets, productInfo, productGroupInfo } from '../../db/schema' import { eq, inArray, and, desc } from 'drizzle-orm' -import { ISlotDbService, Slot, NewSlot, ProductSlot, SlotWithRelations } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/slot-db-service.interface' +import { ISlotDbService, Slot, NewSlot, ProductSlot, SlotWithRelations } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/slot-db-service.interface' export class SlotDbService implements ISlotDbService { async getAllSlots(): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/staff-user-queries.ts b/apps/db-helper-postgres/src/dataAccessors/admin-apis/staff-user-queries.ts similarity index 94% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/staff-user-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/admin-apis/staff-user-queries.ts index ec39dc1..de0da27 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/staff-user-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/admin-apis/staff-user-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index' -import { staffUsers, staffRoles, users, userDetails, orders } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { staffUsers, staffRoles, users, userDetails, orders } from '../../db/schema' import { eq, or, ilike, and, lt, desc } from 'drizzle-orm' -import { IStaffUserDbService, StaffUser, NewStaffUser, StaffRole } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/staff-user-db-service.interface' +import { IStaffUserDbService, StaffUser, NewStaffUser, StaffRole } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/staff-user-db-service.interface' export class StaffUserDbService implements IStaffUserDbService { async getStaffUserByName(name: string): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/store-queries.ts b/apps/db-helper-postgres/src/dataAccessors/admin-apis/store-queries.ts similarity index 84% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/store-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/admin-apis/store-queries.ts index 8c5579d..e1cb55b 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/store-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/admin-apis/store-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index_sqlite' -import { storeInfo, productInfo } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { storeInfo, productInfo } from '../../db/schema' import { eq, inArray } from 'drizzle-orm' -import { IStoreDbService, Store, NewStore } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/store-db-service.interface' +import { IStoreDbService, Store, NewStore } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/store-db-service.interface' export class StoreDbService implements IStoreDbService { async getAllStores(): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/tag-queries.ts b/apps/db-helper-postgres/src/dataAccessors/admin-apis/tag-queries.ts similarity index 82% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/tag-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/admin-apis/tag-queries.ts index e2eca0b..5ac42fa 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/tag-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/admin-apis/tag-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index' -import { productTagInfo } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { productTagInfo } from '../../db/schema' import { eq } from 'drizzle-orm' -import { ITagDbService, Tag, NewTag } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/tag-db-service.interface' +import { ITagDbService, Tag, NewTag } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/tag-db-service.interface' export class TagDbService implements ITagDbService { async getAllTags(): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/user-queries.ts b/apps/db-helper-postgres/src/dataAccessors/admin-apis/user-queries.ts similarity index 96% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/user-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/admin-apis/user-queries.ts index 04a68b3..b360d18 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/user-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/admin-apis/user-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index' -import { users, userDetails, orders, orderItems, orderStatus, complaints, notifCreds, unloggedUserTokens, userIncidents } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { users, userDetails, orders, orderItems, orderStatus, complaints, notifCreds, unloggedUserTokens, userIncidents } from '../../db/schema' import { eq, sql, desc, asc, count, max, inArray } from 'drizzle-orm' -import { IUserDbService, User, NewUser, UserDetail } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/user-db-service.interface' +import { IUserDbService, User, NewUser, UserDetail } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/user-db-service.interface' export class UserDbService implements IUserDbService { async getUserById(id: number): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/vendor-snippets-queries.ts b/apps/db-helper-postgres/src/dataAccessors/admin-apis/vendor-snippets-queries.ts similarity index 95% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/vendor-snippets-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/admin-apis/vendor-snippets-queries.ts index 5e1f40f..df8af2e 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/vendor-snippets-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/admin-apis/vendor-snippets-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index' -import { vendorSnippets, deliverySlotInfo, orders, orderItems, productInfo } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { vendorSnippets, deliverySlotInfo, orders, orderItems, productInfo } from '../../db/schema' import { eq, and, inArray, gt, asc, desc } from 'drizzle-orm' -import { IVendorSnippetDbService, VendorSnippet, NewVendorSnippet } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/vendor-snippet-db-service.interface' +import { IVendorSnippetDbService, VendorSnippet, NewVendorSnippet } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/vendor-snippet-db-service.interface' export class VendorSnippetDbService implements IVendorSnippetDbService { async createSnippet(data: NewVendorSnippet): Promise { diff --git a/apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-address-queries.ts b/apps/db-helper-postgres/src/dataAccessors/user-apis/user-address-queries.ts similarity index 91% rename from apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-address-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/user-apis/user-address-queries.ts index e10ac73..3a30b34 100644 --- a/apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-address-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/user-apis/user-address-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index' -import { addresses, orders, orderStatus, deliverySlotInfo } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { addresses, orders, orderStatus, deliverySlotInfo } from '../../db/schema' import { eq, and, gte } from 'drizzle-orm' -import { IUserAddressDbService, Address, NewAddress } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-address-db-service.interface' +import { IUserAddressDbService, Address, NewAddress } from '../../../../backend/src/trpc/apis/user-apis/dataAccessors/interfaces/user-address-db-service.interface' export class UserAddressDbService implements IUserAddressDbService { async getDefaultAddress(userId: number): Promise

{ diff --git a/apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-auth-queries.ts b/apps/db-helper-postgres/src/dataAccessors/user-apis/user-auth-queries.ts similarity index 96% rename from apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-auth-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/user-apis/user-auth-queries.ts index 790d411..8ccbc11 100644 --- a/apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-auth-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/user-apis/user-auth-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index' -import { users, userCreds, userDetails, addresses, cartItems, complaints, couponApplicableUsers, couponUsage, notifCreds, notifications, orderItems, orderStatus, orders, payments, refunds, productReviews, reservedCoupons } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { users, userCreds, userDetails, addresses, cartItems, complaints, couponApplicableUsers, couponUsage, notifCreds, notifications, orderItems, orderStatus, orders, payments, refunds, productReviews, reservedCoupons } from '../../db/schema' import { eq } from 'drizzle-orm' -import { IUserAuthDbService, User, UserCred, UserDetail } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-auth-db-service.interface' +import { IUserAuthDbService, User, UserCred, UserDetail } from '../../../../backend/src/trpc/apis/user-apis/dataAccessors/interfaces/user-auth-db-service.interface' export class UserAuthDbService implements IUserAuthDbService { async getUserByEmail(email: string): Promise { diff --git a/apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-banner-queries.ts b/apps/db-helper-postgres/src/dataAccessors/user-apis/user-banner-queries.ts similarity index 62% rename from apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-banner-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/user-apis/user-banner-queries.ts index a323a9e..553e841 100644 --- a/apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-banner-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/user-apis/user-banner-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index_sqlite' -import { homeBanners } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { homeBanners } from '../../db/schema' import { isNotNull, asc } from 'drizzle-orm' -import { IUserBannerDbService, UserBanner } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-banner-db-service.interface' +import { IUserBannerDbService, UserBanner } from '../../../../backend/src/trpc/apis/user-apis/dataAccessors/interfaces/user-banner-db-service.interface' export class UserBannerDbService implements IUserBannerDbService { async getActiveBanners(): Promise { diff --git a/apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-cart-queries.ts b/apps/db-helper-postgres/src/dataAccessors/user-apis/user-cart-queries.ts similarity index 90% rename from apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-cart-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/user-apis/user-cart-queries.ts index 55fabff..267b13d 100644 --- a/apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-cart-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/user-apis/user-cart-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index' -import { cartItems, productInfo, units } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { cartItems, productInfo, units } from '../../db/schema' import { eq, and, sql } from 'drizzle-orm' -import { IUserCartDbService, CartItem } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-cart-db-service.interface' +import { IUserCartDbService, CartItem } from '../../../../backend/src/trpc/apis/user-apis/dataAccessors/interfaces/user-cart-db-service.interface' export class UserCartDbService implements IUserCartDbService { async getCartItemsWithProducts(userId: number) { diff --git a/apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-complaint-queries.ts b/apps/db-helper-postgres/src/dataAccessors/user-apis/user-complaint-queries.ts similarity index 78% rename from apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-complaint-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/user-apis/user-complaint-queries.ts index 697a6e7..a1f7157 100644 --- a/apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-complaint-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/user-apis/user-complaint-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index' -import { complaints } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { complaints } from '../../db/schema' import { eq, asc } from 'drizzle-orm' -import { IUserComplaintDbService } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-complaint-db-service.interface' +import { IUserComplaintDbService } from '../../../../backend/src/trpc/apis/user-apis/dataAccessors/interfaces/user-complaint-db-service.interface' export class UserComplaintDbService implements IUserComplaintDbService { async getComplaintsByUserId(userId: number) { diff --git a/apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-coupon-queries.ts b/apps/db-helper-postgres/src/dataAccessors/user-apis/user-coupon-queries.ts similarity index 92% rename from apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-coupon-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/user-apis/user-coupon-queries.ts index bcdcff6..6d1c665 100644 --- a/apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-coupon-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/user-apis/user-coupon-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index_sqlite' -import { coupons, couponUsage, couponApplicableUsers, couponApplicableProducts, reservedCoupons } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { coupons, couponUsage, couponApplicableUsers, couponApplicableProducts, reservedCoupons } from '../../db/schema' import { eq, and, or, gt, isNull } from 'drizzle-orm' -import { IUserCouponDbService, Coupon, ReservedCoupon, CouponWithRelations } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-coupon-db-service.interface' +import { IUserCouponDbService, Coupon, ReservedCoupon, CouponWithRelations } from '../../../../backend/src/trpc/apis/user-apis/dataAccessors/interfaces/user-coupon-db-service.interface' export class UserCouponDbService implements IUserCouponDbService { async getActiveCouponsForUser(userId: number): Promise { diff --git a/apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-order-queries.ts b/apps/db-helper-postgres/src/dataAccessors/user-apis/user-order-queries.ts similarity index 97% rename from apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-order-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/user-apis/user-order-queries.ts index 54c0af0..64463a8 100644 --- a/apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-order-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/user-apis/user-order-queries.ts @@ -1,4 +1,4 @@ -import { db } from '@/src/db/db_index_sqlite' +import { db } from '../../db/db_index' import { orders, orderItems, @@ -12,12 +12,12 @@ import { refunds, units, userDetails, -} from '@/src/db/schema' +} from '../../db/schema' import { and, desc, eq, gte, inArray } from 'drizzle-orm' import { IUserOrderDbService, Order, -} from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-order-db-service.interface' +} from '../../../../backend/src/trpc/apis/user-apis/dataAccessors/interfaces/user-order-db-service.interface' export class UserOrderDbService implements IUserOrderDbService { async getUserDetailByUserId(userId: number) { diff --git a/apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-product-queries.ts b/apps/db-helper-postgres/src/dataAccessors/user-apis/user-product-queries.ts similarity index 93% rename from apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-product-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/user-apis/user-product-queries.ts index 2b925dc..369d4fa 100644 --- a/apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-product-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/user-apis/user-product-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index' -import { productInfo, units, storeInfo, productSlots, deliverySlotInfo, specialDeals, productReviews, users } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { productInfo, units, storeInfo, productSlots, deliverySlotInfo, specialDeals, productReviews, users } from '../../db/schema' import { eq, and, gt, sql, desc } from 'drizzle-orm' -import { IUserProductDbService, Review } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-product-db-service.interface' +import { IUserProductDbService, Review } from '../../../../backend/src/trpc/apis/user-apis/dataAccessors/interfaces/user-product-db-service.interface' export class UserProductDbService implements IUserProductDbService { async getProductById(productId: number) { diff --git a/apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-profile-queries.ts b/apps/db-helper-postgres/src/dataAccessors/user-apis/user-profile-queries.ts similarity index 92% rename from apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-profile-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/user-apis/user-profile-queries.ts index 303aa4d..4a0cd8b 100644 --- a/apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-profile-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/user-apis/user-profile-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index' -import { users, userDetails, userCreds, notifCreds, unloggedUserTokens } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { users, userDetails, userCreds, notifCreds, unloggedUserTokens } from '../../db/schema' import { eq, and } from 'drizzle-orm' -import { IUserProfileDbService, User, UserDetail, UserCred, NotifCred, UnloggedToken } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-profile-db-service.interface' +import { IUserProfileDbService, User, UserDetail, UserCred, NotifCred, UnloggedToken } from '../../../../backend/src/trpc/apis/user-apis/dataAccessors/interfaces/user-profile-db-service.interface' export class UserProfileDbService implements IUserProfileDbService { async getUserById(userId: number): Promise { diff --git a/apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-slot-queries.ts b/apps/db-helper-postgres/src/dataAccessors/user-apis/user-slot-queries.ts similarity index 75% rename from apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-slot-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/user-apis/user-slot-queries.ts index 52963e4..cca1c1a 100644 --- a/apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-slot-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/user-apis/user-slot-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index' -import { deliverySlotInfo, productInfo } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { deliverySlotInfo, productInfo } from '../../db/schema' import { eq } from 'drizzle-orm' -import { IUserSlotDbService, Slot } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-slot-db-service.interface' +import { IUserSlotDbService, Slot } from '../../../../backend/src/trpc/apis/user-apis/dataAccessors/interfaces/user-slot-db-service.interface' export class UserSlotDbService implements IUserSlotDbService { async getActiveSlots(): Promise { diff --git a/apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-store-queries.ts b/apps/db-helper-postgres/src/dataAccessors/user-apis/user-store-queries.ts similarity index 89% rename from apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-store-queries.ts rename to apps/db-helper-postgres/src/dataAccessors/user-apis/user-store-queries.ts index af30ed5..3ab67e5 100644 --- a/apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-store-queries.ts +++ b/apps/db-helper-postgres/src/dataAccessors/user-apis/user-store-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index_sqlite' -import { storeInfo, productInfo, units } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { storeInfo, productInfo, units } from '../../db/schema' import { eq, and, sql } from 'drizzle-orm' -import { IUserStoreDbService } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-store-db-service.interface' +import { IUserStoreDbService } from '../../../../backend/src/trpc/apis/user-apis/dataAccessors/interfaces/user-store-db-service.interface' export class UserStoreDbService implements IUserStoreDbService { async getStoresWithProductCount(): Promise> { diff --git a/apps/db-helper-postgres/src/db/db_index.ts b/apps/db-helper-postgres/src/db/db_index.ts new file mode 100644 index 0000000..5845263 --- /dev/null +++ b/apps/db-helper-postgres/src/db/db_index.ts @@ -0,0 +1,10 @@ +import { drizzle } from 'drizzle-orm/node-postgres' +import * as schema from './schema' + +const db = drizzle({ + connection: process.env.DATABASE_URL!, + casing: 'snake_case', + schema, +}) + +export { db } diff --git a/apps/backend/src/db/porter.ts b/apps/db-helper-postgres/src/db/porter.ts similarity index 98% rename from apps/backend/src/db/porter.ts rename to apps/db-helper-postgres/src/db/porter.ts index 4173d6f..8ea1a5d 100644 --- a/apps/backend/src/db/porter.ts +++ b/apps/db-helper-postgres/src/db/porter.ts @@ -2,13 +2,13 @@ * This was a one time script to change the composition of the signed urls */ -import { db } from '@/src/db/db_index' +import { db } from './db_index' import { userDetails, productInfo, productTagInfo, complaints -} from '@/src/db/schema'; +} from './schema'; import { eq, not, isNull } from 'drizzle-orm'; const S3_DOMAIN = 'https://s3.sgp.io.cloud.ovh.net'; diff --git a/apps/db-helper-postgres/src/db/schema.ts b/apps/db-helper-postgres/src/db/schema.ts new file mode 100644 index 0000000..939e04d --- /dev/null +++ b/apps/db-helper-postgres/src/db/schema.ts @@ -0,0 +1,706 @@ +import { pgTable, pgSchema, integer, varchar, date, boolean, timestamp, numeric, jsonb, pgEnum, unique, real, text, check, decimal } from "drizzle-orm/pg-core"; +import { relations, sql } from "drizzle-orm"; + +const mf = pgSchema('mf'); + + + +export const users = mf.table('users', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + name: varchar({ length: 255 }), + email: varchar({ length: 255 }), + mobile: varchar({ length: 255 }), + createdAt: timestamp('created_at').notNull().defaultNow(), +}, (t) => ({ + unq_email: unique('unique_email').on(t.email), +})); + +export const userDetails = mf.table('user_details', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + userId: integer('user_id').notNull().references(() => users.id).unique(), + bio: varchar('bio', { length: 500 }), + dateOfBirth: date('date_of_birth'), + gender: varchar('gender', { length: 20 }), + occupation: varchar('occupation', { length: 100 }), + profileImage: varchar('profile_image', { length: 500 }), + isSuspended: boolean('is_suspended').notNull().default(false), + createdAt: timestamp('created_at').notNull().defaultNow(), + updatedAt: timestamp('updated_at').notNull().defaultNow(), +}); + +export const userCreds = mf.table('user_creds', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + userId: integer('user_id').notNull().references(() => users.id), + userPassword: varchar('user_password', { length: 255 }).notNull(), + createdAt: timestamp('created_at').notNull().defaultNow(), +}); + +export const addresses = mf.table('addresses', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + userId: integer('user_id').notNull().references(() => users.id), + name: varchar('name', { length: 255 }).notNull(), + phone: varchar('phone', { length: 15 }).notNull(), + addressLine1: varchar('address_line1', { length: 255 }).notNull(), + addressLine2: varchar('address_line2', { length: 255 }), + city: varchar('city', { length: 100 }).notNull(), + state: varchar('state', { length: 100 }).notNull(), + pincode: varchar('pincode', { length: 10 }).notNull(), + isDefault: boolean('is_default').notNull().default(false), + latitude: real('latitude'), + longitude: real('longitude'), + googleMapsUrl: varchar('google_maps_url', { length: 500 }), + adminLatitude: real('admin_latitude'), + adminLongitude: real('admin_longitude'), + zoneId: integer('zone_id').references(() => addressZones.id), + createdAt: timestamp('created_at').notNull().defaultNow(), +}); + +export const addressZones = mf.table('address_zones', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + zoneName: varchar('zone_name', { length: 255 }).notNull(), + addedAt: timestamp('added_at').notNull().defaultNow(), +}); + +export const addressAreas = mf.table('address_areas', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + placeName: varchar('place_name', { length: 255 }).notNull(), + zoneId: integer('zone_id').references(() => addressZones.id), + createdAt: timestamp('created_at').notNull().defaultNow(), +}); + +export const staffUsers = mf.table('staff_users', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + name: varchar({ length: 255 }).notNull(), + password: varchar({ length: 255 }).notNull(), + staffRoleId: integer('staff_role_id').references(() => staffRoles.id), + createdAt: timestamp('created_at').notNull().defaultNow(), +}); + +export const storeInfo = mf.table('store_info', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + name: varchar({ length: 255 }).notNull(), + description: varchar({ length: 500 }), + imageUrl: varchar('image_url', { length: 500 }), + createdAt: timestamp('created_at').notNull().defaultNow(), + owner: integer('owner').notNull().references(() => staffUsers.id), +}); + +export const units = mf.table('units', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + shortNotation: varchar('short_notation', { length: 50 }).notNull(), + fullName: varchar('full_name', { length: 100 }).notNull(), +}, (t) => ({ + unq_short_notation: unique('unique_short_notation').on(t.shortNotation), +})); + +export const productAvailabilityActionEnum = pgEnum('product_availability_action', ['in', 'out']); + +export const productInfo = mf.table('product_info', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + name: varchar({ length: 255 }).notNull(), + shortDescription: varchar('short_description', { length: 500 }), + longDescription: varchar('long_description', { length: 1000 }), + unitId: integer('unit_id').notNull().references(() => units.id), + price: numeric({ precision: 10, scale: 2 }).notNull(), + marketPrice: numeric('market_price', { precision: 10, scale: 2 }), + images: jsonb('images'), + isOutOfStock: boolean('is_out_of_stock').notNull().default(false), + isSuspended: boolean('is_suspended').notNull().default(false), + isFlashAvailable: boolean('is_flash_available').notNull().default(false), + flashPrice: numeric('flash_price', { precision: 10, scale: 2 }), + createdAt: timestamp('created_at').notNull().defaultNow(), + incrementStep: real('increment_step').notNull().default(1), + productQuantity: real('product_quantity').notNull().default(1), + storeId: integer('store_id').references(() => storeInfo.id), + scheduledAvailability: boolean('scheduled_availability').notNull().default(true), +}); + +export const productAvailabilitySchedules = mf.table('product_availability_schedules', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + time: varchar('time', { length: 10 }).notNull(), + scheduleName: varchar('schedule_name', { length: 255 }).notNull().unique(), + action: productAvailabilityActionEnum('action').notNull(), + productIds: integer('product_ids').array().notNull().default([]), + groupIds: integer('group_ids').array().notNull().default([]), + createdAt: timestamp('created_at').notNull().defaultNow(), + lastUpdated: timestamp('last_updated').notNull().defaultNow(), +}); + +export const productGroupInfo = mf.table('product_group_info', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + groupName: varchar('group_name', { length: 255 }).notNull(), + description: varchar({ length: 500 }), + createdAt: timestamp('created_at').notNull().defaultNow(), +}); + +export const productGroupMembership = mf.table('product_group_membership', { + productId: integer('product_id').notNull().references(() => productInfo.id), + groupId: integer('group_id').notNull().references(() => productGroupInfo.id), + addedAt: timestamp('added_at').notNull().defaultNow(), +}, (t) => ({ + pk: unique('product_group_membership_pk').on(t.productId, t.groupId), +})); + +export const homeBanners = mf.table('home_banners', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + name: varchar('name', { length: 255 }).notNull(), + imageUrl: varchar('image_url', { length: 500 }).notNull(), + description: varchar('description', { length: 500 }), + productIds: integer('product_ids').array(), + redirectUrl: varchar('redirect_url', { length: 500 }), + serialNum: integer('serial_num'), + isActive: boolean('is_active').notNull().default(false), + createdAt: timestamp('created_at').notNull().defaultNow(), + lastUpdated: timestamp('last_updated').notNull().defaultNow(), +}); + +export const productReviews = mf.table('product_reviews', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + userId: integer('user_id').notNull().references(() => users.id), + productId: integer('product_id').notNull().references(() => productInfo.id), + reviewBody: text('review_body').notNull(), + imageUrls: jsonb('image_urls').$defaultFn(() => []), + reviewTime: timestamp('review_time').notNull().defaultNow(), + ratings: real('ratings').notNull(), + adminResponse: text('admin_response'), + adminResponseImages: jsonb('admin_response_images').$defaultFn(() => []), +}, (t) => ({ + ratingCheck: check('rating_check', sql`${t.ratings} >= 1 AND ${t.ratings} <= 5`), +})); + +export const uploadStatusEnum = pgEnum('upload_status', ['pending', 'claimed']); + +export const staffRoleEnum = pgEnum('staff_role', ['super_admin', 'admin', 'marketer', 'delivery_staff']); + +export const staffPermissionEnum = pgEnum('staff_permission', ['crud_product', 'make_coupon', 'crud_staff_users']); + +export const uploadUrlStatus = mf.table('upload_url_status', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + createdAt: timestamp('created_at').notNull().defaultNow(), + key: varchar('key', { length: 500 }).notNull(), + status: uploadStatusEnum('status').notNull().default('pending'), +}); + +export const productTagInfo = mf.table('product_tag_info', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + tagName: varchar('tag_name', { length: 100 }).notNull().unique(), + tagDescription: varchar('tag_description', { length: 500 }), + imageUrl: varchar('image_url', { length: 500 }), + isDashboardTag: boolean('is_dashboard_tag').notNull().default(false), + relatedStores: jsonb('related_stores').$defaultFn(() => []), + createdAt: timestamp('created_at').notNull().defaultNow(), +}); + +export const productTags = mf.table('product_tags', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + productId: integer('product_id').notNull().references(() => productInfo.id), + tagId: integer('tag_id').notNull().references(() => productTagInfo.id), + assignedAt: timestamp('assigned_at').notNull().defaultNow(), +}, (t) => ({ + unq_product_tag: unique('unique_product_tag').on(t.productId, t.tagId), +})); + +export const deliverySlotInfo = mf.table('delivery_slot_info', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + deliveryTime: timestamp('delivery_time').notNull(), + 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(() => []), +}); + +export const vendorSnippets = mf.table('vendor_snippets', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + snippetCode: varchar('snippet_code', { length: 255 }).notNull().unique(), + slotId: integer('slot_id').references(() => deliverySlotInfo.id), + isPermanent: boolean('is_permanent').notNull().default(false), + productIds: integer('product_ids').array().notNull(), + validTill: timestamp('valid_till'), + createdAt: timestamp('created_at').notNull().defaultNow(), +}); + +export const vendorSnippetsRelations = relations(vendorSnippets, ({ one }) => ({ + slot: one(deliverySlotInfo, { fields: [vendorSnippets.slotId], references: [deliverySlotInfo.id] }), +})); + +export const productSlots = mf.table('product_slots', { + productId: integer('product_id').notNull().references(() => productInfo.id), + slotId: integer('slot_id').notNull().references(() => deliverySlotInfo.id), +}, (t) => ({ + pk: unique('product_slot_pk').on(t.productId, t.slotId), +})); + +export const specialDeals = mf.table('special_deals', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + productId: integer('product_id').notNull().references(() => productInfo.id), + quantity: numeric({ precision: 10, scale: 2 }).notNull(), + price: numeric({ precision: 10, scale: 2 }).notNull(), + validTill: timestamp('valid_till').notNull(), +}); + +export const orders = mf.table('orders', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + userId: integer('user_id').notNull().references(() => users.id), + addressId: integer('address_id').notNull().references(() => addresses.id), + slotId: integer('slot_id').references(() => deliverySlotInfo.id), + isCod: boolean('is_cod').notNull().default(false), + isOnlinePayment: boolean('is_online_payment').notNull().default(false), + paymentInfoId: integer('payment_info_id').references(() => paymentInfoTable.id), + totalAmount: numeric('total_amount', { precision: 10, scale: 2 }).notNull(), + deliveryCharge: numeric('delivery_charge', { precision: 10, scale: 2 }).notNull().default('0'), + readableId: integer('readable_id').notNull(), + adminNotes: text('admin_notes'), + userNotes: text('user_notes'), + orderGroupId: varchar('order_group_id', { length: 255 }), + orderGroupProportion: decimal('order_group_proportion', { precision: 10, scale: 4 }), + isFlashDelivery: boolean('is_flash_delivery').notNull().default(false), + createdAt: timestamp('created_at').notNull().defaultNow(), +}); + +export const orderItems = mf.table('order_items', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + orderId: integer('order_id').notNull().references(() => orders.id), + productId: integer('product_id').notNull().references(() => productInfo.id), + quantity: varchar('quantity', { length: 50 }).notNull(), + price: numeric({ precision: 10, scale: 2 }).notNull(), + discountedPrice: numeric('discounted_price', { precision: 10, scale: 2 }), + is_packaged: boolean('is_packaged').notNull().default(false), + is_package_verified: boolean('is_package_verified').notNull().default(false), +}); + +export const paymentStatusEnum = pgEnum('payment_status', ['pending', 'success', 'cod', 'failed']); + +export const orderStatus = mf.table('order_status', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + orderTime: timestamp('order_time').notNull().defaultNow(), + userId: integer('user_id').notNull().references(() => users.id), + orderId: integer('order_id').notNull().references(() => orders.id), + isPackaged: boolean('is_packaged').notNull().default(false), + isDelivered: boolean('is_delivered').notNull().default(false), + isCancelled: boolean('is_cancelled').notNull().default(false), + cancelReason: varchar('cancel_reason', { length: 255 }), + isCancelledByAdmin: boolean('is_cancelled_by_admin'), + paymentStatus: paymentStatusEnum('payment_state').notNull().default('pending'), + cancellationUserNotes: text('cancellation_user_notes'), + cancellationAdminNotes: text('cancellation_admin_notes'), + cancellationReviewed: boolean('cancellation_reviewed').notNull().default(false), + cancellationReviewedAt: timestamp('cancellation_reviewed_at'), + refundCouponId: integer('refund_coupon_id').references(() => coupons.id), +}); + +export const paymentInfoTable = mf.table('payment_info', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + status: varchar({ length: 50 }).notNull(), + gateway: varchar({ length: 50 }).notNull(), + orderId: varchar('order_id', { length: 500 }), + token: varchar({ length: 500 }), + merchantOrderId: varchar('merchant_order_id', { length: 255 }).notNull().unique(), + payload: jsonb('payload'), +}); + +export const payments = mf.table('payments', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + status: varchar({ length: 50 }).notNull(), + gateway: varchar({ length: 50 }).notNull(), + orderId: integer('order_id').notNull().references(() => orders.id), + token: varchar({ length: 500 }), + merchantOrderId: varchar('merchant_order_id', { length: 255 }).notNull().unique(), + payload: jsonb('payload'), +}); + +export const refunds = mf.table('refunds', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + orderId: integer('order_id').notNull().references(() => orders.id), + refundAmount: numeric('refund_amount', { precision: 10, scale: 2 }), + refundStatus: varchar('refund_status', { length: 50 }).default('none'), + merchantRefundId: varchar('merchant_refund_id', { length: 255 }), + refundProcessedAt: timestamp('refund_processed_at'), + createdAt: timestamp('created_at').notNull().defaultNow(), +}); + +export const keyValStore = mf.table('key_val_store', { + key: varchar('key', { length: 255 }).primaryKey(), + value: jsonb('value'), +}); + +export const notifications = mf.table('notifications', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + userId: integer('user_id').notNull().references(() => users.id), + title: varchar({ length: 255 }).notNull(), + body: varchar({ length: 512 }).notNull(), + type: varchar({ length: 50 }), + isRead: boolean('is_read').notNull().default(false), + createdAt: timestamp('created_at').notNull().defaultNow(), +}); + +export const productCategories = mf.table('product_categories', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + name: varchar({ length: 255 }).notNull(), + description: varchar({ length: 500 }), +}); + +export const cartItems = mf.table('cart_items', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + userId: integer('user_id').notNull().references(() => users.id), + productId: integer('product_id').notNull().references(() => productInfo.id), + quantity: numeric({ precision: 10, scale: 2 }).notNull(), + addedAt: timestamp('added_at').notNull().defaultNow(), +}, (t) => ({ + unq_user_product: unique('unique_user_product').on(t.userId, t.productId), +})); + +export const complaints = mf.table('complaints', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + userId: integer('user_id').notNull().references(() => users.id), + orderId: integer('order_id').references(() => orders.id), + complaintBody: varchar('complaint_body', { length: 1000 }).notNull(), + images: jsonb('images'), + response: varchar('response', { length: 1000 }), + isResolved: boolean('is_resolved').notNull().default(false), + createdAt: timestamp('created_at').notNull().defaultNow(), +}); + +export const coupons = mf.table('coupons', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + couponCode: varchar('coupon_code', { length: 50 }).notNull().unique('unique_coupon_code'), + isUserBased: boolean('is_user_based').notNull().default(false), + discountPercent: numeric('discount_percent', { precision: 5, scale: 2 }), + flatDiscount: numeric('flat_discount', { precision: 10, scale: 2 }), + minOrder: numeric('min_order', { precision: 10, scale: 2 }), + productIds: jsonb('product_ids'), + createdBy: integer('created_by').references(() => staffUsers.id), + maxValue: numeric('max_value', { precision: 10, scale: 2 }), + isApplyForAll: boolean('is_apply_for_all').notNull().default(false), + validTill: timestamp('valid_till'), + maxLimitForUser: integer('max_limit_for_user'), + isInvalidated: boolean('is_invalidated').notNull().default(false), + exclusiveApply: boolean('exclusive_apply').notNull().default(false), + createdAt: timestamp('created_at').notNull().defaultNow(), +}); + +export const couponUsage = mf.table('coupon_usage', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + userId: integer('user_id').notNull().references(() => users.id), + couponId: integer('coupon_id').notNull().references(() => coupons.id), + orderId: integer('order_id').references(() => orders.id), + orderItemId: integer('order_item_id').references(() => orderItems.id), + usedAt: timestamp('used_at').notNull().defaultNow(), +}); + +export const couponApplicableUsers = mf.table('coupon_applicable_users', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + couponId: integer('coupon_id').notNull().references(() => coupons.id), + userId: integer('user_id').notNull().references(() => users.id), +}, (t) => ({ + unq_coupon_user: unique('unique_coupon_user').on(t.couponId, t.userId), +})); + +export const couponApplicableProducts = mf.table('coupon_applicable_products', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + couponId: integer('coupon_id').notNull().references(() => coupons.id), + productId: integer('product_id').notNull().references(() => productInfo.id), +}, (t) => ({ + unq_coupon_product: unique('unique_coupon_product').on(t.couponId, t.productId), +})); + +export const userIncidents = mf.table('user_incidents', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + userId: integer('user_id').notNull().references(() => users.id), + orderId: integer('order_id').references(() => orders.id), + dateAdded: timestamp('date_added').notNull().defaultNow(), + adminComment: text('admin_comment'), + addedBy: integer('added_by').references(() => staffUsers.id), + negativityScore: integer('negativity_score'), +}); + +export const reservedCoupons = mf.table('reserved_coupons', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + secretCode: varchar('secret_code', { length: 50 }).notNull().unique(), + couponCode: varchar('coupon_code', { length: 50 }).notNull(), + discountPercent: numeric('discount_percent', { precision: 5, scale: 2 }), + flatDiscount: numeric('flat_discount', { precision: 10, scale: 2 }), + minOrder: numeric('min_order', { precision: 10, scale: 2 }), + productIds: jsonb('product_ids'), + maxValue: numeric('max_value', { precision: 10, scale: 2 }), + validTill: timestamp('valid_till'), + maxLimitForUser: integer('max_limit_for_user'), + exclusiveApply: boolean('exclusive_apply').notNull().default(false), + isRedeemed: boolean('is_redeemed').notNull().default(false), + redeemedBy: integer('redeemed_by').references(() => users.id), + redeemedAt: timestamp('redeemed_at'), + createdBy: integer('created_by').notNull().references(() => staffUsers.id), + createdAt: timestamp('created_at').notNull().defaultNow(), +}, (t) => ({ + unq_secret_code: unique('unique_secret_code').on(t.secretCode), +})); + +export const notifCreds = mf.table('notif_creds', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + token: varchar({ length: 500 }).notNull().unique(), + addedAt: timestamp('added_at').notNull().defaultNow(), + userId: integer('user_id').notNull().references(() => users.id), + lastVerified: timestamp('last_verified'), +}); + +export const unloggedUserTokens = mf.table('unlogged_user_tokens', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + token: varchar({ length: 500 }).notNull().unique(), + addedAt: timestamp('added_at').notNull().defaultNow(), + lastVerified: timestamp('last_verified'), +}); + +export const userNotifications = mf.table('user_notifications', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + title: varchar('title', { length: 255 }).notNull(), + imageUrl: varchar('image_url', { length: 500 }), + createdAt: timestamp('created_at').notNull().defaultNow(), + body: text('body').notNull(), + applicableUsers: jsonb('applicable_users'), +}); + +export const staffRoles = mf.table('staff_roles', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + roleName: staffRoleEnum('role_name').notNull(), + createdAt: timestamp('created_at').notNull().defaultNow(), +}, (t) => ({ + unq_role_name: unique('unique_role_name').on(t.roleName), +})); + +export const staffPermissions = mf.table('staff_permissions', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + permissionName: staffPermissionEnum('permission_name').notNull(), + createdAt: timestamp('created_at').notNull().defaultNow(), +}, (t) => ({ + unq_permission_name: unique('unique_permission_name').on(t.permissionName), +})); + +export const staffRolePermissions = mf.table('staff_role_permissions', { + id: integer().primaryKey().generatedAlwaysAsIdentity(), + staffRoleId: integer('staff_role_id').notNull().references(() => staffRoles.id), + staffPermissionId: integer('staff_permission_id').notNull().references(() => staffPermissions.id), + createdAt: timestamp('created_at').notNull().defaultNow(), +}, (t) => ({ + unq_role_permission: unique('unique_role_permission').on(t.staffRoleId, t.staffPermissionId), +})); + +// Relations +export const usersRelations = relations(users, ({ many, one }) => ({ + addresses: many(addresses), + orders: many(orders), + notifications: many(notifications), + cartItems: many(cartItems), + userCreds: one(userCreds), + coupons: many(coupons), + couponUsages: many(couponUsage), + applicableCoupons: many(couponApplicableUsers), + userDetails: one(userDetails), + notifCreds: many(notifCreds), + userIncidents: many(userIncidents), +})); + +export const userCredsRelations = relations(userCreds, ({ one }) => ({ + user: one(users, { fields: [userCreds.userId], references: [users.id] }), +})); + +export const staffUsersRelations = relations(staffUsers, ({ one, many }) => ({ + role: one(staffRoles, { fields: [staffUsers.staffRoleId], references: [staffRoles.id] }), + coupons: many(coupons), + stores: many(storeInfo), +})); + +export const addressesRelations = relations(addresses, ({ one, many }) => ({ + user: one(users, { fields: [addresses.userId], references: [users.id] }), + orders: many(orders), + zone: one(addressZones, { fields: [addresses.zoneId], references: [addressZones.id] }), +})); + +export const unitsRelations = relations(units, ({ many }) => ({ + products: many(productInfo), +})); + +export const productInfoRelations = relations(productInfo, ({ one, many }) => ({ + unit: one(units, { fields: [productInfo.unitId], references: [units.id] }), + store: one(storeInfo, { fields: [productInfo.storeId], references: [storeInfo.id] }), + productSlots: many(productSlots), + specialDeals: many(specialDeals), + orderItems: many(orderItems), + cartItems: many(cartItems), + tags: many(productTags), + applicableCoupons: many(couponApplicableProducts), + reviews: many(productReviews), + groups: many(productGroupMembership), +})); + +export const productTagInfoRelations = relations(productTagInfo, ({ many }) => ({ + products: many(productTags), +})); + +export const productTagsRelations = relations(productTags, ({ one }) => ({ + product: one(productInfo, { fields: [productTags.productId], references: [productInfo.id] }), + tag: one(productTagInfo, { fields: [productTags.tagId], references: [productTagInfo.id] }), +})); + +export const deliverySlotInfoRelations = relations(deliverySlotInfo, ({ many }) => ({ + productSlots: many(productSlots), + orders: many(orders), + vendorSnippets: many(vendorSnippets), +})); + +export const productSlotsRelations = relations(productSlots, ({ one }) => ({ + product: one(productInfo, { fields: [productSlots.productId], references: [productInfo.id] }), + slot: one(deliverySlotInfo, { fields: [productSlots.slotId], references: [deliverySlotInfo.id] }), +})); + +export const specialDealsRelations = relations(specialDeals, ({ one }) => ({ + product: one(productInfo, { fields: [specialDeals.productId], references: [productInfo.id] }), +})); + +export const ordersRelations = relations(orders, ({ one, many }) => ({ + user: one(users, { fields: [orders.userId], references: [users.id] }), + address: one(addresses, { fields: [orders.addressId], references: [addresses.id] }), + slot: one(deliverySlotInfo, { fields: [orders.slotId], references: [deliverySlotInfo.id] }), + orderItems: many(orderItems), + payment: one(payments), + paymentInfo: one(paymentInfoTable, { fields: [orders.paymentInfoId], references: [paymentInfoTable.id] }), + orderStatus: many(orderStatus), + refunds: many(refunds), + couponUsages: many(couponUsage), + userIncidents: many(userIncidents), +})); + +export const orderItemsRelations = relations(orderItems, ({ one }) => ({ + order: one(orders, { fields: [orderItems.orderId], references: [orders.id] }), + product: one(productInfo, { fields: [orderItems.productId], references: [productInfo.id] }), +})); + +export const orderStatusRelations = relations(orderStatus, ({ one }) => ({ + order: one(orders, { fields: [orderStatus.orderId], references: [orders.id] }), + user: one(users, { fields: [orderStatus.userId], references: [users.id] }), + refundCoupon: one(coupons, { fields: [orderStatus.refundCouponId], references: [coupons.id] }), +})); + +export const paymentInfoRelations = relations(paymentInfoTable, ({ one }) => ({ + order: one(orders, { fields: [paymentInfoTable.id], references: [orders.paymentInfoId] }), +})); + +export const paymentsRelations = relations(payments, ({ one }) => ({ + order: one(orders, { fields: [payments.orderId], references: [orders.id] }), +})); + +export const refundsRelations = relations(refunds, ({ one }) => ({ + order: one(orders, { fields: [refunds.orderId], references: [orders.id] }), +})); + +export const notificationsRelations = relations(notifications, ({ one }) => ({ + user: one(users, { fields: [notifications.userId], references: [users.id] }), +})); + +export const productCategoriesRelations = relations(productCategories, ({}) => ({})); + +export const cartItemsRelations = relations(cartItems, ({ one }) => ({ + user: one(users, { fields: [cartItems.userId], references: [users.id] }), + product: one(productInfo, { fields: [cartItems.productId], references: [productInfo.id] }), +})); + +export const complaintsRelations = relations(complaints, ({ one }) => ({ + user: one(users, { fields: [complaints.userId], references: [users.id] }), + order: one(orders, { fields: [complaints.orderId], references: [orders.id] }), +})); + +export const couponsRelations = relations(coupons, ({ one, many }) => ({ + creator: one(staffUsers, { fields: [coupons.createdBy], references: [staffUsers.id] }), + usages: many(couponUsage), + applicableUsers: many(couponApplicableUsers), + applicableProducts: many(couponApplicableProducts), +})); + +export const couponUsageRelations = relations(couponUsage, ({ one }) => ({ + user: one(users, { fields: [couponUsage.userId], references: [users.id] }), + coupon: one(coupons, { fields: [couponUsage.couponId], references: [coupons.id] }), + order: one(orders, { fields: [couponUsage.orderId], references: [orders.id] }), + orderItem: one(orderItems, { fields: [couponUsage.orderItemId], references: [orderItems.id] }), +})); + +export const userDetailsRelations = relations(userDetails, ({ one }) => ({ + user: one(users, { fields: [userDetails.userId], references: [users.id] }), +})); + +export const notifCredsRelations = relations(notifCreds, ({ one }) => ({ + user: one(users, { fields: [notifCreds.userId], references: [users.id] }), +})); + +export const userNotificationsRelations = relations(userNotifications, ({}) => ({ + // No relations needed for now +})); + +export const storeInfoRelations = relations(storeInfo, ({ one, many }) => ({ + owner: one(staffUsers, { fields: [storeInfo.owner], references: [staffUsers.id] }), + products: many(productInfo), +})); + +export const couponApplicableUsersRelations = relations(couponApplicableUsers, ({ one }) => ({ + coupon: one(coupons, { fields: [couponApplicableUsers.couponId], references: [coupons.id] }), + user: one(users, { fields: [couponApplicableUsers.userId], references: [users.id] }), +})); + +export const couponApplicableProductsRelations = relations(couponApplicableProducts, ({ one }) => ({ + coupon: one(coupons, { fields: [couponApplicableProducts.couponId], references: [coupons.id] }), + product: one(productInfo, { fields: [couponApplicableProducts.productId], references: [productInfo.id] }), +})); + +export const reservedCouponsRelations = relations(reservedCoupons, ({ one }) => ({ + redeemedUser: one(users, { fields: [reservedCoupons.redeemedBy], references: [users.id] }), + creator: one(staffUsers, { fields: [reservedCoupons.createdBy], references: [staffUsers.id] }), +})); + +export const productReviewsRelations = relations(productReviews, ({ one }) => ({ + user: one(users, { fields: [productReviews.userId], references: [users.id] }), + product: one(productInfo, { fields: [productReviews.productId], references: [productInfo.id] }), +})); + +export const addressZonesRelations = relations(addressZones, ({ many }) => ({ + addresses: many(addresses), + areas: many(addressAreas), +})); + +export const addressAreasRelations = relations(addressAreas, ({ one }) => ({ + zone: one(addressZones, { fields: [addressAreas.zoneId], references: [addressZones.id] }), +})); + +export const productGroupInfoRelations = relations(productGroupInfo, ({ many }) => ({ + memberships: many(productGroupMembership), +})); + +export const productGroupMembershipRelations = relations(productGroupMembership, ({ one }) => ({ + product: one(productInfo, { fields: [productGroupMembership.productId], references: [productInfo.id] }), + group: one(productGroupInfo, { fields: [productGroupMembership.groupId], references: [productGroupInfo.id] }), +})); + +export const homeBannersRelations = relations(homeBanners, ({}) => ({ + // Relations for productIds array would be more complex, skipping for now +})); + +export const staffRolesRelations = relations(staffRoles, ({ many }) => ({ + staffUsers: many(staffUsers), + rolePermissions: many(staffRolePermissions), +})); + +export const staffPermissionsRelations = relations(staffPermissions, ({ many }) => ({ + rolePermissions: many(staffRolePermissions), +})); + +export const staffRolePermissionsRelations = relations(staffRolePermissions, ({ one }) => ({ + role: one(staffRoles, { fields: [staffRolePermissions.staffRoleId], references: [staffRoles.id] }), + permission: one(staffPermissions, { fields: [staffRolePermissions.staffPermissionId], references: [staffPermissions.id] }), +})); + +export const userIncidentsRelations = relations(userIncidents, ({ one }) => ({ + user: one(users, { fields: [userIncidents.userId], references: [users.id] }), + order: one(orders, { fields: [userIncidents.orderId], references: [orders.id] }), + addedBy: one(staffUsers, { fields: [userIncidents.addedBy], references: [staffUsers.id] }), +})); + +export const productAvailabilitySchedulesRelations = relations(productAvailabilitySchedules, ({}) => ({ +})); diff --git a/apps/db-helper-postgres/src/db/seed.ts b/apps/db-helper-postgres/src/db/seed.ts new file mode 100644 index 0000000..91578cb --- /dev/null +++ b/apps/db-helper-postgres/src/db/seed.ts @@ -0,0 +1,153 @@ +import { eq } from 'drizzle-orm' + +import { CONST_KEYS } from '../../../backend/src/lib/const-keys' +import { deliveryCharge, minOrderValue } from '../../../backend/src/lib/env-exporter' + +import { db } from './db_index' +import { keyValStore, staffPermissions, staffRolePermissions, staffRoles, units } from './schema' + +export async function seed() { + console.log('Seeding database...') + + const unitsToSeed = [ + { shortNotation: 'Kg', fullName: 'Kilogram' }, + { shortNotation: 'L', fullName: 'Litre' }, + { shortNotation: 'Dz', fullName: 'Dozen' }, + { shortNotation: 'Pc', fullName: 'Unit Piece' }, + ] + + for (const unit of unitsToSeed) { + const existingUnit = await db.query.units.findFirst({ + where: eq(units.shortNotation, unit.shortNotation), + }) + if (!existingUnit) { + await db.insert(units).values(unit) + } + } + + const rolesToSeed = ['super_admin', 'admin', 'marketer', 'delivery_staff'] as const + + for (const roleName of rolesToSeed) { + const existingRole = await db.query.staffRoles.findFirst({ + where: eq(staffRoles.roleName, roleName), + }) + if (!existingRole) { + await db.insert(staffRoles).values({ roleName }) + } + } + + const permissionsToSeed = ['crud_product', 'make_coupon', 'crud_staff_users'] as const + + for (const permissionName of permissionsToSeed) { + const existingPermission = await db.query.staffPermissions.findFirst({ + where: eq(staffPermissions.permissionName, permissionName), + }) + if (!existingPermission) { + await db.insert(staffPermissions).values({ permissionName }) + } + } + + await db.transaction(async (tx) => { + const superAdminRole = await tx.query.staffRoles.findFirst({ + where: eq(staffRoles.roleName, 'super_admin'), + }) + const adminRole = await tx.query.staffRoles.findFirst({ + where: eq(staffRoles.roleName, 'admin'), + }) + const marketerRole = await tx.query.staffRoles.findFirst({ + where: eq(staffRoles.roleName, 'marketer'), + }) + + const crudProductPerm = await tx.query.staffPermissions.findFirst({ + where: eq(staffPermissions.permissionName, 'crud_product'), + }) + const makeCouponPerm = await tx.query.staffPermissions.findFirst({ + where: eq(staffPermissions.permissionName, 'make_coupon'), + }) + const crudStaffUsersPerm = await tx.query.staffPermissions.findFirst({ + where: eq(staffPermissions.permissionName, 'crud_staff_users'), + }) + + await Promise.all( + [crudProductPerm, makeCouponPerm, crudStaffUsersPerm].map(async (perm) => { + if (!superAdminRole || !perm) { + return + } + + const existingSuperAdminPerm = await tx.query.staffRolePermissions.findFirst({ + where: eq(staffRolePermissions.staffRoleId, superAdminRole.id) + && eq(staffRolePermissions.staffPermissionId, perm.id), + }) + if (!existingSuperAdminPerm) { + await tx.insert(staffRolePermissions).values({ + staffRoleId: superAdminRole.id, + staffPermissionId: perm.id, + }) + } + }) + ) + + await Promise.all( + [crudProductPerm, makeCouponPerm].map(async (perm) => { + if (!adminRole || !perm) { + return + } + + const existingAdminPerm = await tx.query.staffRolePermissions.findFirst({ + where: eq(staffRolePermissions.staffRoleId, adminRole.id) + && eq(staffRolePermissions.staffPermissionId, perm.id), + }) + if (!existingAdminPerm) { + await tx.insert(staffRolePermissions).values({ + staffRoleId: adminRole.id, + staffPermissionId: perm.id, + }) + } + }) + ) + + if (marketerRole && makeCouponPerm) { + const existingMarketerCoupon = await tx.query.staffRolePermissions.findFirst({ + where: eq(staffRolePermissions.staffRoleId, marketerRole.id) + && eq(staffRolePermissions.staffPermissionId, makeCouponPerm.id), + }) + if (!existingMarketerCoupon) { + await tx.insert(staffRolePermissions).values({ + staffRoleId: marketerRole.id, + staffPermissionId: makeCouponPerm.id, + }) + } + } + }) + + const constantsToSeed = [ + { key: CONST_KEYS.readableOrderId, value: 0 }, + { key: CONST_KEYS.minRegularOrderValue, value: minOrderValue }, + { key: CONST_KEYS.freeDeliveryThreshold, value: minOrderValue }, + { key: CONST_KEYS.deliveryCharge, value: deliveryCharge }, + { key: CONST_KEYS.flashFreeDeliveryThreshold, value: 500 }, + { key: CONST_KEYS.flashDeliveryCharge, value: 69 }, + { key: CONST_KEYS.popularItems, value: [] }, + { key: CONST_KEYS.allItemsOrder, value: [] }, + { key: CONST_KEYS.versionNum, value: '1.1.0' }, + { key: CONST_KEYS.playStoreUrl, value: 'https://play.google.com/store/apps/details?id=in.freshyo.app' }, + { key: CONST_KEYS.appStoreUrl, value: 'https://apps.apple.com/in/app/freshyo/id6756889077' }, + { key: CONST_KEYS.isFlashDeliveryEnabled, value: false }, + { key: CONST_KEYS.supportMobile, value: '8688182552' }, + { key: CONST_KEYS.supportEmail, value: 'qushammohd@gmail.com' }, + ] + + for (const constant of constantsToSeed) { + const existing = await db.query.keyValStore.findFirst({ + where: eq(keyValStore.key, constant.key), + }) + if (!existing) { + await db.insert(keyValStore).values({ + key: constant.key, + value: constant.value, + }) + } + } + + console.log('Seeding completed.') +} diff --git a/apps/db-helper-postgres/src/db/types.ts b/apps/db-helper-postgres/src/db/types.ts new file mode 100644 index 0000000..902b5c0 --- /dev/null +++ b/apps/db-helper-postgres/src/db/types.ts @@ -0,0 +1,47 @@ +import type { InferSelectModel } from 'drizzle-orm' + +import type { + users, + addresses, + units, + productInfo, + deliverySlotInfo, + productSlots, + specialDeals, + orders, + orderItems, + payments, + notifications, + productCategories, + cartItems, + coupons, +} from './schema' + +export type User = InferSelectModel +export type Address = InferSelectModel +export type Unit = InferSelectModel +export type ProductInfo = InferSelectModel +export type DeliverySlotInfo = InferSelectModel +export type ProductSlot = InferSelectModel +export type SpecialDeal = InferSelectModel +export type Order = InferSelectModel +export type OrderItem = InferSelectModel +export type Payment = InferSelectModel +export type Notification = InferSelectModel +export type ProductCategory = InferSelectModel +export type CartItem = InferSelectModel +export type Coupon = InferSelectModel + +export type ProductWithUnit = ProductInfo & { + unit: Unit +} + +export type OrderWithItems = Order & { + items: (OrderItem & { product: ProductInfo })[] + address: Address + slot: DeliverySlotInfo +} + +export type CartItemWithProduct = CartItem & { + product: ProductInfo +} diff --git a/apps/backend/src/lib/automatedJobs.ts b/apps/db-helper-postgres/src/lib/automatedJobs.ts similarity index 96% rename from apps/backend/src/lib/automatedJobs.ts rename to apps/db-helper-postgres/src/lib/automatedJobs.ts index 12ce354..c2cee0d 100644 --- a/apps/backend/src/lib/automatedJobs.ts +++ b/apps/db-helper-postgres/src/lib/automatedJobs.ts @@ -1,6 +1,6 @@ import * as cron from 'node-cron'; -import { db } from '@/src/db/db_index' -import { productInfo, productAvailabilitySchedules } from '@/src/db/schema' +import { db } from '../db/db_index' +import { productInfo, productAvailabilitySchedules } from '../db/schema' import { inArray } from 'drizzle-orm'; import { initializeAllStores } from '../stores/store-initializer'; diff --git a/apps/backend/src/lib/cloud_cache.ts b/apps/db-helper-postgres/src/lib/cloud_cache.ts similarity index 99% rename from apps/backend/src/lib/cloud_cache.ts rename to apps/db-helper-postgres/src/lib/cloud_cache.ts index 1db648d..ea0215a 100644 --- a/apps/backend/src/lib/cloud_cache.ts +++ b/apps/db-helper-postgres/src/lib/cloud_cache.ts @@ -5,8 +5,8 @@ import { scaffoldStores } from '@/src/trpc/apis/user-apis/apis/stores' import { scaffoldSlotsWithProducts } from '@/src/trpc/apis/user-apis/apis/slots' import { scaffoldBanners } from '@/src/trpc/apis/user-apis/apis/banners' import { scaffoldStoreWithProducts } from '@/src/trpc/apis/user-apis/apis/stores' -import { storeInfo } from '@/src/db/schema' -import { db } from '@/src/db/db_index' +import { storeInfo } from '../db/schema' +import { db } from '../db/db_index' import { imageUploadS3 } from '@/src/lib/s3-client' import { apiCacheKey, cloudflareApiToken, cloudflareZoneId, assetsDomain } from '@/src/lib/env-exporter' import { CACHE_FILENAMES } from '@packages/shared' diff --git a/apps/backend/src/lib/const-store.ts b/apps/db-helper-postgres/src/lib/const-store.ts similarity index 95% rename from apps/backend/src/lib/const-store.ts rename to apps/db-helper-postgres/src/lib/const-store.ts index c16609e..25d1142 100644 --- a/apps/backend/src/lib/const-store.ts +++ b/apps/db-helper-postgres/src/lib/const-store.ts @@ -1,5 +1,5 @@ -import { db } from '@/src/db/db_index' -import { keyValStore } from '@/src/db/schema' +import { db } from '../db/db_index' +import { keyValStore } from '../db/schema' import redisClient from '@/src/lib/redis-client' import { CONST_KEYS, CONST_KEYS_ARRAY, type ConstKey } from '@/src/lib/const-keys' diff --git a/apps/backend/src/lib/delete-orders.ts b/apps/db-helper-postgres/src/lib/delete-orders.ts similarity index 94% rename from apps/backend/src/lib/delete-orders.ts rename to apps/db-helper-postgres/src/lib/delete-orders.ts index 4fb9516..4321bb9 100644 --- a/apps/backend/src/lib/delete-orders.ts +++ b/apps/db-helper-postgres/src/lib/delete-orders.ts @@ -1,5 +1,5 @@ -import { db } from '@/src/db/db_index' -import { orders, orderItems, orderStatus, payments, refunds, couponUsage, complaints } from '@/src/db/schema' +import { db } from '../db/db_index' +import { orders, orderItems, orderStatus, payments, refunds, couponUsage, complaints } from '../db/schema' import { eq, inArray } from 'drizzle-orm'; /** diff --git a/apps/backend/src/lib/manage-scheduled-availability.ts b/apps/db-helper-postgres/src/lib/manage-scheduled-availability.ts similarity index 97% rename from apps/backend/src/lib/manage-scheduled-availability.ts rename to apps/db-helper-postgres/src/lib/manage-scheduled-availability.ts index 95c3815..ce4779b 100644 --- a/apps/backend/src/lib/manage-scheduled-availability.ts +++ b/apps/db-helper-postgres/src/lib/manage-scheduled-availability.ts @@ -1,5 +1,5 @@ -import { db } from '@/src/db/db_index' -import { productInfo, productAvailabilitySchedules } from '@/src/db/schema' +import { db } from '../db/db_index' +import { productInfo, productAvailabilitySchedules } from '../db/schema' import { eq, inArray } from 'drizzle-orm'; import { initializeAllStores } from '@/src/stores/store-initializer'; import dayjs from 'dayjs'; diff --git a/apps/backend/src/lib/notif-job.ts b/apps/db-helper-postgres/src/lib/notif-job.ts similarity index 99% rename from apps/backend/src/lib/notif-job.ts rename to apps/db-helper-postgres/src/lib/notif-job.ts index c0c18f9..489e696 100644 --- a/apps/backend/src/lib/notif-job.ts +++ b/apps/db-helper-postgres/src/lib/notif-job.ts @@ -1,7 +1,7 @@ import { Queue, Worker } from 'bullmq'; import { Expo } from 'expo-server-sdk'; import { redisUrl } from '@/src/lib/env-exporter' -import { db } from '@/src/db/db_index' +import { db } from '../db/db_index' import { generateSignedUrlFromS3Url } from '@/src/lib/s3-client' import { NOTIFS_QUEUE, diff --git a/apps/backend/src/lib/post-order-handler.ts b/apps/db-helper-postgres/src/lib/post-order-handler.ts similarity index 98% rename from apps/backend/src/lib/post-order-handler.ts rename to apps/db-helper-postgres/src/lib/post-order-handler.ts index f29f940..2245bbb 100644 --- a/apps/backend/src/lib/post-order-handler.ts +++ b/apps/db-helper-postgres/src/lib/post-order-handler.ts @@ -1,5 +1,5 @@ -import { db } from '@/src/db/db_index' -import { orders, orderStatus } from '@/src/db/schema' +import { db } from '../db/db_index' +import { orders, orderStatus } from '../db/schema' import redisClient from '@/src/lib/redis-client' import { sendTelegramMessage } from '@/src/lib/telegram-service' import { inArray, eq } from 'drizzle-orm'; diff --git a/apps/db-helper-postgres/src/lib/upload-url.ts b/apps/db-helper-postgres/src/lib/upload-url.ts new file mode 100644 index 0000000..9f263c9 --- /dev/null +++ b/apps/db-helper-postgres/src/lib/upload-url.ts @@ -0,0 +1,23 @@ +import { and, eq } from 'drizzle-orm' + +import { db } from '../db/db_index' +import { uploadUrlStatus } from '../db/schema' + +export const createUploadUrlStatus = async (key: string): Promise => { + await db.insert(uploadUrlStatus).values({ + key, + status: 'pending', + }) +} + +export const claimUploadUrlStatus = async (key: string): Promise => { + const result = await db + .update(uploadUrlStatus) + .set({ status: 'claimed' }) + .where(and(eq(uploadUrlStatus.key, key), eq(uploadUrlStatus.status, 'pending'))) + .returning() + + if (result.length === 0) { + throw new Error('Upload URL not found or already claimed') + } +} diff --git a/apps/backend/src/middleware/auth.middleware.ts b/apps/db-helper-postgres/src/middleware/auth.middleware.ts similarity index 95% rename from apps/backend/src/middleware/auth.middleware.ts rename to apps/db-helper-postgres/src/middleware/auth.middleware.ts index 439dd9e..f0ec185 100644 --- a/apps/backend/src/middleware/auth.middleware.ts +++ b/apps/db-helper-postgres/src/middleware/auth.middleware.ts @@ -1,6 +1,6 @@ import { createMiddleware } from 'hono/factory' -import { db } from '@/src/db/db_index' -import { staffUsers, userDetails } from '@/src/db/schema' +import { db } from '../db/db_index' +import { staffUsers, userDetails } from '../db/schema' import { eq } from 'drizzle-orm' import { ApiError } from '@/src/lib/api-error' import { verifyToken, UserJWTPayload, StaffJWTPayload } from '@/src/lib/jwt-utils' diff --git a/apps/backend/src/middleware/staff-auth.ts b/apps/db-helper-postgres/src/middleware/staff-auth.ts similarity index 95% rename from apps/backend/src/middleware/staff-auth.ts rename to apps/db-helper-postgres/src/middleware/staff-auth.ts index e2197e7..5a76e5c 100644 --- a/apps/backend/src/middleware/staff-auth.ts +++ b/apps/db-helper-postgres/src/middleware/staff-auth.ts @@ -1,6 +1,6 @@ import { createMiddleware } from 'hono/factory' -import { db } from '@/src/db/db_index' -import { staffUsers } from '@/src/db/schema' +import { db } from '../db/db_index' +import { staffUsers } from '../db/schema' import { eq } from 'drizzle-orm'; import { ApiError } from '@/src/lib/api-error' import { verifyToken, StaffJWTPayload } from '@/src/lib/jwt-utils' diff --git a/apps/backend/src/services/user/product-service.ts b/apps/db-helper-postgres/src/services/user/product-service.ts similarity index 93% rename from apps/backend/src/services/user/product-service.ts rename to apps/db-helper-postgres/src/services/user/product-service.ts index 0f214d9..01040e0 100644 --- a/apps/backend/src/services/user/product-service.ts +++ b/apps/db-helper-postgres/src/services/user/product-service.ts @@ -1,5 +1,5 @@ -import { db } from '@/src/db/db_index' -import { productInfo, units, productSlots, deliverySlotInfo, specialDeals, storeInfo, productReviews, users } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { productInfo, units, productSlots, deliverySlotInfo, specialDeals, storeInfo, productReviews, users } from '../../db/schema' import { eq, and, gt, sql, desc } from 'drizzle-orm' /** @@ -55,8 +55,8 @@ export async function getProductDeliverySlots(productId: number) { and( eq(productSlots.productId, productId), eq(deliverySlotInfo.isActive, true), - gt(deliverySlotInfo.deliveryTime, sql`NOW()`), - gt(deliverySlotInfo.freezeTime, sql`NOW()`) + gt(deliverySlotInfo.deliveryTime, new Date()), + gt(deliverySlotInfo.freezeTime, new Date()) ) ) .orderBy(deliverySlotInfo.deliveryTime) @@ -76,7 +76,7 @@ export async function getProductSpecialDeals(productId: number) { .where( and( eq(specialDeals.productId, productId), - gt(specialDeals.validTill, sql`NOW()`) + gt(specialDeals.validTill, new Date()) ) ) .orderBy(specialDeals.quantity) diff --git a/apps/backend/src/stores/banner-store.ts b/apps/db-helper-postgres/src/stores/banner-store.ts similarity index 96% rename from apps/backend/src/stores/banner-store.ts rename to apps/db-helper-postgres/src/stores/banner-store.ts index 7fbd6f1..a9b79c6 100644 --- a/apps/backend/src/stores/banner-store.ts +++ b/apps/db-helper-postgres/src/stores/banner-store.ts @@ -1,7 +1,7 @@ // import redisClient from '@/src/stores/redis-client'; import redisClient from '@/src/lib/redis-client'; -import { db } from '@/src/db/db_index' -import { homeBanners } from '@/src/db/schema' +import { db } from '../db/db_index' +import { homeBanners } from '../db/schema' import { isNotNull, asc } from 'drizzle-orm'; import { scaffoldAssetUrl } from '@/src/lib/s3-client'; diff --git a/apps/backend/src/stores/product-store.ts b/apps/db-helper-postgres/src/stores/product-store.ts similarity index 96% rename from apps/backend/src/stores/product-store.ts rename to apps/db-helper-postgres/src/stores/product-store.ts index d4cf3a2..beed758 100644 --- a/apps/backend/src/stores/product-store.ts +++ b/apps/db-helper-postgres/src/stores/product-store.ts @@ -1,7 +1,7 @@ // import redisClient from '@/src/stores/redis-client'; import redisClient from '@/src/lib/redis-client'; -import { db } from '@/src/db/db_index' -import { productInfo, units, productSlots, deliverySlotInfo, specialDeals, storeInfo, productTags, productTagInfo } from '@/src/db/schema' +import { db } from '../db/db_index' +import { productInfo, units, productSlots, deliverySlotInfo, specialDeals, storeInfo, productTags, productTagInfo } from '../db/schema' import { eq, and, gt, sql } from 'drizzle-orm'; import { generateSignedUrlsFromS3Urls, scaffoldAssetUrl } from '@/src/lib/s3-client'; @@ -72,7 +72,7 @@ export async function initializeProducts(): Promise { and( eq(deliverySlotInfo.isActive, true), eq(deliverySlotInfo.isCapacityFull, false), - gt(deliverySlotInfo.deliveryTime, sql`NOW()`) + gt(deliverySlotInfo.deliveryTime, new Date()) ) ); const deliverySlotsMap = new Map(); @@ -90,7 +90,7 @@ export async function initializeProducts(): Promise { validTill: specialDeals.validTill, }) .from(specialDeals) - .where(gt(specialDeals.validTill, sql`NOW()`)); + .where(gt(specialDeals.validTill, new Date())); const specialDealsMap = new Map(); for (const deal of allSpecialDeals) { if (!specialDealsMap.has(deal.productId)) specialDealsMap.set(deal.productId, []); diff --git a/apps/backend/src/stores/product-tag-store.ts b/apps/db-helper-postgres/src/stores/product-tag-store.ts similarity index 97% rename from apps/backend/src/stores/product-tag-store.ts rename to apps/db-helper-postgres/src/stores/product-tag-store.ts index f6a3175..58a4999 100644 --- a/apps/backend/src/stores/product-tag-store.ts +++ b/apps/db-helper-postgres/src/stores/product-tag-store.ts @@ -1,7 +1,7 @@ // import redisClient from '@/src/stores/redis-client'; import redisClient from '@/src/lib/redis-client'; -import { db } from '@/src/db/db_index' -import { productTagInfo, productTags } from '@/src/db/schema' +import { db } from '../db/db_index' +import { productTagInfo, productTags } from '../db/schema' import { eq, inArray } from 'drizzle-orm'; import { generateSignedUrlFromS3Url } from '@/src/lib/s3-client'; diff --git a/apps/backend/src/stores/slot-store.ts b/apps/db-helper-postgres/src/stores/slot-store.ts similarity index 99% rename from apps/backend/src/stores/slot-store.ts rename to apps/db-helper-postgres/src/stores/slot-store.ts index 3a3ed68..1c29998 100644 --- a/apps/backend/src/stores/slot-store.ts +++ b/apps/db-helper-postgres/src/stores/slot-store.ts @@ -1,6 +1,6 @@ import redisClient from '@/src/lib/redis-client'; -import { db } from '@/src/db/db_index' -import { deliverySlotInfo, productSlots, productInfo, units } from '@/src/db/schema' +import { db } from '../db/db_index' +import { deliverySlotInfo, productSlots, productInfo, units } from '../db/schema' import { eq, and, gt, asc } from 'drizzle-orm'; import { generateSignedUrlsFromS3Urls, scaffoldAssetUrl } from '@/src/lib/s3-client'; import dayjs from 'dayjs'; diff --git a/apps/backend/src/stores/user-negativity-store.ts b/apps/db-helper-postgres/src/stores/user-negativity-store.ts similarity index 97% rename from apps/backend/src/stores/user-negativity-store.ts rename to apps/db-helper-postgres/src/stores/user-negativity-store.ts index d518435..56db6d8 100644 --- a/apps/backend/src/stores/user-negativity-store.ts +++ b/apps/db-helper-postgres/src/stores/user-negativity-store.ts @@ -1,6 +1,6 @@ import redisClient from '@/src/lib/redis-client'; -import { db } from '@/src/db/db_index' -import { userIncidents } from '@/src/db/schema' +import { db } from '../db/db_index' +import { userIncidents } from '../db/schema' import { eq, sum } from 'drizzle-orm'; export async function initializeUserNegativityStore(): Promise { diff --git a/apps/backend/src/trpc/apis/common-apis/common-trpc-index.ts b/apps/db-helper-postgres/src/trpc/apis/common-apis/common-trpc-index.ts similarity index 97% rename from apps/backend/src/trpc/apis/common-apis/common-trpc-index.ts rename to apps/db-helper-postgres/src/trpc/apis/common-apis/common-trpc-index.ts index b45764c..783b0e6 100644 --- a/apps/backend/src/trpc/apis/common-apis/common-trpc-index.ts +++ b/apps/db-helper-postgres/src/trpc/apis/common-apis/common-trpc-index.ts @@ -1,7 +1,7 @@ import { router, publicProcedure, protectedProcedure } from '@/src/trpc/trpc-index' import { commonRouter } from '@/src/trpc/apis/common-apis/common' -import { db } from '@/src/db/db_index' -import { keyValStore, productInfo, storeInfo } from '@/src/db/schema' +import { db } from '../../../db/db_index' +import { keyValStore, productInfo, storeInfo } from '../../../db/schema' import * as turf from '@turf/turf'; import { z } from 'zod'; import { mbnrGeoJson } from '@/src/lib/mbnr-geojson' diff --git a/apps/backend/src/trpc/apis/common-apis/common.ts b/apps/db-helper-postgres/src/trpc/apis/common-apis/common.ts similarity index 96% rename from apps/backend/src/trpc/apis/common-apis/common.ts rename to apps/db-helper-postgres/src/trpc/apis/common-apis/common.ts index 2896035..7a2f355 100644 --- a/apps/backend/src/trpc/apis/common-apis/common.ts +++ b/apps/db-helper-postgres/src/trpc/apis/common-apis/common.ts @@ -1,6 +1,6 @@ import { router, publicProcedure } from '@/src/trpc/trpc-index' -import { db } from '@/src/db/db_index' -import { productInfo, units, productSlots, deliverySlotInfo, storeInfo } from '@/src/db/schema' +import { db } from '../../../db/db_index' +import { productInfo, units, productSlots, deliverySlotInfo, storeInfo } from '../../../db/schema' import { eq, gt, and, sql, inArray } from 'drizzle-orm'; import { generateSignedUrlsFromS3Urls, generateSignedUrlFromS3Url } from '@/src/lib/s3-client' import { getAllProducts as getAllProductsFromCache } from '@/src/stores/product-store' @@ -16,7 +16,7 @@ export const getNextDeliveryDate = async (productId: number): Promise { + if (!images) { + return [] + } + + try { + const parsed = JSON.parse(images) + if (Array.isArray(parsed)) { + return parsed.filter((value) => typeof value === 'string') + } + } catch (error) { + console.error('Failed to parse product images', error) + } + + return [] +} + +const getNextDeliveryDate = async (productId: number): Promise => { + const result = await db + .select({ deliveryTime: deliverySlotInfo.deliveryTime }) + .from(productSlots) + .innerJoin(deliverySlotInfo, eq(productSlots.slotId, deliverySlotInfo.id)) + .where( + and( + eq(productSlots.productId, productId), + eq(deliverySlotInfo.isActive, true), + gt(deliverySlotInfo.deliveryTime, new Date()) + ) + ) + .orderBy(deliverySlotInfo.deliveryTime) + .limit(1) + + return result[0]?.deliveryTime || null +} + +export const getProductsSummaryData = async (tagId?: number | null): Promise => { + let productIds: number[] | null = null + + if (tagId) { + const taggedProducts = await db + .select({ productId: productTags.productId }) + .from(productTags) + .where(eq(productTags.tagId, tagId)) + + productIds = taggedProducts.map((taggedProduct) => taggedProduct.productId) + + if (productIds.length === 0) { + return [] + } + } + + const whereCondition = productIds && productIds.length > 0 + ? inArray(productInfo.id, productIds) + : undefined + + const productsWithUnits = await db + .select({ + id: productInfo.id, + name: productInfo.name, + shortDescription: productInfo.shortDescription, + price: productInfo.price, + marketPrice: productInfo.marketPrice, + images: productInfo.images, + isOutOfStock: productInfo.isOutOfStock, + unitShortNotation: units.shortNotation, + productQuantity: productInfo.productQuantity, + }) + .from(productInfo) + .innerJoin(units, eq(productInfo.unitId, units.id)) + .where(whereCondition) + + const productsWithDelivery = await Promise.all( + productsWithUnits.map(async (product) => { + const nextDeliveryDate = await getNextDeliveryDate(product.id) + return { + ...product, + images: normalizeImages(product.images), + nextDeliveryDate, + } + }) + ) + + return productsWithDelivery +} diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/banner-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/banner-queries.ts similarity index 81% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/banner-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/admin-apis/banner-queries.ts index 9b62365..6105745 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/banner-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/banner-queries.ts @@ -1,8 +1,8 @@ -import { db } from '@/src/db/db_index_sqlite' -import { homeBanners } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { homeBanners } from '../../db/schema' import { eq, desc } from 'drizzle-orm' -import { IBannerDbService, Banner, NewBanner } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/banner-db-service.interface' -import { toJsonString } from '@/src/db/sqlite-casts' +import { IBannerDbService, Banner, NewBanner } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/banner-db-service.interface' +import { toJsonString } from '../../db/sqlite-casts' export class BannerDbService implements IBannerDbService { async getAllBanners(): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/complaint-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/complaint-queries.ts similarity index 83% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/complaint-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/admin-apis/complaint-queries.ts index 79376aa..f5b9fff 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/complaint-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/complaint-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index' -import { complaints, users } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { complaints, users } from '../../db/schema' import { eq, desc, lt } from 'drizzle-orm' -import { IComplaintDbService, Complaint, NewComplaint } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/complaint-db-service.interface' +import { IComplaintDbService, Complaint, NewComplaint } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/complaint-db-service.interface' export class ComplaintDbService implements IComplaintDbService { async getComplaints( diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/constant-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/constant-queries.ts similarity index 70% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/constant-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/admin-apis/constant-queries.ts index d12a84b..d665265 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/constant-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/constant-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index_sqlite' -import { keyValStore } from '@/src/db/schema' -import { IConstantDbService, Constant, NewConstant } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/constant-db-service.interface' -import { toJsonString } from '@/src/db/sqlite-casts' +import { db } from '../../db/db_index' +import { keyValStore } from '../../db/schema' +import { IConstantDbService, Constant, NewConstant } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/constant-db-service.interface' +import { toJsonString } from '../../db/sqlite-casts' export class ConstantDbService implements IConstantDbService { async getAllConstants(): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/coupon-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/coupon-queries.ts similarity index 95% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/coupon-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/admin-apis/coupon-queries.ts index 60d8d44..6f148f6 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/coupon-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/coupon-queries.ts @@ -1,8 +1,8 @@ -import { db } from '@/src/db/db_index_sqlite' -import { coupons, couponApplicableUsers, couponApplicableProducts, reservedCoupons, users, orders, orderStatus } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { coupons, couponApplicableUsers, couponApplicableProducts, reservedCoupons, users, orders, orderStatus } from '../../db/schema' import { eq, and, like, or, inArray, lt, asc } from 'drizzle-orm' -import { ICouponDbService, Coupon, NewCoupon, ReservedCoupon, NewReservedCoupon, CouponWithRelations } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/coupon-db-service.interface' -import { parseNumberArray, toJsonString } from '@/src/db/sqlite-casts' +import { ICouponDbService, Coupon, NewCoupon, ReservedCoupon, NewReservedCoupon, CouponWithRelations } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/coupon-db-service.interface' +import { parseNumberArray, toJsonString } from '../../db/sqlite-casts' export class CouponDbService implements ICouponDbService { async createCoupon(data: NewCoupon): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/order-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/order-queries.ts similarity index 98% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/order-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/admin-apis/order-queries.ts index 0bc7798..e9c3b28 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/order-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/order-queries.ts @@ -1,4 +1,4 @@ -import { db } from '@/src/db/db_index_sqlite' +import { db } from '../../db/db_index' import { orders, orderItems, @@ -14,7 +14,7 @@ import { productInfo, units, paymentInfoTable, -} from '@/src/db/schema' +} from '../../db/schema' import { eq, and, gte, lt, desc, inArray, SQL } from 'drizzle-orm' import { IOrderDbService, @@ -26,7 +26,7 @@ import { OrderWithRelations, OrderWithStatus, OrderWithCouponUsages, -} from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/order-db-service.interface' +} from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/order-db-service.interface' export class OrderDbService implements IOrderDbService { async updateOrderNotes(orderId: number, adminNotes: string | null): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/product-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/product-queries.ts similarity index 96% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/product-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/admin-apis/product-queries.ts index 31bcdf1..7da83c2 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/product-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/product-queries.ts @@ -1,8 +1,8 @@ -import { db } from '@/src/db/db_index_sqlite' -import { productInfo, units, specialDeals, productSlots, productTags, productReviews, productGroupInfo, productGroupMembership, users } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { productInfo, units, specialDeals, productSlots, productTags, productReviews, productGroupInfo, productGroupMembership, users } from '../../db/schema' import { eq, and, inArray, desc, sql } from 'drizzle-orm' -import { IProductDbService, Product, NewProduct, ProductGroup, NewProductGroup } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/product-db-service.interface' -import { toJsonString } from '@/src/db/sqlite-casts' +import { IProductDbService, Product, NewProduct, ProductGroup, NewProductGroup } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/product-db-service.interface' +import { toJsonString } from '../../db/sqlite-casts' export class ProductDbService implements IProductDbService { async getAllProducts(): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/refund-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/refund-queries.ts similarity index 84% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/refund-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/admin-apis/refund-queries.ts index 7ea1257..5fe737a 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/refund-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/refund-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index_sqlite' -import { refunds, orders, orderStatus, payments } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { refunds, orders, orderStatus, payments } from '../../db/schema' import { eq, and } from 'drizzle-orm' -import { IRefundDbService, Refund, NewRefund } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/refund-db-service.interface' +import { IRefundDbService, Refund, NewRefund } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/refund-db-service.interface' export class RefundDbService implements IRefundDbService { async createRefund(data: NewRefund): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/schedule-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/schedule-queries.ts similarity index 86% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/schedule-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/admin-apis/schedule-queries.ts index 5f88f17..21e86eb 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/schedule-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/schedule-queries.ts @@ -1,8 +1,8 @@ -import { db } from '@/src/db/db_index_sqlite' -import { productAvailabilitySchedules } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { productAvailabilitySchedules } from '../../db/schema' import { eq, desc } from 'drizzle-orm' -import { IScheduleDbService, Schedule, NewSchedule } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/schedule-db-service.interface' -import { toJsonString } from '@/src/db/sqlite-casts' +import { IScheduleDbService, Schedule, NewSchedule } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/schedule-db-service.interface' +import { toJsonString } from '../../db/sqlite-casts' export class ScheduleDbService implements IScheduleDbService { async createSchedule(data: NewSchedule): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/slot-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/slot-queries.ts similarity index 95% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/slot-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/admin-apis/slot-queries.ts index c56ffdc..5d8044c 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/slot-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/slot-queries.ts @@ -1,8 +1,8 @@ -import { db } from '@/src/db/db_index_sqlite' -import { deliverySlotInfo, productSlots, vendorSnippets, productInfo, productGroupInfo } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { deliverySlotInfo, productSlots, vendorSnippets, productInfo, productGroupInfo } from '../../db/schema' import { eq, inArray, and, desc } from 'drizzle-orm' -import { ISlotDbService, Slot, NewSlot, ProductSlot, SlotWithRelations } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/slot-db-service.interface' -import { parseNumberArray, toJsonString } from '@/src/db/sqlite-casts' +import { ISlotDbService, Slot, NewSlot, ProductSlot, SlotWithRelations } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/slot-db-service.interface' +import { parseNumberArray, toJsonString } from '../../db/sqlite-casts' export class SlotDbService implements ISlotDbService { async getAllSlots(): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/staff-user-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/staff-user-queries.ts similarity index 93% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/staff-user-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/admin-apis/staff-user-queries.ts index 7179861..a28d8a3 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/staff-user-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/staff-user-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index_sqlite' -import { staffUsers, staffRoles, users, userDetails, orders } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { staffUsers, staffRoles, users, userDetails, orders } from '../../db/schema' import { eq, or, like, and, lt, desc } from 'drizzle-orm' -import { IStaffUserDbService, StaffUser, NewStaffUser, StaffRole, StaffUserWithRole } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/staff-user-db-service.interface' +import { IStaffUserDbService, StaffUser, NewStaffUser, StaffRole, StaffUserWithRole } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/staff-user-db-service.interface' export class StaffUserDbService implements IStaffUserDbService { async getStaffUserByName(name: string): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/store-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/store-queries.ts similarity index 84% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/store-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/admin-apis/store-queries.ts index 09cd96a..e1cb55b 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/postgres/store-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/store-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index' -import { storeInfo, productInfo } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { storeInfo, productInfo } from '../../db/schema' import { eq, inArray } from 'drizzle-orm' -import { IStoreDbService, Store, NewStore } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/store-db-service.interface' +import { IStoreDbService, Store, NewStore } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/store-db-service.interface' export class StoreDbService implements IStoreDbService { async getAllStores(): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/tag-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/tag-queries.ts similarity index 83% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/tag-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/admin-apis/tag-queries.ts index a90ce4e..c3a5163 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/tag-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/tag-queries.ts @@ -1,8 +1,8 @@ -import { db } from '@/src/db/db_index_sqlite' -import { productTagInfo } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { productTagInfo } from '../../db/schema' import { eq } from 'drizzle-orm' -import { ITagDbService, Tag, NewTag } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/tag-db-service.interface' -import { toJsonString } from '@/src/db/sqlite-casts' +import { ITagDbService, Tag, NewTag } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/tag-db-service.interface' +import { toJsonString } from '../../db/sqlite-casts' export class TagDbService implements ITagDbService { async getAllTags(): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/user-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/user-queries.ts similarity index 96% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/user-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/admin-apis/user-queries.ts index e9c4072..5e75809 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/user-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/user-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index_sqlite' -import { users, userDetails, orders, orderItems, orderStatus, complaints, notifCreds, unloggedUserTokens, userIncidents } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { users, userDetails, orders, orderItems, orderStatus, complaints, notifCreds, unloggedUserTokens, userIncidents } from '../../db/schema' import { eq, desc, asc, count, max, inArray, and, like, gt } from 'drizzle-orm' -import { IUserDbService, User, NewUser, UserDetail } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/user-db-service.interface' +import { IUserDbService, User, NewUser, UserDetail } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/user-db-service.interface' export class UserDbService implements IUserDbService { async getUserById(id: number): Promise { diff --git a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/vendor-snippets-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/vendor-snippets-queries.ts similarity index 94% rename from apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/vendor-snippets-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/admin-apis/vendor-snippets-queries.ts index b13886a..39ea40c 100644 --- a/apps/backend/src/trpc/apis/admin-apis/dataAccessors/sqlite/vendor-snippets-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/admin-apis/vendor-snippets-queries.ts @@ -1,8 +1,8 @@ -import { db } from '@/src/db/db_index_sqlite' -import { vendorSnippets, deliverySlotInfo, orders, orderItems, productInfo } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { vendorSnippets, deliverySlotInfo, orders, orderItems, productInfo } from '../../db/schema' import { eq, and, inArray, gt, asc, desc } from 'drizzle-orm' -import { IVendorSnippetDbService, VendorSnippet, NewVendorSnippet } from '@/src/trpc/apis/admin-apis/dataAccessors/interfaces/vendor-snippet-db-service.interface' -import { toJsonString } from '@/src/db/sqlite-casts' +import { IVendorSnippetDbService, VendorSnippet, NewVendorSnippet } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/vendor-snippet-db-service.interface' +import { toJsonString } from '../../db/sqlite-casts' export class VendorSnippetDbService implements IVendorSnippetDbService { async createSnippet(data: NewVendorSnippet): Promise { diff --git a/apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-address-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/user-apis/user-address-queries.ts similarity index 91% rename from apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-address-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/user-apis/user-address-queries.ts index bafdcdf..3a30b34 100644 --- a/apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-address-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/user-apis/user-address-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index_sqlite' -import { addresses, orders, orderStatus, deliverySlotInfo } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { addresses, orders, orderStatus, deliverySlotInfo } from '../../db/schema' import { eq, and, gte } from 'drizzle-orm' -import { IUserAddressDbService, Address, NewAddress } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-address-db-service.interface' +import { IUserAddressDbService, Address, NewAddress } from '../../../../backend/src/trpc/apis/user-apis/dataAccessors/interfaces/user-address-db-service.interface' export class UserAddressDbService implements IUserAddressDbService { async getDefaultAddress(userId: number): Promise
{ diff --git a/apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-auth-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/user-apis/user-auth-queries.ts similarity index 96% rename from apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-auth-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/user-apis/user-auth-queries.ts index ecf7393..8ccbc11 100644 --- a/apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-auth-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/user-apis/user-auth-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index_sqlite' -import { users, userCreds, userDetails, addresses, cartItems, complaints, couponApplicableUsers, couponUsage, notifCreds, notifications, orderItems, orderStatus, orders, payments, refunds, productReviews, reservedCoupons } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { users, userCreds, userDetails, addresses, cartItems, complaints, couponApplicableUsers, couponUsage, notifCreds, notifications, orderItems, orderStatus, orders, payments, refunds, productReviews, reservedCoupons } from '../../db/schema' import { eq } from 'drizzle-orm' -import { IUserAuthDbService, User, UserCred, UserDetail } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-auth-db-service.interface' +import { IUserAuthDbService, User, UserCred, UserDetail } from '../../../../backend/src/trpc/apis/user-apis/dataAccessors/interfaces/user-auth-db-service.interface' export class UserAuthDbService implements IUserAuthDbService { async getUserByEmail(email: string): Promise { diff --git a/apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-banner-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/user-apis/user-banner-queries.ts similarity index 62% rename from apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-banner-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/user-apis/user-banner-queries.ts index a969359..553e841 100644 --- a/apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-banner-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/user-apis/user-banner-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index' -import { homeBanners } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { homeBanners } from '../../db/schema' import { isNotNull, asc } from 'drizzle-orm' -import { IUserBannerDbService, UserBanner } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-banner-db-service.interface' +import { IUserBannerDbService, UserBanner } from '../../../../backend/src/trpc/apis/user-apis/dataAccessors/interfaces/user-banner-db-service.interface' export class UserBannerDbService implements IUserBannerDbService { async getActiveBanners(): Promise { diff --git a/apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-cart-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/user-apis/user-cart-queries.ts similarity index 90% rename from apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-cart-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/user-apis/user-cart-queries.ts index c7e2dda..267b13d 100644 --- a/apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-cart-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/user-apis/user-cart-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index_sqlite' -import { cartItems, productInfo, units } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { cartItems, productInfo, units } from '../../db/schema' import { eq, and, sql } from 'drizzle-orm' -import { IUserCartDbService, CartItem } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-cart-db-service.interface' +import { IUserCartDbService, CartItem } from '../../../../backend/src/trpc/apis/user-apis/dataAccessors/interfaces/user-cart-db-service.interface' export class UserCartDbService implements IUserCartDbService { async getCartItemsWithProducts(userId: number) { diff --git a/apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-complaint-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/user-apis/user-complaint-queries.ts similarity index 57% rename from apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-complaint-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/user-apis/user-complaint-queries.ts index f3f4945..fdd176d 100644 --- a/apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-complaint-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/user-apis/user-complaint-queries.ts @@ -1,7 +1,8 @@ -import { db } from '@/src/db/db_index_sqlite' -import { complaints } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { complaints } from '../../db/schema' import { eq, asc } from 'drizzle-orm' -import { IUserComplaintDbService } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-complaint-db-service.interface' +import { IUserComplaintDbService, NewComplaint } from '../../../../backend/src/trpc/apis/user-apis/dataAccessors/interfaces/user-complaint-db-service.interface' +import { toJsonString } from '../../db/sqlite-casts' export class UserComplaintDbService implements IUserComplaintDbService { async getComplaintsByUserId(userId: number) { @@ -20,8 +21,12 @@ export class UserComplaintDbService implements IUserComplaintDbService { .orderBy(asc(complaints.createdAt)) } - async createComplaint(data: { userId: number; orderId?: number | null; complaintBody: string; images: string[] }) { - await db.insert(complaints).values(data) + async createComplaint(data: NewComplaint) { + const normalized = { + ...data, + images: data.images ? toJsonString(data.images, '[]') : data.images, + } + await db.insert(complaints).values(normalized) } } diff --git a/apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-coupon-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/user-apis/user-coupon-queries.ts similarity index 92% rename from apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-coupon-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/user-apis/user-coupon-queries.ts index 54bb491..6d1c665 100644 --- a/apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-coupon-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/user-apis/user-coupon-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index' -import { coupons, couponUsage, couponApplicableUsers, couponApplicableProducts, reservedCoupons } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { coupons, couponUsage, couponApplicableUsers, couponApplicableProducts, reservedCoupons } from '../../db/schema' import { eq, and, or, gt, isNull } from 'drizzle-orm' -import { IUserCouponDbService, Coupon, ReservedCoupon, CouponWithRelations } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-coupon-db-service.interface' +import { IUserCouponDbService, Coupon, ReservedCoupon, CouponWithRelations } from '../../../../backend/src/trpc/apis/user-apis/dataAccessors/interfaces/user-coupon-db-service.interface' export class UserCouponDbService implements IUserCouponDbService { async getActiveCouponsForUser(userId: number): Promise { diff --git a/apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-order-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/user-apis/user-order-queries.ts similarity index 97% rename from apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-order-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/user-apis/user-order-queries.ts index fefc0c1..64463a8 100644 --- a/apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-order-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/user-apis/user-order-queries.ts @@ -1,4 +1,4 @@ -import { db } from '@/src/db/db_index' +import { db } from '../../db/db_index' import { orders, orderItems, @@ -12,12 +12,12 @@ import { refunds, units, userDetails, -} from '@/src/db/schema' +} from '../../db/schema' import { and, desc, eq, gte, inArray } from 'drizzle-orm' import { IUserOrderDbService, Order, -} from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-order-db-service.interface' +} from '../../../../backend/src/trpc/apis/user-apis/dataAccessors/interfaces/user-order-db-service.interface' export class UserOrderDbService implements IUserOrderDbService { async getUserDetailByUserId(userId: number) { diff --git a/apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-product-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/user-apis/user-product-queries.ts similarity index 87% rename from apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-product-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/user-apis/user-product-queries.ts index a18748e..eb9e726 100644 --- a/apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-product-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/user-apis/user-product-queries.ts @@ -1,7 +1,8 @@ -import { db } from '@/src/db/db_index_sqlite' -import { productInfo, units, storeInfo, productSlots, deliverySlotInfo, specialDeals, productReviews, users } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { productInfo, units, storeInfo, productSlots, deliverySlotInfo, specialDeals, productReviews, users } from '../../db/schema' import { eq, and, gt, sql, desc } from 'drizzle-orm' -import { IUserProductDbService, Review } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-product-db-service.interface' +import { toJsonString } from '../../db/sqlite-casts' +import { IUserProductDbService, Review } from '../../../../backend/src/trpc/apis/user-apis/dataAccessors/interfaces/user-product-db-service.interface' export class UserProductDbService implements IUserProductDbService { async getProductById(productId: number) { @@ -103,7 +104,11 @@ export class UserProductDbService implements IUserProductDbService { } async createReview(data: { userId: number; productId: number; reviewBody: string; ratings: number; imageUrls: string[] }): Promise { - const [newReview] = await db.insert(productReviews).values(data).returning() + const normalized = { + ...data, + imageUrls: toJsonString(data.imageUrls, '[]'), + } + const [newReview] = await db.insert(productReviews).values(normalized).returning() return newReview } } diff --git a/apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-profile-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/user-apis/user-profile-queries.ts similarity index 92% rename from apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-profile-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/user-apis/user-profile-queries.ts index 53f42b7..4a0cd8b 100644 --- a/apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-profile-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/user-apis/user-profile-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index_sqlite' -import { users, userDetails, userCreds, notifCreds, unloggedUserTokens } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { users, userDetails, userCreds, notifCreds, unloggedUserTokens } from '../../db/schema' import { eq, and } from 'drizzle-orm' -import { IUserProfileDbService, User, UserDetail, UserCred, NotifCred, UnloggedToken } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-profile-db-service.interface' +import { IUserProfileDbService, User, UserDetail, UserCred, NotifCred, UnloggedToken } from '../../../../backend/src/trpc/apis/user-apis/dataAccessors/interfaces/user-profile-db-service.interface' export class UserProfileDbService implements IUserProfileDbService { async getUserById(userId: number): Promise { diff --git a/apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-slot-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/user-apis/user-slot-queries.ts similarity index 75% rename from apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-slot-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/user-apis/user-slot-queries.ts index dc60891..cca1c1a 100644 --- a/apps/backend/src/trpc/apis/user-apis/dataAccessors/sqlite/user-slot-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/user-apis/user-slot-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index_sqlite' -import { deliverySlotInfo, productInfo } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { deliverySlotInfo, productInfo } from '../../db/schema' import { eq } from 'drizzle-orm' -import { IUserSlotDbService, Slot } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-slot-db-service.interface' +import { IUserSlotDbService, Slot } from '../../../../backend/src/trpc/apis/user-apis/dataAccessors/interfaces/user-slot-db-service.interface' export class UserSlotDbService implements IUserSlotDbService { async getActiveSlots(): Promise { diff --git a/apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-store-queries.ts b/apps/db-helper-sqlite/src/dataAccessors/user-apis/user-store-queries.ts similarity index 89% rename from apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-store-queries.ts rename to apps/db-helper-sqlite/src/dataAccessors/user-apis/user-store-queries.ts index fa7556f..3ab67e5 100644 --- a/apps/backend/src/trpc/apis/user-apis/dataAccessors/postgres/user-store-queries.ts +++ b/apps/db-helper-sqlite/src/dataAccessors/user-apis/user-store-queries.ts @@ -1,7 +1,7 @@ -import { db } from '@/src/db/db_index' -import { storeInfo, productInfo, units } from '@/src/db/schema' +import { db } from '../../db/db_index' +import { storeInfo, productInfo, units } from '../../db/schema' import { eq, and, sql } from 'drizzle-orm' -import { IUserStoreDbService } from '@/src/trpc/apis/user-apis/dataAccessors/interfaces/user-store-db-service.interface' +import { IUserStoreDbService } from '../../../../backend/src/trpc/apis/user-apis/dataAccessors/interfaces/user-store-db-service.interface' export class UserStoreDbService implements IUserStoreDbService { async getStoresWithProductCount(): Promise> { diff --git a/apps/db-helper-sqlite/src/db/db_index.ts b/apps/db-helper-sqlite/src/db/db_index.ts new file mode 100644 index 0000000..efd1a06 --- /dev/null +++ b/apps/db-helper-sqlite/src/db/db_index.ts @@ -0,0 +1,7 @@ +import { drizzle } from 'drizzle-orm/bun-sqlite' +import { Database } from 'bun:sqlite' +import * as schema from './schema' + +const db = drizzle(new Database(process.env.SQLITE_DB_PATH || 'sqlite.db'), { schema }) + +export { db } diff --git a/apps/db-helper-sqlite/src/db/schema.ts b/apps/db-helper-sqlite/src/db/schema.ts new file mode 100644 index 0000000..568653d --- /dev/null +++ b/apps/db-helper-sqlite/src/db/schema.ts @@ -0,0 +1,735 @@ +import { + sqliteTable, + integer, + text, + real, + unique, + check, +} from 'drizzle-orm/sqlite-core' +import { relations, sql } from 'drizzle-orm' + +const epochSeconds = sql`(strftime('%s','now'))` + +const sqliteEnum = ( + _name: string, + values: T +) => (columnName: string) => text(columnName, { enum: values }) + +export const users = sqliteTable('users', { + id: integer('id').primaryKey({ autoIncrement: true }), + name: text('name'), + email: text('email'), + mobile: text('mobile'), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), +}, (t) => ({ + unq_email: unique('unique_email').on(t.email), +})) + +export const userDetails = sqliteTable('user_details', { + id: integer('id').primaryKey({ autoIncrement: true }), + userId: integer('user_id').notNull().references(() => users.id).unique(), + bio: text('bio'), + dateOfBirth: integer('date_of_birth', { mode: 'timestamp' }), + gender: text('gender'), + occupation: text('occupation'), + profileImage: text('profile_image'), + isSuspended: integer('is_suspended', { mode: 'boolean' }).notNull().default(false), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), + updatedAt: integer('updated_at', { mode: 'timestamp' }).notNull().default(epochSeconds), +}) + +export const userCreds = sqliteTable('user_creds', { + id: integer('id').primaryKey({ autoIncrement: true }), + userId: integer('user_id').notNull().references(() => users.id), + userPassword: text('user_password').notNull(), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), +}) + +export const addressZones = sqliteTable('address_zones', { + id: integer('id').primaryKey({ autoIncrement: true }), + zoneName: text('zone_name').notNull(), + addedAt: integer('added_at', { mode: 'timestamp' }).notNull().default(epochSeconds), +}) + +export const addresses = sqliteTable('addresses', { + id: integer('id').primaryKey({ autoIncrement: true }), + userId: integer('user_id').notNull().references(() => users.id), + name: text('name').notNull(), + phone: text('phone').notNull(), + addressLine1: text('address_line1').notNull(), + addressLine2: text('address_line2'), + city: text('city').notNull(), + state: text('state').notNull(), + pincode: text('pincode').notNull(), + isDefault: integer('is_default', { mode: 'boolean' }).notNull().default(false), + latitude: real('latitude'), + longitude: real('longitude'), + googleMapsUrl: text('google_maps_url'), + adminLatitude: real('admin_latitude'), + adminLongitude: real('admin_longitude'), + zoneId: integer('zone_id').references(() => addressZones.id), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), +}) + +export const addressAreas = sqliteTable('address_areas', { + id: integer('id').primaryKey({ autoIncrement: true }), + placeName: text('place_name').notNull(), + zoneId: integer('zone_id').references(() => addressZones.id), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), +}) + +export const staffRoleEnum = sqliteEnum('staff_role', [ + 'super_admin', + 'admin', + 'marketer', + 'delivery_staff', +]) + +export const staffPermissionEnum = sqliteEnum('staff_permission', [ + 'crud_product', + 'make_coupon', + 'crud_staff_users', +]) + +export const staffRoles = sqliteTable('staff_roles', { + id: integer('id').primaryKey({ autoIncrement: true }), + roleName: staffRoleEnum('role_name').notNull(), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), +}, (t) => ({ + unq_role_name: unique('unique_role_name').on(t.roleName), +})) + +export const staffPermissions = sqliteTable('staff_permissions', { + id: integer('id').primaryKey({ autoIncrement: true }), + permissionName: staffPermissionEnum('permission_name').notNull(), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), +}, (t) => ({ + unq_permission_name: unique('unique_permission_name').on(t.permissionName), +})) + +export const staffRolePermissions = sqliteTable('staff_role_permissions', { + id: integer('id').primaryKey({ autoIncrement: true }), + staffRoleId: integer('staff_role_id').notNull().references(() => staffRoles.id), + staffPermissionId: integer('staff_permission_id').notNull().references(() => staffPermissions.id), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), +}, (t) => ({ + unq_role_permission: unique('unique_role_permission').on( + t.staffRoleId, + t.staffPermissionId + ), +})) + +export const staffUsers = sqliteTable('staff_users', { + id: integer('id').primaryKey({ autoIncrement: true }), + name: text('name').notNull(), + password: text('password').notNull(), + staffRoleId: integer('staff_role_id').references(() => staffRoles.id), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), +}) + +export const storeInfo = sqliteTable('store_info', { + id: integer('id').primaryKey({ autoIncrement: true }), + name: text('name').notNull(), + description: text('description'), + imageUrl: text('image_url'), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), + owner: integer('owner').notNull().references(() => staffUsers.id), +}) + +export const units = sqliteTable('units', { + id: integer('id').primaryKey({ autoIncrement: true }), + shortNotation: text('short_notation').notNull(), + fullName: text('full_name').notNull(), +}, (t) => ({ + unq_short_notation: unique('unique_short_notation').on(t.shortNotation), +})) + +export const productAvailabilityActionEnum = sqliteEnum( + 'product_availability_action', + ['in', 'out'] +) + +export const productInfo = sqliteTable('product_info', { + id: integer('id').primaryKey({ autoIncrement: true }), + name: text('name').notNull(), + shortDescription: text('short_description'), + longDescription: text('long_description'), + unitId: integer('unit_id').notNull().references(() => units.id), + price: text('price').notNull(), + marketPrice: text('market_price'), + images: text('images'), + isOutOfStock: integer('is_out_of_stock', { mode: 'boolean' }).notNull().default(false), + isSuspended: integer('is_suspended', { mode: 'boolean' }).notNull().default(false), + isFlashAvailable: integer('is_flash_available', { mode: 'boolean' }).notNull().default(false), + flashPrice: text('flash_price'), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), + incrementStep: real('increment_step').notNull().default(1), + productQuantity: real('product_quantity').notNull().default(1), + storeId: integer('store_id').references(() => storeInfo.id), + scheduledAvailability: integer('scheduled_availability', { mode: 'boolean' }).notNull().default(true), +}) + +export const productAvailabilitySchedules = sqliteTable('product_availability_schedules', { + id: integer('id').primaryKey({ autoIncrement: true }), + time: text('time').notNull(), + scheduleName: text('schedule_name').notNull().unique(), + action: productAvailabilityActionEnum('action').notNull(), + productIds: text('product_ids').notNull().default('[]'), + groupIds: text('group_ids').notNull().default('[]'), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), + lastUpdated: integer('last_updated', { mode: 'timestamp' }).notNull().default(epochSeconds), +}) + +export const productGroupInfo = sqliteTable('product_group_info', { + id: integer('id').primaryKey({ autoIncrement: true }), + groupName: text('group_name').notNull(), + description: text('description'), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), +}) + +export const productGroupMembership = sqliteTable('product_group_membership', { + productId: integer('product_id').notNull().references(() => productInfo.id), + groupId: integer('group_id').notNull().references(() => productGroupInfo.id), + addedAt: integer('added_at', { mode: 'timestamp' }).notNull().default(epochSeconds), +}, (t) => ({ + pk: unique('product_group_membership_pk').on(t.productId, t.groupId), +})) + +export const homeBanners = sqliteTable('home_banners', { + id: integer('id').primaryKey({ autoIncrement: true }), + name: text('name').notNull(), + imageUrl: text('image_url').notNull(), + description: text('description'), + productIds: text('product_ids'), + redirectUrl: text('redirect_url'), + serialNum: integer('serial_num'), + isActive: integer('is_active', { mode: 'boolean' }).notNull().default(false), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), + lastUpdated: integer('last_updated', { mode: 'timestamp' }).notNull().default(epochSeconds), +}) + +export const productReviews = sqliteTable('product_reviews', { + id: integer('id').primaryKey({ autoIncrement: true }), + userId: integer('user_id').notNull().references(() => users.id), + productId: integer('product_id').notNull().references(() => productInfo.id), + reviewBody: text('review_body').notNull(), + imageUrls: text('image_urls').default('[]'), + reviewTime: integer('review_time', { mode: 'timestamp' }).notNull().default(epochSeconds), + ratings: real('ratings').notNull(), + adminResponse: text('admin_response'), + adminResponseImages: text('admin_response_images').default('[]'), +}, (t) => ({ + ratingCheck: check('rating_check', sql`${t.ratings} >= 1 AND ${t.ratings} <= 5`), +})) + +export const uploadStatusEnum = sqliteEnum('upload_status', ['pending', 'claimed']) + +export const uploadUrlStatus = sqliteTable('upload_url_status', { + id: integer('id').primaryKey({ autoIncrement: true }), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), + key: text('key').notNull(), + status: uploadStatusEnum('status').notNull().default('pending'), +}) + +export const productTagInfo = sqliteTable('product_tag_info', { + id: integer('id').primaryKey({ autoIncrement: true }), + tagName: text('tag_name').notNull().unique(), + tagDescription: text('tag_description'), + imageUrl: text('image_url'), + isDashboardTag: integer('is_dashboard_tag', { mode: 'boolean' }).notNull().default(false), + relatedStores: text('related_stores').default('[]'), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), +}) + +export const productTags = sqliteTable('product_tags', { + id: integer('id').primaryKey({ autoIncrement: true }), + productId: integer('product_id').notNull().references(() => productInfo.id), + tagId: integer('tag_id').notNull().references(() => productTagInfo.id), + assignedAt: integer('assigned_at', { mode: 'timestamp' }).notNull().default(epochSeconds), +}, (t) => ({ + unq_product_tag: unique('unique_product_tag').on(t.productId, t.tagId), +})) + +export const deliverySlotInfo = sqliteTable('delivery_slot_info', { + id: integer('id').primaryKey({ autoIncrement: true }), + deliveryTime: integer('delivery_time', { mode: 'timestamp' }).notNull(), + freezeTime: integer('freeze_time', { mode: 'timestamp' }).notNull(), + isActive: integer('is_active', { mode: 'boolean' }).notNull().default(true), + isFlash: integer('is_flash', { mode: 'boolean' }).notNull().default(false), + isCapacityFull: integer('is_capacity_full', { mode: 'boolean' }).notNull().default(false), + deliverySequence: text('delivery_sequence').default('{}'), + groupIds: text('group_ids').default('[]'), +}) + +export const vendorSnippets = sqliteTable('vendor_snippets', { + id: integer('id').primaryKey({ autoIncrement: true }), + snippetCode: text('snippet_code').notNull().unique(), + slotId: integer('slot_id').references(() => deliverySlotInfo.id), + isPermanent: integer('is_permanent', { mode: 'boolean' }).notNull().default(false), + productIds: text('product_ids').notNull(), + validTill: integer('valid_till', { mode: 'timestamp' }), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), +}) + +export const productSlots = sqliteTable('product_slots', { + productId: integer('product_id').notNull().references(() => productInfo.id), + slotId: integer('slot_id').notNull().references(() => deliverySlotInfo.id), +}, (t) => ({ + pk: unique('product_slot_pk').on(t.productId, t.slotId), +})) + +export const specialDeals = sqliteTable('special_deals', { + id: integer('id').primaryKey({ autoIncrement: true }), + productId: integer('product_id').notNull().references(() => productInfo.id), + quantity: text('quantity').notNull(), + price: text('price').notNull(), + validTill: integer('valid_till', { mode: 'timestamp' }).notNull(), +}) + +export const paymentInfoTable = sqliteTable('payment_info', { + id: integer('id').primaryKey({ autoIncrement: true }), + status: text('status').notNull(), + gateway: text('gateway').notNull(), + orderId: text('order_id'), + token: text('token'), + merchantOrderId: text('merchant_order_id').notNull().unique(), + payload: text('payload'), +}) + +export const orders = sqliteTable('orders', { + id: integer('id').primaryKey({ autoIncrement: true }), + userId: integer('user_id').notNull().references(() => users.id), + addressId: integer('address_id').notNull().references(() => addresses.id), + slotId: integer('slot_id').references(() => deliverySlotInfo.id), + isCod: integer('is_cod', { mode: 'boolean' }).notNull().default(false), + isOnlinePayment: integer('is_online_payment', { mode: 'boolean' }).notNull().default(false), + paymentInfoId: integer('payment_info_id').references(() => paymentInfoTable.id), + totalAmount: text('total_amount').notNull(), + deliveryCharge: text('delivery_charge').notNull().default('0'), + readableId: integer('readable_id').notNull(), + adminNotes: text('admin_notes'), + userNotes: text('user_notes'), + orderGroupId: text('order_group_id'), + orderGroupProportion: text('order_group_proportion'), + isFlashDelivery: integer('is_flash_delivery', { mode: 'boolean' }).notNull().default(false), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), +}) + +export const orderItems = sqliteTable('order_items', { + id: integer('id').primaryKey({ autoIncrement: true }), + orderId: integer('order_id').notNull().references(() => orders.id), + productId: integer('product_id').notNull().references(() => productInfo.id), + quantity: text('quantity').notNull(), + price: text('price').notNull(), + discountedPrice: text('discounted_price'), + is_packaged: integer('is_packaged', { mode: 'boolean' }).notNull().default(false), + is_package_verified: integer('is_package_verified', { mode: 'boolean' }).notNull().default(false), +}) + +export const paymentStatusEnum = sqliteEnum('payment_status', [ + 'pending', + 'success', + 'cod', + 'failed', +]) + +export const orderStatus = sqliteTable('order_status', { + id: integer('id').primaryKey({ autoIncrement: true }), + orderTime: integer('order_time', { mode: 'timestamp' }).notNull().default(epochSeconds), + userId: integer('user_id').notNull().references(() => users.id), + orderId: integer('order_id').notNull().references(() => orders.id), + isPackaged: integer('is_packaged', { mode: 'boolean' }).notNull().default(false), + isDelivered: integer('is_delivered', { mode: 'boolean' }).notNull().default(false), + isCancelled: integer('is_cancelled', { mode: 'boolean' }).notNull().default(false), + cancelReason: text('cancel_reason'), + isCancelledByAdmin: integer('is_cancelled_by_admin', { mode: 'boolean' }), + paymentStatus: paymentStatusEnum('payment_state').notNull().default('pending'), + cancellationUserNotes: text('cancellation_user_notes'), + cancellationAdminNotes: text('cancellation_admin_notes'), + cancellationReviewed: integer('cancellation_reviewed', { mode: 'boolean' }).notNull().default(false), + cancellationReviewedAt: integer('cancellation_reviewed_at', { mode: 'timestamp' }), + refundCouponId: integer('refund_coupon_id').references(() => coupons.id), +}) + +export const payments = sqliteTable('payments', { + id: integer('id').primaryKey({ autoIncrement: true }), + status: text('status').notNull(), + gateway: text('gateway').notNull(), + orderId: integer('order_id').notNull().references(() => orders.id), + token: text('token'), + merchantOrderId: text('merchant_order_id').notNull().unique(), + payload: text('payload'), +}) + +export const refunds = sqliteTable('refunds', { + id: integer('id').primaryKey({ autoIncrement: true }), + orderId: integer('order_id').notNull().references(() => orders.id), + refundAmount: text('refund_amount'), + refundStatus: text('refund_status').default('none'), + merchantRefundId: text('merchant_refund_id'), + refundProcessedAt: integer('refund_processed_at', { mode: 'timestamp' }), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), +}) + +export const keyValStore = sqliteTable('key_val_store', { + key: text('key').primaryKey(), + value: text('value'), +}) + +export const notifications = sqliteTable('notifications', { + id: integer('id').primaryKey({ autoIncrement: true }), + userId: integer('user_id').notNull().references(() => users.id), + title: text('title').notNull(), + body: text('body').notNull(), + type: text('type'), + isRead: integer('is_read', { mode: 'boolean' }).notNull().default(false), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), +}) + +export const productCategories = sqliteTable('product_categories', { + id: integer('id').primaryKey({ autoIncrement: true }), + name: text('name').notNull(), + description: text('description'), +}) + +export const cartItems = sqliteTable('cart_items', { + id: integer('id').primaryKey({ autoIncrement: true }), + userId: integer('user_id').notNull().references(() => users.id), + productId: integer('product_id').notNull().references(() => productInfo.id), + quantity: text('quantity').notNull(), + addedAt: integer('added_at', { mode: 'timestamp' }).notNull().default(epochSeconds), +}, (t) => ({ + unq_user_product: unique('unique_user_product').on(t.userId, t.productId), +})) + +export const complaints = sqliteTable('complaints', { + id: integer('id').primaryKey({ autoIncrement: true }), + userId: integer('user_id').notNull().references(() => users.id), + orderId: integer('order_id').references(() => orders.id), + complaintBody: text('complaint_body').notNull(), + images: text('images'), + response: text('response'), + isResolved: integer('is_resolved', { mode: 'boolean' }).notNull().default(false), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), +}) + +export const coupons = sqliteTable('coupons', { + id: integer('id').primaryKey({ autoIncrement: true }), + couponCode: text('coupon_code').notNull().unique('unique_coupon_code'), + isUserBased: integer('is_user_based', { mode: 'boolean' }).notNull().default(false), + discountPercent: text('discount_percent'), + flatDiscount: text('flat_discount'), + minOrder: text('min_order'), + productIds: text('product_ids'), + createdBy: integer('created_by').references(() => staffUsers.id), + maxValue: text('max_value'), + isApplyForAll: integer('is_apply_for_all', { mode: 'boolean' }).notNull().default(false), + validTill: integer('valid_till', { mode: 'timestamp' }), + maxLimitForUser: integer('max_limit_for_user'), + isInvalidated: integer('is_invalidated', { mode: 'boolean' }).notNull().default(false), + exclusiveApply: integer('exclusive_apply', { mode: 'boolean' }).notNull().default(false), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), +}) + +export const couponUsage = sqliteTable('coupon_usage', { + id: integer('id').primaryKey({ autoIncrement: true }), + userId: integer('user_id').notNull().references(() => users.id), + couponId: integer('coupon_id').notNull().references(() => coupons.id), + orderId: integer('order_id').references(() => orders.id), + orderItemId: integer('order_item_id').references(() => orderItems.id), + usedAt: integer('used_at', { mode: 'timestamp' }).notNull().default(epochSeconds), +}) + +export const couponApplicableUsers = sqliteTable('coupon_applicable_users', { + id: integer('id').primaryKey({ autoIncrement: true }), + couponId: integer('coupon_id').notNull().references(() => coupons.id), + userId: integer('user_id').notNull().references(() => users.id), +}, (t) => ({ + unq_coupon_user: unique('unique_coupon_user').on(t.couponId, t.userId), +})) + +export const couponApplicableProducts = sqliteTable('coupon_applicable_products', { + id: integer('id').primaryKey({ autoIncrement: true }), + couponId: integer('coupon_id').notNull().references(() => coupons.id), + productId: integer('product_id').notNull().references(() => productInfo.id), +}, (t) => ({ + unq_coupon_product: unique('unique_coupon_product').on(t.couponId, t.productId), +})) + +export const userIncidents = sqliteTable('user_incidents', { + id: integer('id').primaryKey({ autoIncrement: true }), + userId: integer('user_id').notNull().references(() => users.id), + orderId: integer('order_id').references(() => orders.id), + dateAdded: integer('date_added', { mode: 'timestamp' }).notNull().default(epochSeconds), + adminComment: text('admin_comment'), + addedBy: integer('added_by').references(() => staffUsers.id), + negativityScore: integer('negativity_score'), +}) + +export const reservedCoupons = sqliteTable('reserved_coupons', { + id: integer('id').primaryKey({ autoIncrement: true }), + secretCode: text('secret_code').notNull().unique(), + couponCode: text('coupon_code').notNull(), + discountPercent: text('discount_percent'), + flatDiscount: text('flat_discount'), + minOrder: text('min_order'), + productIds: text('product_ids'), + maxValue: text('max_value'), + validTill: integer('valid_till', { mode: 'timestamp' }), + maxLimitForUser: integer('max_limit_for_user'), + exclusiveApply: integer('exclusive_apply', { mode: 'boolean' }).notNull().default(false), + isRedeemed: integer('is_redeemed', { mode: 'boolean' }).notNull().default(false), + redeemedBy: integer('redeemed_by').references(() => users.id), + redeemedAt: integer('redeemed_at', { mode: 'timestamp' }), + createdBy: integer('created_by').notNull().references(() => staffUsers.id), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), +}, (t) => ({ + unq_secret_code: unique('unique_secret_code').on(t.secretCode), +})) + +export const notifCreds = sqliteTable('notif_creds', { + id: integer('id').primaryKey({ autoIncrement: true }), + token: text('token').notNull().unique(), + addedAt: integer('added_at', { mode: 'timestamp' }).notNull().default(epochSeconds), + userId: integer('user_id').notNull().references(() => users.id), + lastVerified: integer('last_verified', { mode: 'timestamp' }), +}) + +export const unloggedUserTokens = sqliteTable('unlogged_user_tokens', { + id: integer('id').primaryKey({ autoIncrement: true }), + token: text('token').notNull().unique(), + addedAt: integer('added_at', { mode: 'timestamp' }).notNull().default(epochSeconds), + lastVerified: integer('last_verified', { mode: 'timestamp' }), +}) + +export const userNotifications = sqliteTable('user_notifications', { + id: integer('id').primaryKey({ autoIncrement: true }), + title: text('title').notNull(), + imageUrl: text('image_url'), + createdAt: integer('created_at', { mode: 'timestamp' }).notNull().default(epochSeconds), + body: text('body').notNull(), + applicableUsers: text('applicable_users'), +}) + +export const uploadUrlStatusRelations = relations(uploadUrlStatus, ({}) => ({})) + +export const userCredsRelations = relations(userCreds, ({ one }) => ({ + user: one(users, { fields: [userCreds.userId], references: [users.id] }), +})) + +export const staffUsersRelations = relations(staffUsers, ({ one, many }) => ({ + role: one(staffRoles, { fields: [staffUsers.staffRoleId], references: [staffRoles.id] }), + coupons: many(coupons), + stores: many(storeInfo), +})) + +export const addressesRelations = relations(addresses, ({ one, many }) => ({ + user: one(users, { fields: [addresses.userId], references: [users.id] }), + orders: many(orders), + zone: one(addressZones, { fields: [addresses.zoneId], references: [addressZones.id] }), +})) + +export const unitsRelations = relations(units, ({ many }) => ({ + products: many(productInfo), +})) + +export const productInfoRelations = relations(productInfo, ({ one, many }) => ({ + unit: one(units, { fields: [productInfo.unitId], references: [units.id] }), + store: one(storeInfo, { fields: [productInfo.storeId], references: [storeInfo.id] }), + productSlots: many(productSlots), + specialDeals: many(specialDeals), + orderItems: many(orderItems), + cartItems: many(cartItems), + tags: many(productTags), + applicableCoupons: many(couponApplicableProducts), + reviews: many(productReviews), + groups: many(productGroupMembership), +})) + +export const productTagInfoRelations = relations(productTagInfo, ({ many }) => ({ + products: many(productTags), +})) + +export const productTagsRelations = relations(productTags, ({ one }) => ({ + product: one(productInfo, { fields: [productTags.productId], references: [productInfo.id] }), + tag: one(productTagInfo, { fields: [productTags.tagId], references: [productTagInfo.id] }), +})) + +export const deliverySlotInfoRelations = relations(deliverySlotInfo, ({ many }) => ({ + productSlots: many(productSlots), + orders: many(orders), + vendorSnippets: many(vendorSnippets), +})) + +export const vendorSnippetsRelations = relations(vendorSnippets, ({ one }) => ({ + slot: one(deliverySlotInfo, { fields: [vendorSnippets.slotId], references: [deliverySlotInfo.id] }), +})) + +export const productSlotsRelations = relations(productSlots, ({ one }) => ({ + product: one(productInfo, { fields: [productSlots.productId], references: [productInfo.id] }), + slot: one(deliverySlotInfo, { fields: [productSlots.slotId], references: [deliverySlotInfo.id] }), +})) + +export const specialDealsRelations = relations(specialDeals, ({ one }) => ({ + product: one(productInfo, { fields: [specialDeals.productId], references: [productInfo.id] }), +})) + +export const ordersRelations = relations(orders, ({ one, many }) => ({ + user: one(users, { fields: [orders.userId], references: [users.id] }), + address: one(addresses, { fields: [orders.addressId], references: [addresses.id] }), + slot: one(deliverySlotInfo, { fields: [orders.slotId], references: [deliverySlotInfo.id] }), + orderItems: many(orderItems), + payment: one(payments), + paymentInfo: one(paymentInfoTable, { fields: [orders.paymentInfoId], references: [paymentInfoTable.id] }), + orderStatus: many(orderStatus), + refunds: many(refunds), + couponUsages: many(couponUsage), + userIncidents: many(userIncidents), +})) + +export const orderItemsRelations = relations(orderItems, ({ one }) => ({ + order: one(orders, { fields: [orderItems.orderId], references: [orders.id] }), + product: one(productInfo, { fields: [orderItems.productId], references: [productInfo.id] }), +})) + +export const orderStatusRelations = relations(orderStatus, ({ one }) => ({ + order: one(orders, { fields: [orderStatus.orderId], references: [orders.id] }), + user: one(users, { fields: [orderStatus.userId], references: [users.id] }), + refundCoupon: one(coupons, { fields: [orderStatus.refundCouponId], references: [coupons.id] }), +})) + +export const paymentInfoRelations = relations(paymentInfoTable, ({ one }) => ({ + order: one(orders, { fields: [paymentInfoTable.id], references: [orders.paymentInfoId] }), +})) + +export const paymentsRelations = relations(payments, ({ one }) => ({ + order: one(orders, { fields: [payments.orderId], references: [orders.id] }), +})) + +export const refundsRelations = relations(refunds, ({ one }) => ({ + order: one(orders, { fields: [refunds.orderId], references: [orders.id] }), +})) + +export const notificationsRelations = relations(notifications, ({ one }) => ({ + user: one(users, { fields: [notifications.userId], references: [users.id] }), +})) + +export const productCategoriesRelations = relations(productCategories, ({}) => ({})) + +export const cartItemsRelations = relations(cartItems, ({ one }) => ({ + user: one(users, { fields: [cartItems.userId], references: [users.id] }), + product: one(productInfo, { fields: [cartItems.productId], references: [productInfo.id] }), +})) + +export const complaintsRelations = relations(complaints, ({ one }) => ({ + user: one(users, { fields: [complaints.userId], references: [users.id] }), + order: one(orders, { fields: [complaints.orderId], references: [orders.id] }), +})) + +export const couponsRelations = relations(coupons, ({ one, many }) => ({ + creator: one(staffUsers, { fields: [coupons.createdBy], references: [staffUsers.id] }), + usages: many(couponUsage), + applicableUsers: many(couponApplicableUsers), + applicableProducts: many(couponApplicableProducts), +})) + +export const couponUsageRelations = relations(couponUsage, ({ one }) => ({ + user: one(users, { fields: [couponUsage.userId], references: [users.id] }), + coupon: one(coupons, { fields: [couponUsage.couponId], references: [coupons.id] }), + order: one(orders, { fields: [couponUsage.orderId], references: [orders.id] }), + orderItem: one(orderItems, { fields: [couponUsage.orderItemId], references: [orderItems.id] }), +})) + +export const userDetailsRelations = relations(userDetails, ({ one }) => ({ + user: one(users, { fields: [userDetails.userId], references: [users.id] }), +})) + +export const notifCredsRelations = relations(notifCreds, ({ one }) => ({ + user: one(users, { fields: [notifCreds.userId], references: [users.id] }), +})) + +export const userNotificationsRelations = relations(userNotifications, ({}) => ({})) + +export const storeInfoRelations = relations(storeInfo, ({ one, many }) => ({ + owner: one(staffUsers, { fields: [storeInfo.owner], references: [staffUsers.id] }), + products: many(productInfo), +})) + +export const couponApplicableUsersRelations = relations(couponApplicableUsers, ({ one }) => ({ + coupon: one(coupons, { fields: [couponApplicableUsers.couponId], references: [coupons.id] }), + user: one(users, { fields: [couponApplicableUsers.userId], references: [users.id] }), +})) + +export const couponApplicableProductsRelations = relations(couponApplicableProducts, ({ one }) => ({ + coupon: one(coupons, { fields: [couponApplicableProducts.couponId], references: [coupons.id] }), + product: one(productInfo, { fields: [couponApplicableProducts.productId], references: [productInfo.id] }), +})) + +export const reservedCouponsRelations = relations(reservedCoupons, ({ one }) => ({ + redeemedUser: one(users, { fields: [reservedCoupons.redeemedBy], references: [users.id] }), + creator: one(staffUsers, { fields: [reservedCoupons.createdBy], references: [staffUsers.id] }), +})) + +export const productReviewsRelations = relations(productReviews, ({ one }) => ({ + user: one(users, { fields: [productReviews.userId], references: [users.id] }), + product: one(productInfo, { fields: [productReviews.productId], references: [productInfo.id] }), +})) + +export const addressZonesRelations = relations(addressZones, ({ many }) => ({ + addresses: many(addresses), + areas: many(addressAreas), +})) + +export const addressAreasRelations = relations(addressAreas, ({ one }) => ({ + zone: one(addressZones, { fields: [addressAreas.zoneId], references: [addressZones.id] }), +})) + +export const productGroupInfoRelations = relations(productGroupInfo, ({ many }) => ({ + memberships: many(productGroupMembership), +})) + +export const productGroupMembershipRelations = relations(productGroupMembership, ({ one }) => ({ + product: one(productInfo, { fields: [productGroupMembership.productId], references: [productInfo.id] }), + group: one(productGroupInfo, { fields: [productGroupMembership.groupId], references: [productGroupInfo.id] }), +})) + +export const homeBannersRelations = relations(homeBanners, ({}) => ({})) + +export const staffRolesRelations = relations(staffRoles, ({ many }) => ({ + staffUsers: many(staffUsers), + rolePermissions: many(staffRolePermissions), +})) + +export const staffPermissionsRelations = relations(staffPermissions, ({ many }) => ({ + rolePermissions: many(staffRolePermissions), +})) + +export const staffRolePermissionsRelations = relations(staffRolePermissions, ({ one }) => ({ + role: one(staffRoles, { fields: [staffRolePermissions.staffRoleId], references: [staffRoles.id] }), + permission: one(staffPermissions, { fields: [staffRolePermissions.staffPermissionId], references: [staffPermissions.id] }), +})) + +export const userIncidentsRelations = relations(userIncidents, ({ one }) => ({ + user: one(users, { fields: [userIncidents.userId], references: [users.id] }), + order: one(orders, { fields: [userIncidents.orderId], references: [orders.id] }), + addedBy: one(staffUsers, { fields: [userIncidents.addedBy], references: [staffUsers.id] }), +})) + +export const productAvailabilitySchedulesRelations = relations( + productAvailabilitySchedules, + ({}) => ({}) +) + +export const usersRelations = relations(users, ({ many, one }) => ({ + addresses: many(addresses), + orders: many(orders), + notifications: many(notifications), + cartItems: many(cartItems), + userCreds: one(userCreds), + coupons: many(coupons), + couponUsages: many(couponUsage), + applicableCoupons: many(couponApplicableUsers), + userDetails: one(userDetails), + notifCreds: many(notifCreds), + userIncidents: many(userIncidents), +})) diff --git a/apps/db-helper-sqlite/src/db/seed.ts b/apps/db-helper-sqlite/src/db/seed.ts new file mode 100644 index 0000000..df48d68 --- /dev/null +++ b/apps/db-helper-sqlite/src/db/seed.ts @@ -0,0 +1,154 @@ +import { eq } from 'drizzle-orm' + +import { CONST_KEYS } from '../../../backend/src/lib/const-keys' +import { deliveryCharge, minOrderValue } from '../../../backend/src/lib/env-exporter' + +import { db } from './db_index' +import { keyValStore, staffPermissions, staffRolePermissions, staffRoles, units } from './schema' +import { toJsonString } from './sqlite-casts' + +export async function seed() { + console.log('Seeding database...') + + const unitsToSeed = [ + { shortNotation: 'Kg', fullName: 'Kilogram' }, + { shortNotation: 'L', fullName: 'Litre' }, + { shortNotation: 'Dz', fullName: 'Dozen' }, + { shortNotation: 'Pc', fullName: 'Unit Piece' }, + ] + + for (const unit of unitsToSeed) { + const existingUnit = await db.query.units.findFirst({ + where: eq(units.shortNotation, unit.shortNotation), + }) + if (!existingUnit) { + await db.insert(units).values(unit) + } + } + + const rolesToSeed = ['super_admin', 'admin', 'marketer', 'delivery_staff'] as const + + for (const roleName of rolesToSeed) { + const existingRole = await db.query.staffRoles.findFirst({ + where: eq(staffRoles.roleName, roleName), + }) + if (!existingRole) { + await db.insert(staffRoles).values({ roleName }) + } + } + + const permissionsToSeed = ['crud_product', 'make_coupon', 'crud_staff_users'] as const + + for (const permissionName of permissionsToSeed) { + const existingPermission = await db.query.staffPermissions.findFirst({ + where: eq(staffPermissions.permissionName, permissionName), + }) + if (!existingPermission) { + await db.insert(staffPermissions).values({ permissionName }) + } + } + + await db.transaction(async (tx) => { + const superAdminRole = await tx.query.staffRoles.findFirst({ + where: eq(staffRoles.roleName, 'super_admin'), + }) + const adminRole = await tx.query.staffRoles.findFirst({ + where: eq(staffRoles.roleName, 'admin'), + }) + const marketerRole = await tx.query.staffRoles.findFirst({ + where: eq(staffRoles.roleName, 'marketer'), + }) + + const crudProductPerm = await tx.query.staffPermissions.findFirst({ + where: eq(staffPermissions.permissionName, 'crud_product'), + }) + const makeCouponPerm = await tx.query.staffPermissions.findFirst({ + where: eq(staffPermissions.permissionName, 'make_coupon'), + }) + const crudStaffUsersPerm = await tx.query.staffPermissions.findFirst({ + where: eq(staffPermissions.permissionName, 'crud_staff_users'), + }) + + await Promise.all( + [crudProductPerm, makeCouponPerm, crudStaffUsersPerm].map(async (perm) => { + if (!superAdminRole || !perm) { + return + } + + const existingSuperAdminPerm = await tx.query.staffRolePermissions.findFirst({ + where: eq(staffRolePermissions.staffRoleId, superAdminRole.id) + && eq(staffRolePermissions.staffPermissionId, perm.id), + }) + if (!existingSuperAdminPerm) { + await tx.insert(staffRolePermissions).values({ + staffRoleId: superAdminRole.id, + staffPermissionId: perm.id, + }) + } + }) + ) + + await Promise.all( + [crudProductPerm, makeCouponPerm].map(async (perm) => { + if (!adminRole || !perm) { + return + } + + const existingAdminPerm = await tx.query.staffRolePermissions.findFirst({ + where: eq(staffRolePermissions.staffRoleId, adminRole.id) + && eq(staffRolePermissions.staffPermissionId, perm.id), + }) + if (!existingAdminPerm) { + await tx.insert(staffRolePermissions).values({ + staffRoleId: adminRole.id, + staffPermissionId: perm.id, + }) + } + }) + ) + + if (marketerRole && makeCouponPerm) { + const existingMarketerCoupon = await tx.query.staffRolePermissions.findFirst({ + where: eq(staffRolePermissions.staffRoleId, marketerRole.id) + && eq(staffRolePermissions.staffPermissionId, makeCouponPerm.id), + }) + if (!existingMarketerCoupon) { + await tx.insert(staffRolePermissions).values({ + staffRoleId: marketerRole.id, + staffPermissionId: makeCouponPerm.id, + }) + } + } + }) + + const constantsToSeed = [ + { key: CONST_KEYS.readableOrderId, value: 0 }, + { key: CONST_KEYS.minRegularOrderValue, value: minOrderValue }, + { key: CONST_KEYS.freeDeliveryThreshold, value: minOrderValue }, + { key: CONST_KEYS.deliveryCharge, value: deliveryCharge }, + { key: CONST_KEYS.flashFreeDeliveryThreshold, value: 500 }, + { key: CONST_KEYS.flashDeliveryCharge, value: 69 }, + { key: CONST_KEYS.popularItems, value: [] }, + { key: CONST_KEYS.allItemsOrder, value: [] }, + { key: CONST_KEYS.versionNum, value: '1.1.0' }, + { key: CONST_KEYS.playStoreUrl, value: 'https://play.google.com/store/apps/details?id=in.freshyo.app' }, + { key: CONST_KEYS.appStoreUrl, value: 'https://apps.apple.com/in/app/freshyo/id6756889077' }, + { key: CONST_KEYS.isFlashDeliveryEnabled, value: false }, + { key: CONST_KEYS.supportMobile, value: '8688182552' }, + { key: CONST_KEYS.supportEmail, value: 'qushammohd@gmail.com' }, + ] + + for (const constant of constantsToSeed) { + const existing = await db.query.keyValStore.findFirst({ + where: eq(keyValStore.key, constant.key), + }) + if (!existing) { + await db.insert(keyValStore).values({ + key: constant.key, + value: toJsonString(constant.value, 'null'), + }) + } + } + + console.log('Seeding completed.') +} diff --git a/apps/db-helper-sqlite/src/db/sqlite-casts.ts b/apps/db-helper-sqlite/src/db/sqlite-casts.ts new file mode 100644 index 0000000..e59d9cf --- /dev/null +++ b/apps/db-helper-sqlite/src/db/sqlite-casts.ts @@ -0,0 +1,34 @@ +export const parseJsonValue = (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 parseNumberArray = (value: unknown): number[] => { + const parsed = parseJsonValue(value, []) + return parsed + .map((item) => Number(item)) + .filter((item) => !Number.isNaN(item)) +} + +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 fromEpochSeconds = (value: number | null | undefined): Date | null => { + if (value === null || value === undefined) return null + return new Date(value * 1000) +} diff --git a/apps/db-helper-sqlite/src/db/types.ts b/apps/db-helper-sqlite/src/db/types.ts new file mode 100644 index 0000000..902b5c0 --- /dev/null +++ b/apps/db-helper-sqlite/src/db/types.ts @@ -0,0 +1,47 @@ +import type { InferSelectModel } from 'drizzle-orm' + +import type { + users, + addresses, + units, + productInfo, + deliverySlotInfo, + productSlots, + specialDeals, + orders, + orderItems, + payments, + notifications, + productCategories, + cartItems, + coupons, +} from './schema' + +export type User = InferSelectModel +export type Address = InferSelectModel +export type Unit = InferSelectModel +export type ProductInfo = InferSelectModel +export type DeliverySlotInfo = InferSelectModel +export type ProductSlot = InferSelectModel +export type SpecialDeal = InferSelectModel +export type Order = InferSelectModel +export type OrderItem = InferSelectModel +export type Payment = InferSelectModel +export type Notification = InferSelectModel +export type ProductCategory = InferSelectModel +export type CartItem = InferSelectModel +export type Coupon = InferSelectModel + +export type ProductWithUnit = ProductInfo & { + unit: Unit +} + +export type OrderWithItems = Order & { + items: (OrderItem & { product: ProductInfo })[] + address: Address + slot: DeliverySlotInfo +} + +export type CartItemWithProduct = CartItem & { + product: ProductInfo +} diff --git a/apps/db-helper-sqlite/src/lib/upload-url.ts b/apps/db-helper-sqlite/src/lib/upload-url.ts new file mode 100644 index 0000000..9f263c9 --- /dev/null +++ b/apps/db-helper-sqlite/src/lib/upload-url.ts @@ -0,0 +1,23 @@ +import { and, eq } from 'drizzle-orm' + +import { db } from '../db/db_index' +import { uploadUrlStatus } from '../db/schema' + +export const createUploadUrlStatus = async (key: string): Promise => { + await db.insert(uploadUrlStatus).values({ + key, + status: 'pending', + }) +} + +export const claimUploadUrlStatus = async (key: string): Promise => { + const result = await db + .update(uploadUrlStatus) + .set({ status: 'claimed' }) + .where(and(eq(uploadUrlStatus.key, key), eq(uploadUrlStatus.status, 'pending'))) + .returning() + + if (result.length === 0) { + throw new Error('Upload URL not found or already claimed') + } +} diff --git a/apps/db-helper-sqlite/src/services/user/product-service.ts b/apps/db-helper-sqlite/src/services/user/product-service.ts new file mode 100644 index 0000000..f94d26c --- /dev/null +++ b/apps/db-helper-sqlite/src/services/user/product-service.ts @@ -0,0 +1,143 @@ +import { db } from '../../db/db_index' +import { productInfo, units, productSlots, deliverySlotInfo, specialDeals, storeInfo, productReviews, users } from '../../db/schema' +import { eq, and, gt, sql, desc } from 'drizzle-orm' +import { toJsonString } from '../../db/sqlite-casts' + +/** + * Get product basic info with unit + */ +export async function getProductWithUnit(productId: number) { + return db + .select({ + id: productInfo.id, + name: productInfo.name, + shortDescription: productInfo.shortDescription, + longDescription: productInfo.longDescription, + price: productInfo.price, + marketPrice: productInfo.marketPrice, + images: productInfo.images, + isOutOfStock: productInfo.isOutOfStock, + storeId: productInfo.storeId, + unitShortNotation: units.shortNotation, + incrementStep: productInfo.incrementStep, + productQuantity: productInfo.productQuantity, + isFlashAvailable: productInfo.isFlashAvailable, + flashPrice: productInfo.flashPrice, + }) + .from(productInfo) + .innerJoin(units, eq(productInfo.unitId, units.id)) + .where(eq(productInfo.id, productId)) + .limit(1) +} + +/** + * Get store info by ID + */ +export async function getStoreById(storeId: number) { + return db.query.storeInfo.findFirst({ + where: eq(storeInfo.id, storeId), + columns: { id: true, name: true, description: true }, + }) +} + +/** + * Get delivery slots for product + */ +export async function getProductDeliverySlots(productId: number) { + return db + .select({ + id: deliverySlotInfo.id, + deliveryTime: deliverySlotInfo.deliveryTime, + freezeTime: deliverySlotInfo.freezeTime, + }) + .from(productSlots) + .innerJoin(deliverySlotInfo, eq(productSlots.slotId, deliverySlotInfo.id)) + .where( + and( + eq(productSlots.productId, productId), + eq(deliverySlotInfo.isActive, true), + gt(deliverySlotInfo.deliveryTime, new Date()), + gt(deliverySlotInfo.freezeTime, new Date()) + ) + ) + .orderBy(deliverySlotInfo.deliveryTime) +} + +/** + * Get special deals for product + */ +export async function getProductSpecialDeals(productId: number) { + return db + .select({ + quantity: specialDeals.quantity, + price: specialDeals.price, + validTill: specialDeals.validTill, + }) + .from(specialDeals) + .where( + and( + eq(specialDeals.productId, productId), + gt(specialDeals.validTill, new Date()) + ) + ) + .orderBy(specialDeals.quantity) +} + +/** + * Get product reviews with user info + */ +export async function getProductReviews(productId: number, limit: number, offset: number) { + return db + .select({ + id: productReviews.id, + reviewBody: productReviews.reviewBody, + ratings: productReviews.ratings, + imageUrls: productReviews.imageUrls, + reviewTime: productReviews.reviewTime, + userName: users.name, + }) + .from(productReviews) + .innerJoin(users, eq(productReviews.userId, users.id)) + .where(eq(productReviews.productId, productId)) + .orderBy(desc(productReviews.reviewTime)) + .limit(limit) + .offset(offset) +} + +/** + * Count reviews for product + */ +export async function countProductReviews(productId: number) { + const result = await db + .select({ count: sql`count(*)` }) + .from(productReviews) + .where(eq(productReviews.productId, productId)) + + return Number(result[0].count) +} + +/** + * Check if product exists + */ +export async function checkProductExists(productId: number) { + return db.query.productInfo.findFirst({ + where: eq(productInfo.id, productId), + }) +} + +/** + * Insert new review + */ +export async function insertReview(data: { + userId: number + productId: number + reviewBody: string + ratings: number + imageUrls: string[] +}) { + const normalized = { + ...data, + imageUrls: toJsonString(data.imageUrls, '[]'), + } + return db.insert(productReviews).values(normalized).returning() +} diff --git a/apps/db-helper-sqlite/src/stores/product-store.ts b/apps/db-helper-sqlite/src/stores/product-store.ts new file mode 100644 index 0000000..beed758 --- /dev/null +++ b/apps/db-helper-sqlite/src/stores/product-store.ts @@ -0,0 +1,188 @@ +// import redisClient from '@/src/stores/redis-client'; +import redisClient from '@/src/lib/redis-client'; +import { db } from '../db/db_index' +import { productInfo, units, productSlots, deliverySlotInfo, specialDeals, storeInfo, productTags, productTagInfo } from '../db/schema' +import { eq, and, gt, sql } from 'drizzle-orm'; +import { generateSignedUrlsFromS3Urls, scaffoldAssetUrl } from '@/src/lib/s3-client'; + +// Uniform Product Type (matches getProductDetails return) +interface Product { + id: number; + name: string; + shortDescription: string | null; + longDescription: string | null; + price: string; + marketPrice: string | null; + unitNotation: string; + images: string[]; + isOutOfStock: boolean; + store: { id: number; name: string; description: string | null } | null; + incrementStep: number; + productQuantity: number; + isFlashAvailable: boolean; + flashPrice: string | null; + deliverySlots: Array<{ id: number; deliveryTime: Date; freezeTime: Date; isCapacityFull: boolean }>; + specialDeals: Array<{ quantity: string; price: string; validTill: Date }>; + productTags: string[]; +} + +export async function initializeProducts(): Promise { + try { + console.log('Initializing product store in Redis...'); + + // Fetch all products with full details (similar to productMega logic) + const productsData = await db + .select({ + id: productInfo.id, + name: productInfo.name, + shortDescription: productInfo.shortDescription, + longDescription: productInfo.longDescription, + price: productInfo.price, + marketPrice: productInfo.marketPrice, + images: productInfo.images, + isOutOfStock: productInfo.isOutOfStock, + storeId: productInfo.storeId, + unitShortNotation: units.shortNotation, + incrementStep: productInfo.incrementStep, + productQuantity: productInfo.productQuantity, + isFlashAvailable: productInfo.isFlashAvailable, + flashPrice: productInfo.flashPrice, + }) + .from(productInfo) + .innerJoin(units, eq(productInfo.unitId, units.id)); + + // Fetch all stores + const allStores = await db.query.storeInfo.findMany({ + columns: { id: true, name: true, description: true }, + }); + const storeMap = new Map(allStores.map(s => [s.id, s])); + + // 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, new Date()) + ) + ); + const deliverySlotsMap = new Map(); + for (const slot of allDeliverySlots) { + if (!deliverySlotsMap.has(slot.productId)) deliverySlotsMap.set(slot.productId, []); + deliverySlotsMap.get(slot.productId)!.push(slot); + } + + // Fetch all special deals + const allSpecialDeals = await db + .select({ + productId: specialDeals.productId, + quantity: specialDeals.quantity, + price: specialDeals.price, + validTill: specialDeals.validTill, + }) + .from(specialDeals) + .where(gt(specialDeals.validTill, new Date())); + const specialDealsMap = new Map(); + for (const deal of allSpecialDeals) { + if (!specialDealsMap.has(deal.productId)) specialDealsMap.set(deal.productId, []); + specialDealsMap.get(deal.productId)!.push(deal); + } + + // Fetch all product tags + const allProductTags = await db + .select({ + productId: productTags.productId, + tagName: productTagInfo.tagName, + }) + .from(productTags) + .innerJoin(productTagInfo, eq(productTags.tagId, productTagInfo.id)); + const productTagsMap = new Map(); + for (const tag of allProductTags) { + if (!productTagsMap.has(tag.productId)) productTagsMap.set(tag.productId, []); + productTagsMap.get(tag.productId)!.push(tag.tagName); + } + + // Store each product in Redis + for (const product of productsData) { + const signedImages = scaffoldAssetUrl((product.images as string[]) || []); + const store = product.storeId ? storeMap.get(product.storeId) || null : null; + const deliverySlots = deliverySlotsMap.get(product.id) || []; + const specialDeals = specialDealsMap.get(product.id) || []; + const productTags = productTagsMap.get(product.id) || []; + + const productObj: Product = { + id: product.id, + name: product.name, + shortDescription: product.shortDescription, + longDescription: product.longDescription, + price: product.price.toString(), + marketPrice: product.marketPrice?.toString() || null, + unitNotation: product.unitShortNotation, + images: signedImages, + isOutOfStock: product.isOutOfStock, + store: store ? { id: store.id, name: store.name, description: store.description } : null, + incrementStep: product.incrementStep, + productQuantity: product.productQuantity, + isFlashAvailable: product.isFlashAvailable, + flashPrice: product.flashPrice?.toString() || null, + 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, + }; + + + await redisClient.set(`product:${product.id}`, JSON.stringify(productObj)); + } + + console.log('Product store initialized successfully'); + } catch (error) { + console.error('Error initializing product store:', error); + } +} + +export async function getProductById(id: number): Promise { + try { + const key = `product:${id}`; + const data = await redisClient.get(key); + if (!data) return null; + return JSON.parse(data) as Product; + } catch (error) { + console.error(`Error getting product ${id}:`, error); + return null; + } +} + +export async function getAllProducts(): Promise { + try { + // Get all keys matching the pattern "product:*" + const keys = await redisClient.KEYS('product:*'); + + if (keys.length === 0) { + return []; + } + + // Get all products using MGET for better performance + const productsData = await redisClient.MGET(keys); + + const products: Product[] = []; + for (const productData of productsData) { + if (productData) { + products.push(JSON.parse(productData) as Product); + } + } + + return products; + } catch (error) { + console.error('Error getting all products:', error); + return []; + } +} diff --git a/apps/db-helper-sqlite/src/trpc/apis/common-apis/common-trpc-index.ts b/apps/db-helper-sqlite/src/trpc/apis/common-apis/common-trpc-index.ts new file mode 100644 index 0000000..783b0e6 --- /dev/null +++ b/apps/db-helper-sqlite/src/trpc/apis/common-apis/common-trpc-index.ts @@ -0,0 +1,137 @@ +import { router, publicProcedure, protectedProcedure } from '@/src/trpc/trpc-index' +import { commonRouter } from '@/src/trpc/apis/common-apis/common' +import { db } from '../../../db/db_index' +import { keyValStore, productInfo, storeInfo } from '../../../db/schema' +import * as turf from '@turf/turf'; +import { z } from 'zod'; +import { mbnrGeoJson } from '@/src/lib/mbnr-geojson' +import { generateUploadUrl } from '@/src/lib/s3-client' +import { ApiError } from '@/src/lib/api-error' +import { getAllConstValues } from '@/src/lib/const-store' +import { CONST_KEYS } from '@/src/lib/const-keys' +import { assetsDomain, apiCacheKey } from '@/src/lib/env-exporter' + +const polygon = turf.polygon(mbnrGeoJson.features[0].geometry.coordinates); + +export async function scaffoldEssentialConsts() { + const consts = await getAllConstValues(); + + return { + freeDeliveryThreshold: consts[CONST_KEYS.freeDeliveryThreshold] ?? 200, + deliveryCharge: consts[CONST_KEYS.deliveryCharge] ?? 0, + flashFreeDeliveryThreshold: consts[CONST_KEYS.flashFreeDeliveryThreshold] ?? 500, + flashDeliveryCharge: consts[CONST_KEYS.flashDeliveryCharge] ?? 69, + popularItems: consts[CONST_KEYS.popularItems] ?? '5,3,2,4,1', + versionNum: consts[CONST_KEYS.versionNum] ?? '1.1.0', + playStoreUrl: consts[CONST_KEYS.playStoreUrl] ?? 'https://play.google.com/store/apps/details?id=in.freshyo.app', + appStoreUrl: consts[CONST_KEYS.appStoreUrl] ?? 'https://apps.apple.com/in/app/freshyo/id6756889077', + webViewHtml: null, + isWebviewClosable: true, + isFlashDeliveryEnabled: consts[CONST_KEYS.isFlashDeliveryEnabled] ?? true, + supportMobile: consts[CONST_KEYS.supportMobile] ?? '', + supportEmail: consts[CONST_KEYS.supportEmail] ?? '', + assetsDomain, + apiCacheKey, + }; +} + +export const commonApiRouter = router({ + product: commonRouter, + getStoresSummary: publicProcedure + .query(async () => { + const stores = await db.query.storeInfo.findMany({ + columns: { + id: true, + name: true, + description: true, + }, + }); + + return { + stores, + }; + }), + checkLocationInPolygon: publicProcedure + .input(z.object({ + lat: z.number().min(-90).max(90), + lng: z.number().min(-180).max(180), + })) + .query(({ input }) => { + try { + const { lat, lng } = input; + const point = turf.point([lng, lat]); // GeoJSON: [longitude, latitude] + const isInside = turf.booleanPointInPolygon(point, polygon); + return { isInside }; + } catch (error) { + throw new Error('Invalid coordinates or polygon data'); + } + }), + + generateUploadUrls: protectedProcedure + .input(z.object({ + contextString: z.enum(['review', 'product_info', 'store', 'notification', 'profile', 'complaint']), + mimeTypes: z.array(z.string()), + })) + .mutation(async ({ input }): Promise<{ uploadUrls: string[] }> => { + const { contextString, mimeTypes } = input; + + const uploadUrls: string[] = []; + const keys: string[] = []; + + for (const mimeType of mimeTypes) { + // Generate key based on context and mime type + let folder: string; + if (contextString === 'review') { + folder = 'review-images'; + } else if (contextString === 'product_info') { + folder = 'product-images'; + } else if (contextString === 'store') { + folder = 'store-images'; + } else if (contextString === 'profile') { + folder = 'profile-images'; + } else if (contextString === 'complaint') { + folder = 'complaint-images'; + } + // else if (contextString === 'review_response') { + // + // folder = 'review-response-images'; + // } + else { + folder = ''; + } + + const extension = mimeType === 'image/jpeg' ? '.jpg' : + mimeType === 'image/png' ? '.png' : + mimeType === 'image/gif' ? '.gif' : '.jpg'; + const key = `${folder}/${Date.now()}${extension}`; + + try { + const uploadUrl = await generateUploadUrl(key, mimeType); + uploadUrls.push(uploadUrl); + keys.push(key); + + } catch (error) { + console.error('Error generating upload URL:', error); + throw new ApiError('Failed to generate upload URL', 500); + } + } + return { uploadUrls }; + }), + healthCheck: publicProcedure + .query(async () => { + // Test DB connection by selecting product names + // await db.select({ name: productInfo.name }).from(productInfo).limit(1); + await db.select({ key: keyValStore.key }).from(keyValStore).limit(1); + + return { + status: "ok", + }; + }), + essentialConsts: publicProcedure + .query(async () => { + const response = await scaffoldEssentialConsts(); + return response; + }), +}); + +export type CommonApiRouter = typeof commonApiRouter; diff --git a/apps/db-helper-sqlite/src/trpc/apis/common-apis/common.ts b/apps/db-helper-sqlite/src/trpc/apis/common-apis/common.ts new file mode 100644 index 0000000..7a2f355 --- /dev/null +++ b/apps/db-helper-sqlite/src/trpc/apis/common-apis/common.ts @@ -0,0 +1,116 @@ +import { router, publicProcedure } from '@/src/trpc/trpc-index' +import { db } from '../../../db/db_index' +import { productInfo, units, productSlots, deliverySlotInfo, storeInfo } from '../../../db/schema' +import { eq, gt, and, sql, inArray } from 'drizzle-orm'; +import { generateSignedUrlsFromS3Urls, generateSignedUrlFromS3Url } from '@/src/lib/s3-client' +import { getAllProducts as getAllProductsFromCache } from '@/src/stores/product-store' +import { getDashboardTags as getDashboardTagsFromCache } from '@/src/stores/product-tag-store' + +export const getNextDeliveryDate = async (productId: number): Promise => { + const result = await db + .select({ deliveryTime: deliverySlotInfo.deliveryTime }) + .from(productSlots) + .innerJoin(deliverySlotInfo, eq(productSlots.slotId, deliverySlotInfo.id)) + .where( + and( + eq(productSlots.productId, productId), + eq(deliverySlotInfo.isActive, true), + eq(deliverySlotInfo.isCapacityFull, false), + gt(deliverySlotInfo.deliveryTime, new Date()) + ) + ) + .orderBy(deliverySlotInfo.deliveryTime) + .limit(1); + + + return result[0]?.deliveryTime || null; +}; + +export async function scaffoldProducts() { + // Get all products from cache + let products = await getAllProductsFromCache(); + products = products.filter(item => Boolean(item.id)) + + // Get suspended product IDs to filter them out + const suspendedProducts = await db + .select({ id: productInfo.id }) + .from(productInfo) + .where(eq(productInfo.isSuspended, true)); + + const suspendedProductIds = new Set(suspendedProducts.map(sp => sp.id)); + + // Filter out suspended products + products = products.filter(product => !suspendedProductIds.has(product.id)); + + // Format products to match the expected response structure + const formattedProducts = await Promise.all( + products.map(async (product) => { + const nextDeliveryDate = await getNextDeliveryDate(product.id); + return { + id: product.id, + name: product.name, + shortDescription: product.shortDescription, + price: parseFloat(product.price), + marketPrice: product.marketPrice ? parseFloat(product.marketPrice) : null, + unit: product.unitNotation, + unitNotation: product.unitNotation, + incrementStep: product.incrementStep, + productQuantity: product.productQuantity, + storeId: product.store?.id || null, + isOutOfStock: product.isOutOfStock, + isFlashAvailable: product.isFlashAvailable, + nextDeliveryDate: nextDeliveryDate ? nextDeliveryDate.toISOString() : null, + images: product.images, + flashPrice: product.flashPrice + }; + }) + ); + + return { + products: formattedProducts, + count: formattedProducts.length, + }; +} + +export const commonRouter = router({ + getDashboardTags: publicProcedure + .query(async () => { + // Get dashboard tags from cache + const tags = await getDashboardTagsFromCache(); + + return { + tags: tags, + }; + }), + + getAllProductsSummary: publicProcedure + .query(async () => { + const response = await scaffoldProducts(); + return response; + }), + + getStoresSummary: publicProcedure + .query(async () => { + const stores = await db.query.storeInfo.findMany({ + columns: { + id: true, + name: true, + description: true, + }, + }); + + return { + stores, + }; + }), + + healthCheck: publicProcedure + .query(async () => { + // Test DB connection by selecting product names + await db.select({ name: productInfo.name }).from(productInfo).limit(1); + + return { + status: "ok", + }; + }), +}); diff --git a/apps/db-helper-sqlite/tsconfig.json b/apps/db-helper-sqlite/tsconfig.json new file mode 100644 index 0000000..3b1e847 --- /dev/null +++ b/apps/db-helper-sqlite/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/src/db/*": ["./src/db/*"], + "@/src/*": ["../backend/src/*"], + "@/src/trpc/*": ["../backend/src/trpc/*"], + "@/src/lib/*": ["../backend/src/lib/*"], + "@/src/stores/*": ["../backend/src/stores/*"] + } + } +} diff --git a/apps/migrator/README.md b/apps/migrator/README.md index 30c87c0..09a8832 100644 --- a/apps/migrator/README.md +++ b/apps/migrator/README.md @@ -17,39 +17,40 @@ Data-only migration tool between Postgres and SQLite using Drizzle. Run from repo root: -```bash -bun --cwd apps/migrator run migrate --from postgres --to sqlite --source "" --target "" -``` +1) Edit the TypeScript config file: + +`apps/migrator/migrator.config.ts` + +2) Run migration: ```bash -bun --cwd apps/migrator run migrate --from sqlite --to postgres --source "" --target "" +bun --cwd apps/migrator run migrate ``` -### Flags +### Config fields (`apps/migrator/migrator.config.ts`) -- `--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`) +- `from`: `postgres` or `sqlite` +- `to`: `postgres` or `sqlite` +- `source`: Postgres connection string or SQLite file path +- `target`: Postgres connection string or SQLite file path +- `batchSize`: 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" +Update `apps/migrator/migrator.config.ts` and run: + +```bash +bun --cwd apps/migrator run migrate +``` ``` ```bash -bun --cwd apps/migrator run migrate \ - --from sqlite \ - --to postgres \ - --source "./sqlite.db" \ - --target "postgres://user:pass@host:5432/db" \ - --batch 1000 +Update `apps/migrator/migrator.config.ts` and run: + +```bash +bun --cwd apps/migrator run migrate +``` ``` ## Notes diff --git a/apps/migrator/migrator.config.ts b/apps/migrator/migrator.config.ts new file mode 100644 index 0000000..fccdd96 --- /dev/null +++ b/apps/migrator/migrator.config.ts @@ -0,0 +1,11 @@ +import type { MigrationConfig } from './src/lib/types' + +const config: MigrationConfig = { + from: 'postgres', + to: 'sqlite', + source: 'postgresql://postgres:meatfarmer_master_password@57.128.212.174:7447/meatfarmer' , + target: './sqlite.db', + batchSize: 500, +} + +export default config diff --git a/apps/migrator/mydatabase.db b/apps/migrator/mydatabase.db new file mode 100644 index 0000000..e69de29 diff --git a/apps/migrator/sqlite.db b/apps/migrator/sqlite.db new file mode 100644 index 0000000000000000000000000000000000000000..c2eb574f7ed48bf644d55dc0b680bc7504f243bf GIT binary patch literal 974848 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 literal 0 HcmV?d00001 diff --git a/apps/migrator/src/index.ts b/apps/migrator/src/index.ts index abf9d3c..42db74c 100644 --- a/apps/migrator/src/index.ts +++ b/apps/migrator/src/index.ts @@ -1,8 +1,11 @@ import { runPostgresToSqlite } from './postgres_to_sqlite' import { runSqliteToPostgres } from './sqlite_to_postgres' -import { parseArgs } from './lib/args' +import config from '../migrator.config' -const args = parseArgs(Bun.argv.slice(2)) +const args = { + ...config, + batchSize: config.batchSize ?? 500, +} if (args.from === 'postgres' && args.to === 'sqlite') { await runPostgresToSqlite(args) diff --git a/apps/migrator/src/lib/args.ts b/apps/migrator/src/lib/args.ts deleted file mode 100644 index b34c823..0000000 --- a/apps/migrator/src/lib/args.ts +++ /dev/null @@ -1,50 +0,0 @@ -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, - } -} diff --git a/apps/migrator/src/lib/migrate.ts b/apps/migrator/src/lib/migrate.ts index df35d5f..bf4d4d9 100644 --- a/apps/migrator/src/lib/migrate.ts +++ b/apps/migrator/src/lib/migrate.ts @@ -3,7 +3,7 @@ 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' +import { parseJsonValue, toBoolean, toDate, toJsonString } from './casts' export type Dialect = 'postgres' | 'sqlite' @@ -59,11 +59,8 @@ const normalizeJson = (value: unknown, tableName: TableName, column: string, toD return parseJsonValue(value, fallback) } -const normalizeTimestamps = (value: unknown, toDialect: Dialect) => { +const normalizeTimestamps = (value: unknown) => { if (value === null || value === undefined) return value - if (toDialect === 'sqlite') { - return toEpochSeconds(value as Date | number) - } return toDate(value as number | Date) } @@ -86,7 +83,7 @@ const transformRow = (row: Record, tableName: TableName, toDial }) timeCols.forEach((column) => { - output[column] = normalizeTimestamps(output[column], toDialect) + output[column] = normalizeTimestamps(output[column]) }) boolCols.forEach((column) => { diff --git a/apps/migrator/src/lib/types.ts b/apps/migrator/src/lib/types.ts new file mode 100644 index 0000000..c9c914b --- /dev/null +++ b/apps/migrator/src/lib/types.ts @@ -0,0 +1,7 @@ +export type MigrationConfig = { + from: 'postgres' | 'sqlite' + to: 'postgres' | 'sqlite' + source: string + target: string + batchSize?: number +} diff --git a/apps/migrator/src/postgres_to_sqlite/index.ts b/apps/migrator/src/postgres_to_sqlite/index.ts index 878e547..8ed80c7 100644 --- a/apps/migrator/src/postgres_to_sqlite/index.ts +++ b/apps/migrator/src/postgres_to_sqlite/index.ts @@ -1,8 +1,8 @@ -import type { MigrationArgs } from '../lib/args' +import type { MigrationConfig } from '../lib/types' import { createPostgresDb, createSqliteDb } from '../lib/db' import { runMigration } from '../lib/migrate' -export const runPostgresToSqlite = async (args: MigrationArgs) => { +export const runPostgresToSqlite = async (args: MigrationConfig & { batchSize: number }) => { const { db: sourceDb, pool } = createPostgresDb(args.source) const { db: targetDb, sqlite } = createSqliteDb(args.target) diff --git a/apps/migrator/src/postgres_to_sqlite/sqlite.db b/apps/migrator/src/postgres_to_sqlite/sqlite.db new file mode 100644 index 0000000000000000000000000000000000000000..d296495409dc9dcef1c4d410b96161e21882f89c GIT binary patch literal 323584 zcmeI*UyR&Fo*(d`{tPuOjkP}Cnd{YgMU8H@hpUn0u`J87to62LINCn-^hm94oCl6U za>(iyAvW0}*`txY&Z0+u?7c;jhrHzFfII|9kmPU&ED+=_K!O~Q_h9cOPkFciNfyXU zUV;UZhg9)jlilnYO^*ayt*@|>x>?04)~9~;W3hXzy>q)_`b2CxZd>!ki&Nj5;<%}w zisIDN)FJwNo&Ju0t%*^cznJ>%$={7?;JF>|y)nxROINwx4bwKrcGouVcZs4q-Hu}`U5~iY zORdwfOkLZwNO079ZMi0w>ay6VmTxy?v0Pn|KNZ#C(^YZ3DykzIQN@M0$TZYNmG!64 zSJI;sCwSrNRqn|JpLIFn^bv<=qf4uou2 zcjD{y)CG2N660&!T4B_-BWk*DIyO7DB3I<}F?wm)=Hm;=HqMUjx9Nh^n>)@6mrGo4 zBPU2Yu48m{e|R#Y0`J5#gi2I*RJ6oR4F*hfJdByS0xy(G+>`YYF%vg3`bv-Q6*+Me z^g3Qd@T7+Gt;bL5TCyRO6xdB?pFvuX9v5bK;mjHCYbBbbcE{4_0`znzepMKpgt%Z_ z^mrxYk*bbsggGZJ4cB*N>)3h6ql-~2(7E0(lKq_G4e`imNH0F>smQ!XE;e&8V$cLYlvnmi{(Abv0DR& zT8`7Ao5Z%(@szG>^)Fg8+NP}xw-Fs5Zs`kZ#_sI#VhA$x%aJGJOV7r6Je#a^|Jky4 z`zS9Ii`mKqG>ic0OM6DM+`DObh4EaT~#iy!#f-^@>O6 z6Ns&ofwxC9qZ%k&V3)Q?&y;p<9uAZqH!?~Zjhi?nD8ZW}nfBCJFen>WiSA`|qKsgQ zW8y`HbKL%Ojk$S_7cO1mdhI|{Q4H7o;tRIC&6Z2E0p0WD9Xph2H)oyW1wNsng2RjYHGIXP3CCU?UO5hSv3+;JuR9 zze1m&Klv&BW9fbR$AU!vc>6T{<8^`l@x2qX^iS^Ouczq$@CyPEfB*y_009U<00Izz z00bZaf$xsMP44JaZ}#Z>`uj`oy?bft1MS@p-@USVMZdDN`N8{}moI&Id2?y$($d8% zP5pzVcZv3)c4?{k;l<7Ojf;dVUD1gC-sYuuHSW*ey86+d73jFQlmBmu{tv$(009U< z00Izz00bZa0SG_<0uY!$fy0NVX4v=t^oRcO3jz>;00bZa0SG_<0uX=z1Rwx`2^PTf z{{&Aih6Vu$KmY;|fB*y_009U<00Iz*1n~TiP=EjgAOHafKmY;|fB*y_009V0z5t&8 zCx4DHLI^+r0uX=z1Rwwb2tWV=5P$%l{}BTafB*y_009U<00Izz00bZafyozO|NcMz z{lCedXN(X65P$##AOHafKmY;|fB*zuZ2^4$|7y=aMh^i9KmY;|fB*y_009U<00OUu z0G|I}jd{i>ApijgKmY;|fB*y_009U<;MEqu&;P&L^N-O(00Izz00bZa0SG_<0uX?} zt092z|6h%H#wZ~G0SG_<0uX=z1Rwwb2teS~7QpxaulD?7^bmjm1Rwwb2tWV=5P$## zAnS z^Dp`T#*?F;9{%;=*J#0SX@wX4tM{TipzZhGnB|3~t6cAfX&Yp_Yn%7GMA4mY$FY^J zN8IS8*6CQLu5DT*IO@H&T$4+6S!`6xw;QrpuCBVi)e()T;zC?x8tS6T z`cvpD>CuT3ym0j@_vC`lx*T!(h{LndrPWKg(kyZD>ud*2U^N{oSZk7U>yLr|A>Z#qki5R#Szm>ovK2qZ)LO9=IgdY#1135i#>`xS7fL1W$@++xi5nSxrN{S* zoVW>k9WNqyQp5Sy<0o}3*$_$!?54BNAT3Cb3p2cM<_!0>5=~OOV`+2&db$(8Dhy6S zTre(ryb|(ARmU~LoD-LZYdq>x*>sGDs_2t#Ka&K^w$>tESinwjiAVFLNBT!hPoW1L zYm1~Z%!<5PYEda${a%j^gknAF_`qBWy!+RAVn(edGyzMy98&K@s@ATz%lc{0BAY@Ell$x8R1 zEqk|*@E@UPdR% z2&OnDUQ{^8?LXI;o9B4p(j~6f4m1_TaLq5iV9VQVxilNlJx|`TLmAt-yee~S2R$=m z8sZ(fRxVZ2PhWJQ&&=G_yt_jiubG+tMoF~0ZQ`0btt{O*G%b8~iJJ;G5>aeuUEc}b zD|!7ZOL<2R(^XcDB|6+RO$p1XjKJ>ST@}A5e z2|^HgPeLo(@y#ZEVh)fpZ+?)`Q8Q&@MBd~1@AJahv)nhY2Xho{(b%Rb_3~7<&s516 zJqFLgQ4{_2oW0?N4~6OUohjdCFVmrOns=`1+F7o5I!ISRK2Yej8lK`i_XzzM zF8EL`b^NVpHD^D3OI6667(NoEO6ihUgO*ikXX6ioyp>MNb6jk2g~vN~-iCy3u+nNRJkOj~C|W zxu@aN)Lo}dlugaH>G;#H{~+6Mx@g>x7_n;#K56McNM!PcK|I|xJM0eIf6Pc8CXLMJ zGluCB-S0QV0*212NoRoWBa(a&Wfb-~>lQ_cKN^m+#PH4JU^zt%!m`^j*oQyE-R+T- z=yaWaoql@1#62;CKrx6#FWY^nc$PyyIH8Zz!$*EUJ9Wbq#+|^VCH7HOe=O-xYr2Gd zL6p%I=&gAaz3+CjADPj*P0Dw--___@qIGqR?h)v7v(oHZ^r>|3nN7wMKafQ0DDI{B zB)~z^1`W8+@GEc!Xauq`s??y6CWKNcecaR=@&(#K351b>89r8 z#r5zqiZ^#khkoNkZ2EBo`^=T`(mD2(xVV3qeU=dHw)%&1SAM)cH)$G-=A5X%tN+ytLxFV zt+4Om`a?;AZTOUU;Lqa|<+v@1n7uL5Pn?>~@C(6xe--fL2d@RUnqNLh1uJcfZsVii z3SOVg3)`^TxUn1Gw{zLu#h_jO$ z9^dc2hmJbCrAoxItp|snSL2aE@009U<00Izz00bZa0SG_< z0+TI(fB$c?=NF@c00bZa0SG_<0uX=z1Rwwb2rvPB|BpC;00bZa0SG_<0uX=z1Rwwb z2u!{Jp8qF*jxjFO^b9~ z$LQ+5(sG?{M=|ZDGkoMn%Qd-Fm&JPNdPNo=t)J$Fa+!PjR;B@MOEWEP)3i+gq2lRx ziP5!)7dMt)dN$Lrx_f0+Tqw+_rlE?a?UNR9#ap%VTB)`n-jp}QQlq|JuG03_fRM~muNmQ6wU9CE^c+f^W7#J#6of2D=rpo=Rr}DGW}SZ=PTWg!P?k&0|ja4v$uKS z?YFrnGvSPC58K4{y-xJ^nSoh~4v#w@p0D}cm@Yk0EqeJ6w1+w5j%yHCNl$(HJm0xT zqKRVj-6pPnSF?Skf7a0C)1g_8My*&0J!y5lCYNtigGgFXlM^MeCa=mhxwn-jdeI5V=x?cF_53_>~4~{$BuD45&Xoleu&l?#;p5^%ILKaD; zr|3@3f@*4(M=}eL)^u#kw22Zen&DMAd{R_3nBu{%eaF`^m3LDfP6xDlG^Nj6U)OA%Sk|-E4=XD) z8F=x&CR&GDokm8>am{4I-+TRsys-W@*IPDigKS43r z_q!ynFc&3&MzwsqA&ceeiu|bCSs zx`ImLZr8SZGnwlPs*bqE$MfIkg|lb5Z$jTFM10Z?H%yAjUY^R!l0nJAl4NQfWVQ$W zC!QoPWXkV%>2{kw_T_9;INLNBhj0QFVoGh|H$>Oj#nk zIe4K9F@=|1f=R*t@7x6m-~Z=*#(`rHfB*y_009U<00Izz00bZafyolU^Z#VcCq@GS z2tWV=5P$##AOHafKmY;|$P>W-|6iU8jzItd5P$##AOHafKmY;|fB*z0O90>hPu6^5 zG!TFQ1Rwwb2tWV=5P$##AOL|p0et_Tr-EY;fB*y_009U<00Izz00bZafyolU_y3bM zpBN1UAOHafKmY;|fB*y_009U=;KR*83 zL;s#0{F@W!^UfLn*mQ9^IQdEGN4#+E9QUVJd~MSr9oI3sy05ro%OnrHfw$+DYjUYB zi}lj=iY%%FrE2fZAM?W6d9L?~X&YoaF7~ySV%kkdVJ~d0O_Z)}-tQ)T#pM^G)*IFG z?S?Ftt1I%S{Z8UqgRQ9IdUd##DlVvTcdE3bO1yCXJonhk3^HzV@Iv3oA7)&gwq2M} zO+yt;+b1pJinnUzwNhYC)@r|kwHA& zH9NlP*lJLNonyAO7WHzi)FDqXH1F=Fqqzpd=wHT)yjp5h>S9x~Jd$bOC6?wBL-Bma zC0^K;7*{WT_IZ)@rMo1kr1`^5E_lA%^vyO|D9(Gu#iH#zC`wY&M?v~xfre3$>s`o9 zy=OVT(zzD{v$x*)U8gxZBRi|Xd2CAKhA94`8dRmPq^I}hd0~E@`v-4jrkBNBasqw* zF0f1^u_V{HwZf9G z?TDJrvIIM}B3I<}F?vnerjx7AwjCX2p})Tl3Q|w{BVJg(#`S1YPi6U*>vTIxo3uBH z>)kawsbxP{B<-3325ZxXve{s;!cbxeD=@Z4@1Es_YuC6Z*~CBCLL3K!$BX$HW3XD7 zJ>o`2E#c&dOtw!qC>xUCK&q8>zSeJ^sd};T$3c*vHp?y z{Gs0Y&r(rgA6?#Bo6_jcJ9&XY=1ty>)K=MPA5rqHQ%&bwDn-G zl)WvrO`ARqdL761q75iJLo?FHmEa0TTwONKVy0{eu%idw>LiiM_Djz%gqPQ=cj~oL znLf?Ug-{C3Vfwu}artNR^38?0xZmiRdG4L4nl~r@g1Rwwb2tWV=5P$##AOL}vMF2nl|FX;!t`h{FT{qTQ2{LZ1jc+V z`S`E*Xuo}#7tWvMdV*;iWV>sd_q#-K9g8To)+U~>HJia(@7i)rF4bkRQ7zwY$YQy= zB7Z8XgD0rsdR0_Yr>WwCnlz_MkG9|Eg)3LMuaEoMrj=@6=@7SVdYJejA|OHXxct$5m&rbE3cJm8{$oQLoD^yKH!D3XSp41p!-yx-p8Xl z^7d%GQC}}t>B(zywJuiI>F-9RvPiF|4eGi_^`c7ApdZ#b&!X4WG&7l9m`spi)Xa=iX%Dte$S~(3p z;}t%A;~lyd&vU=p2!eC4;lcOsN0$?=hr!};V>OMI6RpAA1oNd1ml~!=C(riTiqwfs zBbtRfTLDc=^Od-`f0%}?;<$9~`-kEnG7Y-i;?vvOwz8#JUD7{9-4$;8ZiRWc+1?dQR9ubfXF+2Ui;r-5kLHcTuru2EPx0Ful z@dBoqKlRdkFE@Ke={!|&=vKn+x@ug3x-ACx6c(tDuAbwC`FZZ?l^`_YI<#Xi{rcT( zkfe*ojg+{JQLz%-ZBywY9Y-47T|lfx7?IF>Mv4b+r+{(k}{5kr6g1Rwwb2tWV= z5P$##AOHaf>>+^f|MvhwF$5q00SG_<0uX=z1Rwwb2tZ&01n~X;1WY1^009U<00Izz z00bZa0SG_<0ub0k0N?-b0fb@*KmY;|fB*y_009U<00Izzzyt{3`~L};L<|7}5P$## zAOHafKmY;|fB*y_u!jJ?|K9@$#Snl11Rwwb2tWV=5P$##AOL|05STsw#?*{>3g}uWiURa*z zdgn~rAlqG!xQao1&9povcw-t$*Ea8WNxJA~%Qd-Fm&Hc4e7hlwxF44kZr z>(y)pRa^*9Fb!3D^wm#!VSb+b`kJq8TA8lWjoyg5t(UG>h%4Tz zmDftO4e_SDA(k5T^>US-y(U-dVs)MVZd59Z^o(eX{nOHgo2H|RKH2tJO+)jE;xv^_ z)AjEr^;t=aP&&6?)6w;ANApd`?jP&8PSdoAVz#vw=^r*d#p`+<)mtiQHpIm_$*Iw{^x9OX0vQV7&ii<_tc~F$3%<0_@8^yS%uddhR@{MXB znwmVZCa=mhxw3ej;QHOgdJOvD{}f+LE2gUgcr`7;U51< zfBxxE4QfNxNw1cbUB3V zSdK;)uxlxvulZfCJ9t1IU>z(USNC8*>OJx>M?D-vR1k-Kk*yxnZWWUWDoDMzukphA zC9by|W;NS#S}hv)!L<6$Jz{%G@K>DMaw@DuG6Oj-r)H+9DAVOsV;L{#RF!%^|Ckpp zUE&^{3a2Tjb~oqP^1x)}R2g@^!V4P?bj_fdY20*UX`Zia5!Y;*sq|KmI#+q&vcUCD zN3+9jFN$~9aec*hXq?hKLGL-fcYVYZJ<+ZY9Z`y*Zu1a9Z82%Odnx+o2j zh7F9BQ3g64#%y*iOR=?fbOT5Q>`v=SkN}^A*XQ|;OYaqS)9JtZY4%F{1>;V6&V>Z` zIpXQA*~#9%g4-6$BmG;~0av*5z-IT%_->uL?PjxMSWn8_WN02}HiN}H#;wNqkQdIL z<(`}jA|cgO>g7)ct^56rdAAvXy~`~oyd2kIn}+`0fX&dsilUhvVG{jby=%Lz@#KVXd8bZei@aYdO-&uX&t`Q;OU-I<<*9Q%&YRVsQhy0e zuZH{Lx;!n+3*49K%O`EREoQe6ud>@k2i5u;-XI@^$E03mB}_vP!ZgI%3L3nby|mz1 z|DxhW@@!k$eyFiviLNHz#kQSIx($6UtC()v=9YP3X^DG8lXkpqrwN>dmrd$ExMR`>3T)ZYrHU{nuaQxwoh8b6>rtbYo*$TcvIdGOO5(^xk?*YldE;H zx=w#LDwRcgM&^PvyT+{*Hu1J2YPxSaHaoT= zSLF1uf>f8Mg?WMdG6=6Qf)vu$Osne=*Q?}4Pr6zdCP8Hu9Koro)T^xUf*^1^4}z!& zii1CHW+NazZ>)K@wKfT7gK3972b06zww+DWN);bqG78ep+%hjLEpd;WWH^fL_-518 zHAd^Pab%DD@$f*i6{yx&qxMZd9#=YCRI{zMXbx~`46-F~@Bmad9phn6v}>J?MaNAS zyAn+w>#ra^Ucb%@lEi(p(MK|E-8ASL3xSe%v(n@$k2Z3l { +export const runSqliteToPostgres = async (args: MigrationConfig & { batchSize: number }) => { const { db: sourceDb, sqlite } = createSqliteDb(args.source) const { db: targetDb, pool } = createPostgresDb(args.target) diff --git a/apps/user-ui/app/(drawer)/(tabs)/home/index.tsx b/apps/user-ui/app/(drawer)/(tabs)/home/index.tsx index 05604b0..77aa0ad 100755 --- a/apps/user-ui/app/(drawer)/(tabs)/home/index.tsx +++ b/apps/user-ui/app/(drawer)/(tabs)/home/index.tsx @@ -380,6 +380,7 @@ export default function Dashboard() { error, } = useAllProducts(); + const { data: essentialConsts, isLoading: isLoadingConsts, error: constsError, refetch: refetchConsts } = useGetEssentialConsts(); const { data: storesData, refetch: refetchStores } = useStores(); diff --git a/apps/user-ui/components/ProductCard.tsx b/apps/user-ui/components/ProductCard.tsx index 5206dd8..6be6716 100644 --- a/apps/user-ui/components/ProductCard.tsx +++ b/apps/user-ui/components/ProductCard.tsx @@ -1,5 +1,6 @@ -import React from 'react'; -import { View, Alert, ActivityIndicator } from 'react-native'; + +import React, { useMemo } from 'react'; +import { View, Alert, TouchableOpacity, Text } from 'react-native'; import { Image } from 'expo-image'; import { tw, theme, MyText, MyTouchableOpacity, Quantifier, MiniQuantifier } from 'common-ui'; import CartIcon from '@/components/icons/CartIcon'; @@ -14,11 +15,7 @@ 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' @@ -50,18 +47,6 @@ const ProductCard: React.FC = ({ containerComp: ContainerComp = React.Fragment, useAddToCartDialog = false, }) => { - const imageUri = item.images?.[0] - const [imageStatus, setImageStatus] = React.useState<'loading' | 'loaded' | 'error'>('loading') - const [imageError, setImageError] = React.useState(null) - const [updater, setUpdater] = React.useState(0) - - React.useEffect(() => { - const intervalId = setInterval(() => { - setUpdater(prev => prev + 1) - }, 5000) - return () => clearInterval(intervalId) - }, []) - const { data: cartData } = useGetCart(); const { getQuickestSlot } = useProductSlotIdentifier(); const { setAddedToCartProduct } = useCartStore(); @@ -85,41 +70,25 @@ const ProductCard: React.FC = ({ const cartItem = cartData?.items?.find((cartItem: any) => cartItem.productId === item.id); const quantity = cartItem?.quantity || 0; - // Get slots data from central store - const slots = useCentralSlotStore((state) => state.slots); - const productSlotsMap = useCentralSlotStore((state) => state.productSlotsMap); + // Query all slots with products + const { data: slotsData } = trpc.user.slots.getSlotsWithProducts.useQuery(); // Create slot lookup map - const slotMap = React.useMemo(() => { + const slotMap = useMemo(() => { const map: Record = {}; - slots?.forEach((slot: any) => { + slotsData?.slots?.forEach((slot: any) => { map[slot.id] = slot; }); return map; - }, [slots]); + }, [slotsData]); // Get cart item's slot delivery time if item is in cart const cartSlot = cartItem?.slotId ? slotMap[cartItem.slotId] : null; const displayDeliveryDate = cartSlot?.deliveryTime || item.nextDeliveryDate; - React.useEffect(() => { - if (imageUri) { - setImageStatus('loading') - setImageError(null) - return - } - - setImageStatus('error') - setImageError('No image available') - }, [imageUri]) - // Precompute the next slot and determine display out of stock status const slotId = getQuickestSlot(item.id); - - // Use isOutOfStock from productSlotsMap (all products now included) - const productSlotInfo = productSlotsMap[item.id]; - const isOutOfStockFromSlots = productSlotInfo?.isOutOfStock; - const displayIsOutOfStock = isOutOfStockFromSlots || !slotId; + const displayIsOutOfStock = item.isOutOfStock || !slotId; // if(item.name.startsWith('Mutton Curry Cut')) { // console.log({slotId, displayIsOutOfStock}) @@ -151,7 +120,6 @@ const ProductCard: React.FC = ({ } }; - // console.log('rendering the product cart for id', item.id) return ( = ({ > >>>>>> main style={{ width: "100%", height: itemWidth, resizeMode: "cover" }} - onLoadStart={() => { - setImageStatus('loading') - setImageError(null) - }} - // onLoadEnd={() => { - // setImageError('loading stopped indefinitely') - // - // }} - onLoad={() => setImageStatus('loaded')} - onError={(event) => { - setImageStatus('error') - setImageError( 'Image failed to load') - }} /> - - {imageStatus === 'error' && ( - - - - {imageError || 'Image failed to load'} - - - )} {displayIsOutOfStock && ( diff --git a/apps/user-ui/src/hooks/prominent-api-hooks.ts b/apps/user-ui/src/hooks/prominent-api-hooks.ts index fab59e8..fed1c32 100644 --- a/apps/user-ui/src/hooks/prominent-api-hooks.ts +++ b/apps/user-ui/src/hooks/prominent-api-hooks.ts @@ -33,6 +33,7 @@ function useCacheUrl(filename: string): string | null { export function useAllProducts() { const cacheUrl = useCacheUrl(CACHE_FILENAMES.products) + console.log(cacheUrl) return useQuery({ queryKey: ['all-products', cacheUrl], queryFn: async () => { diff --git a/packages/ui/index.ts b/packages/ui/index.ts index b182e69..e333601 100755 --- a/packages/ui/index.ts +++ b/packages/ui/index.ts @@ -64,16 +64,13 @@ 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.5:4000'; -<<<<<<< HEAD +const BASE_API_URL = 'http://192.168.1.5:4000'; // 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 = '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) { diff --git a/sqlite.db b/sqlite.db new file mode 100644 index 0000000000000000000000000000000000000000..d296495409dc9dcef1c4d410b96161e21882f89c GIT binary patch literal 323584 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