StudentLoanManagement
ItemService.java
Go to the documentation of this file.
1package com.student_loan.service;
2
3import java.util.ArrayList;
4import java.util.List;
5import java.util.Optional;
6import java.util.stream.Collectors;
7
8import org.springframework.beans.factory.annotation.Autowired;
9import org.springframework.stereotype.Service;
10
11import com.student_loan.model.Item;
12import com.student_loan.model.Item.ItemStatus;
13import com.student_loan.model.Loan;
14import com.student_loan.repository.ItemRepository;
15import com.student_loan.repository.LoanRepository;
16import com.student_loan.repository.UserRepository;
17import com.student_loan.dtos.LoanAndItemDto;
18
23@Service
24public class ItemService {
25 @Autowired
26 private ItemRepository itemRepository;
27 @Autowired
28 private UserRepository userRepository;
29 @Autowired
30 private LoanRepository loanRepository;
31
37 public List<Item> getAllItems() {
38 return itemRepository.findAll();
39 }
40
46 public List<Item> getAvailableItems() {
47 return itemRepository.findByStatus(ItemStatus.AVAILABLE);
48 }
49
56 public Optional<Item> getItemById(Long id) {
57 return itemRepository.findById(id);
58 }
59
66 public List<Item> getItemsById(List<Long> itemsId) {
67 List<Item> items = new ArrayList<>();
68 for (Long id : itemsId) {
69 Optional<Item> optionalItem = getItemById(id);
70 optionalItem.ifPresent(items::add);
71 }
72 return items;
73 }
74
83 public List<Item> getItemsByUser(Long id){
84 if(userRepository.findById(id).isPresent()) {
85 return itemRepository.findByOwner(id);
86 }else {
87 throw new RuntimeException("Failed to get items! User not found with id: " + id);
88 }
89 }
90
98 public List<Item> getItemsByAvailability(ItemStatus status) {
99 return itemRepository.findByStatus(status);
100 }
101 public Item saveItem(Item item) {
102 if(!userRepository.findById(item.getOwner()).isPresent()) {
103 throw new RuntimeException("Failed to save item with id "+ item.getId()+": Owner not found with id: " + item.getOwner());
104 }else {
105 return itemRepository.save(item);
106 }
107 }
108
109 public List<LoanAndItemDto> getItemsLentByUserWithActiveLoans(Long userId) {
110 List<Loan> loans = loanRepository.findByLenderAndLoanStatus(userId, Loan.Status.IN_USE);
111
112 return loans.stream()
113 .map(loan -> {
114 Item item = itemRepository.findById(loan.getItem())
115 .orElseThrow(() -> new RuntimeException("Item no encontrado"));
116 LoanAndItemDto loanItemDto = new LoanAndItemDto();
117 loanItemDto.setLoanId(loan.getId());
118 loanItemDto.setBorrowerId(loan.getBorrower());
119 loanItemDto.setLenderId(loan.getLender());
120 loanItemDto.setStartDate(loan.getLoanDate());
121 loanItemDto.setEndDate(loan.getEstimatedReturnDate());
122 loanItemDto.setItemId(item.getId());
123 loanItemDto.setItemName(item.getName());
124 loanItemDto.setItemDescription(item.getDescription());
125 return loanItemDto;
126 })
127 .collect(Collectors.toList());
128 }
129
130 public List<LoanAndItemDto> getItemsBorrowedByUserWithActiveLoans(Long userId) {
131 List<Loan> loans = loanRepository.findByBorrowerAndLoanStatus(userId, Loan.Status.IN_USE);
132
133 return loans.stream()
134 .map(loan -> {
135 Item item = itemRepository.findById(loan.getItem())
136 .orElseThrow(() -> new RuntimeException("Item no encontrado"));
137 LoanAndItemDto loanItemDto = new LoanAndItemDto();
138 loanItemDto.setLoanId(loan.getId());
139 loanItemDto.setBorrowerId(loan.getBorrower());
140 loanItemDto.setLenderId(loan.getLender());
141 loanItemDto.setStartDate(loan.getLoanDate());
142 loanItemDto.setEndDate(loan.getEstimatedReturnDate());
143 loanItemDto.setItemId(item.getId());
144 loanItemDto.setItemName(item.getName());
145 loanItemDto.setItemDescription(item.getDescription());
146 return loanItemDto;
147 })
148 .collect(Collectors.toList());
149 }
150
160 public Item createItem(Item item) {
161 Optional<Item> optionalItem = itemRepository.findById(item.getId());
162 if (optionalItem.isPresent()) {
163 throw new RuntimeException(
164 "Failed to create item with id " + item.getId() + ": Item already exists with id: " + item.getId());
165 }else if(!userRepository.findById(item.getOwner()).isPresent()) {
166 throw new RuntimeException("Failed to save item with id "+ item.getId()+": Owner not found with id: " + item.getOwner());
167 }
168 return itemRepository.save(item);
169 }
170
171
177 public void deleteItem(Long id) {
178 itemRepository.deleteById(id);
179 }
180}
List< Item > getItemsByUser(Long id)
List< Item > getItemsByAvailability(ItemStatus status)
List< Item > getItemsById(List< Long > itemsId)
List< LoanAndItemDto > getItemsLentByUserWithActiveLoans(Long userId)
List< LoanAndItemDto > getItemsBorrowedByUserWithActiveLoans(Long userId)
Optional< Item > getItemById(Long id)