Skip to content

Commit b88aeba

Browse files
committed
Implemented shopping cart confirmation
1 parent 36bae0f commit b88aeba

File tree

22 files changed

+202
-127
lines changed

22 files changed

+202
-127
lines changed

samples/unwrapping_onion/.vscode/launch.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@
4545
"--watchAll"
4646
],
4747
"console": "integratedTerminal",
48-
"internalConsoleOptions": "neverOpen",
49-
"runtimeExecutable": "/home/oskar/.nvm/versions/node/v18.7.0/bin/node"
48+
"internalConsoleOptions": "neverOpen"
5049
}
5150
]
5251
}

samples/unwrapping_onion/src/core/commands/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export const CommandBusFactory = (): CommandBus => {
4444
return commandBus;
4545
};
4646

47-
export const RegisterCommandHandler = <C extends Command>(
47+
export const registerCommandHandler = <C extends Command>(
4848
commandType: Constructor<C>,
4949
commandHandler: CommandHandler<C>
5050
) => {

samples/unwrapping_onion/src/core/queries/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export const QueryBusFactory = (): QueryBus => {
4242
return queryBus;
4343
};
4444

45-
export const RegisterQueryHandler = <C extends Query, Result>(
45+
export const registerQueryHandler = <C extends Query, Result>(
4646
queryType: Constructor<C>,
4747
queryHandler: QueryHandler<C, Result>
4848
) => {

samples/unwrapping_onion/src/ecommerce/application/shoppingCarts/commandHandlers/addProductToShoppingCartHandler.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { CommandHandler } from '#core/commands';
2-
import ShoppingCartRepository from '../../../infrastructure/shoppingCarts/shoppingCartRepository';
3-
import AddProductItemToShoppingCart from '../commands/shoppingCarts/addProductItemToShoppingCart';
4-
import ShoppingCartMapper from '../mapper';
2+
import { ShoppingCartRepository } from 'src/ecommerce/infrastructure/shoppingCarts/shoppingCartRepository';
3+
import { AddProductItemToShoppingCart } from '../commands/shoppingCarts/addProductItemToShoppingCart';
4+
import { ShoppingCartMapper } from '../mapper';
55

6-
export default class AddProductItemToShoppingCartHandler
6+
export class AddProductItemToShoppingCartHandler
77
implements CommandHandler<AddProductItemToShoppingCart>
88
{
99
constructor(
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { CommandHandler } from '#core/commands';
2+
import { ShoppingCartRepository } from 'src/ecommerce/infrastructure/shoppingCarts/shoppingCartRepository';
3+
import { ConfirmShoppingCart } from '../commands/shoppingCarts/confirmShoppingCart';
4+
import { ShoppingCartMapper } from '../mapper';
5+
6+
export class ConfirmShoppingCartHandler
7+
implements CommandHandler<ConfirmShoppingCart>
8+
{
9+
constructor(
10+
private repository: ShoppingCartRepository,
11+
private mapper: ShoppingCartMapper
12+
) {}
13+
14+
async handle(command: ConfirmShoppingCart): Promise<void> {
15+
const model = await this.repository.find(command.shoppingCartId);
16+
17+
if (model === null) {
18+
throw Error(`Shopping cart with id ${command.shoppingCartId} not found!`);
19+
}
20+
21+
const aggregate = this.mapper.toAggregate(model);
22+
aggregate.confirm();
23+
24+
await this.repository.add(this.mapper.toModel(aggregate));
25+
}
26+
}

samples/unwrapping_onion/src/ecommerce/application/shoppingCarts/commandHandlers/openShoppingCartHandler.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { CommandHandler } from '#core/commands';
2-
import OpenShoppingCart from '../commands/shoppingCarts/openShoppingCart';
3-
import ShoppingCartRepository from '../../../infrastructure/shoppingCarts/shoppingCartRepository';
4-
import ShoppingCartMapper from '../mapper';
5-
import ShoppingCart from '../../../domain/aggregates/shoppingCarts';
2+
import { OpenShoppingCart } from '../commands/shoppingCarts/openShoppingCart';
3+
import { ShoppingCart } from 'src/ecommerce/domain/aggregates/shoppingCarts';
4+
import { ShoppingCartRepository } from 'src/ecommerce/infrastructure/shoppingCarts/shoppingCartRepository';
5+
import { ShoppingCartMapper } from '../mapper';
66

7-
export default class OpenShoppingCartHandler
7+
export class OpenShoppingCartHandler
88
implements CommandHandler<OpenShoppingCart>
99
{
1010
constructor(
@@ -15,7 +15,7 @@ export default class OpenShoppingCartHandler
1515
handle(command: OpenShoppingCart): Promise<void> {
1616
const aggregate = ShoppingCart.open(
1717
command.shoppingCartId,
18-
command.clientId
18+
command.customerId
1919
);
2020

2121
return this.repository.add(this.mapper.toModel(aggregate));
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { CommandHandler } from '#core/commands';
2+
import { ShoppingCartRepository } from 'src/ecommerce/infrastructure/shoppingCarts/shoppingCartRepository';
3+
import { RemoveProductItemFromShoppingCart } from '../commands/shoppingCarts/removeProductItemFromShoppingCart';
4+
import { ShoppingCartMapper } from '../mapper';
5+
6+
export class RemoveProductItemFromShoppingCartHandler
7+
implements CommandHandler<RemoveProductItemFromShoppingCart>
8+
{
9+
constructor(
10+
private repository: ShoppingCartRepository,
11+
private mapper: ShoppingCartMapper
12+
) {}
13+
14+
async handle(command: RemoveProductItemFromShoppingCart): Promise<void> {
15+
const model = await this.repository.find(command.shoppingCartId);
16+
17+
if (model === null) {
18+
throw Error(`Shopping cart with id ${command.shoppingCartId} not found!`);
19+
}
20+
21+
const aggregate = this.mapper.toAggregate(model);
22+
aggregate.removeProductItem(command.productItem);
23+
24+
await this.repository.add(this.mapper.toModel(aggregate));
25+
}
26+
}

samples/unwrapping_onion/src/ecommerce/application/shoppingCarts/commands/shoppingCarts/addProductItemToShoppingCart.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Command } from '#core/commands';
22
import { ProductItem } from 'src/ecommerce/common/shoppingCarts/productItem';
33

4-
export default class AddProductItemToShoppingCart extends Command {
4+
export class AddProductItemToShoppingCart extends Command {
55
constructor(
66
public readonly shoppingCartId: string,
77
public readonly productItem: ProductItem

samples/unwrapping_onion/src/ecommerce/application/shoppingCarts/commands/shoppingCarts/confirmShoppingCart.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Command } from '#core/commands';
22

3-
export default class ConfirmShoppingCart extends Command {
3+
export class ConfirmShoppingCart extends Command {
44
constructor(public readonly shoppingCartId: string) {
55
super();
66
}

samples/unwrapping_onion/src/ecommerce/application/shoppingCarts/commands/shoppingCarts/openShoppingCart.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { Command } from '#core/commands';
22

3-
export default class OpenShoppingCart extends Command {
3+
export class OpenShoppingCart extends Command {
44
constructor(
55
public readonly shoppingCartId: string,
6-
public readonly clientId: string
6+
public readonly customerId: string
77
) {
88
super();
99
}

0 commit comments

Comments
 (0)