Merge branch 'Persistance' of https://codefirst.iut.uca.fr/git/BOB_PARTEAM/BOB_PARTY into Persistance

Persistance
Mathilde JEAN 2 years ago
commit 24d5876844

@ -0,0 +1,19 @@
# Rederection if URL not found
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILEANME} !-f
RewriteCond %{REQUEST_FILEANME} !-d
RewriteRule (.+) index.php?p=$1 [QSA,L]
</IfModule>
# Redirecting 403 errors to index.php (does not work)
ErrorDocument 403 http://localhost:8888/api-rest/index.php
# Refusing access to all files ending with php
Require all denied
# Allowing access to index.php
<Files index.php>
Require all granted
</Files>

@ -0,0 +1,4 @@
[database]
dsn = "mysql:host=localhost;port=8888;dbname=bobParty"
username = "root"
password = "root";

@ -0,0 +1,24 @@
<?php
class DatabaseConnection extends PDO{
private $stmt;
public function __construct(string $dsn, string $username, string $password){
parent::__construct($dsn,$username,$password);
$this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
public function execQuery(string $query, array $parameters=[]) :bool{
$this->stmt = parent::prepare($query);
foreach($parameters as $name => $value){
$this->stmt->bindValue($name, $value[0], $value[1]);
}
return $this->stmt->execute();
}
public function getRes():array{
return $this->stmt->fetchall();
}
}
?>

@ -0,0 +1,157 @@
<?php
require_once('model/conversation.php');
require_once('model/message.php');
class ConversationGateway{
private $connection;
// Constructor
public function __construct($_connection){
$this->connection=$_connection;
}
/* Functions implemented to manage conversations' data from database
* getConversations : returning all the ids of the conversations of an user
(with all the id of the messages and the users in the conversation)
* postConversation : adding a NEW conversation in database
* putMatch : modifying an EXISTING conversation in database
* deleteMatch : deleting an conversation from database
*/
/// Brief : Returning all the ids of the conversations where an user belongs
///(with all the id of the messages and the users in the conversation)
/// Parameters : * $idUser (string): identifier of the user we want to get the conversations
public function getConversations(string $_idUser):?array{
// Declaration of arrays (NULL) and queries
$tabConversations=NULL;
$tabUsers=NULL;
$tabMessages=NULL;
$conversationQuery = "SELECT c.PK_ID, c.COV_NAME
FROM T_H_CONVERSATION_COV c, T_J_DISCUSS_DIS d
WHERE c.PK_ID=d.FK_CONVERSATION
AND d.FK_USER=:idUser";
$messagesQuery = "SELECT m.PK_ID, m.MSG_MESSAGE, m.FK_SENDER
FROM T_H_MESSAGE_MSG m, T_J_CONTAIN_MESSAGE_CMG c
WHERE m.PK_ID=c.FK_MESSAGE
AND c.FK_CONVERSATION=:idConv";
$usersQuery = "SELECT d.FK_USER
FROM T_J_DISCUSS_DIS d
WHERE d.FK_CONVERSATION = :idConv";
//Find all the conversations where the user belong
$argIdUser=array('idUser'=>array($_idUser, PDO::PARAM_INT));
$this->connection->execQuery($conversationQuery,$argIdUser);
$res=$this->connection->getRes();
foreach($res as $row){
$argIdConv= array('idConv'=>array($row['PK_ID'], PDO::PARAM_INT));
// Find all messages of the conversation
$this->connection->execQuery($messagesQuery,$argIdConv);
$resMessages=$this->connection->getRes();
foreach($resMessages as $rowMessages){
$tabUsers[] = new Message($rowMessages['PK_ID'],
$rowMessages['MSG_MESSAGE'],
$rowMessages['FK_SENDER']);
}
// Find all the users in the conversation
$this->connection->execQuery($usersQuery,$argIdConv);
$resUsers=$this->connection->getRes();
foreach($resUsers as $rowUsers){
$tabUsers[] = $rowUsers['FK_USER'];
}
// Add the conversation into the array
$tabConversations[] = new Conversation($row['PK_ID'],
$row['COV_NAME'],
$tabMessages,
$tabUsers);
// Restore the arrays
$tabUsers=array();
$tabMessages=array();
}
return $tabConversations;
}
/// Brief : Adding a new conversation in database
public function postConversation(string $name, int $idUser): void{
// Declare queries
$convCreationQuery = "INSERT INTO T_H_CONVERSATION_COV VALUES(NULL,:name)";
$addUserInConvQuery = "INSERT INTO T_J_DISCUSS_DIS VALUES(:idUser,:idConv)";
$argconvCreationQuery = array('name'=>array($name, PDO::PARAM_STR));
// Create a new conversation
$this->connection->execQuery($convCreationQuery,$argconvCreationQuery);
$this->connection->execQuery("SELECT PK_ID
FROM T_H_CONVERSATION_COV
WHERE PK_ID >= ALL (SELECT max(c2.PK_ID)
FROM T_H_CONVERSATION_COV c2)",[]);
$res=$this->connection->getRes();
foreach($res as $row){
$id=$row['PK_ID'];
}
$argUserInConvQuery = array('idUser'=>array($idUser, PDO::PARAM_INT),
'idConv'=>array($id, PDO::PARAM_INT));
$this->connection->execQuery($addUserInConvQuery,$argUserInConvQuery);
}
/// Brief : Modifying an EXISTING conversation in database
public function putConversation(int $id, string $name):void{
$conversationUpdateQuery = "UPDATE T_H_CONVERSATION_COV
SET COV_NAME=:name
WHERE PK_ID=:id";
$argConversationUpdate = array('name'=>array($name, PDO::PARAM_STR),
'id'=>array($id,PDO::PARAM_INT));
$this->connection->execQuery($conversationUpdateQuery,$argConversationUpdate);
}
/// Brief : Adding an user to a conversation
public function addUserToConversation(int $idConv, int $idUser){
$insertUserQuery = "INSERT INTO T_J_DISCUSS_DIS VALUES(:idUser,:idConv)";
$argQuery = array('idUser'=>array($idUser,PDO::PARAM_INT),
'idConv'=>array($idConv,PDO::PARAM_INT));
$this->connection->execQuery($insertUserQuery,$argQuery);
}
/// Brief : Deleting an user from a conversation
public function deleteUserFromConversation(int $idConv, int $idUser){
$insertUserQuery = "DELETE FROM T_J_DISCUSS_DIS WHERE FK_USER=:idUser AND FK_CONVERSATION=:idConv";
$argQuery = array('idUser'=>array($idUser,PDO::PARAM_INT),
'idConv'=>array($idConv,PDO::PARAM_INT));
$this->connection->execQuery($insertUserQuery,$argQuery);
}
/// Brief : adding a new message into a conversation
public function addMessageToConversation(string $message, int $idSender, int $idConv){
$insertMessageQuery = "INSERT INTO T_H_MESSAGE_MSG VALUES(NULL,:message,:idSender)";
$insertMsgInConvQuery = "INSERT INTO T_J_CONTAIN_MESSAGE_CMG VALUES(:idConv,:idMessage)";
$argInsertMessage= array('message'=>array($message,PDO::PARAM_STR),
'idSender'=>array($idSender,PDO::PARAM_INT));
$this->connection->execQuery($insertMessageQuery,$argInsertMessage);
$this->connection->execQuery("SELECT PK_ID
FROM T_H_MESSAGE_MSG
WHERE PK_ID >= ALL (SELECT max(m2.PK_ID)
FROM T_H_MESSAGE_MSG m2)",[]);
$res=$this->connection->getRes();
foreach($res as $row){
$idMsg=$row['PK_ID'];
}
$argMsgInConv = array('idConv'=>array($idConv,PDO::PARAM_INT),
'idMessage'=>array($idMsg,PDO::PARAM_INT));
$this->connection->execQuery($insertMsgInConvQuery,$argMsgInConv);
}
/// Brief : Deleting a conversation and its messages from database
public function deleteConversation(int $id):void{
$deleteConv = "DELETE FROM T_H_CONVERSATION_COV
WHERE PK_ID=:idConv";
$argIdConv = array('idConv'=>array($id,PDO::PARAM_INT));
$this->connection->execQuery($deleteConv,$argIdConv);
}
}
?>

@ -0,0 +1,54 @@
<?php
require_once('model/game.php');
class GameGateway{
private $connecion;
// Constructor
public function __construct($_connection){
$this->connection=$_connection;
}
/* Functions implemented to manage games' data from database
* getGames : returning all the games found in database
* getGameById : returning a game found in database with its id
*/
/// Brief : Returning all the games found in database
public function getGames():?array{
$tabGames=null;
$gamesQuery="SELECT * FROM T_E_GAME_GAM";
$this->connection->execQuery($gamesQuery,[]);
$res = $this->connection->getRes();
foreach($res as $row){
$tabGames[]= new Game($row['PK_ID'],
$row['GAM_NAME'],
$row['GAM_IMAGE'],
$row['GAM_NB_PLAYER_MIN'],
$row['GAM_NB_PLAYER_MAX']);
}
return $tabGames;
}
/// Brief : Returning a game found in database with its id
/// Parameters : * $id (string): identifier of the game we are looking for
public function getGameById(string $id):?Game{
$game=null;
$gameInfoQuery="SELECT * FROM T_E_GAME_GAM WHERE PK_ID=:id";
$arg=array('id'=>array($id,PDO::PARAM_STR));
$this->connection->execQuery($gameInfoQuery,$arg);
$res=$this->connection->getRes();
foreach($res as $row){
$game= new Game($row['PK_ID'],
$row['GAM_NAME'],
$row['GAM_IMAGE'],
$row['GAM_NB_PLAYER_MIN'],
$row['GAM_NB_PLAYER_MAX']);
}
return $game;
}
}
?>

@ -0,0 +1,98 @@
<?php
require_once('model/match.php');
class MatchGateway{
private $connection;
// Constructor
public function __construct($con){
$this->connection=$con;
}
/* Functions implemented to manage matches' data from database
* getMatchById : returning a match found in database with its id
* postMatch : adding a NEW user in database
* putMatch : modifying an EXISTING user in database
* deleteMatch : deleting an user from database
*/
/// Brief : Returning a match found in database with his id
/// Parameters : * $id (string): identifier of the match we are looking for
public function getMatchById(string $matchId):?Matchs{
$match=NULL;
$matchInfoQuery="SELECT PK_ID, MTC_IN_GAME, FK_ID_GAME FROM T_E_MATCH_MTC WHERE PK_ID = :id";
$playersInMatchQuery="SELECT FK_USER FROM T_J_PLAY_MATCH_PLM WHERE FK_MATCH=:id";
$argId=array('id' => array($matchId, PDO::PARAM_INT));
$this->connection->execQuery($playersInMatchQuery, $argId);
$res=$this->connection->getRes();
foreach($res as $row){
$tabUser[] = $row['FK_USER'];
}
$this->connection->execQuery($matchInfoQuery, $argId);
$res=$this->connection->getRes();
foreach($res as $row){
$match = new Matchs($row['PK_ID'],$row['MTC_IN_GAME'],$row['FK_ID_GAME'],$tabUser);
}
return $match;
}
/// Brief : Adding a NEW match in database
public function postMatch(int $idGame, int $idCreator){
$insertMatchQuery="INSERT INTO T_E_MATCH_MTC VALUES(NULL,0,:idGame)";
$insertPlayQuery = "INSERT INTO T_J_PLAY_MATCH_PLM VALUES(:idCreator,:id);";
$argInsertMatch=array('idGame'=>array($idGame, PDO::PARAM_INT));
$this->connection->execQuery($insertMatchQuery,$argInsertMatch);
$this->connection->execQuery("SELECT PK_ID
FROM T_E_MATCH_MTC
WHERE PK_ID >= ALL (SELECT max(m2.PK_ID)
FROM T_E_MATCH_MTC m2)",[]);
$res=$this->connection->getRes();
foreach($res as $row){
$id=$row['PK_ID'];
}
$argInsertPlay= array('idCreator'=>array($idCreator,PDO::PARAM_INT),
'id'=>array($id,PDO::PARAM_INT));
$this->connection->execQuery($insertPlayQuery,$argInsertPlay);
return;
}
/// Brief : Modifying an EXISTING match in database
public function putMatch(int $id){
$updateQuery="UPDATE T_E_MATCH_MTC SET MTC_IN_GAME=1 WHERE PK_ID=:id";
$argUpdate=array('id'=>array($id,PDO::PARAM_INT));
$this->connection->execQuery($updateQuery,$argUpdate);
return;
}
/// Brief : Adding an user into a match
public function addUserToMatch(int $idMatch, int $idUser){
$insertQuery = "INSERT INTO T_J_PLAY_MATCH_PLM VALUES(:idUser,:idMatch)";
$argInsert= array('idUser'=>array($idUser,PDO::PARAM_INT),
'idMatch'=>array($idMatch,PDO::PARAM_INT));
$this->connection->execQuery($insertQuery,$argInsert);
return;
}
/// Brief : Deleting an user from a match
public function deleteUserFromMatch(int $idUser){
$deleteQuery = "DELETE FROM T_J_PLAY_MATCH_PLM WHERE FK_USER=:idUser";
$argDelete = array('idUser'=>array($idUser,PDO::PARAM_INT));
$this->connection->execQuery($deleteQuery,$argDelete);
return;
}
/// Brief : Deleting a match from database
/// Parameters : * $u (Matchs): match we want to delete from database
public function deleteMatch(int $id){
$query="DELETE FROM T_E_MATCH_MTC WHERE PK_ID=:id";
$arg=array('id'=>array($id, PDO::PARAM_INT));
$this->connection->execQuery($query,$arg);
}
}
?>

@ -0,0 +1,34 @@
<?php
require_once('model/skin.php');
class SkinGateway{
private $connection;
public function __construct($_connection){
$this->connection=$_connection;
}
/* Functions implemented to manage skins' data from database
* getGames : returning all the skins found in database
* getGameById : returning a skin found in database with its id
*/
/// Brief : Returning all the skins found in database
public function getSkins():?array{
$tabSkins=null;
$skinQuery="SELECT * FROM T_H_SKIN_SKI";
$this->connection->execQuery($skinQuery,[]);
$res = $this->connection->getRes();
foreach($res as $row){
$tabSkins[]= new Skin($row['PK_ID'],
$row['SKI_NAME'],
$row['SKI_IMAGE'],
$row['SKI_PRICE']);
}
return $tabSkins;
}
}
?>

@ -0,0 +1,183 @@
<?php
require_once('model/user.php');
class UserGateway{
private $connection;
public function __construct(DatabaseConnection $con){
$this->connection=$con;
}
/* CRUD methods
* getUserById : returning an user found in database with its id
* getUserByUsername : returning an user found in database with its username
* getUserForConnection : returning an user if there is a correspondance between
the username and the password, used for connection
* postUser : adding a NEW user in database
* putUser : modifying an EXISTING user in database
* putSkinList : adding a skin into the list of skins of the user
* deleteUser : deleting an user from database
* addSkin : adding a skin to the list of skins bleonged by an user
*/
/* Other methods
* convertResToUser : converting the result of a PDO query into an instance of User
* getSkinList : search into database the list of skin the user have
*/
/// Brief : Converting the result of a PDO query into an instance of User
/// Parameter : * $res : result of the PDO query
public function convertResToUser($res):?User{
$usr=null;
foreach($res as $row){
$usr= new User($row['PK_ID'],
$row['USR_USERNAME'],
$row['USR_PASSWORD'],
$row['USR_NATIONALITY'],
$row['USR_SEX'],
$row['USR_DATE_OF_BIRTH'],
$row['USR_CURRENT_NB_COINS'],
$row['USR_TOTAL_NB_COINS'],
$row['USR_NB_GAMES_PLAYED'],
$row['FK_CURRENT_SKIN'],
null);
}
return $usr;
}
/// Brief : Research into database the list of skin the user have
/// Parameter : * $id (int) : id of the user we want to get the list
public function getSkinList(int $id):?array{
$tabSkin=null;
$skinsOfUserQuery="SELECT s.*
FROM T_H_SKIN_SKI s, T_J_OWN_SKIN_OWN o
WHERE o.FK_USER=:id";
$argIdUser=array('id'=>array($id,PDO::PARAM_STR));
$this->connection->execQuery($skinsOfUserQuery,$argIdUser);
$resSkin=$this->connection->getRes();
foreach($resSkin as $row){
$tabSkin[]= new Skin($row['PK_ID'], $row['SKI_NAME'], $row['SKI_IMAGE'],$row['SKI_PRICE']);
}
return $tabSkin;
}
/// Brief : Returning an user found in database with his id
/// Parameters : * $id (string): identifier of the user we are looking for
public function getUserById(int $id):?User{
$userQuery="SELECT *
FROM T_S_USER_USR
WHERE PK_ID = :id";
$argIdUser=array('id'=>array($id,PDO::PARAM_INT));
$this->connection->execQuery($userQuery,$argIdUser);
$res=$this->connection->getRes();
$usr=$this->convertResToUser($res);
if ($usr != null){
$usr->listSkin=$this->getSkinList($usr->id);
}
return $usr;
}
/// Brief : Returning an user found in database with his username
/// Parameters : * $username (string): username of the user we are looking for
public function getUserByUsername (string $username):?User{
$userQuery = "SELECT *
FROM T_S_USER_USR
WHERE USR_USERNAME=:username";
$argUsername=array('username'=>array($username,PDO::PARAM_STR));
$this->connection->execQuery($userQuery,$argUsername);
$res=$this->connection->getRes();
$usr=$this->convertResToUser($res);
if ($usr != null){
$usr->listSkin=$this->getSkinList($usr->id);
}
return $usr;
}
/// Brief : Returning an user if there is a correspondance between the username and the password, used for connection
/// Parameters : * $username (string): username of the user we are looking for
/// * $password (string): password of the user we are looking for
/// Comment : this function returns an user if it finds a match between an username and password,
/// if it doesn't, it means there are no corresponding user
public function getUserForConnection(string $username,string $password):?User{
$userQuery = "SELECT *
FROM T_S_USER_USR
WHERE USR_USERNAME=:username
AND USR_PASSWORD=:password";
$argUsernamePassword=(array('username'=>array($username,PDO::PARAM_STR),
'password'=>array($password,PDO::PARAM_STR)));
$this->connection->execQuery($userQuery,$argUsernamePassword);
$res=$this->connection->getRes();
$usr=$this->convertResToUser($res);
if ($usr != null){
$usr->listSkin=$this->getSkinList($usr->id);
}
return $usr;
}
/// Brief : Adding a NEW user in database
/// Parameters : * $u (User): user we want to insert in database
/// Returning TRUE if the user has been added succesfully, FALSE otherwise
public function postUser(string $username, string $password, string $nationality, string $sex, string $dateOfBirth) {
$insertUserQuery = "INSERT INTO T_S_USER_USR VALUES (NULL, :username, :password, :nationality, :sex, :dateOfBirth, 0, 0, 0, 1)";
$argUser=array('username' => array($username, PDO::PARAM_STR),
'password' => array($password, PDO::PARAM_STR),
'nationality' => array($nationality, PDO::PARAM_STR),
'sex' => array($sex, PDO::PARAM_STR),
'dateOfBirth' => array($dateOfBirth, PDO::PARAM_STR));
$this->connection->execQuery($insertUserQuery, $argUser);
}
/// Brief : Modifying an EXISTING user in database
/// Parameters : * $u (User): user we want to update in database
/// Returning TRUE if the modifications has been done succesfully, FALSE otherwise
public function putUser(int $id,string $username, string $password, int $currentBobCoins,int $totalBobCoins,int $nbGamesPlayed, int $currentSkin){
$updateUserQuery="UPDATE T_S_USER_USR
SET USR_USERNAME = :username,
USR_PASSWORD=:password,
USR_CURRENT_NB_COINS=:currentBobCoins,
USR_TOTAL_NB_COINS=:totalBobCoins,
USR_NB_GAMES_PLAYED=:nbGamesPlayed,
FK_CURRENT_SKIN=:currentSkin
WHERE PK_ID=:id";
$argUser=array('username' => array($username, PDO::PARAM_STR),
'password' => array($password, PDO::PARAM_STR),
'currentBobCoins' => array($currentBobCoins, PDO::PARAM_INT),
'totalBobCoins' => array($totalBobCoins, PDO::PARAM_INT),
'nbGamesPlayed' => array($nbGamesPlayed, PDO::PARAM_INT),
'currentSkin'=> array($currentSkin, PDO::PARAM_INT),
'id' => array($id, PDO::PARAM_INT));
$this->connection->execQuery($updateUserQuery, $argUser);
}
/// Brief : Adding a skin into the list of skins of the user
/// Parameter : * $u (User) : user
public function putSkinList(int $idUser, int $idSkin){
$addSkinQuery = "INSERT INTO T_J_OWN_SKIN_OWN VALUES(:idUser,:idSkin)";
$updateBobCoinsQuery = "UPDATE T_S_USER_USR
SET USR_CURRENT_NB_COINS = USR_CURRENT_NB_COINS - (SELECT SKI_PRICE
FROM T_H_SKIN_SKI
WHERE PK_ID=:idSkin)
WHERE PK_ID=:idUser";
$argOwn = array('idUser'=>array($idUser,PDO::PARAM_INT),
'idSkin'=>array($idSkin,PDO::PARAM_INT));
$argUpdate = array('idSkin'=>array($idSkin,PDO::PARAM_INT),
'idUser'=>array($idUser,PDO::PARAM_INT));
$this->connection->execQuery($addSkinQuery, $argOwn);
$this->connection->execQuery($updateBobCoinsQuery,$argUpdate);
}
/// Brief : Deleting an user from database
/// Parameter : * $u (User): user we want to delete from database
public function deleteUser(int $id): void{
$query = "DELETE from T_S_USER_USR WHERE PK_ID = :id";
$arg=array('id' => array($id, PDO::PARAM_STR));
$this->connection->execQuery($query,$arg);
}
}
?>

@ -0,0 +1,340 @@
<?php
echo "hey you ";
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST,GET,DELETE,PUT');
/// Good to know :
/// All the values must be cleaned on the application side before using this API
///
include ('dbConnection.php');
include ('gateways/userGateway.php');
include ('gateways/matchGateway.php');
include ('gateways/conversationGataway.php');
include ('gateways/gameGateway.php');
include ('gateways/skinGateway.php');
// Connection to database
// ------
// Comment faire un fichier .htaccess pour protéger ce fichier ?????????
// ------
$ini_array= parse_ini_file("config.ini");
// Initializing Database
try{
$database = new DatabaseConnection($ini_array['dsn'],$ini_array['username'],$ini_array['password']);
} catch (PDOException $e) {
echo "ERROR connection";
header("HTTP/1.0 ".$e->getMessage());
http_response_code(600); // Quel code pour les erreurs PDO?
}
// Initializing Gateways
// ------
// Passer en mode objet ou rester en mode comportemental mais assumé ???
// ------
$usergw = new UserGateway($database);
$matchgw = new MatchGateway($database);
$conversationgw = new ConversationGateway($database);
$gamegw = new GameGateway($database);
$skingw = new SkinGateway($database);
// Managing request, routing and sending
// ------
// RAPPEL POUR MOI MÊME : NE PAS OUBLIER DE FAIRE DES TRY CATCH !!!!!!!
// ------
$request_method = $_SERVER['REQUEST_METHOD'];
$request_uri = $_SERVER['REQUEST_URI'];
$url = rtrim($request_uri,"/");
$url = filter_var($url, FILTER_SANITIZE_URL);
$url = explode('/', $url);
$method_name = !empty($url[3]) ? (string)$url[3] : null;
if($method_name == null){
header("HTTP/1.0 400 Request Name Empty");
http_response_code(400);
}
switch ($request_method){
case 'GET':
if($method_name === "getUserById"){ // test : OK
if(empty($url[4])){
header("HTTP/1.0 400 Id not given");
http_response_code(400);
} else{
$id = (int)$url[4];
$user = $usergw->getUserById($id);
header('Content-Type: application/json');
echo json_encode($user, JSON_PRETTY_PRINT);
http_response_code(200);
}
}
elseif($method_name === "getUserByUsername"){ // test : OK
$username = !empty($url[4]) ? (string) $url[4] : null;
if ($username !== null){
$user =$usergw->getUserByUsername($username);
header('Content-Type: application/json');
echo json_encode($user, JSON_PRETTY_PRINT);
} else{
header("HTTP/1.0 400 Username not given");
http_response_code(400);
}
}
elseif($method_name === "getUserForConnection"){ // test : OK
$username = !empty($url[4]) ? (string) $url[4] : null;
$password = !empty($url[5]) ? (string) $url[5] : null;
if ($username != null || $password != null){
$user =$usergw->getUserForConnection($username,$password);
header('Content-Type: application/json');
echo json_encode($user, JSON_PRETTY_PRINT);
http_response_code(200);
} else{
header("HTTP/1.0 400 Username or password not given");
http_response_code(400);
}
}
elseif($method_name === "getSkins"){ // test : OK
$tabSkin = $skingw->getSkins();
header('Content-Type: application/json');
echo json_encode($tabSkin, JSON_PRETTY_PRINT);
http_response_code(200);
}
elseif($method_name === "getGames"){ // test : OK
$tabGame = $gamegw->getGames();
header('Content-Type: application/json');
echo json_encode($tabGame, JSON_PRETTY_PRINT);
http_response_code(200);
}
elseif($method_name === "getGameById"){ // test : OK
$id = !empty($url[4]) ? (int) $url[4] : null;
if ($id !== null){
$game = $gamegw->getGameById($id);
header('Content-Type: application/json');
echo json_encode($game, JSON_PRETTY_PRINT);
http_response_code(200);
} else{
header("HTTP/1.0 400 Id not given");
http_response_code(400);
}
}
elseif($method_name === "getMatchById"){ // test : OK
$id = !empty($url[4]) ? (int) $url[4] : null;
if ($id !== null){
$match = $matchgw->getMatchById($id);
header('Content-Type: application/json');
echo json_encode($match, JSON_PRETTY_PRINT);
http_response_code(200);
} else{
header("HTTP/1.0 400 Id not given");
http_response_code(400);
}
}
elseif($method_name === "getConversations"){ // tests : OK
$id = !empty($url[4]) ? (int) $url[4] : null;
if ($id !== null){
$conversations = $conversationgw->getConversations($id);
header('Content-Type: application/json');
echo json_encode($conversations, JSON_PRETTY_PRINT);
http_response_code(200);
} else{
header("HTTP/1.0 400 Id not given");
http_response_code(400);
}
}
else{
header("HTTP/1.0 401 UNAUTHORIZED REQUEST");
http_response_code(401);
}
case 'POST':
if($method_name === "postUser"){ // test : OK
if (count($url)<8){
header("HTTP/1.0 400 Invalid number of arguments");
http_response_code(400);
}
$username = !empty($url[4]) ? (string) $url[4] : null;
$password = !empty($url[5]) ? (string) $url[5] : null;
$nationality = !empty($url[5]) ? (string) $url[5] : null;
$sex = !empty($url[7]) ? (string) $url[7] : null;
$dateOfBirth = !empty($url[8]) ? (string) $url[8] : null;
$usergw->postUser($username,$password,$nationality,$sex,$dateOfBirth);
http_response_code(200);
}
elseif($method_name === "postMatch"){ // test : OK
$idGame = !empty($url[4]) ? (int) $url[4] : null;
$idCreator = !empty($url[5]) ? (int) $url[5] : null;
if ($idGame != null || $idCreator != null){
$match =$matchgw->postMatch($idGame,$idCreator);
http_response_code(200);
} else{
header("HTTP/1.0 400 idGame or idCreator not given");
http_response_code(400);
}
}
elseif($method_name === "postConversation"){ // test : OK
$name = !empty($url[4]) ? (string) $url[4] : null;
$idCreator = !empty($url[5]) ? (int) $url[5] : null;
if ($name != null || $idCreator != null){
$conversationgw->postConversation($name,$idCreator);
http_response_code(200);
} else{
header("HTTP/1.0 400 name or creator not given");
http_response_code(400);
}
}
else{
header("HTTP/1.0 401 UNAUTHORIZED REQUEST");
http_response_code(401);
}
break;
case 'PUT':
if($method_name === "putUser"){ // test : OK
if (count($url)<10){
header("HTTP/1.0 400 Invalid number of arguments");
http_response_code(400);
}
$id = !empty($url[4]) ? (int) $url[4] : null;
$username = !empty($url[5]) ? (string) $url[5] : null;
$password = !empty($url[6]) ? (string) $url[6] : null;
$nbCurrentCoins = !empty($url[7]) ? (int) $url[7] : null;
$totalnbCoins = !empty($url[8]) ? (int) $url[8] : null;
$nbGames = !empty($url[9]) ? (int) $url[9] : null;
$currentSkin = !empty($url[10]) ? (int) $url[10] : null;
$usergw->putUser($id,$username,$password,$nbCurrentCoins,$totalnbCoins,$nbGames,$currentSkin);
http_response_code(200);
}
elseif($method_name === "putSkinList"){ // test : OK
$idUser = !empty($url[4]) ? (int) $url[4] : null;
$idSkin = !empty($url[5]) ? (int) $url[5] : null;
if ($idUser != null || $idSkin != null){
$usergw->putSkinList($idUser,$idSkin);
http_response_code(200);
} else{
header("HTTP/1.0 400 idSkin or idUser not given");
http_response_code(400);
}
}
elseif($method_name === "putMatch"){ // test : OK
$id = !empty($url[4]) ? (int) $url[4] : null;
if ($id !== null){
$matchgw->putMatch($id);
http_response_code(200);
} else{
header("HTTP/1.0 400 Id not given");
http_response_code(400);
}
}
elseif($method_name === "addUserToMatch"){ // test : OK
$idMatch = !empty($url[4]) ? (int) $url[4] : null;
$idUser = !empty($url[5]) ? (int) $url[5] : null;
if ($idUser != null || $idMatch != null){
$matchgw->addUserToMatch($idMatch,$idUser);
http_response_code(200);
} else{
header("HTTP/1.0 400 idSkin or idUser not given");
http_response_code(400);
}
}
elseif($method_name === "deleteUserFromMatch"){ // test : OK
$idUser = !empty($url[4]) ? (int) $url[4] : null;
if ($idUser != null){
$matchgw->deleteUserFromMatch($idUser);
http_response_code(200);
} else{
header("HTTP/1.0 400 idUser not given");
http_response_code(400);
}
}
elseif($method_name === "putConversation"){ // test : OK
$id = !empty($url[4]) ? (int) $url[4] : null;
$newName = !empty($url[5]) ? (string) $url[5] : null;
if ($id != null && $newName != null){
$conversationgw->putConversation($id,$newName);
http_response_code(200);
} else{
header("HTTP/1.0 400 id or new name not given");
http_response_code(400);
}
}
elseif($method_name === "addUserToConversation"){ // test : OK
$idConv = !empty($url[4]) ? (int) $url[4] : null;
$idUser = !empty($url[5]) ? (int) $url[5] : null;
if ($idConv != null && $idUser != null){
$conversationgw->addUserToConversation($idConv,$idUser);
http_response_code(200);
} else{
header("HTTP/1.0 400 id conv or id user not given");
http_response_code(400);
}
}
elseif($method_name === "deleteUserFromConversation"){ // test : OK
$idConv = !empty($url[4]) ? (int) $url[4] : null;
$idUser = !empty($url[5]) ? (int) $url[5] : null;
if ($idConv != null && $idUser != null){
$conversationgw->deleteUserFromConversation($idConv,$idUser);
http_response_code(200);
} else{
header("HTTP/1.0 400 id conv or id user not given");
http_response_code(400);
}
}
elseif($method_name === "addMessageToConversation"){ // test : OK
$msg=!empty($url[4]) ? (string) $url[4] : null;
$idSender=!empty($url[5]) ? (int) $url[5] : null;
$idConv=!empty($url[6]) ? (int) $url[6] : null;
if ($msg != null && $idSender != null && $idConv != null){
$conversationgw->addMessageToConversation($msg,$idSender,$idConv);
http_response_code(200);
} else{
header("HTTP/1.0 400 id conv or message or sender not given");
http_response_code(400);
}
}
else{
header("HTTP/1.0 401 UNAUTHORIZED REQUEST");
http_response_code(401);
}
break;
case 'DELETE':
if($method_name === "deleteUser"){ // test : OK
$id = !empty($url[4]) ? (int) $url[4] : null;
if($id!=null){
$usergw->deleteUser($id);
http_response_code(200);
}else{
header("HTTP/1.0 400 Id not given");
http_response_code(400);
}
}
elseif($method_name == "deleteMatch"){ // test : OK
$id = !empty($url[4]) ? (int) $url[4] : null;
if($id!=null){
$matchgw->deleteMatch($id);
http_response_code(200);
}else{
header("HTTP/1.0 400 Id not given");
http_response_code(400);
}
}
elseif($method_name === "deleteConversation"){ // test : OK
$id = !empty($url[4]) ? (int) $url[4] : null;
if($id!=null){
$conversationgw->deleteConversation($id);
http_response_code(200);
}else{
header("HTTP/1.0 400 Id not given");
http_response_code(400);
}
}
else{
header("HTTP/1.0 401 UNAUTHORIZED REQUEST");
http_response_code(401);
}
break;
default :
header("HTTP/1.0 405 Invalid request method");
http_response_code(405);
break;
}
?>

@ -0,0 +1,19 @@
<?php
class Conversation{
// Object attributes
public string $id;
public string $name;
public $listMessages;
public $listIdUsers;
public function __construct($_id,$_name,$_listMessages,$_listIdUsers){
$this->id=$_id;
$this->name=$_name;
$this->listMessages=$_listMessages;
$this->listIdUsers=$_listIdUsers;
}
}
?>

@ -0,0 +1,17 @@
<?php
class Game{
public int $id;
public string $name;
public string $image;
public function __construct(int $_id, string $_name, string $_image){
$this->id=$_id;
$this->name=$_name;
$this->image=$_image;
}
}
?>

@ -0,0 +1,22 @@
<?php
// appelé "Matchs" car match sans s ne marche pas
class Matchs{
// Object attributes
public string $id;
public bool $inGame;
public string $idGame;
public $listIdUsers;
public function __construct(string $_id,bool $_inGame, string $_idGame, $_listIdUsers){
$this->id=$_id;
$this->inGame=$_inGame;
$this->idGame=$_idGame;
// Only one user at creation
$this->listIdUsers=$_listIdUsers;
}
}
?>

@ -0,0 +1,17 @@
<?php
class Message {
// Object attributes
public String $id;
public String $message;
public String $idSender;
public function __construct(String $_id, String $_message, String $_idSender){
$this->id=$_id;
$this->message=$_message;
$this->idSender=$_idSender;
}
}
?>

@ -0,0 +1,18 @@
<?php
class Skin{
public int $id;
public string $name;
public string $image;
public int $price;
public function __construct(int $_id, string $_name, string $_image, int $_price){
$this->id=$_id;
$this->name=$_name;
$this->image=$_image;
$this->price=$_price;
}
}
?>

@ -0,0 +1,34 @@
<?php
class User {
// Object attributes
public int $id;
public string $username;
public string $password;
public string $nationality;
public string $sex;
public string $dateOfBirth;
public int $currentBobCoins;
public int $totalBobCoins;
public int $nbGamesPlayed;
public int $currentSkin;
public ?array $listSkin;
public function __construct(int $_id,string $_username,string $_password, string $_nationality,string $_sex, string $_dateOfBirth, int $_currentBobCoins, int $_totalBobCoins, int $_nbGamesPlayed, int $_currentSkin,?array $_listSkin){
$this->id=$_id;
$this->username=$_username;
$this->password=$_password;
$this->nationality=$_nationality;
$this->sex=$_sex;
$this->dateOfBirth=$_dateOfBirth;
$this->currentBobCoins=$_currentBobCoins;
$this->totalBobCoins=$_totalBobCoins;
$this->nbGamesPlayed=$_nbGamesPlayed;
$this->currentSkin=$_currentSkin;
$this->listSkin=$_listSkin;
}
}
?>

@ -0,0 +1,150 @@
/* This script does:
* create tables of the database
* creates the sequences for the ids(with AUTO_INCREMENT)
* create the triggers and trigger functions
*/
/* ----------------------------------- */
/* TABLES' CREATION */
/* ----------------------------------- */
/* ----- ENTITIES TABLES -----*/
/* -- Table User -- */
CREATE TABLE T_S_USER_USR (
PK_ID int AUTO_INCREMENT PRIMARY KEY,
USR_USERNAME varchar(50) UNIQUE NOT NULL,
USR_PASSWORD varchar(50) NOT NULL,
USR_NATIONALITY varchar(20) NOT NULL,
USR_SEX char(1) NOT NULL,
USR_DATE_OF_BIRTH date,
USR_CURRENT_NB_COINS int DEFAULT 0,
USR_TOTAL_NB_COINS int DEFAULT 0,
USR_NB_GAMES_PLAYED int DEFAULT 0,
FK_CURRENT_SKIN int
REFERENCES T_H_SKIN_SKI(PK_ID)
);
/* -- Table Skin -- */
CREATE TABLE T_H_SKIN_SKI (
PK_ID int AUTO_INCREMENT PRIMARY KEY,
SKI_NAME varchar(50) UNIQUE NOT NULL,
SKI_IMAGE varchar(50) UNIQUE NOT NULL,
SKI_PRICE varchar(30)
);
/* -- Table Game -- */
CREATE TABLE T_E_GAME_GAM (
PK_ID int AUTO_INCREMENT PRIMARY KEY,
GAM_NAME varchar(50) UNIQUE,
GAM_IMAGE varchar(50) UNIQUE,
GAM_NB_PLAYER_MIN int,
GAM_NB_PLAYER_MAX int
);
/* -- Table Match -- */
CREATE TABLE T_E_MATCH_MTC (
PK_ID int AUTO_INCREMENT PRIMARY KEY,
MTC_IN_GAME boolean,
FK_ID_GAME int
REFERENCES T_E_GAME_GAM(PK_ID)
);
/* -- Table Conversation -- */
CREATE TABLE T_H_CONVERSATION_COV (
PK_ID int AUTO_INCREMENT PRIMARY KEY,
COV_NAME varchar(20)
);
/* -- Table Message -- */
CREATE TABLE T_H_MESSAGE_MSG (
PK_ID int AUTO_INCREMENT PRIMARY KEY,
MSG_MESSAGE text,
FK_SENDER int
REFERENCES T_S_USER_USR(PK_ID)
);
/* ----- JUNCTURE TABLES ----- */
/* -- Juncture own skin -- */
CREATE TABLE T_J_OWN_SKIN_OWN (
FK_USER int ,
FOREIGN KEY (FK_USER)
REFERENCES T_S_USER_USR(PK_ID)
ON DELETE CASCADE,
FK_SKIN int ,
FOREIGN KEY (FK_SKIN)
REFERENCES T_H_SKIN_SKI(PK_ID),
PRIMARY KEY(FK_SKIN, FK_USER)
);
/* -- Juncture play match -- */
CREATE TABLE T_J_PLAY_MATCH_PLM (
FK_USER int ,
FOREIGN KEY (FK_USER )
REFERENCES T_S_USER_USR(PK_ID)
ON DELETE CASCADE,
FK_MATCH int ,
FOREIGN KEY (FK_MATCH)
REFERENCES T_E_MATCH_MTC(PK_ID)
ON DELETE CASCADE,
PRIMARY KEY (FK_USER,FK_MATCH)
);
/* -- Juncture discuss -- */
CREATE TABLE T_J_DISCUSS_DIS (
FK_USER int ,
FOREIGN KEY (FK_USER)
REFERENCES T_S_USER_USR(PK_ID)
ON DELETE CASCADE,
FK_CONVERSATION int ,
FOREIGN KEY (FK_CONVERSATION)
REFERENCES T_H_CONVERSATION_COV(PK_ID)
ON DELETE CASCADE,
PRIMARY KEY(FK_USER,FK_CONVERSATION)
);
/* -- Juncture contain message -- */
CREATE TABLE T_J_CONTAIN_MESSAGE_CMG (
FK_CONVERSATION int,
FOREIGN KEY (FK_CONVERSATION)
REFERENCES T_H_CONVERSATION_COV(PK_ID)
ON DELETE CASCADE,
FK_MESSAGE int,
FOREIGN KEY (FK_MESSAGE)
REFERENCES T_H_MESSAGE_MSG(PK_ID)
ON DELETE CASCADE,
PRIMARY KEY (FK_CONVERSATION,FK_MESSAGE)
);
/* ----------------------------------- */
/* TRIGGERS' CREATION */
/* ----------------------------------- */
/* ----- USER's trigger ----- */
/* -- after insert -> add basic skin into the list of skin -- */
CREATE TRIGGER after_insert_user
AFTER INSERT
ON T_S_USER_USR
FOR EACH ROW
INSERT INTO T_J_OWN_SKIN_OWN VALUES(NEW.PK_ID,1);
/* ----- CONVERSATION's trigger ----- */
CREATE TRIGGER before_delete_conversation
BEFORE DELETE
ON T_H_CONVERSATION_COV
FOR EACH ROW
DELETE FROM T_H_MESSAGE_MSG WHERE PK_ID = (SELECT FK_MESSAGE
FROM T_J_CONTAIN_MESSAGE_CMG
WHERE FK_CONVERSATION=OLD.PK_ID);
Loading…
Cancel
Save