package org.sculptor.simplecqrs.command.serviceimpl;
import org.sculptor.simplecqrs.command.domain.InventoryItem;
import org.sculptor.simplecqrs.command.exception.InventoryItemNotFoundException;
import org.springframework.stereotype.Service;
/**
* Implementation of InventoryFacade.
*/
@Service("inventoryFacade")
public class InventoryFacadeImpl extends InventoryFacadeImplBase {
public InventoryFacadeImpl() {
}
@Override
public void createInventoryItem(String itemId, String name) {
InventoryItem item = InventoryItem.createNew(itemId, name);
getInventoryItemRepository().save(item);
}
@Override
public void deactivateInventoryItem(String itemId) {
InventoryItem item = tryGetItem(itemId);
item.deactivate();
getInventoryItemRepository().save(item);
}
@Override
public void renameInventoryItem(String itemId, String newName) {
InventoryItem item = tryGetItem(itemId);
item.rename(newName);
getInventoryItemRepository().save(item);
}
@Override
public void checkInItemsToInventory(String itemId, int count) {
InventoryItem item = tryGetItem(itemId);
item.checkIn(count);
getInventoryItemRepository().save(item);
}
@Override
public void removeItemsFromInventory(String itemId, int count) {
InventoryItem item = tryGetItem(itemId);
item.remove(count);
getInventoryItemRepository().save(item);
}
private InventoryItem tryGetItem(String itemId) {
try {
return getInventoryItemRepository().findByKey(itemId);
} catch (InventoryItemNotFoundException e) {
throw new IllegalStateException("Unknown item: " + itemId);
}
}
}