Le 14 avr. 2014 20:30, "David Sferruzza" <david.s...@gmail.com> a écrit :
>
> Bonjour à tous !
>
> En ce moment, j'essaie de prendre un peu en main Play Framework (en Scala).
> Je rencontre quelques problèmes liés à Anorm, que j'aimerais bien résoudre de manière optimale.
> (J'ai complété les 2 MOOCs sur Coursera qui parlent de Scala, donc j'ai quelques bases en Scala.)
>
> 1) Colonnes de type date, time et timestamp (ou autres)
>
> Pour ces types de colonnes, je me demande quel est le type en Scala qui correspond le mieux (java.sql.Date pour date ?).
Dans le monde java on a tendance à utiliser joda time qui est plus simple et plus propre.
> Je suis tombé sur ce fichier écrit par Clément : https://github.com/nantes-fp/tasks-play/blob/master/app/models/AnormType.scala
> Est-ce que je me trompe si je dis que :
> - il faut se baser un type défini dans une bibliothèque externe (org.joda.time.DateTime) pour timestamp
En java/scala c'est le standard propre pour la gestion des dates
> - il faut écrire les méthodes qui permettent de parser des bouts de réponse SQL vers des occurrences de ce type
Anorm ne le gérant pas de base, il faut lui dire comment faire.
> - il faut le faire "à la main", ce n'est pas géré par une bibliothèque externe
C'est pas nativement géré par anorm
>
> 2) Parser le résultat d'une jointure
>
> Je me base sur l'exemple de Clément : https://github.com/nantes-fp/tasks-play/blob/master/app/models/Task.scala
> On défini un objet (L15), un parser (L18), et une méthode getAll qui utilise tout ça (L32).
> Déjà, je ne suis pas sûr de comprendre ce que représente la méthode * dans as(Task.simple.*) (L34).
C'est pour passer 0 ou plus lignes * a le même sens que dans une regex
>
> Ensuite, j'ai l'impression qu'on défini un 2e parser (L28) qui combine le 1er parser (simple) avec le parser du modèle User.
Oui les parsers se combinent
> Je ne suis pas sûr d'avoir bien compris ; est-ce qu'on pourrait utiliser ce 2e parser comme dans le code qui suit ?
>
> def getAllWithCreator(): List[(Task, Option[User])] = { // Je ne suis pas sûr du type de retour.
> DB.withConnection { implicit connection =>
> SQL("select * from task inner join user on user.id = task.creator_id").as(Task.withCreator.*)
> }
> }
>
> 3) Notation
>
> Qu'est-ce que c'est cette notation qu'on voit là ? https://github.com/nantes-fp/tasks-play/blob/master/app/models/Task.scala#L59
> 'truc c'est pareil que "truc" ?
On appelle ça un symbole, c'est des chaines de caractères indexées a la compilation
>
>
> J'espère que vous saurez m'éclairer.
> Bonne soirée !
>
> --
> Vous recevez ce message, car vous êtes abonné au groupe Google Groupes "Nantes FP".
> Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse nantes-fp+...@googlegroups.com.
> Pour envoyer un message à ce groupe, envoyez un e-mail à l'adresse nant...@googlegroups.com.
> Visitez ce groupe à l'adresse http://groups.google.com/group/nantes-fp.
> Pour obtenir davantage d'options, consultez la page https://groups.google.com/d/optout.
--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes Nantes FP.
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse nantes-fp+...@googlegroups.com.
Pour envoyer un message à ce groupe, adressez un e-mail à nant...@googlegroups.com.
Visitez ce groupe à l'adresse http://groups.google.com/group/nantes-fp .
Pour plus d'options, visitez le site https://groups.google.com/d/optout .
L'idée est de ne pas embarquer 50 dépendances non plus
Oui. Après, grâce au mécanisme de typeclass c'est pas compliqué à étendre