mirror of
https://github.com/klmp200/PQT_Gestionnaire_vente_stock.git
synced 2024-12-22 15:31:08 +00:00
Module Server, Service Sale : ajout méthd isSaleRevertSupported(); Ajout Javadoc; Correction erreur compilation liée à la classe FileUtil
This commit is contained in:
parent
d9462b4a13
commit
9a75623825
@ -2,11 +2,22 @@ package com.pqt.server.module.sale;
|
||||
|
||||
import com.pqt.core.entities.sale.Sale;
|
||||
|
||||
//TODO écrire Javadoc
|
||||
/**
|
||||
* Interface définissant les méthodes requises pour tout DAO du service de gestion des commandes {@link SaleService}.
|
||||
* <p/>
|
||||
* Les implémentations de cette interface doivent pouvoir valider des commandes, agir sur le stock et générer les
|
||||
* identifiants de commandes validées.
|
||||
* <p/>
|
||||
* Les implémentations peuvent (optionnel) assurer une persistance des données relatives aux commandes validées, et
|
||||
* peuvent donc assurer le revert des commandes {@link #submitSaleRevert(long)}. <b>Le support de cette fonctionnalité
|
||||
* est optionnel</b>.
|
||||
*
|
||||
* @see SaleService pour de plus amples détails sur le fonctionnement attendu des méthodes
|
||||
*/
|
||||
public interface ISaleDao {
|
||||
|
||||
long submitSale(Sale sale);
|
||||
|
||||
void submitSaleRevert(long id);
|
||||
|
||||
boolean isSaleRevertSupported();
|
||||
boolean submitSaleRevert(long id);
|
||||
}
|
||||
|
@ -12,9 +12,21 @@ import java.text.DateFormat;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Iterator;
|
||||
|
||||
/**
|
||||
* Implémentation de l'interface {@link ISaleDao} utilisant un fichier comme moyen pour assurer la persistance des
|
||||
* données relatives aux commandes validées. <b>Cette implémentation ne supporte pas le rollback de commandes</b>.
|
||||
* <p/>.
|
||||
* La persistance des données est faite de sorte que ces données soient lisibles par un humain lorsque le fichier est
|
||||
* ouvert avecc un éditeur de texte quelconque.
|
||||
* <p/>
|
||||
* Les identifiants attribués aux commandes validées sont incrémentés à chaque fois, en se basant soit sur la dernière
|
||||
* valeur attribuée (lue depuis le fichier de sauvegarde lors de l'instantiation), soit sur une valeur par défaut. Ils
|
||||
* sont tous <b>positifs et non-nuls</b>.
|
||||
*/
|
||||
public class NoRevertFileSaleDao implements ISaleDao {
|
||||
|
||||
private static final String SALE_LOG_FILE_NAME = "sale_log.txt";
|
||||
private static final long DEFAULT_SALE_ID = 0; //équivaut à la valeur du premier id - 1
|
||||
private StockService stockService;
|
||||
private long nextSaleId;
|
||||
private ISaleRenderer renderer;
|
||||
@ -64,7 +76,7 @@ public class NoRevertFileSaleDao implements ISaleDao {
|
||||
* @return last sale id used in the log file, or -1 if none was found.
|
||||
*/
|
||||
private long readLastSaleIdFromFile(){
|
||||
long id = -1;
|
||||
long id = DEFAULT_SALE_ID;
|
||||
if(FileUtil.exist(SALE_LOG_FILE_NAME)){
|
||||
try(ReversedLinesFileReader rlfr = new ReversedLinesFileReader(new File("SALE_LOG_FILE_NAME"))){
|
||||
boolean stop = false;
|
||||
@ -89,7 +101,12 @@ public class NoRevertFileSaleDao implements ISaleDao {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void submitSaleRevert(long id) {
|
||||
public boolean isSaleRevertSupported() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean submitSaleRevert(long id) {
|
||||
//TODO Créer un nouveau dao qui supporte le revert
|
||||
throw new UnsupportedOperationException("Le revert de commandes n'est pas supporté");
|
||||
}
|
||||
|
@ -7,8 +7,24 @@ import com.pqt.server.module.sale.listeners.ISaleListener;
|
||||
import com.pqt.server.module.sale.listeners.SimpleSaleFirerer;
|
||||
import com.pqt.server.module.stock.StockService;
|
||||
|
||||
//TODO écrire Javadoc
|
||||
//TODO ajouter logs
|
||||
|
||||
/**
|
||||
* Cette classe correspond au service de validation des commandes de produits.
|
||||
* <p/>
|
||||
* Ce service est censé pouvoir déterminer si une commmande (classe {@link Sale}) est valide ou non, et doit le cas
|
||||
* échéant effectuer les retraits de produits du stock. A chaque commande validée doit correspondre un identifiant
|
||||
* unique, qui doit être renvoyé en réponse de la validation. Cet identifiant doit permettre de pouvoir annuler
|
||||
* ultérieurement la commande correspondante via la méthode {@link #submitSaleRevert(long)}.
|
||||
* <p/>
|
||||
* Une commande est considérée comme valide si tous les produits composants la commande existent dans le stock et que
|
||||
* les quantités demandées dans la commande sont disponibles en stock.
|
||||
* <p/>
|
||||
* Ce service met également à disposition la possibilité d'enregistrer des observateurs, qui seront utilisés pour
|
||||
* exécuter des méthodes lors de certains événements, comme la validation d'une commande.
|
||||
*
|
||||
* @see ISaleListener
|
||||
*/
|
||||
public class SaleService {
|
||||
|
||||
private ISaleDao dao;
|
||||
@ -19,20 +35,57 @@ public class SaleService {
|
||||
eventFirerer = new SimpleSaleFirerer();
|
||||
}
|
||||
|
||||
public long submitSale(Sale sale) throws ServerQueryException {
|
||||
/**
|
||||
* Soumet une commande au service pour validation. Si la commande est validée, les stocks seront débités et
|
||||
* l'identifiant de la commande sera renvoyé. Si la commande n'est pas validée, la valeur {@value -1} sera renvoyée
|
||||
* et les stocks resterons inchangés.
|
||||
* @param sale commande à valider
|
||||
* @return l'identifiant positif non-nul attribué à la commande si elle est validée, {@value -1} sinon.
|
||||
*/
|
||||
public long submitSale(Sale sale) {
|
||||
long id = dao.submitSale(sale);
|
||||
if(id!=-1) eventFirerer.fireSaleValidatedEvent(sale);
|
||||
return id;
|
||||
}
|
||||
|
||||
public void submitSaleRevert(long id) throws ServerQueryException {
|
||||
dao.submitSaleRevert(id);
|
||||
/**
|
||||
* Détermine si le rollback de commande est supporté par la configuration actuelle du serveur ou non.
|
||||
* <p/>
|
||||
* Tenter d'effectuer un rollback de commande alors que ce dernier n'est pas supporté lèvera une
|
||||
* {@link UnsupportedOperationException}.
|
||||
*
|
||||
* @return {@code true} si le rollback de commande est supporté, {@code false} sinon.
|
||||
*/
|
||||
public boolean isSaleRevertSupported(){
|
||||
return dao.isSaleRevertSupported();
|
||||
}
|
||||
|
||||
/**
|
||||
* Demande le rollback d'une commande en se basant sur l'identifiant.
|
||||
* @param id identifiant de la commande à annuler
|
||||
* @return {@code true} si la commande a bel et bien été annulée, {@code false} si aucun changement n'a été fait.
|
||||
*/
|
||||
public boolean submitSaleRevert(long id) {
|
||||
if(isSaleRevertSupported())
|
||||
return dao.submitSaleRevert(id);
|
||||
else
|
||||
throw new UnsupportedOperationException("Cette opération ('sale revert') n'est pas supportée par la configuration actuelle du serveur");
|
||||
}
|
||||
|
||||
/**
|
||||
* Ajout un observateur au service, qui sera notifié lorsque certains événements auront lieu.
|
||||
* @param l observateur à ajouter.
|
||||
* @see ISaleListener
|
||||
*/
|
||||
public void addListener(ISaleListener l) {
|
||||
eventFirerer.addListener(l);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retire un observateur du service.
|
||||
* @param l observateur à retirer.
|
||||
* @see ISaleListener
|
||||
*/
|
||||
public void removeListener(ISaleListener l){
|
||||
eventFirerer.addListener(l);
|
||||
}
|
||||
|
@ -33,4 +33,8 @@ public class FileUtil {
|
||||
public static boolean exist(Path path) {
|
||||
return Files.exists(path);
|
||||
}
|
||||
|
||||
public static boolean exist(String path) {
|
||||
return Files.exists(Paths.get(path));
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user