Skip to content

Commit

Permalink
Merge branch 'feature/#15' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
sinmetal committed Jun 11, 2013
2 parents 36ed9b2 + 3f6310f commit 45fa728
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 44 deletions.
4 changes: 2 additions & 2 deletions html/guestbook/entry.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ <h4>好きなポケモンをおしえて</h4>
<option value="">-- chose element type --</option>
</select>
<br />
<select ng-model="entryForm.pokemonId" ng-options="p.id as p.name for p in pokemons">
<select ng-model="entryForm.pokemon" ng-options="p.name for p in pokemons">
<option value="">-- chose pokemon --</option>
</select>
<br />
<input type="text" ng-model="entryForm.name"></input>
<input type="text" ng-model="entryForm.nickname"></input>
<br />
<input type="email" ng-model="entryForm.email"></input>
<button type="submit" class="btn btn-primary" ng-disabled="form.$invalid">Save</button>
Expand Down
20 changes: 11 additions & 9 deletions html/guestbook/list.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,20 @@
<table class="table">
<thead>
<tr>
<td>No</td>
<td>CategoryId</td>
<td>ItemId</td>
<td>Name</td>
<th>No</th>
<th>Email</th>
<th>Pokemon</th>
<th>Nickname</th>
<th>Created</th>
</tr>
</thead>
<tbody ng-repeat="s in stores">
<tbody ng-repeat="f in favos">
<tr>
<td>{{$index}}</td>
<td>{{s.CategoryId}}</td>
<td>{{s.ItemId}}</td>
<td>{{s.Name}}</td>
<td>{{$index + 1}}</td>
<td>{{f.email}}</td>
<td>{{f.pokemonName}}</td>
<td>{{f.nickname}}</td>
<td>{{f.created}}</td>
</tr>
</tbody>
</table>
Expand Down
71 changes: 45 additions & 26 deletions process/favorite/favorite.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,53 @@ package favorite

import (
"appengine"
"appengine/datastore"
"encoding/json"
"fmt"
"io"
"net/http"
"time"
)

type Form struct {
Id int32 `json:"id"`
type Favorite struct {
Id string `json:"id" datastore:"-"`
PokemonName string `json:"pokemonName"`
Nickname string `json:"nickname"`
Email string `json:"email"`
Created time.Time `json:"created"`
}

type Pokemon struct {
Id int32
Name string
func (f *Favorite) key(c appengine.Context) *datastore.Key {
return datastore.NewKey(c, "Favorite", fmt.Sprintf("%s-_-%s", f.Email, f.Nickname), 0, nil)
}

func decodeForm(r io.ReadCloser) (*Form, error) {
func (f *Favorite) save(c appengine.Context) (*Favorite, error) {
f.Created = time.Now()
k, err := datastore.Put(c, f.key(c), f)
if err != nil {
return nil, err
}
f.Id = k.StringID()
return f, nil
}

func decodeFavorite(r io.ReadCloser) (*Favorite, error) {
defer r.Close()
var form Form
err := json.NewDecoder(r).Decode(&form)
return &form, err
var Favorite Favorite
err := json.NewDecoder(r).Decode(&Favorite)
return &Favorite, err
}

func getAllFavorites(c appengine.Context) ([]Favorite, error) {
favos := []Favorite{}
ks, err := datastore.NewQuery("Favorite").Order("Created").GetAll(c, &favos)
if err != nil {
return nil, err
}
for i := 0; i < len(favos); i++ {
favos[i].Id = ks[i].StringID()
}
return favos, nil
}

func init() {
Expand All @@ -30,36 +57,28 @@ func init() {

func handler(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
val, err := handlePokemons(r)
val, err := handleFavorites(c, r)
if err == nil {
err = json.NewEncoder(w).Encode(val)
}
if err != nil {
c.Errorf("pokemon error: %#v", err)
c.Errorf("favorite error: %#v", err)
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
}

func handlePokemons(r *http.Request) (interface{}, error) {
func handleFavorites(c appengine.Context, r *http.Request) (interface{}, error) {
switch r.Method {
case "GET":
form, err := decodeForm(r.Body)
case "POST":
favorite, err := decodeFavorite(r.Body)
if err != nil {
return nil, err
}
return getPokemons(form)
return favorite.save(c)
case "GET":
return getAllFavorites(c)
}
return nil, fmt.Errorf("method not implemented")
}


func getPokemons(form *Form) ([3]Pokemon, error) {
pokemons := [3]Pokemon{}

charmander := Pokemon{Id: 1, Name: "フシギダネ"}
pokemons[0] = charmander
pokemons[1] = charmander
pokemons[2] = charmander
return pokemons, nil
return nil, fmt.Errorf("method not implemented")
}
21 changes: 14 additions & 7 deletions script/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,12 @@
}]);

app.controller('GuestBookListController', ['$scope', '$resource', function($scope, $resource) {
var Store = $resource("/store");
$scope.stores = Store.query(function() {
console.log("success store query");
var Favorite = $resource("/favorite");
$scope.favos = Favorite.query(function() {
console.log("success favorite query");
console.log($scope.favos);
}, function(){
console.log("error store query");
console.log("error favorite query");
});
}]);

Expand All @@ -51,7 +52,7 @@
{"id" : "2", "name" : "ほのお"},
{"id" : "3", "name" : "みず"}];
var Pokemon = $resource("/pokemon");
var Store = $resource("/store");
var Favorite = $resource("/favorite");

$scope.changeElementType = function() {
console.log($scope.entryForm.elementTypeId);
Expand All @@ -65,9 +66,15 @@

$scope.submit = function($event) {
console.log($scope.entryForm);
Store.save($scope.entryForm, function(){
var value = {
pokemonName : $scope.entryForm.pokemon.name,
nickname : $scope.entryForm.nickname,
email : $scope.entryForm.email
}
console.log(value);
Favorite.save(value, function(){
console.log("success entry");
$location.path('/#/guestbook/');
$location.path(encodeURI('/guestbook/'));
}, function(){
console.log("error entry");
});
Expand Down

0 comments on commit 45fa728

Please sign in to comment.