Public Sub CommandeModifier(iSource As cSource, iObjet As cObjet, iObjetsValeurs() As cObjetValeur)
If iObjet = Nil Then cApp.Erreur("cApiDepot.CommandeModifier() : iObjet = Nil", Self)
If iObjetsValeurs = Nil Or iObjetsValeurs.Count() = 0 Then cApp.Erreur("cApiDepot.CommandeModifier() : iObjetsValeurs = Nil Or iObjetsValeurs.Count() = 0", Self)
Var vDonneesEntreeJson As JsonItem = cObjetValeur.Json(iObjetsValeurs, iObjet)
Var vReponseTxt As String = Self.RequeteModifier(iObjet, vDonneesEntreeJson)
If vReponseTxt = "" Then cApp.Erreur("cApiDepot.CommandeModifier() : Modifier a échouer", Self)
Var vDonneesSortieJson As JSONItem
vDonneesSortieJson = New JSONItem(vReponseTxt)
// Si on ne reçoit pas de data, ça va mal
If Not vDonneesSortieJson.HasKey(Self.kJsonDonnees) Then cApp.Erreur("cApiDepot.CommandeModifier() : Not vDonneesSortieJson.HasKey(Self.kJsonDonnees)", Self)
vDonneesSortieJson = vDonneesSortieJson.Child(Self.kJsonDonnees).ValueAt(0)
End Sub
Public Sub CommandeCreer(iSource As cSource, iObjet As cObjet, iObjetsValeurs() As cObjetValeur)
If iObjet = Nil Then cApp.Erreur("cApiDepot.CommandeCreer() : iObjet = Nil", Self)
If iObjetsValeurs = Nil Or iObjetsValeurs.Count() = 0 Then cApp.Erreur("cApiDepot.CommandeCreer() : iObjetsValeurs = Nil Or iObjetsValeurs.Count() = 0", Self)
Var vDonneesJson As JsonItem = cObjetValeur.Json(iObjetsValeurs, iObjet)
If vDonneesJson.Count() = 0 Then _
cApp.Erreur("cApiDepot.CommandeCreer() : vDonneesJson.Count() = 0", Self)
Var vReponseTxt As String = Self.RequeteCreer(iObjet, vDonneesJson)
If vReponseTxt = "" Then _
cApp.Erreur("cApiDepot.CommandeCreer() : Creer a échoué", Self)
vDonneesJson = New JsonItem(vReponseTxt)
// Si on ne reçoit pas de data, ça va mal
If Not vDonneesJson.HasKey(Self.kJsonDonnees) Then
cApp.Erreur("cApiDepot.CommandeCreer() : Not vDonneesJson.HasKey(Self.kJsonDonnees)", Self)
Return
End If
vDonneesJson = vDonneesJson.Child(Self.kJsonDonnees)
// Valider qu’on ne reçoit qu’1 objet de l’API
If vDonneesJson.Count() <> 1 Then _
cApp.Erreur("cApiDepot.CommandeCreer() : vDonneesJson.Count() <> 1", Self)
Self.ExtraireObjetJson(iSource, vDonneesJson.ChildAt(0), iObjet)
End Sub
Public Sub CommandeEffacer(iSource As cSource, iObjet As cObjet)
If iObjet = Nil Then cApp.Erreur("cApiDepot.CommandeEffacer() : iObjet = Nil", Self)
Var vReponseTxt As String = Self.RequeteEffacer(iObjet)
If vReponseTxt = "" Then cApp.Erreur("cApiDepot.CommandeEffacer() : Effacer a échouer", Self)
'Var vDonneesJson As JSONItem
'vDonneesJson = New JSONItem(vReponseTxt)
'
'If Not vDonneesJson.IsArray Or vDonneesJson.Count <> 0 Then App.Deboguage("cApiDepot.CommandeEffacer() : Not vDonneesJson.IsArray Or vDonneesJson.Count <> 0", Self)
End Sub
Public Sub CommandeLire(iSource As cSource, iObjet As cObjet)
If iObjet = Nil Then cApp.Erreur("cApiDepot.CommandeLire() : iObjet = Nil", Self)
'Var oObjets() As cObjet
Var vSource As cSource = Self.SourceParClasseEnum(iObjet.Classe.Nom.ToClasseEnum())
// Effectuer la requête HTTP
#Pragma BreakOnExceptions False
Var vReponseTxt As String = Self.RequeteLire(iObjet)
If vReponseTxt = "" Then cApp.Erreur("cApiDepot.CommandeLire() : Lire a échouer", Self)
#Pragma BreakOnExceptions Default
Var vDonneesJson, vObjetDonneesJson As JSONItem
vDonneesJson = New JSONItem(vReponseTxt)
// Si on ne reçoit pas de data, ça va mal
If Not vDonneesJson.HasKey(Self.kJsonDonnees) Then cApp.Erreur("cApiDepot.CommandeLire() : Not vDonneesJson.HasKey(Self.kJsonDonnees)", Self)
vDonneesJson = vDonneesJson.Child(Self.kJsonDonnees)
vObjetDonneesJson = vDonneesJson.ChildAt(0)
Self.ExtraireObjetJson(vSource, vObjetDonneesJson, iObjet)
' @todo faire une erreur si l’objet n’est pas dans le bassin
' @todo faire une méthode, mais juste avec un ID.
End Sub
Public Function CommandeLister(iSource As cSource) As cObjet()
If iSource = Nil Then cApp.Erreur("cApiDepot.CommandeLister() : iSource = Nil", Self)
Var oObjets() As cObjet
// Effectuer la requête HTTP
Var vReponseTxt As String = Self.RequeteLister(iSource.Classe)
If vReponseTxt = "" Then Return oObjets
Var vResultatJson As JsonItem = New JsonItem(vReponseTxt)
Var vDonneesJson As JsonItem
// Si on ne reçoit pas de data, ça va mal
If Not vResultatJson.HasKey(Self.kJsonDonnees) Then cApp.Erreur("cApiDepot.CommandeLister() : Not vDonneesJson.HasKey(Self.kJsonDonnees)", Self)
vDonneesJson = vResultatJson.Child(Self.kJsonDonnees)
oObjets = Self.ExtraireObjetsJson(iSource, vDonneesJson)
Return oObjets
End Function
Public Function Connecter(iSession As cSession) As Boolean
Var vObjetValeurs() As cObjetValeur
// Si on n'a pas de iSession, erreur
If iSession = Nil Then cApp.Erreur("cApiDepot.Connecter() : iSession = Nil", Self)
// Si la iSession n'a pas d'usager, erreur
If iSession.Usager = Nil Then cApp.Erreur("cApiDepot.Connecter() : iSession.Usager = Nil", Self)
// Si on n’a pas les données pour, quitter avec échec
'If Not iSession.CreationValider() Then _
'App.Erreur("cApiDepot.Connecter() : Not iSession.CreationValider()", Self)
If iSession.Usager.Nom = "" Or iSession.Usager.MotDePasse = "" Then _
App.Erreur("cApiDepot.Connecter() : iSession.Usager.Nom = '' Or iSession.Usager.MotDePasse = ''", Self)
// Si on a une SessionActuelle et que ce n'est pas celle de la SourceSession, avertir
If Self.SessionActuelle <> Nil And Self.SessionActuelle <> iSession Then _
App.Deboguage("cApiDepot.Deconnecter() : Self.SessionActuelle <> Nil And Self.SessionActuelle <> iSession", Self)
// Changer l'etat a EnCours
iSession.Etat = cSession.eEtat.kConnexionEnCours
// Ajouter la iSession a la SourceSession et son usager a la SourceUsager et les selectionner
Self.SourceSession.ObjetAjouter(iSession, True)
Self.SourceUsager.ObjetAjouter(iSession.Usager, True)
// Prévenir de la connexion en cours
Self.SourceSession.Notifier(cNotification.eType.kConnexion, Self, iSession)
Try
// Tenter de lire la iSession pour la confirmer valide
Self.JetonActuel = iSession.Jeton
Self.CommandeLire(Self.SourceSession, iSession)
// Ajuster l'etat de la connexion a Connecte et selectionne elle et son usager dans la Source de l'Api
iSession.Etat = cSession.eEtat.kConnecte
// Prévenir du succès de la connexion
Self.SourceSession.Notifier(cNotification.eType.kConnexion, Self, iSession)
Return True
Catch
Self.JetonActuel = ""
iSession = cSession(Self.SourceSession.ObjetInstancier())
Self.SourceSession.ObjetAjouter(iSession, True)
iSession.Usager = cUsager(Self.SourceUsager.Objet)
End Try
Try
iSession.Description = Self.ClientDescription()
Var vPropriete() As String = Array("Usager_Nom", "Description")
vObjetValeurs = iSession.ObjetValeurs(vPropriete)
vObjetValeurs.Add(New cObjetValeur(iSession, iSession.Usager.Classe.ProprieteParNom("MotDePasse"), iSession.Usager.MotDePasse))
Self.CommandeCreer(Self.SourceSession, iSession, vObjetValeurs)
// On devrait avoir la même session que celle qu’on a envoyé
If Self.SessionActuelle <> iSession Then App.Deboguage("cApiDepot.Deconnecter() : Self.SessionActuelle <> iSession", Self)
iSession.Etat = cSession.eEtat.kConnecte
Self.SourceSession.ObjetAjouter(iSession, True)
Self.JetonActuel = iSession.Jeton
// Prévenir du succès de la connexion
Self.SourceSession.Notifier(cNotification.eType.kConnexion, Self, iSession)
Catch
App.Deboguage("cApiDepot.Deconnecter() : Catch Self.CommandeEffacer()", Self)
App.Message(cSession.kMsgStatutConnexionEchec)
iSession.Etat = cSession.eEtat.kDeconnecte
// Prévenir de l’échec de la connexion
Self.SourceSession.Notifier(cNotification.eType.kConnexion, Self, iSession)
Return False
End Try
Return True
End Function
Public Function Deconnecter() As Boolean
Var vSession As cSession = Self.SessionActuelle
If vSession = Nil Then App.Deboguage("cApiDepot.Deconnecter() : vSession = Nil", Self)
Try
Self.CommandeEffacer(Self.SourceSession, vSession)
App.Message(cSession.kMsgStatutDeconnecte)
vSession.Etat = cSession.eEtat.kDeconnecte
Catch
App.Deboguage("cApiDepot.Deconnecter() : Catch Self.CommandeEffacer()", Self)
Return False
End Try
// Prévenir de la déconnexion
Self.SourceSession.Notifier(cNotification.eType.kConnexion, Self, vSession)
vSession.Etat = cSession.eEtat.kDeconnecte
Self.SourceSession.Objet = Nil
Return True
End Function
This is my code for CRUD, sorry, the comments are in French, like me.
Regards, Antoine