aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: 3b004b10a9c1c1bd1eec934c90f30b6bada50b51 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
Projet EIG 2011
===============

Auteurs :
 * Pacien TRAN-GIRARD
 * Benoît LUBRANO DI SBARAGLIONE
 

Description du projet
---------------------

Plate-forme d'enchères simplifiée où les utilisateurs peuvent :
 * créer un compte
 * s'authentifier
 * vendre des items
 * visualiser la liste des items en vente
 * enchérir
 * visualiser l'historique des transactions, le solde et le solde
 disponible
 

Description générale de la solution proposée
--------------------------------------------

# Application web

La plate-forme a été implémentée sous la forme d'une application web
simpliste.
Le langage Scala ainsi que le framework Play! ont été utilisés.

L'application communique avec la base de donnée Oracle ou PostgreSQL à
l'aide de Slick.
Slick permet d'effectuer des requêtes à la manière de SQL, mais en
assurant la cohérences des types au sein de l'application, tout en
évitant les injections SQL.


# Base de donnée

Les comptes utilisateurs, les items en vente, les enchères et les
transactions, ainsi que les frais annuels sont stockés en base dans
des tables correspondantes.

Tous les enregistrements sont référencés par des UUIDs afin d'être
récupérés facilement par l'application web.

Conformément au cahier des charges, toutes les transactions internes
(suite à des enchères remportées) et externes (virements) sont
répercutées manuellement, bien que l'application puisse le prévoir.

Des vues permettent d'obtenir le solde, le solde disponible et les
ventes avec les enchères gagnantes.

Il a été choisi de n'utiliser des fonctions stockées que pour la date
et la génération des UUID pour faire abstraction des fonctions aux noms
différents selon le SGBD utilisée.

Les procédures et fonctions stockées n'ont pas été utilisées pour la
communication entre l'application et la base de donnée. En effet, leur
utilité au niveau du contrôle d'accès ne fait plus lieu avec une
application web. De plus, il a été constaté à la suite de tests qu'elles
empêchaient le fonctionnement du cache au niveau de l'application web,
et perturbaient l'optimiseur de la base de donnée, qui les voyait comme
des boîtes noires, n'optimisant de ce fait les requêtes internes que
de façon séparée.

La fonction stockée renvoyant la date "actuelle" n'a pas été utilisée.
En effet, son utilisation provoquait des problèmes de cohérence quand
il s'agit d'enchérir dans le passé. L'enchère la plus récente ne devenait
plus la meilleure par exemple.


Compilation et exécution de l'application
-----------------------------------------

# Configuration de l'environnement

La configuration de l'application s'effectue par la création de variables
d'environnement.

	export DATABASE_DRIVER="oracle.jdbc.driver.OracleDriver"
	export DATABASE_URL="jdbc:oracle:thin:trangirp/firstjackal97@mvx1.esiee.fr:1521:XE"


# Compilation et exécution

Le projet utilise Activator ainsi que SBT pour la compilation et la
gestion des dépendances.

Le démarrage de l'application s'effectue simplement via la commande

	activator start


Il est aussi possible de créer un packetage destiné à être publié avec la
commande

	activator dist


# Exécution sur Heroku

L'application a été déployée sur Heroku à l'adresse :

	https://minibay.herokuapp.com/


Pistes d'amélioration
=====================

 * Implémenter les pages et actions manquantes
 * Hasher les mots de passe
 * Mieux gérer le cache