Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2 from lombardo-chcg/integrate-sql
Integrate sql
- Loading branch information
Showing
7 changed files
with
178 additions
and
38 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,10 @@ | ||
import com.lombardo.app._ | ||
import com.lombardo.app.resources._ | ||
import org.scalatra._ | ||
import javax.servlet.ServletContext | ||
|
||
class ScalatraBootstrap extends LifeCycle { | ||
override def init(context: ServletContext) { | ||
context.mount(new DemoApiServlet, "/*") | ||
context.mount(new GreetingServlet, "/*") | ||
} | ||
} |
This file was deleted.
Oops, something went wrong.
37 changes: 37 additions & 0 deletions
37
src/main/scala/com/lombardo/app/resources/GreetingServlet.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
package com.lombardo.app.resources | ||
|
||
import org.json4s.{DefaultFormats, Formats} | ||
import org.scalatra.json._ | ||
import org.slf4j.LoggerFactory | ||
import com.lombardo.app._ | ||
import com.lombardo.app.services.GreetingService | ||
|
||
class GreetingServlet extends DemoapiStack with JacksonJsonSupport { | ||
|
||
protected implicit val jsonFormats: Formats = DefaultFormats | ||
val logger = LoggerFactory.getLogger(getClass) | ||
val greetingService = new GreetingService() | ||
|
||
|
||
before() { | ||
contentType = formats("json") | ||
} | ||
|
||
get("/greetings/?") { | ||
logger.info("GET /greetings") | ||
|
||
greetingService.getAll | ||
} | ||
|
||
get ("/greetings/:id") { | ||
logger.info("GET /greetings/" + params("id")) | ||
|
||
try { | ||
val id = params("id").toInt | ||
greetingService.getOne(id) | ||
} catch { | ||
case e: NumberFormatException => response.setStatus(400) | ||
"message" -> "param must be valid number" | ||
} | ||
} | ||
} |
36 changes: 36 additions & 0 deletions
36
src/main/scala/com/lombardo/app/services/GreetingService.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
package com.lombardo.app.services | ||
|
||
import java.sql.Timestamp | ||
|
||
import org.slf4j.LoggerFactory | ||
import com.lombardo.app.services.RepositoryService | ||
|
||
class GreetingService { | ||
|
||
val logger = LoggerFactory.getLogger(getClass) | ||
val repoService = new RepositoryService | ||
|
||
case class Greeting(id: Int, language: String, content: String, create_date: String) | ||
|
||
def getAll: List[Greeting] = { | ||
val greetings = repoService | ||
.findAll("greetings") | ||
.map { dbResult => convertToGreeting(dbResult) } | ||
|
||
greetings | ||
} | ||
|
||
def getOne(id: Int): Greeting = { | ||
val rawGreeting = repoService | ||
.findOne("greetings", id) | ||
|
||
convertToGreeting(rawGreeting) | ||
} | ||
|
||
|
||
private def convertToGreeting(dbResult: Map[String, String]): Greeting = { | ||
val greeting = Greeting(dbResult("id").toInt, dbResult("language"), dbResult("content"), dbResult("create_date")) | ||
|
||
greeting | ||
} | ||
} |
99 changes: 99 additions & 0 deletions
99
src/main/scala/com/lombardo/app/services/RepositoryService.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
package com.lombardo.app.services | ||
|
||
import java.sql._ | ||
|
||
import org.postgresql._ | ||
import org.slf4j.LoggerFactory | ||
|
||
class RepositoryService { | ||
|
||
val logger = LoggerFactory.getLogger(getClass) | ||
val postgresUri = "jdbc:postgresql://0.0.0.0:5431/greeting" | ||
val postgresUsername = "postgres" | ||
val postgresPassword = "postgres" | ||
|
||
def findAll(resource: String) : List[Map[String, String]] = { | ||
try { | ||
Class.forName("org.postgresql.Driver") | ||
val pgConnection = DriverManager.getConnection(postgresUri, postgresUsername, postgresPassword) | ||
|
||
logger.info("PG connection established") | ||
|
||
val dbMetaData = pgConnection.getMetaData | ||
val columns = getColumnNames(dbMetaData, resource) | ||
|
||
val sql = "select * from " + resource | ||
val resultSet = pgConnection.createStatement.executeQuery(sql) | ||
val allRows = List.newBuilder[Map[String, String]] | ||
|
||
while (resultSet.next) { | ||
allRows += getRow(resultSet, columns) | ||
} | ||
|
||
resultSet.close | ||
pgConnection.close | ||
|
||
allRows.result | ||
} catch { | ||
case e => | ||
|
||
val errorText = e.toString | ||
|
||
logger.error(errorText) | ||
List() | ||
} | ||
} | ||
|
||
def findOne(resource: String, id: Int) : Map[String, String] = { | ||
try { | ||
Class.forName("org.postgresql.Driver") | ||
val pgConnection = DriverManager.getConnection(postgresUri, postgresUsername, postgresPassword) | ||
|
||
logger.info("PG connection established") | ||
|
||
val dbMetaData = pgConnection.getMetaData | ||
val columns = getColumnNames(dbMetaData, resource) | ||
|
||
val sql = "select * from " + resource + " where id = " + id | ||
val resultSet = pgConnection.createStatement.executeQuery(sql) | ||
val output = Map.newBuilder[String, String] | ||
|
||
resultSet.next | ||
|
||
val row = getRow(resultSet, columns) | ||
|
||
resultSet.close | ||
pgConnection.close | ||
|
||
row | ||
} catch { | ||
case e => | ||
|
||
val errorText = e.toString | ||
|
||
logger.error(errorText) | ||
Map() | ||
} | ||
} | ||
|
||
private def getColumnNames(metaData: DatabaseMetaData, tableName: String): List[String] = { | ||
val cols = metaData.getColumns(null, null, tableName, null) | ||
val columnNames = List.newBuilder[String] | ||
|
||
while (cols.next) { | ||
columnNames += cols.getString("COLUMN_NAME") | ||
} | ||
|
||
columnNames.result | ||
} | ||
|
||
private def getRow(resultSet: ResultSet, columns: List[String]): Map[String, String] = { | ||
val row = Map.newBuilder[String, String] | ||
|
||
columns.foreach(col => | ||
row += (col -> resultSet.getString(col)) | ||
) | ||
|
||
row.result | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters