0

I am attempting to reuse a service (Inventory) in another service (Order) class like so

order.module.ts

import { InventoryModule } from '../inventory/inventory.module';

@Module({
  imports: [TypeOrmModule.forFeature([OrderEntity]), InventoryModule],
  controllers: [OrderController],
  providers: [OrderService],
})
export class OrderModule {}

and then use InventoryService methods inside OrderService like so

@Injectable()
export class OrderService {
    constructor(
        @InjectRepository(OrderEntity) private orderRepository: Repository<OrderEntity>,
        private inventoryService: InventoryService) {}

    /**
     * Add order item
     * @param data Object
     */
    async add(data: OrderDTO) {
        const { inventory_item_id } = data
        const inventoryItem = await this.inventoryService.getOne(inventory_item_id)

        if (inventoryItem.quantity_available <= 0) {
            throw new Error('Cannot add item to order, insufficient quantities!')
        }

        const orderItem = await this.orderRepository.create(data)

        if (orderItem) {
            const updatedInventoryItemQuantity = inventoryItem.quantity_available - 1
            const updatedInventoryItem = await this.inventoryService.edit(inventory_item_id, {
                quantity_available: updatedInventoryItemQuantity,
            })

        }
        await this.orderRepository.save(orderItem)
        return orderItem
    }

but I get the following stack trace:

Require stack:
- /Users/jred/workspace/projects/my-proj/dist/order/order.service.js
- /Users/jred/workspace/projects/my-proj/dist/order/order.controller.js
- /Users/jred/workspace/projects/my-proj/dist/order/order.module.js
- /Users/jred/workspace/projects/my-proj/dist/app.module.js
- /Users/jred/workspace/projects/my-proj/dist/main.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:623:15)
    at Function.Module._load (internal/modules/cjs/loader.js:527:27)
    at Module.require (internal/modules/cjs/loader.js:681:19)
    at require (internal/modules/cjs/helpers.js:16:16)
    at Object.<anonymous> (/Users/jred/workspace/projects/my-proj/dist/order/order.service.js:19:29)
    at Module._compile (internal/modules/cjs/loader.js:774:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:785:10)
    at Module.load (internal/modules/cjs/loader.js:641:32)
    at Function.Module._load (internal/modules/cjs/loader.js:556:12)
    at Module.require (internal/modules/cjs/loader.js:681:19) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/Users/jred/workspace/projects/my-proj/dist/order/order.service.js',
    '/Users/jred/workspace/projects/my-proj/dist/order/order.controller.js',
    '/Users/jred/workspace/projects/my-proj/dist/order/order.module.js',
    '/Users/jred/workspace/projects/my-proj/dist/app.module.js',
    '/Users/jred/workspace/projects/my-proj/dist/main.js'
  ]
}

anyone experience this? what is the correct way to call an imported service in another module?

asus
  • 1,427
  • 3
  • 25
  • 59

2 Answers2

0

Check your app.module.ts.

Make sure you added InventoryModule in the imports array.

And also, make sure you are exporting InventoryService from InventoryModule.

// app.module.ts
@Module({
    imports: [InventoryModule, ...othermodules],
    exports: [],
    providers: []
})
export class ApplicationModule {}

// inventory.module.ts
@Module({
    imports: [...yourModules],
    exports: [InventoryService],
    providers: [InventoryService]
})
export class InventoryModule {}
andressh11
  • 546
  • 3
  • 7
0

the problem was within my Order.service.ts file with the auto import syntax

this import that included src

import { InventoryService } from 'src/inventory/inventory.service';

had to be changed to this

import { InventoryService } from '../inventory/inventory.service';

asus
  • 1,427
  • 3
  • 25
  • 59