Untitled
unknown
plain_text
a year ago
8.7 kB
4
Indexable
@Entity public class Deal { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int dealId; private double price; private int itemsAvailable; private LocalDateTime startTime; private LocalDateTime endTime; private int itemsSold; // getters and setters } @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int userId; private String username; // other user details, getters, setters } @Entity public class PurchaseHistory { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int purchaseId; private int userId; private int dealId; // other purchase details, getters, setters } @Repository public interface DealRepository extends JpaRepository<Deal, Integer> { // Implement custom query methods if needed } @Repository public interface UserRepository extends JpaRepository<User, Integer> { // Implement custom query methods if needed } @Repository public interface PurchaseHistoryRepository extends JpaRepository<PurchaseHistory, Integer> { boolean existsByUserIdAndDealId(int userId, int dealId); } @Service public class DealServiceImpl implements DealService { private static final Logger LOGGER = LoggerFactory.getLogger(DealServiceImpl.class); @Autowired private DealRepository dealRepository; @Autowired private PurchaseHistoryRepository purchaseHistoryRepository; @Override @Transactional public synchronized Deal createDeal(Deal deal) { try { return dealRepository.save(deal); } catch (Exception e) { LOGGER.error("Error occurred while creating deal: {}", e.getMessage()); throw new RuntimeException("Failed to create deal"); } } @Override public boolean userAlreadyPurchased(Deal deal, int userId) { return purchaseHistoryRepository.existsByUserIdAndDealId(userId, deal.getDealId()); } @Override @Transactional public boolean buyDeal(int dealId, int userId) { Deal deal = dealRepository.findById(dealId).orElse(null); if (deal != null && canBuyDeal(deal, userId)) { deal.setItemsSold(deal.getItemsSold() + 1); dealRepository.save(deal); return true; } return false; } private boolean canBuyDeal(Deal deal, int userId) { LocalDateTime currentTime = LocalDateTime.now(); return currentTime.isBefore(deal.getEndTime()) && deal.getItemsSold() < deal.getItemsAvailable() && !userAlreadyPurchased(deal, userId); } // Other service methods with proper logging } @RestController @RequestMapping("/deals") public class DealController { private final DealService dealService; @Autowired public DealController(DealService dealService) { this.dealService = dealService; } @PostMapping public ResponseEntity<Deal> createDeal(@RequestBody Deal deal) { Deal createdDeal = dealService.createDeal(deal); return ResponseEntity.ok(createdDeal); } @PostMapping("/{dealId}/buy") public ResponseEntity<String> buyDeal(@PathVariable int dealId, @RequestParam int userId) { boolean success = dealService.buyDeal(dealId, userId); if (success) { return ResponseEntity.ok("Deal purchased successfully"); } else { return ResponseEntity.badRequest().body("Failed to purchase deal"); } } // Other API endpoints for updating, ending deals } // Logging Configuration (log4j2.xml in src/main/resources) // (Log4j2 configuration as previously provided) @RestController @RequestMapping("/deals") public class DealController { private final DealService dealService; @Autowired public DealController(DealService dealService) { this.dealService = dealService; } @PostMapping public ResponseEntity<Deal> createDeal(@RequestBody Deal deal) { Deal createdDeal = dealService.createDeal(deal); return ResponseEntity.ok(createdDeal); } @PostMapping("/{dealId}/buy") public ResponseEntity<String> buyDeal(@PathVariable int dealId, @RequestParam int userId) { boolean success = dealService.buyDeal(dealId, userId); if (success) { return ResponseEntity.ok("Deal purchased successfully"); } else { return ResponseEntity.badRequest().body("Failed to purchase deal"); } } @PutMapping("/{dealId}") public ResponseEntity<String> updateDeal(@PathVariable int dealId, @RequestBody Deal updatedDeal) { // Logic to update deal using dealId and updatedDeal data return ResponseEntity.ok("Deal updated successfully"); } @DeleteMapping("/{dealId}") public ResponseEntity<String> endDeal(@PathVariable int dealId) { // Logic to end a deal by dealId return ResponseEntity.ok("Deal ended successfully"); } // Other API endpoints for additional functionalities } @Service public class DealServiceImpl implements DealService { private static final Logger LOGGER = LoggerFactory.getLogger(DealServiceImpl.class); @Autowired private DealRepository dealRepository; @Autowired private PurchaseHistoryRepository purchaseHistoryRepository; @Override @Transactional public Deal createDeal(Deal deal) { validateDealInput(deal); try { return dealRepository.save(deal); } catch (Exception e) { LOGGER.error("Error occurred while creating deal: {}", e.getMessage()); throw new RuntimeException("Failed to create deal"); } } // Other methods private void validateDealInput(Deal deal) { // Implement input validation for Deal object // For example, check if price, start time, and end time are valid if (deal.getPrice() <= 0 || deal.getStartTime().isAfter(deal.getEndTime())) { throw new IllegalArgumentException("Invalid deal details"); } } } @RestController @RequestMapping("/deals") public class DealController { private final DealService dealService; @Autowired public DealController(DealService dealService) { this.dealService = dealService; } @PostMapping public ResponseEntity<Deal> createDeal(@RequestBody Deal deal) { Deal createdDeal = dealService.createDeal(deal); return ResponseEntity.ok(createdDeal); } // Other endpoints @PutMapping("/{dealId}") public ResponseEntity<String> updateDeal(@PathVariable int dealId, @RequestBody Deal updatedDeal) { if (updatedDeal.getDealId() != dealId) { return ResponseEntity.badRequest().body("Deal ID mismatch"); } // Implement update logic return ResponseEntity.ok("Deal updated successfully"); } @DeleteMapping("/{dealId}") public ResponseEntity<String> endDeal(@PathVariable int dealId) { // Implement end deal logic return ResponseEntity.ok("Deal ended successfully"); } } @Service public class DealServiceImpl implements DealService { private static final Logger LOGGER = LoggerFactory.getLogger(DealServiceImpl.class); @Autowired private DealRepository dealRepository; @Autowired private PurchaseHistoryRepository purchaseHistoryRepository; @Override @Transactional public Deal createDeal(Deal deal) { validateDealInput(deal); try { return dealRepository.save(deal); } catch (Exception e) { LOGGER.error("Error occurred while creating deal: {}", e.getMessage()); throw new RuntimeException("Failed to create deal"); } } @Override public boolean userAlreadyPurchased(Deal deal, int userId) { return purchaseHistoryRepository.existsByUserIdAndDealId(userId, deal.getDealId()); } @Override @Transactional public boolean buyDeal(int dealId, int userId) { Deal deal = dealRepository.findById(dealId).orElse(null); if (deal != null && canBuyDeal(deal, userId)) { deal.setItemsSold(deal.getItemsSold() + 1); dealRepository.save(deal); return true; } return false; } private boolean canBuyDeal(Deal deal, int userId) { LocalDateTime currentTime = LocalDateTime.now(); return currentTime.isBefore(deal.getEndTime()) && deal.getItemsSold() < deal.getItemsAvailable() && !userAlreadyPurchased(deal, userId); } private void validateDealInput(Deal deal) { // Validation logic } }
Editor is loading...
Leave a Comment