Skip to content
Snippets Groups Projects
Commit 2daab650 authored by Joel Cavat's avatar Joel Cavat
Browse files

First practical work skeleton

parents
No related branches found
No related tags found
No related merge requests found
# How to
## Import the external lib (jar)
- `mvn validate` will install `jar` libraries into the local repository
- do it the first time or at every update of the lib
```sh
mvn validate
mvn clean install
```
## Run the project
- `mvn package` will compile the project
- if you encounter problems, clean the projet before: `mvn clean package`
- `mvn exec:java` will run it
```sh
mvn package
mvn exec:java
```
File added
pom.xml 0 → 100644
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>ch.hepia.shop_online</groupId>
<artifactId>client-example-snippet</artifactId>
<packaging>jar</packaging>
<version>0.1</version>
<url>http://maven.apache.org</url>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-core</artifactId>
<version>5.7.0</version>
</dependency>
<dependency>
<groupId>ch.hepia.shop_online</groupId>
<artifactId>messages</artifactId>
<version>0.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- The plugin provides 2 goals to help execute system and Java programs. -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>ch.hepia.shop_online.ShopOnline</mainClass>
</configuration>
</plugin>
<!-- The Surefire Plugin is used during the test phase of the build lifecycle
to execute the unit tests of an application -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<groupId>ch.hepia.shop_online</groupId>
<artifactId>messages</artifactId>
<version>0.1</version>
<packaging>jar</packaging>
<file>${basedir}/dependencies/messages-0.1.jar</file>
<generatePom>true</generatePom>
</configuration>
<executions>
<execution>
<id>install-jar-lib</id>
<goals>
<goal>install-file</goal>
</goals>
<phase>validate</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
package ch.hepia.shop_online;
public class ShopOnline {
public static void log(Object o) {
System.out.println(o);
}
public static void main(String[] args) {
log("Hello");
// If the line above compiles and executes, just remove it. It will be usefull later
log( new Command.CreateTransaction("test", "user1", 100_00) );
}
}
\ No newline at end of file
File added
File added
File added
#Generated by Maven
#Mon Nov 08 10:14:21 CET 2021
groupId=ch.hepia.shop_online
artifactId=client-example-snippet
version=0.1
ch/hepia/shop_online/ShopOnline.class
/Users/joel/Documents/cours/hepia/poo/tps/shop-tp-snippet/src/main/java/ch/hepia/shop-online/ShopOnline.java
---
title: Programmation orientée objet
author: TP - Shop Online
date: Joel Cavat / 2021
pandoc-latex-fontsize:
- classes: [smallSize]
size: footnotesize
---
# Travail pratique
## Modalités
## Cahier des charges
Vous devez réaliser une application permettant de gérer un **magasin en ligne**. Les clients peuvent créer des paniers d'achats et transformer ces derniers en commandes. Vous devez mettre en oeuvre la partie logique à l'aide de différents services. L'interface utilisateur est simulée à l'aide d'un terminal.
Votre application doit se décomposer en plusieurs services indépendants:
- Le service des clients `CustomerService`: celui-ci a la responsabilité de créer un panier pour un client, d'ajouter un article à un panier avec la quantité souhaitée, de transformer un panier en une commande.
- Le service de gestion du stock `StockService`: Ce service gère le stock des articles, leur prix courant et gère l'envoi des paquets si une commande est acceptée.
- Le service de facturation `PaymentService`: Ce service vérifie que le client répond aux critères financier pour permettre de valider une commande
Un panier d'achat est composé de plusieurs *items*. Un item correspond à un article et sa quantité dans le panier. La validation d'un panier attribue le prix unitaire courant (qui peut varier à travers le temps) à chaque article pour calculer le montant total de la commande. L'utilisateur doit choisir un moyen de paiements (par facture ou par carte de crédit). Une fois la commande proposée, le prix des articles ne doit plus varier. Les paniers d'achat, les commandes, les articles et les clients (et de manière générale tous les identifiants) sont identifiés par une chaîne de caractères uniques (utilisez éventuellement la classe `java.util.UUID`).
Un client comprend un identifiant et une adresse email. Il est autorisé à avoir trois factures en cours. Chaque client possède également une carte de crédit avec un dépense autorisée de CHF 1000.-. Il peut passer autant de commandes qu'il souhaite avec sa carte tant que le solde reste positif.
## Scenarii
Lorsqu'une commande a été émise, les articles sont mis de côté par le service des stocks. Ce dernier réserve les articles s'ils sont disponibles ou refuse la commande. Si la commande est acceptée, le service de paiement vérifie la capacité financière du client (paragraphe précédent). Si la commande est acceptée, le service des stocks peut envoyer les articles. Le client est notifié par email une fois les articles commandés. Dans le cas contraire, le service des stocks libère la réservation des articles.
Si une commande est refusée, elle se retransforme en un panier d'achat.
## Considérations et modalités
- Formez des groupes de deux personnes (sauf pour les étudiants qui remédie l'unité, ces derniers doivent faire le travail seul)
- Utilisez `git`, `githepia` et `maven` pour ce projet.
- Les contributions de chaque membre **doivent être équilibrées**. La note peut varier au sein d'un groupe.
- Chaque outil/service technique qui ne peut être modélisé, comme par exemple l'envoi d'emails, doit être abstrait et une fausse mise en oeuvre doit être fournie (`FakeXXX`).
- Plus tard, un module de vérification des paiements par carte de crédit vous sera fourni. Vous pourez générer une demande de paiement à l'aide de l'identifiant de l'utilisateur et ce dernier acceptera ou non la demande de paiement selon les critères vus plus haut. La difficulté et que la réponse pourra prendre plusieurs secondes ou minutes pour être vérifiée. Vous devrez pensez à accepter d'autres demande en attendant.
- Il s'agit d'une première version. Faites ce qui est demandé. Par exemple, il n'est pas demandé explicitement de supprimer un article d'un panier. Donc répondez aux exigeances avant d'apporter des fonctionnalités qui ne sont pas prioritaires.
- Votre enseignant est votre client. Un cahier des charges n'est jamais fidèle à la vision de ce dernier. En cas de doutes, interrogez-le.
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment