📍Use lombok, reformat, and optimize the code (#1560)
* Use lombok, reformat, and optimize the code * Fix merge conflicts and some sonar issues Co-authored-by: va1m <va1m@email.com>
This commit is contained in:
@ -30,16 +30,14 @@ import com.iluwatar.hexagonal.module.LotteryModule;
|
||||
import com.iluwatar.hexagonal.mongo.MongoConnectionPropertiesLoader;
|
||||
import com.iluwatar.hexagonal.sampledata.SampleData;
|
||||
import java.util.Scanner;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* Console interface for lottery administration.
|
||||
*/
|
||||
@Slf4j
|
||||
public class ConsoleAdministration {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(ConsoleAdministration.class);
|
||||
|
||||
/**
|
||||
* Program entry point.
|
||||
*/
|
||||
|
@ -147,7 +147,7 @@ public class MongoTicketRepository implements LotteryTicketRepository {
|
||||
doc.put("email", ticket.getPlayerDetails().getEmail());
|
||||
doc.put("bank", ticket.getPlayerDetails().getBankAccount());
|
||||
doc.put("phone", ticket.getPlayerDetails().getPhoneNumber());
|
||||
doc.put("numbers", ticket.getNumbers().getNumbersAsString());
|
||||
doc.put("numbers", ticket.getLotteryNumbers().getNumbersAsString());
|
||||
ticketsCollection.insertOne(doc);
|
||||
return Optional.of(new LotteryTicketId(ticketId));
|
||||
}
|
||||
|
@ -29,11 +29,15 @@ import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.PrimitiveIterator;
|
||||
import java.util.Set;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
|
||||
/**
|
||||
* Value object representing lottery numbers. This lottery uses sets of 4 numbers. The numbers must
|
||||
* be unique and between 1 and 20.
|
||||
*/
|
||||
@EqualsAndHashCode
|
||||
@ToString
|
||||
public class LotteryNumbers {
|
||||
|
||||
private final Set<Integer> numbers;
|
||||
@ -106,11 +110,6 @@ public class LotteryNumbers {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "LotteryNumbers{" + "numbers=" + numbers + '}';
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper class for generating random numbers.
|
||||
*/
|
||||
@ -139,30 +138,4 @@ public class LotteryNumbers {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final var prime = 31;
|
||||
var result = 1;
|
||||
result = prime * result + ((numbers == null) ? 0 : numbers.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (getClass() != obj.getClass()) {
|
||||
return false;
|
||||
}
|
||||
var other = (LotteryNumbers) obj;
|
||||
if (numbers == null) {
|
||||
return other.numbers == null;
|
||||
} else {
|
||||
return numbers.equals(other.numbers);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -23,63 +23,22 @@
|
||||
|
||||
package com.iluwatar.hexagonal.domain;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.ToString;
|
||||
|
||||
/**
|
||||
* Immutable value object representing lottery ticket.
|
||||
*/
|
||||
@Getter
|
||||
@ToString
|
||||
@RequiredArgsConstructor
|
||||
public class LotteryTicket {
|
||||
|
||||
private LotteryTicketId id;
|
||||
private final LotteryTicketId id;
|
||||
private final PlayerDetails playerDetails;
|
||||
private final LotteryNumbers lotteryNumbers;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public LotteryTicket(LotteryTicketId id, PlayerDetails details, LotteryNumbers numbers) {
|
||||
this.id = id;
|
||||
playerDetails = details;
|
||||
lotteryNumbers = numbers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get player details.
|
||||
*
|
||||
* @return player details
|
||||
*/
|
||||
public PlayerDetails getPlayerDetails() {
|
||||
return playerDetails;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get lottery numbers.
|
||||
*
|
||||
* @return lottery numbers
|
||||
*/
|
||||
public LotteryNumbers getNumbers() {
|
||||
return lotteryNumbers;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get ticket id.
|
||||
*
|
||||
* @return id
|
||||
*/
|
||||
public LotteryTicketId getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set ticket id.
|
||||
*/
|
||||
public void setId(LotteryTicketId id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return playerDetails.toString() + " " + lotteryNumbers.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final var prime = 31;
|
||||
@ -114,4 +73,5 @@ public class LotteryTicket {
|
||||
return playerDetails.equals(other.playerDetails);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -23,9 +23,16 @@
|
||||
|
||||
package com.iluwatar.hexagonal.domain;
|
||||
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
/**
|
||||
* Represents lottery ticket check result.
|
||||
*/
|
||||
@Getter
|
||||
@EqualsAndHashCode
|
||||
@RequiredArgsConstructor
|
||||
public class LotteryTicketCheckResult {
|
||||
|
||||
/**
|
||||
@ -37,64 +44,15 @@ public class LotteryTicketCheckResult {
|
||||
TICKET_NOT_SUBMITTED
|
||||
}
|
||||
|
||||
private final CheckResult checkResult;
|
||||
private final CheckResult result;
|
||||
private final int prizeAmount;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public LotteryTicketCheckResult(CheckResult result) {
|
||||
checkResult = result;
|
||||
this.result = result;
|
||||
prizeAmount = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public LotteryTicketCheckResult(CheckResult result, int amount) {
|
||||
checkResult = result;
|
||||
prizeAmount = amount;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get result.
|
||||
*
|
||||
* @return check result
|
||||
*/
|
||||
public CheckResult getResult() {
|
||||
return checkResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get prize amount.
|
||||
*
|
||||
* @return prize amount
|
||||
*/
|
||||
public int getPrizeAmount() {
|
||||
return prizeAmount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final var prime = 31;
|
||||
var result = 1;
|
||||
result = prime * result + ((checkResult == null) ? 0 : checkResult.hashCode());
|
||||
result = prime * result + prizeAmount;
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (getClass() != obj.getClass()) {
|
||||
return false;
|
||||
}
|
||||
var other = (LotteryTicketCheckResult) obj;
|
||||
return checkResult == other.checkResult && prizeAmount == other.prizeAmount;
|
||||
}
|
||||
}
|
||||
|
@ -24,10 +24,16 @@
|
||||
package com.iluwatar.hexagonal.domain;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
/**
|
||||
* Lottery ticked id.
|
||||
*/
|
||||
@Getter
|
||||
@EqualsAndHashCode
|
||||
@RequiredArgsConstructor
|
||||
public class LotteryTicketId {
|
||||
|
||||
private static final AtomicInteger numAllocated = new AtomicInteger(0);
|
||||
@ -37,35 +43,9 @@ public class LotteryTicketId {
|
||||
this.id = numAllocated.incrementAndGet();
|
||||
}
|
||||
|
||||
public LotteryTicketId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format("%d", id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var that = (LotteryTicketId) o;
|
||||
|
||||
return id == that.id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return id;
|
||||
}
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ public class LotteryUtils {
|
||||
) {
|
||||
var optional = repository.findById(id);
|
||||
if (optional.isPresent()) {
|
||||
if (optional.get().getNumbers().equals(winningNumbers)) {
|
||||
if (optional.get().getLotteryNumbers().equals(winningNumbers)) {
|
||||
return new LotteryTicketCheckResult(CheckResult.WIN_PRIZE, 1000);
|
||||
} else {
|
||||
return new LotteryTicketCheckResult(CheckResult.NO_PRIZE);
|
||||
|
@ -23,98 +23,22 @@
|
||||
|
||||
package com.iluwatar.hexagonal.domain;
|
||||
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.ToString;
|
||||
|
||||
/**
|
||||
* Immutable value object containing lottery player details.
|
||||
*/
|
||||
@EqualsAndHashCode
|
||||
@ToString
|
||||
@Getter
|
||||
@RequiredArgsConstructor
|
||||
public class PlayerDetails {
|
||||
|
||||
private final String emailAddress;
|
||||
private final String bankAccountNumber;
|
||||
private final String email;
|
||||
private final String bankAccount;
|
||||
private final String phoneNumber;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*/
|
||||
public PlayerDetails(String email, String bankAccount, String phone) {
|
||||
emailAddress = email;
|
||||
bankAccountNumber = bankAccount;
|
||||
phoneNumber = phone;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get email.
|
||||
*
|
||||
* @return email
|
||||
*/
|
||||
public String getEmail() {
|
||||
return emailAddress;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get back account number.
|
||||
*
|
||||
* @return bank account number
|
||||
*/
|
||||
public String getBankAccount() {
|
||||
return bankAccountNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get phone number.
|
||||
*
|
||||
* @return phone number
|
||||
*/
|
||||
public String getPhoneNumber() {
|
||||
return phoneNumber;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "PlayerDetails{" + "emailAddress='" + emailAddress + '\''
|
||||
+ ", bankAccountNumber='" + bankAccountNumber + '\''
|
||||
+ ", phoneNumber='" + phoneNumber + '\'' + '}';
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final var prime = 31;
|
||||
var result = 1;
|
||||
result = prime * result + ((bankAccountNumber == null) ? 0 : bankAccountNumber.hashCode());
|
||||
result = prime * result + ((emailAddress == null) ? 0 : emailAddress.hashCode());
|
||||
result = prime * result + ((phoneNumber == null) ? 0 : phoneNumber.hashCode());
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
if (obj == null) {
|
||||
return false;
|
||||
}
|
||||
if (getClass() != obj.getClass()) {
|
||||
return false;
|
||||
}
|
||||
var other = (PlayerDetails) obj;
|
||||
if (bankAccountNumber == null) {
|
||||
if (other.bankAccountNumber != null) {
|
||||
return false;
|
||||
}
|
||||
} else if (!bankAccountNumber.equals(other.bankAccountNumber)) {
|
||||
return false;
|
||||
}
|
||||
if (emailAddress == null) {
|
||||
if (other.emailAddress != null) {
|
||||
return false;
|
||||
}
|
||||
} else if (!emailAddress.equals(other.emailAddress)) {
|
||||
return false;
|
||||
}
|
||||
if (phoneNumber == null) {
|
||||
return other.phoneNumber == null;
|
||||
} else {
|
||||
return phoneNumber.equals(other.phoneNumber);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,16 +24,14 @@
|
||||
package com.iluwatar.hexagonal.eventlog;
|
||||
|
||||
import com.iluwatar.hexagonal.domain.PlayerDetails;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* Standard output event log.
|
||||
*/
|
||||
@Slf4j
|
||||
public class StdOutEventLog implements LotteryEventLog {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(StdOutEventLog.class);
|
||||
|
||||
@Override
|
||||
public void ticketSubmitted(PlayerDetails details) {
|
||||
LOGGER.info("Lottery ticket for {} was submitted. Bank account {} was charged for 3 credits.",
|
||||
|
@ -29,16 +29,14 @@ import com.iluwatar.hexagonal.domain.LotteryService;
|
||||
import com.iluwatar.hexagonal.module.LotteryModule;
|
||||
import com.iluwatar.hexagonal.mongo.MongoConnectionPropertiesLoader;
|
||||
import java.util.Scanner;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* Console interface for lottery players.
|
||||
*/
|
||||
@Slf4j
|
||||
public class ConsoleLottery {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(ConsoleLottery.class);
|
||||
|
||||
/**
|
||||
* Program entry point.
|
||||
*/
|
||||
|
@ -88,7 +88,7 @@ class MongoTicketRepositoryTest {
|
||||
assertEquals("foo@bar.com", ticket.getPlayerDetails().getEmail());
|
||||
assertEquals("123-123", ticket.getPlayerDetails().getBankAccount());
|
||||
assertEquals("07001234", ticket.getPlayerDetails().getPhoneNumber());
|
||||
assertEquals(original.getNumbers(), ticket.getNumbers());
|
||||
assertEquals(original.getLotteryNumbers(), ticket.getLotteryNumbers());
|
||||
// clear the collection
|
||||
repository.deleteAll();
|
||||
assertEquals(0, repository.getTicketsCollection().count());
|
||||
|
Reference in New Issue
Block a user