|
|
|
@ -1,7 +1,13 @@
|
|
|
|
|
package com.pqt.server.controller;
|
|
|
|
|
|
|
|
|
|
import com.pqt.core.communication.GSonMessageToolFactory;
|
|
|
|
|
import com.pqt.core.communication.IMessageToolFactory;
|
|
|
|
|
import com.pqt.core.entities.messages.Message;
|
|
|
|
|
import com.pqt.core.entities.messages.MessageType;
|
|
|
|
|
import com.pqt.core.entities.product.LightweightProduct;
|
|
|
|
|
import com.pqt.core.entities.product.Product;
|
|
|
|
|
import com.pqt.core.entities.sale.Sale;
|
|
|
|
|
import com.pqt.server.exception.ServerQueryException;
|
|
|
|
|
import com.pqt.server.module.account.AccountService;
|
|
|
|
|
import com.pqt.server.module.client.ClientService;
|
|
|
|
|
import com.pqt.server.module.sale.SaleService;
|
|
|
|
@ -14,12 +20,16 @@ import java.util.Map;
|
|
|
|
|
|
|
|
|
|
public class SimpleMessageHandler implements IMessageHandler {
|
|
|
|
|
|
|
|
|
|
private final String header_ref_query = "Detail_refus";
|
|
|
|
|
private final String header_err_query = "Detail_erreur";
|
|
|
|
|
|
|
|
|
|
private AccountService accountService;
|
|
|
|
|
private SaleService saleService;
|
|
|
|
|
private StatisticsService statisticsService;
|
|
|
|
|
private StockService stockService;
|
|
|
|
|
private ClientService clientService;
|
|
|
|
|
private ServerStateService serverStateService;
|
|
|
|
|
private IMessageToolFactory messageToolFactory;
|
|
|
|
|
|
|
|
|
|
private Map<MessageType, IMessageProcess> queryHandlers;
|
|
|
|
|
|
|
|
|
@ -30,22 +40,105 @@ public class SimpleMessageHandler implements IMessageHandler {
|
|
|
|
|
saleService = new SaleService();
|
|
|
|
|
stockService = new StockService();
|
|
|
|
|
statisticsService = new StatisticsService(stockService, saleService);
|
|
|
|
|
messageToolFactory = new GSonMessageToolFactory();
|
|
|
|
|
|
|
|
|
|
queryHandlers = new HashMap<>();
|
|
|
|
|
//TODO ajouter callables à la map
|
|
|
|
|
|
|
|
|
|
queryHandlers.put(MessageType.QUERY_STOCK, (message)->{
|
|
|
|
|
Map<String, String> fields = new HashMap<>();
|
|
|
|
|
fields.put("stock", messageToolFactory.getListFormatter(Product.class).format(stockService.getProductList()));
|
|
|
|
|
return new Message(MessageType.MSG_STOCK, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, fields);
|
|
|
|
|
});
|
|
|
|
|
queryHandlers.put(MessageType.QUERY_SALE, (message)->{
|
|
|
|
|
Map<String, String> fields = new HashMap<>();
|
|
|
|
|
try {
|
|
|
|
|
long saleId = saleService.submitSale(messageToolFactory.getObjectParser(Sale.class).parse(message.getField("sale")));
|
|
|
|
|
fields.put("saleId", Long.toString(saleId));
|
|
|
|
|
return new Message(MessageType.ACK_SALE, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, fields);
|
|
|
|
|
}catch(ServerQueryException e){
|
|
|
|
|
fields.put(header_ref_query, e.toString());
|
|
|
|
|
return new Message(MessageType.REFUSED_QUERY, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, fields);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
queryHandlers.put(MessageType.QUERY_REVERT_SALE, (message)->{
|
|
|
|
|
try{
|
|
|
|
|
saleService.submitSaleRevert(messageToolFactory.getObjectParser(Long.class).parse(message.getField("saleId")));
|
|
|
|
|
return new Message(MessageType.ACK_REVERT_SALE, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, null);
|
|
|
|
|
}catch(ServerQueryException e){
|
|
|
|
|
Map<String, String> fields = new HashMap<>();
|
|
|
|
|
fields.put(header_err_query, e.toString());
|
|
|
|
|
return new Message(MessageType.ERROR_QUERY, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, fields);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
queryHandlers.put(MessageType.QUERY_STAT, (message)->{
|
|
|
|
|
Map<String, String> fields = new HashMap<>();
|
|
|
|
|
fields.put("total_sale_worth", Double.toString(statisticsService.getTotalSaleWorth()));
|
|
|
|
|
fields.put("total_sale_amount", Integer.toString(statisticsService.getTotalAmountSale()));
|
|
|
|
|
fields.put("total_money_made", Double.toString(statisticsService.getTotalMoneyMade()));
|
|
|
|
|
fields.put("top_popular_products", messageToolFactory.getListFormatter(LightweightProduct.class).format(statisticsService.getTopPopularProducts(5)));
|
|
|
|
|
fields.put("staff_sale_worth",Double.toString(statisticsService.getStaffSaleWorth()));
|
|
|
|
|
fields.put("staff_sale_amount",Integer.toString(statisticsService.getStaffSaleAmount()));
|
|
|
|
|
fields.put("guest_sale_worth",Double.toString(statisticsService.getGuestSaleAmount()));
|
|
|
|
|
fields.put("guest_sale_amount",Integer.toString(statisticsService.getStaffSaleAmount()));
|
|
|
|
|
|
|
|
|
|
return new Message(MessageType.MSG_STAT, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, fields);
|
|
|
|
|
});
|
|
|
|
|
queryHandlers.put(MessageType.QUERY_UPDATE, (message)->{
|
|
|
|
|
//TODO Supporter les query update
|
|
|
|
|
return null;
|
|
|
|
|
});
|
|
|
|
|
queryHandlers.put(MessageType.QUERY_CONNECT, (message)->{
|
|
|
|
|
//TODO Supporter les query client
|
|
|
|
|
return null;
|
|
|
|
|
});
|
|
|
|
|
queryHandlers.put(MessageType.QUERY_LOGIN, (message)->{
|
|
|
|
|
//TODO Supporter les query account
|
|
|
|
|
return null;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Message handleMessage(Message message) {
|
|
|
|
|
|
|
|
|
|
if(queryHandlers.containsKey(message.getType()))
|
|
|
|
|
return queryHandlers.get(message.getType()).execute(message);
|
|
|
|
|
Map<String, String> fields = new HashMap<>();
|
|
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
if(!checkClient(message)){
|
|
|
|
|
fields.put(header_ref_query, "client non enregistré sur le serveur");
|
|
|
|
|
return new Message(MessageType.REFUSED_QUERY, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, fields);
|
|
|
|
|
}
|
|
|
|
|
if(!isAccountRegistered(message)){
|
|
|
|
|
fields.put(header_ref_query, "Compte utilisateur inconnu");
|
|
|
|
|
return new Message(MessageType.REFUSED_QUERY, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, fields);
|
|
|
|
|
}
|
|
|
|
|
if(!checkAccountPermission(message)){
|
|
|
|
|
fields.put(header_ref_query, "Compte utilisateur avec permission trop faible");
|
|
|
|
|
return new Message(MessageType.REFUSED_QUERY, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, fields);
|
|
|
|
|
}
|
|
|
|
|
if(queryHandlers.containsKey(message.getType())){
|
|
|
|
|
return queryHandlers.get(message.getType()).execute(message);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fields.put(header_err_query, "Type requête non pris en charge par ce serveur");
|
|
|
|
|
return new Message(MessageType.ERROR_QUERY, serverStateService.getServer(), message.getEmitter(), message.getUser(), message, fields);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//TODO ajouter Javadoc
|
|
|
|
|
private interface IMessageProcess{
|
|
|
|
|
Message execute(Message request);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private boolean checkClient(Message message){
|
|
|
|
|
//TODO faire ça
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private boolean isAccountRegistered(Message message){
|
|
|
|
|
//TODO faire ça
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private boolean checkAccountPermission(Message message){
|
|
|
|
|
//TODO faire ça
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|