mirror of
				https://github.com/klmp200/PQT_Gestionnaire_vente_stock.git
				synced 2025-10-31 09:03: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:
		| @@ -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)); | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user