package main

import (
    "github.com/go-martini/martini"
    "github.com/martini-contrib/render"

    _ "github.com/lib/pq"
    "github.com/go-xorm/xorm"
)

func panicIf(err error) {
  if err != nil {
    panic(err)
  }
}

func establishDbConnection() *xorm.Engine {
  engine, err := xorm.NewEngine("postgres", "dbname=example_app_dev sslmode=disable")
  panicIf(err)
  return engine
}

type Products struct {
  Id   int32  `json:"id"`
  Code string `json:"code"`
  Name string `json:"name"`
}

func main() {
  app := martini.Classic()

  engine := establishDbConnection()
  engine.Sync(new(Products))

  app.Map(engine)
  app.Use(render.Renderer())

  // Routes
  app.Get("/products", func(db *xorm.Engine, r render.Render) {
    var products []Products
    err := db.Find(&products)
    panicIf(err)
    r.JSON(200, products)
  })

  app.Run()
}