Untitled
unknown
plain_text
2 years ago
9.4 kB
20
Indexable
@Service
public class DealServiceImpl implements DealService {
// Existing code
@Autowired
private UserRepository userRepository;
@Autowired
private PurchaseHistoryRepository purchaseHistoryRepository;
@Override
public boolean userAlreadyPurchased(Deal deal, int userId) {
// Check if the user has already purchased this deal
return purchaseHistoryRepository.existsByUserIdAndDealId(userId, deal.getDealId());
}
// Other service methods with proper logging
}
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int userId;
private String username;
// other user details, getters, setters
}
@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)
public interface DealService {
Deal createDeal(Deal deal);
boolean userAlreadyPurchased(Deal deal, int userId);
boolean buyDeal(int dealId, int userId);
// Other service methods as needed
}
public interface DealService {
Deal createDeal(Deal deal);
boolean userAlreadyPurchased(Deal deal, int userId);
boolean buyDeal(int dealId, int userId);
// Other service methods as needed
}
@Entity
public class Deal {
// Deal entity fields
}
@Entity
public class User {
// User entity fields
}
@Entity
public class PurchaseHistory {
// PurchaseHistory entity fields
}
@Repository
public interface DealRepository extends JpaRepository<Deal, Integer> {
// Deal repository methods
}
@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
// User repository methods
}
@Repository
public interface PurchaseHistoryRepository extends JpaRepository<PurchaseHistory, Integer> {
boolean existsByUserIdAndDealId(int userId, int dealId);
// Other PurchaseHistory repository methods
}
@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
// Implement other methods as needed
}
// 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
}
Editor is loading...
Leave a Comment