Developer Resourcescatalogdigital-key
Digital Key Module Backend Documentation
Backend architecture and runtime contracts for admin-managed digital product key pools.
Digital Key Module - Backend Documentation
1. Scope and Boundaries
The digital key backend owns the product_digital_keys table and the admin flows that manage the key pool lifecycle. Each digital product references a pool of keys that are assigned to orders at delivery time. There is no customer or mobile digital-key module in the current repo.
2. Module Composition
Key Pool Management (Catalog)
- Aggregate admin composition:
apps/api/src/modules/catalog/catalog-admin.module.ts - Leaf module:
apps/api/src/modules/catalog/admin/digital-key/digital-key-admin.module.ts - Controller:
apps/api/src/modules/catalog/admin/digital-key/digital-key-admin.controller.ts - Service:
apps/api/src/modules/catalog/admin/digital-key/digital-key-admin.service.ts
Digital Delivery (Order)
- Digital delivery endpoint:
apps/api/src/modules/order/admin/order-admin.controller.ts - Digital delivery service method:
apps/api/src/modules/order/admin/order-admin.service.ts
3. Data Model
- Table:
product_digital_keys - Schema file:
packages/db/src/schema/product/product-digital-key.ts - Product FK:
packages/db/src/schema/product/product.tsviaproduct_digital_keys.product_id
Primary columns:
id- serial primary keyproduct_id- FK toproducts.idkey_value- the actual license / product key stringstatus- enum:available|assigned|expired(default:available)assigned_at- timestamp when key was assigned to an orderorder_item_id- FK toorder_items.idwhen assignedcreated_atupdated_at
Unique constraint: (product_id, key_value) — no duplicate keys per product.
4. Runtime Rules
- Keys are created in
availablestatus only. - A key can only be assigned once —
onConflictDoNothingon insert prevents duplicates. - Assignment transfers key from
available→assignedand links it to the order item. - Deleting a key is only allowed when status is
available. - Digital delivery is a synchronous admin action: keys are assigned and emailed in the same request.
5. Admin API — Key Pool Management
All endpoints under admin/catalog/products/:productId/keys:
| Method | Path | Permission | Description |
|---|---|---|---|
POST | /api/admin/catalog/products/:productId/keys | DigitalKeys_CREATE | Add keys to the pool |
GET | /api/admin/catalog/products/:productId/keys | DigitalKeys_READ | List keys in the pool (paginated) |
GET | /api/admin/catalog/products/:productId/keys/summary | DigitalKeys_READ | Pool summary (available/assigned/expired counts) |
DELETE | /api/admin/catalog/products/:productId/keys/:keyId | DigitalKeys_DELETE | Delete an available key |
6. Admin API — Digital Order Delivery
All endpoints under admin/orders:
| Method | Path | Permission | Description |
|---|---|---|---|
POST | /api/admin/orders/:id/send-digital-delivery | DigitalKeys_SEND_DELIVERY | Assign keys and send digital delivery |
GET | /api/admin/orders/:id/digital-keys | Orders_READ | Get digital keys assigned to an order |
7. Delivery Flow
- Admin triggers
POST /api/admin/orders/:id/send-digital-delivery. - System checks the order is
paidandorder_typeisdigital. - For each digital order item, an
availablekey from the product's pool is claimed and assigned. - Keys are linked to their respective
order_itemrecords. - An email with the assigned keys is sent to the customer.
- Fulfillment status transitions to
key_sent. - A
DIGITAL_KEY_DELIVERYnotification event is emitted.
8. Error Contracts
DIGITAL_KEY_NOT_FOUND— No available key in the pool for a digital productDIGITAL_KEY_IN_USE— Attempt to delete a key that is already assignedORDER_NOT_DIGITAL— Digital delivery attempted on a non-digital order
9. File Map
| Concern | File Path | Purpose |
|---|---|---|
| Admin digital key module | apps/api/src/modules/catalog/admin/digital-key/* | Admin CRUD for key pool |
| Digital key schema | packages/db/src/schema/product/product-digital-key.ts | product_digital_keys table definition |
| Order admin controller | apps/api/src/modules/order/admin/order-admin.controller.ts | Digital delivery endpoints |