Skip to content

Commit

Permalink
squeryl impl
Browse files Browse the repository at this point in the history
  • Loading branch information
jamesward committed Apr 28, 2012
1 parent 0195eb6 commit c19966e
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 41 deletions.
18 changes: 18 additions & 0 deletions app/Global.scala
@@ -0,0 +1,18 @@
import org.squeryl.adapters.H2Adapter
import org.squeryl.{Session, SessionFactory}
import play.api.db.DB
import play.api.GlobalSettings

import play.api.Application

object Global extends GlobalSettings {

override def onStart(app: Application) {

SessionFactory.concreteFactory = Some(() =>
Session.create(
DB.getConnection()(app),
new H2Adapter))
}

}
38 changes: 24 additions & 14 deletions app/controllers/Application.scala
@@ -1,32 +1,42 @@
package controllers package controllers


import play.api.data.Form import play.api.mvc._
import play.api.data.Forms.{single, text}
import play.api.mvc.{Action, Controller}
import com.codahale.jerkson.Json import com.codahale.jerkson.Json
import play.api.data.Form
import play.api.data.Forms.{mapping, text, optional}


import models.Bar import org.squeryl.PrimitiveTypeMode._
import models.{AppDB, Bar}




object Application extends Controller { object Application extends Controller {


val barForm = Form(single("name" -> text)) val barForm = Form(
mapping(
"name" -> optional(text)
)(Bar.apply)(Bar.unapply)
)


def index = Action { def index = Action {
Ok(views.html.index(barForm)) Ok(views.html.index(barForm))
} }


def addBar() = Action { implicit request => def getBars = Action {
barForm.bindFromRequest.value map { name => val json = inTransaction {
Bar.create(new Bar(null, name)) val bars = from(AppDB.barTable)(bar =>
Redirect(routes.Application.index()) select(bar)
} getOrElse BadRequest )
Json.generate(bars)
}
Ok(json).as(JSON)
} }


def listBars() = Action { def addBar = Action { implicit request =>
val bars = Bar.findAll() barForm.bindFromRequest.value map { bar =>
val json = Json.generate(bars) inTransaction(AppDB.barTable insert bar)
Ok(json).as(JSON) Redirect(routes.Application.index())
} getOrElse BadRequest
} }


} }
28 changes: 5 additions & 23 deletions app/models/Bar.scala
@@ -1,29 +1,11 @@
package models package models


import play.api.db._ import org.squeryl.{Schema, KeyedEntity}
import play.api.Play.current
import net.vz.mongodb.jackson.{Id, ObjectId}
import org.codehaus.jackson.annotate.JsonProperty
import play.modules.mongodb.jackson.MongoDB
import reflect.BeanProperty



case class Bar(name: Option[String]) extends KeyedEntity[Long] {
class Bar(@ObjectId @Id val id: String, val id: Long = 0
@BeanProperty @JsonProperty("name") val name: String) {
@ObjectId @Id def getId = id;
} }


object Bar { object AppDB extends Schema {
private lazy val db = MongoDB.collection("bars", classOf[Bar], classOf[String]) val barTable = table[Bar]("BAR")

def create(bar: Bar) { db.save(bar) }
def findAll() = { db.find().toArray }

def apply() = {

}

def unapply() = {

}
} }
6 changes: 2 additions & 4 deletions conf/application.conf
Expand Up @@ -22,8 +22,8 @@ application.langs="en"
# You can declare as many datasources as you want. # You can declare as many datasources as you want.
# By convention, the default datasource is named `default` # By convention, the default datasource is named `default`
# #
# db.default.driver=org.h2.Driver db.default.driver=org.h2.Driver
# db.default.url="jdbc:h2:mem:play" db.default.url="jdbc:h2:mem:play"
# db.default.user=sa # db.default.user=sa
# db.default.password= # db.default.password=


Expand All @@ -44,5 +44,3 @@ logger.play=INFO


# Logger provided to your application: # Logger provided to your application:
logger.application=DEBUG logger.application=DEBUG

mongodb.uri="mongodb://127.0.0.1:27017/play2bars-scala"
12 changes: 12 additions & 0 deletions conf/evolutions/default/1.sql
@@ -0,0 +1,12 @@
# --- First database schema

# --- !Ups

create table bar (
id SERIAL PRIMARY KEY,
name varchar(255) not null
);

# --- !Downs

drop table if exists bar;

0 comments on commit c19966e

Please sign in to comment.