ItemServiceImpl.java
package no.ntnu.idi.stud.savingsapp.service.impl;
import java.sql.Timestamp;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import no.ntnu.idi.stud.savingsapp.model.store.Inventory;
import no.ntnu.idi.stud.savingsapp.model.store.InventoryId;
import no.ntnu.idi.stud.savingsapp.model.store.Item;
import no.ntnu.idi.stud.savingsapp.model.user.User;
import no.ntnu.idi.stud.savingsapp.repository.InventoryRepository;
import no.ntnu.idi.stud.savingsapp.repository.StoreRepository;
import no.ntnu.idi.stud.savingsapp.service.ItemService;
import no.ntnu.idi.stud.savingsapp.service.UserService;
/**
* Implementation of the ItemService interface for items.
*/
@Service
public class ItemServiceImpl implements ItemService {
@Autowired
private InventoryRepository inventoryRepository;
@Autowired
private StoreRepository storeRepository;
@Autowired
private UserService userService;
/**
* Retrieves the inventory of items for a specific user.
* @param userId the unique identifier of the user whose inventory is to be retrieved
* @return a list of {@link Item} objects representing the user's inventory
*/
@Override
public List<Item> getInventory(Long userId) {
return storeRepository.getInventory(userId);
}
/**
* Retrieves a list of all items available in the store.
* @return a list of {@link Item} objects representing all items currently available
* in the store
*/
@Override
public List<Item> getStore() {
return storeRepository.findAll();
}
/**
* Retrieves a specific item from the store based on its identifier.
* @param itemId the unique identifier of the item to be retrieved
* @return the {@link Item} corresponding to the provided identifier, or null if no
* such item exists
*/
@Override
public Item getItemFromId(Long itemId) {
Optional<Item> item = storeRepository.findById(itemId);
if (item.isPresent()) {
return item.get();
}
else {
return null;
}
}
/**
* Adds an item to the inventory of a specified user.
* @param user the {@link User} object representing the user to whom the item will be
* added
* @param item the {@link Item} to be added to the user's inventory
*/
@Override
public Boolean addItem(User user, Item item) {
InventoryId inventoryId = new InventoryId(item, user);
if (userService.hasMorePoints(user, item.getPrice())) {
inventoryRepository.save(new Inventory(inventoryId, new Timestamp(System.currentTimeMillis())));
userService.deductPoints(user.getId(), item.getPrice());
return true;
}
else {
return false;
}
}
}