medusa-plugin-quickink-logistics
v0.0.1
Published
A starter for Medusa plugins.
Maintainers
Readme
medusa-plugin-quickink-logistics
This README documents plugin purpose, setup, APIs, and CSV import behavior.
Quickink logistics plugin for Medusa.
It manages serviceability by pincode with CRUD APIs and CSV import.
Module key
QUICKINK_LOGISTICS_MODULE = "quickink_logistics"
Data model
Table: quickink_pincode
idpincodecod_deliveryprepaid_deliverypickupreverse_pickupcreated_atupdated_atdeleted_at
Install in Medusa app
Add plugin and module in your Medusa app medusa-config.ts:
plugins: [
{
resolve: "medusa-plugin-quickink-logistics",
},
],
modules: [
{
resolve: "medusa-plugin-quickink-logistics/modules/quickink-logistics",
},
]Then run:
npx medusa db:migrateRequired for CSV bulk import: migrations must install the partial unique index IDX_quickink_pincode_pincode_active_unique on ("pincode") WHERE "deleted_at" IS NULL so upsert can run and soft-deleted pincodes can be re-created. If import fails with no unique or exclusion constraint matching the ON CONFLICT specification, run npx medusa db:migrate again.
Admin APIs
GET /admin/quickink-logistics/pincodesGET /admin/quickink-logistics/pincodes/:idPOST /admin/quickink-logistics/pincodes(rejects duplicate active pincode withDUPLICATE_ERROR)PUT /admin/quickink-logistics/pincodes/:idDELETE /admin/quickink-logistics/pincodes/:idPUT /admin/quickink-logistics/pincodes/pincode/:pincode(update by pincode value; active row only)DELETE /admin/quickink-logistics/pincodes/pincode/:pincode(soft-delete by pincode value; active row only)POST /admin/quickink-logistics/pincodes/import
Admin UI
After building the plugin, the Medusa Admin includes a Qikink serviceability page (Extensions) for CSV import, search, filters, pagination (50 per page), inline boolean toggles, create/edit modals, and soft-delete per row.
List query params
limit(default20)offset(default0)pincode(optional contains search)deleteonly(truereturns only soft-deleted rows; preferlist_scopebelow)list_scope:active|deleted|all(default: derive fromdeleteonlywhen unset)cod_delivery,prepaid_delivery,pickup,reverse_pickup(optional exacttrue/falsefilters)
CSV import
Endpoint:
curl -X POST http://localhost:9000/admin/quickink-logistics/pincodes/import \
-H "Cookie: connect.sid=..." \
-F "[email protected]"Expected CSV headers:
Pincode,COD Delivery,Prepaid Delivery,Pickup,Reverse Pickup
737102,true,true,true,true
737137,true,true,true,falseNotes:
- Header names are matched case-insensitively.
- Boolean values accept
true/false,1/0,yes/no. - If a pincode appears multiple times in one CSV, the last row wins.
- Import upserts by pincode. Rows not in the CSV stay unchanged.
- Large imports use batched
INSERT ... ON CONFLICT(PostgreSQL). Tune withQUICKINK_CSV_UPSERT_BATCH_SIZE(default2000).
