Hexagonal pattern: Introduced lottery events port with two adapters
This commit is contained in:
parent
c4c5e78e50
commit
df32a7b893
@ -2,7 +2,7 @@
|
|||||||
<class-diagram version="1.1.10" icons="true" automaticImage="PNG" always-add-relationships="false"
|
<class-diagram version="1.1.10" icons="true" automaticImage="PNG" always-add-relationships="false"
|
||||||
generalizations="true" realizations="true" associations="true" dependencies="false" nesting-relationships="true"
|
generalizations="true" realizations="true" associations="true" dependencies="false" nesting-relationships="true"
|
||||||
router="FAN">
|
router="FAN">
|
||||||
<class id="1" language="java" name="com.iluwatar.hexagonal.notifications.StdOutNotifications" project="hexagonal"
|
<class id="1" language="java" name="com.iluwatar.hexagonal.eventlog.StdOutEventLog" project="hexagonal"
|
||||||
file="/hexagonal/src/main/java/com/iluwatar/hexagonal/notifications/StdOutNotifications.java" binary="false"
|
file="/hexagonal/src/main/java/com/iluwatar/hexagonal/notifications/StdOutNotifications.java" binary="false"
|
||||||
corner="BOTTOM_RIGHT">
|
corner="BOTTOM_RIGHT">
|
||||||
<position height="167" width="235" x="731" y="122"/>
|
<position height="167" width="235" x="731" y="122"/>
|
||||||
@ -161,7 +161,7 @@
|
|||||||
<operations public="true" package="true" protected="true" private="true" static="true"/>
|
<operations public="true" package="true" protected="true" private="true" static="true"/>
|
||||||
</display>
|
</display>
|
||||||
</class>
|
</class>
|
||||||
<interface id="17" language="java" name="com.iluwatar.hexagonal.notifications.LotteryNotifications"
|
<interface id="17" language="java" name="com.iluwatar.hexagonal.eventlog.LotteryEventLog"
|
||||||
project="hexagonal" file="/hexagonal/src/main/java/com/iluwatar/hexagonal/notifications/LotteryNotifications.java"
|
project="hexagonal" file="/hexagonal/src/main/java/com/iluwatar/hexagonal/notifications/LotteryNotifications.java"
|
||||||
binary="false" corner="BOTTOM_RIGHT">
|
binary="false" corner="BOTTOM_RIGHT">
|
||||||
<position height="149" width="235" x="731" y="347"/>
|
<position height="149" width="235" x="731" y="347"/>
|
||||||
|
@ -116,7 +116,7 @@ package com.iluwatar.hexagonal.database {
|
|||||||
+ save(LotteryTicket) : Optional<LotteryTicketId> {abstract}
|
+ save(LotteryTicket) : Optional<LotteryTicketId> {abstract}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
package com.iluwatar.hexagonal.notifications {
|
package com.iluwatar.hexagonal.eventlog {
|
||||||
interface LotteryNotifications {
|
interface LotteryNotifications {
|
||||||
+ notifyNoWin(PlayerDetails) {abstract}
|
+ notifyNoWin(PlayerDetails) {abstract}
|
||||||
+ notifyPrize(PlayerDetails, int) {abstract}
|
+ notifyPrize(PlayerDetails, int) {abstract}
|
||||||
|
@ -56,7 +56,7 @@ import com.iluwatar.hexagonal.sampledata.SampleData;
|
|||||||
*
|
*
|
||||||
* The secondary ports that application core uses are {@link WireTransfers}
|
* The secondary ports that application core uses are {@link WireTransfers}
|
||||||
* which is a banking service, {@link LotteryNotifications} that delivers
|
* which is a banking service, {@link LotteryNotifications} that delivers
|
||||||
* notifications as lottery events occur and {@link LotteryTicketRepository}
|
* eventlog as lottery events occur and {@link LotteryTicketRepository}
|
||||||
* that is the storage for the lottery tickets.
|
* that is the storage for the lottery tickets.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -25,7 +25,7 @@ package com.iluwatar.hexagonal.domain;
|
|||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.iluwatar.hexagonal.banking.WireTransfers;
|
import com.iluwatar.hexagonal.banking.WireTransfers;
|
||||||
import com.iluwatar.hexagonal.database.LotteryTicketRepository;
|
import com.iluwatar.hexagonal.database.LotteryTicketRepository;
|
||||||
import com.iluwatar.hexagonal.notifications.LotteryNotifications;
|
import com.iluwatar.hexagonal.eventlog.LotteryEventLog;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ import java.util.Map;
|
|||||||
public class LotteryAdministration {
|
public class LotteryAdministration {
|
||||||
|
|
||||||
private final LotteryTicketRepository repository;
|
private final LotteryTicketRepository repository;
|
||||||
private final LotteryNotifications notifications;
|
private final LotteryEventLog notifications;
|
||||||
private final WireTransfers wireTransfers;
|
private final WireTransfers wireTransfers;
|
||||||
private final LotteryTicketChecker checker;
|
private final LotteryTicketChecker checker;
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ public class LotteryAdministration {
|
|||||||
* Constructor
|
* Constructor
|
||||||
*/
|
*/
|
||||||
@Inject
|
@Inject
|
||||||
public LotteryAdministration(LotteryTicketRepository repository, LotteryNotifications notifications,
|
public LotteryAdministration(LotteryTicketRepository repository, LotteryEventLog notifications,
|
||||||
WireTransfers wireTransfers) {
|
WireTransfers wireTransfers) {
|
||||||
this.repository = repository;
|
this.repository = repository;
|
||||||
this.notifications = notifications;
|
this.notifications = notifications;
|
||||||
@ -72,12 +72,12 @@ public class LotteryAdministration {
|
|||||||
boolean transferred = wireTransfers.transferFunds(LotteryConstants.PRIZE_AMOUNT,
|
boolean transferred = wireTransfers.transferFunds(LotteryConstants.PRIZE_AMOUNT,
|
||||||
LotteryConstants.SERVICE_BANK_ACCOUNT, tickets.get(id).getPlayerDetails().getBankAccount());
|
LotteryConstants.SERVICE_BANK_ACCOUNT, tickets.get(id).getPlayerDetails().getBankAccount());
|
||||||
if (transferred) {
|
if (transferred) {
|
||||||
notifications.notifyPrize(tickets.get(id).getPlayerDetails(), LotteryConstants.PRIZE_AMOUNT);
|
notifications.ticketWon(tickets.get(id).getPlayerDetails(), LotteryConstants.PRIZE_AMOUNT);
|
||||||
} else {
|
} else {
|
||||||
notifications.notifyPrizeError(tickets.get(id).getPlayerDetails(), LotteryConstants.PRIZE_AMOUNT);
|
notifications.prizeError(tickets.get(id).getPlayerDetails(), LotteryConstants.PRIZE_AMOUNT);
|
||||||
}
|
}
|
||||||
} else if (result.getResult().equals(LotteryTicketCheckResult.CheckResult.NO_PRIZE)) {
|
} else if (result.getResult().equals(LotteryTicketCheckResult.CheckResult.NO_PRIZE)) {
|
||||||
notifications.notifyNoWin(tickets.get(id).getPlayerDetails());
|
notifications.ticketDidNotWin(tickets.get(id).getPlayerDetails());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return numbers;
|
return numbers;
|
||||||
|
@ -25,7 +25,7 @@ package com.iluwatar.hexagonal.domain;
|
|||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.iluwatar.hexagonal.banking.WireTransfers;
|
import com.iluwatar.hexagonal.banking.WireTransfers;
|
||||||
import com.iluwatar.hexagonal.database.LotteryTicketRepository;
|
import com.iluwatar.hexagonal.database.LotteryTicketRepository;
|
||||||
import com.iluwatar.hexagonal.notifications.LotteryNotifications;
|
import com.iluwatar.hexagonal.eventlog.LotteryEventLog;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ import java.util.Optional;
|
|||||||
public class LotteryService {
|
public class LotteryService {
|
||||||
|
|
||||||
private final LotteryTicketRepository repository;
|
private final LotteryTicketRepository repository;
|
||||||
private final LotteryNotifications notifications;
|
private final LotteryEventLog notifications;
|
||||||
private final WireTransfers wireTransfers;
|
private final WireTransfers wireTransfers;
|
||||||
private final LotteryTicketChecker checker;
|
private final LotteryTicketChecker checker;
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ public class LotteryService {
|
|||||||
* Constructor
|
* Constructor
|
||||||
*/
|
*/
|
||||||
@Inject
|
@Inject
|
||||||
public LotteryService(LotteryTicketRepository repository, LotteryNotifications notifications,
|
public LotteryService(LotteryTicketRepository repository, LotteryEventLog notifications,
|
||||||
WireTransfers wireTransfers) {
|
WireTransfers wireTransfers) {
|
||||||
this.repository = repository;
|
this.repository = repository;
|
||||||
this.notifications = notifications;
|
this.notifications = notifications;
|
||||||
@ -60,12 +60,12 @@ public class LotteryService {
|
|||||||
boolean result = wireTransfers.transferFunds(LotteryConstants.TICKET_PRIZE,
|
boolean result = wireTransfers.transferFunds(LotteryConstants.TICKET_PRIZE,
|
||||||
ticket.getPlayerDetails().getBankAccount(), LotteryConstants.SERVICE_BANK_ACCOUNT);
|
ticket.getPlayerDetails().getBankAccount(), LotteryConstants.SERVICE_BANK_ACCOUNT);
|
||||||
if (result == false) {
|
if (result == false) {
|
||||||
notifications.notifyTicketSubmitError(ticket.getPlayerDetails());
|
notifications.ticketSubmitError(ticket.getPlayerDetails());
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
Optional<LotteryTicketId> optional = repository.save(ticket);
|
Optional<LotteryTicketId> optional = repository.save(ticket);
|
||||||
if (optional.isPresent()) {
|
if (optional.isPresent()) {
|
||||||
notifications.notifyTicketSubmitted(ticket.getPlayerDetails());
|
notifications.ticketSubmitted(ticket.getPlayerDetails());
|
||||||
}
|
}
|
||||||
return optional;
|
return optional;
|
||||||
}
|
}
|
||||||
|
@ -20,40 +20,40 @@
|
|||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
* THE SOFTWARE.
|
* THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
package com.iluwatar.hexagonal.notifications;
|
package com.iluwatar.hexagonal.eventlog;
|
||||||
|
|
||||||
import com.iluwatar.hexagonal.domain.PlayerDetails;
|
import com.iluwatar.hexagonal.domain.PlayerDetails;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Provides notifications for lottery events.
|
* Event log for lottery events
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public interface LotteryNotifications {
|
public interface LotteryEventLog {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notify lottery ticket was submitted
|
* lottery ticket submitted
|
||||||
*/
|
*/
|
||||||
void notifyTicketSubmitted(PlayerDetails details);
|
void ticketSubmitted(PlayerDetails details);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notify there was an error submitting lottery ticket
|
* error submitting lottery ticket
|
||||||
*/
|
*/
|
||||||
void notifyTicketSubmitError(PlayerDetails details);
|
void ticketSubmitError(PlayerDetails details);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notify lottery ticket did not win
|
* lottery ticket did not win
|
||||||
*/
|
*/
|
||||||
void notifyNoWin(PlayerDetails details);
|
void ticketDidNotWin(PlayerDetails details);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notify that prize has been paid
|
* lottery ticket won
|
||||||
*/
|
*/
|
||||||
void notifyPrize(PlayerDetails details, int prizeAmount);
|
void ticketWon(PlayerDetails details, int prizeAmount);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notify that there was an error paying the prize
|
* error paying the prize
|
||||||
*/
|
*/
|
||||||
void notifyPrizeError(PlayerDetails details, int prizeAmount);
|
void prizeError(PlayerDetails details, int prizeAmount);
|
||||||
|
|
||||||
}
|
}
|
@ -0,0 +1,154 @@
|
|||||||
|
/**
|
||||||
|
* The MIT License
|
||||||
|
* Copyright (c) 2014 Ilkka Seppälä
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
package com.iluwatar.hexagonal.eventlog;
|
||||||
|
|
||||||
|
import com.iluwatar.hexagonal.domain.PlayerDetails;
|
||||||
|
import com.mongodb.MongoClient;
|
||||||
|
import com.mongodb.client.MongoCollection;
|
||||||
|
import com.mongodb.client.MongoDatabase;
|
||||||
|
import org.bson.Document;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mongo based event log
|
||||||
|
*/
|
||||||
|
public class MongoEventLog implements LotteryEventLog {
|
||||||
|
|
||||||
|
private static final String DEFAULT_DB = "lotteryDB";
|
||||||
|
private static final String DEFAULT_EVENTS_COLLECTION = "events";
|
||||||
|
|
||||||
|
private MongoClient mongoClient;
|
||||||
|
private MongoDatabase database;
|
||||||
|
private MongoCollection<Document> eventsCollection;
|
||||||
|
|
||||||
|
private StdOutEventLog stdOutEventLog = new StdOutEventLog();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
public MongoEventLog() {
|
||||||
|
connect();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor accepting parameters
|
||||||
|
*/
|
||||||
|
public MongoEventLog(String dbName, String eventsCollectionName) {
|
||||||
|
connect(dbName, eventsCollectionName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connect to database with default parameters
|
||||||
|
*/
|
||||||
|
public void connect() {
|
||||||
|
connect(DEFAULT_DB, DEFAULT_EVENTS_COLLECTION);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Connect to database with given parameters
|
||||||
|
*/
|
||||||
|
public void connect(String dbName, String eventsCollectionName) {
|
||||||
|
if (mongoClient != null) {
|
||||||
|
mongoClient.close();
|
||||||
|
}
|
||||||
|
mongoClient = new MongoClient(System.getProperty("mongo-host"),
|
||||||
|
Integer.parseInt(System.getProperty("mongo-port")));
|
||||||
|
database = mongoClient.getDatabase(dbName);
|
||||||
|
eventsCollection = database.getCollection(eventsCollectionName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return mongo client
|
||||||
|
*/
|
||||||
|
public MongoClient getMongoClient() {
|
||||||
|
return mongoClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return mongo database
|
||||||
|
*/
|
||||||
|
public MongoDatabase getMongoDatabase() {
|
||||||
|
return database;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return accounts collection
|
||||||
|
*/
|
||||||
|
public MongoCollection<Document> getEventsCollection() {
|
||||||
|
return eventsCollection;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void ticketSubmitted(PlayerDetails details) {
|
||||||
|
Document document = new Document("email", details.getEmail());
|
||||||
|
document.put("phone", details.getPhoneNumber());
|
||||||
|
document.put("bank", details.getBankAccount());
|
||||||
|
document.put("message", String.format("Lottery ticket was submitted and bank account was charged for 3 credits."));
|
||||||
|
eventsCollection.insertOne(document);
|
||||||
|
stdOutEventLog.ticketSubmitted(details);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void ticketSubmitError(PlayerDetails details) {
|
||||||
|
Document document = new Document("email", details.getEmail());
|
||||||
|
document.put("phone", details.getPhoneNumber());
|
||||||
|
document.put("bank", details.getBankAccount());
|
||||||
|
document.put("message", String.format("Lottery ticket could not be submitted because lack of funds."));
|
||||||
|
eventsCollection.insertOne(document);
|
||||||
|
stdOutEventLog.ticketSubmitError(details);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void ticketDidNotWin(PlayerDetails details) {
|
||||||
|
Document document = new Document("email", details.getEmail());
|
||||||
|
document.put("phone", details.getPhoneNumber());
|
||||||
|
document.put("bank", details.getBankAccount());
|
||||||
|
document.put("message", String.format("Lottery ticket was checked and unfortunately did not win this time."));
|
||||||
|
eventsCollection.insertOne(document);
|
||||||
|
stdOutEventLog.ticketDidNotWin(details);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void ticketWon(PlayerDetails details, int prizeAmount) {
|
||||||
|
Document document = new Document("email", details.getEmail());
|
||||||
|
document.put("phone", details.getPhoneNumber());
|
||||||
|
document.put("bank", details.getBankAccount());
|
||||||
|
document.put("message", String.format("Lottery ticket won! The bank account was deposited with %d credits.",
|
||||||
|
prizeAmount));
|
||||||
|
eventsCollection.insertOne(document);
|
||||||
|
stdOutEventLog.ticketWon(details, prizeAmount);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void prizeError(PlayerDetails details, int prizeAmount) {
|
||||||
|
Document document = new Document("email", details.getEmail());
|
||||||
|
document.put("phone", details.getPhoneNumber());
|
||||||
|
document.put("bank", details.getBankAccount());
|
||||||
|
document.put("message", String.format("Lottery ticket won! Unfortunately the bank credit transfer of %d failed.",
|
||||||
|
prizeAmount));
|
||||||
|
eventsCollection.insertOne(document);
|
||||||
|
stdOutEventLog.prizeError(details, prizeAmount);
|
||||||
|
}
|
||||||
|
}
|
@ -20,40 +20,43 @@
|
|||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
* THE SOFTWARE.
|
* THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
package com.iluwatar.hexagonal.notifications;
|
package com.iluwatar.hexagonal.eventlog;
|
||||||
|
|
||||||
import com.iluwatar.hexagonal.domain.PlayerDetails;
|
import com.iluwatar.hexagonal.domain.PlayerDetails;
|
||||||
|
|
||||||
public class StdOutNotifications implements LotteryNotifications {
|
/**
|
||||||
|
* Standard output event log
|
||||||
|
*/
|
||||||
|
public class StdOutEventLog implements LotteryEventLog {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void notifyTicketSubmitted(PlayerDetails details) {
|
public void ticketSubmitted(PlayerDetails details) {
|
||||||
System.out.println(String.format("Lottery ticket for %s was submitted. Bank account %s was charged for 3 credits.",
|
System.out.println(String.format("Lottery ticket for %s was submitted. Bank account %s was charged for 3 credits.",
|
||||||
details.getEmail(), details.getBankAccount()));
|
details.getEmail(), details.getBankAccount()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void notifyNoWin(PlayerDetails details) {
|
public void ticketDidNotWin(PlayerDetails details) {
|
||||||
System.out.println(String.format("Lottery ticket for %s was checked and unfortunately did not win this time.",
|
System.out.println(String.format("Lottery ticket for %s was checked and unfortunately did not win this time.",
|
||||||
details.getEmail()));
|
details.getEmail()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void notifyPrize(PlayerDetails details, int prizeAmount) {
|
public void ticketWon(PlayerDetails details, int prizeAmount) {
|
||||||
System.out
|
System.out
|
||||||
.println(String.format("Lottery ticket for %s has won! The bank account %s was deposited with %d credits.",
|
.println(String.format("Lottery ticket for %s has won! The bank account %s was deposited with %d credits.",
|
||||||
details.getEmail(), details.getBankAccount(), prizeAmount));
|
details.getEmail(), details.getBankAccount(), prizeAmount));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void notifyPrizeError(PlayerDetails details, int prizeAmount) {
|
public void prizeError(PlayerDetails details, int prizeAmount) {
|
||||||
System.out
|
System.out
|
||||||
.println(String.format("Lottery ticket for %s has won! Unfortunately the bank credit transfer of %d failed.",
|
.println(String.format("Lottery ticket for %s has won! Unfortunately the bank credit transfer of %d failed.",
|
||||||
details.getEmail(), prizeAmount));
|
details.getEmail(), prizeAmount));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void notifyTicketSubmitError(PlayerDetails details) {
|
public void ticketSubmitError(PlayerDetails details) {
|
||||||
System.out.println(
|
System.out.println(
|
||||||
String.format("Lottery ticket for %s could not be submitted because the credit transfer of 3 credits failed.",
|
String.format("Lottery ticket for %s could not be submitted because the credit transfer of 3 credits failed.",
|
||||||
details.getEmail()));
|
details.getEmail()));
|
@ -27,8 +27,8 @@ import com.iluwatar.hexagonal.banking.MongoBank;
|
|||||||
import com.iluwatar.hexagonal.banking.WireTransfers;
|
import com.iluwatar.hexagonal.banking.WireTransfers;
|
||||||
import com.iluwatar.hexagonal.database.LotteryTicketRepository;
|
import com.iluwatar.hexagonal.database.LotteryTicketRepository;
|
||||||
import com.iluwatar.hexagonal.database.MongoTicketRepository;
|
import com.iluwatar.hexagonal.database.MongoTicketRepository;
|
||||||
import com.iluwatar.hexagonal.notifications.LotteryNotifications;
|
import com.iluwatar.hexagonal.eventlog.LotteryEventLog;
|
||||||
import com.iluwatar.hexagonal.notifications.StdOutNotifications;
|
import com.iluwatar.hexagonal.eventlog.MongoEventLog;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Guice module for binding production dependencies
|
* Guice module for binding production dependencies
|
||||||
@ -37,7 +37,7 @@ public class LotteryModule extends AbstractModule {
|
|||||||
@Override
|
@Override
|
||||||
protected void configure() {
|
protected void configure() {
|
||||||
bind(LotteryTicketRepository.class).to(MongoTicketRepository.class);
|
bind(LotteryTicketRepository.class).to(MongoTicketRepository.class);
|
||||||
bind(LotteryNotifications.class).to(StdOutNotifications.class);
|
bind(LotteryEventLog.class).to(MongoEventLog.class);
|
||||||
bind(WireTransfers.class).to(MongoBank.class);
|
bind(WireTransfers.class).to(MongoBank.class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,8 +27,8 @@ import com.iluwatar.hexagonal.banking.InMemoryBank;
|
|||||||
import com.iluwatar.hexagonal.banking.WireTransfers;
|
import com.iluwatar.hexagonal.banking.WireTransfers;
|
||||||
import com.iluwatar.hexagonal.database.InMemoryTicketRepository;
|
import com.iluwatar.hexagonal.database.InMemoryTicketRepository;
|
||||||
import com.iluwatar.hexagonal.database.LotteryTicketRepository;
|
import com.iluwatar.hexagonal.database.LotteryTicketRepository;
|
||||||
import com.iluwatar.hexagonal.notifications.LotteryNotifications;
|
import com.iluwatar.hexagonal.eventlog.LotteryEventLog;
|
||||||
import com.iluwatar.hexagonal.notifications.StdOutNotifications;
|
import com.iluwatar.hexagonal.eventlog.StdOutEventLog;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Guice module for testing dependencies
|
* Guice module for testing dependencies
|
||||||
@ -37,7 +37,7 @@ public class LotteryTestingModule extends AbstractModule {
|
|||||||
@Override
|
@Override
|
||||||
protected void configure() {
|
protected void configure() {
|
||||||
bind(LotteryTicketRepository.class).to(InMemoryTicketRepository.class);
|
bind(LotteryTicketRepository.class).to(InMemoryTicketRepository.class);
|
||||||
bind(LotteryNotifications.class).to(StdOutNotifications.class);
|
bind(LotteryEventLog.class).to(StdOutEventLog.class);
|
||||||
bind(WireTransfers.class).to(InMemoryBank.class);
|
bind(WireTransfers.class).to(InMemoryBank.class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,84 @@
|
|||||||
|
/**
|
||||||
|
* The MIT License
|
||||||
|
* Copyright (c) 2014 Ilkka Seppälä
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
package com.iluwatar.hexagonal.eventlog;
|
||||||
|
|
||||||
|
import com.iluwatar.hexagonal.domain.PlayerDetails;
|
||||||
|
import com.iluwatar.hexagonal.mongo.MongoConnectionPropertiesLoader;
|
||||||
|
import com.mongodb.MongoClient;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Ignore;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests for Mongo event log
|
||||||
|
*/
|
||||||
|
@Ignore
|
||||||
|
public class MongoEventLogTest {
|
||||||
|
|
||||||
|
private static final String TEST_DB = "lotteryDBTest";
|
||||||
|
private static final String TEST_EVENTS_COLLECTION = "testEvents";
|
||||||
|
|
||||||
|
private MongoEventLog mongoEventLog;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void init() {
|
||||||
|
MongoConnectionPropertiesLoader.load();
|
||||||
|
MongoClient mongoClient = new MongoClient(System.getProperty("mongo-host"),
|
||||||
|
Integer.parseInt(System.getProperty("mongo-port")));
|
||||||
|
mongoClient.dropDatabase(TEST_DB);
|
||||||
|
mongoClient.close();
|
||||||
|
mongoEventLog = new MongoEventLog(TEST_DB, TEST_EVENTS_COLLECTION);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSetup() {
|
||||||
|
assertEquals(0, mongoEventLog.getEventsCollection().count());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testFundTransfers() {
|
||||||
|
PlayerDetails playerDetails = PlayerDetails.create("john@wayne.com", "000-000", "03432534543");
|
||||||
|
mongoEventLog.prizeError(playerDetails, 1000);
|
||||||
|
assertEquals(1, mongoEventLog.getEventsCollection().count());
|
||||||
|
mongoEventLog.prizeError(playerDetails, 1000);
|
||||||
|
assertEquals(2, mongoEventLog.getEventsCollection().count());
|
||||||
|
mongoEventLog.ticketDidNotWin(playerDetails);
|
||||||
|
assertEquals(3, mongoEventLog.getEventsCollection().count());
|
||||||
|
mongoEventLog.ticketDidNotWin(playerDetails);
|
||||||
|
assertEquals(4, mongoEventLog.getEventsCollection().count());
|
||||||
|
mongoEventLog.ticketSubmitError(playerDetails);
|
||||||
|
assertEquals(5, mongoEventLog.getEventsCollection().count());
|
||||||
|
mongoEventLog.ticketSubmitError(playerDetails);
|
||||||
|
assertEquals(6, mongoEventLog.getEventsCollection().count());
|
||||||
|
mongoEventLog.ticketSubmitted(playerDetails);
|
||||||
|
assertEquals(7, mongoEventLog.getEventsCollection().count());
|
||||||
|
mongoEventLog.ticketSubmitted(playerDetails);
|
||||||
|
assertEquals(8, mongoEventLog.getEventsCollection().count());
|
||||||
|
mongoEventLog.ticketWon(playerDetails, 1000);
|
||||||
|
assertEquals(9, mongoEventLog.getEventsCollection().count());
|
||||||
|
mongoEventLog.ticketWon(playerDetails, 1000);
|
||||||
|
assertEquals(10, mongoEventLog.getEventsCollection().count());
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user