ohctechv3/.svn/pristine/a7/a79c47981b92bb0d6643aa02d035e6b4674ce118.svn-base
2024-10-28 15:03:36 +05:30

129 lines
5.4 KiB
Plaintext

package com.healthcare.ohctech.controller;
import com.healthcare.ohctech.dto.GroupItemDto;
import com.healthcare.ohctech.entity.GroupItem;
import com.healthcare.ohctech.entity.Item;
import com.healthcare.ohctech.repository.ItemRepo;
import com.healthcare.ohctech.service.impl.AuthServiceImpl;
import com.healthcare.ohctech.service.impl.GroupItemServiceImpl;
import com.healthcare.ohctech.util.PaginationUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.LinkedHashMap;
import java.util.Map;
@RestController
@RequestMapping("/group-items")
public class GroupItemController {
@Autowired
private GroupItemServiceImpl groupItemServiceImpl;
@Autowired
private AuthServiceImpl authServiceImpl;
@Autowired
private ItemRepo itemRepo;
@GetMapping("/{groupItemId}")
public ResponseEntity<?> getGroupItemById(@PathVariable Long groupItemId) {
GroupItem groupItem = groupItemServiceImpl.getGroupItemById(groupItemId);
Map<String, Object> itemDetails = itemRepo.findById(groupItem.getItem().getId())
.map(item -> {
Map<String, Object> map = new LinkedHashMap<>();
map.put("id", item.getId());
map.put("label", item.getItemName());
return map;
})
.orElseGet(() -> {
Map<String, Object> map = new LinkedHashMap<>();
map.put("id", " ");
map.put("label", " ");
return map;
});
Map<String, Object> groupDetails = itemRepo.findById(groupItem.getGroup().getId())
.map(group -> {
Map<String, Object> map = new LinkedHashMap<>();
map.put("id", group.getId());
map.put("label", group.getItemName());
return map;
})
.orElseGet(() -> {
Map<String, Object> map = new LinkedHashMap<>();
map.put("id", " ");
map.put("label", " ");
return map;
});
Map<String, Object> response = new LinkedHashMap<>();
response.put("id", groupItem.getId());
response.put("itemName", itemDetails);
response.put("groupName", groupDetails);
response.put("itemType", groupItem.getItemType());
response.put("quantity", groupItem.getQuantity());
response.put("cost", groupItem.getCost());
response.put("modifiedBy", groupItem.getModifiedBy());
response.put("lastModified", groupItem.getLastModified());
return new ResponseEntity<>(response, HttpStatus.OK);
}
@GetMapping
public ResponseEntity<?> getAllGroupItems(@RequestParam(required = false) Integer page,
@RequestParam(required = false) Integer size,
@RequestParam(required = false) String sortBy,
@RequestParam(required = false) String sortOrder) {
Pageable pageable = PaginationUtil.getPageableWithDefaults(page, size, sortBy, sortOrder);
Page<GroupItem> groupItemPage = groupItemServiceImpl.getAllGroupItems(pageable);
Page<Map<String, Object>> groupItemDtoPage = groupItemPage.map(groupItem -> {
String itemName = itemRepo.findById(groupItem.getItem().getId())
.map(Item::getItemName)
.orElse("Unknown Item");
String groupName = itemRepo.findById(groupItem.getGroup().getId())
.map(Item::getItemName)
.orElse("Unknown Group");
Map<String, Object> map = new LinkedHashMap<>();
map.put("id", groupItem.getId());
map.put("itemName", itemName);
map.put("groupName", groupName);
map.put("itemType", groupItem.getItemType());
map.put("quantity", groupItem.getQuantity());
map.put("cost", groupItem.getCost());
map.put("modifiedBy", groupItem.getModifiedBy());
map.put("lastModified", groupItem.getLastModified());
return map;
});
Map<String, Object> response = PaginationUtil.getPageResponse(groupItemDtoPage);
return new ResponseEntity<>(response, HttpStatus.OK);
}
@PostMapping
public ResponseEntity<?> addGroupItem(@RequestBody GroupItemDto groupItemDto) {
Long userId = authServiceImpl.getCurrentUserId();
groupItemServiceImpl.addGroupItem(groupItemDto, userId);
return new ResponseEntity<>(HttpStatus.CREATED);
}
@PutMapping("/{groupItemId}")
public ResponseEntity<?> updateGroupItem(@PathVariable Long groupItemId,
@RequestBody GroupItemDto groupItemDto) {
Long userId = authServiceImpl.getCurrentUserId();
groupItemServiceImpl.updateGroupItem(groupItemDto, userId);
return new ResponseEntity<>(HttpStatus.OK);
}
@DeleteMapping("/{groupItemId}")
public ResponseEntity<?> deleteGroupItem(@PathVariable Long groupItemId) {
groupItemServiceImpl.deleteGroupItem(groupItemId);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
}