golangのお勉強14+goa


goagen jsでcreateしてみる

jsのキャッシュ

どうも、うまく変更が反映されない。
require.jsのキャッシュかな。

自動採番

なぜか自動採番がうまく動かない?
キャッシュで反映されていないだけかも。。
どうせなので調べる。

結局はたぶんキャッシュで、むしろ基本が自動採番らしい。
ついでに知ったのは型を再定義できるらしい。へー。。

Golangのgormで、PrimaryKeyにUUIDを使う - Qiita
http://qiita.com/roothybrid7/items/dc58bae01f941e1a72be

Primarykeyの型をintなどにしてしまうと、Auto increment固定なのが困るところです。
...
type キーワードを使って組み込み型を再定義?できるので、UUIDという独自タイプを定義します。

自動採番じゃなくする場合。多分mysqlかな。

GORM で AUTO_INCREMENT でないプライマリキーを作成する - Qiita
http://qiita.com/tchssk/items/2b235a381a7970b62a0a

キャッシュについては下記だが、、js自体が自動生成されるので毎回つけることになるのかな。。うーむ。
github.com/goadesign/goa/goagen/gen_js/generator.goにジェネレートする内容は記載があるので、
フォークしたリポジトリをオレオレ更新するとか?うーむ。。
というか、この部分はどうせ吐き出したものを、そのまま使う箇所ではないか。。
うーん、どうしようか。

Memo, [JavaScript] RequireJSで読みこむファイルのキャッシュ対策 « イナヅマTVログ
http://www.inazumatv.com/contents/archives/8149

DSLでタグをつける

Grailsというフレームワークではタグでシーケンス作成を指定するようにしているらしい。
gormaではtags()のコードを見たところ、DSLでは自由にタグはつけられない気がする。。どうだろう。
あ、sqltagはメソッドが用意されてているので、それでいいのかな。
gormのタグはつけられないけど。

relationalfield.go
func tags(f *RelationalFieldDefinition) string {
    var sqltags []string
    if f.SQLTag != "" {
        sqltags = append(sqltags, f.SQLTag)
    }

    var gormtags []string
    if f.DatabaseFieldName != "" && f.DatabaseFieldName != f.Underscore() {
        gormtags = append(gormtags, "column:"+f.DatabaseFieldName)
    }
    if f.PrimaryKey {
        gormtags = append(gormtags, "primary_key")
    }
    if f.Many2Many != "" {
        gormtags = append(gormtags, "many2many:"+f.TableName)
    }

    var tags []string
    if len(sqltags) > 0 {
        sqltag := "sql:\"" + strings.Join(sqltags, ";") + "\""
        tags = append(tags, sqltag)
    }
    if len(gormtags) > 0 {
        gormtag := "gorm:\"" + strings.Join(gormtags, ";") + "\""
        tags = append(tags, gormtag)
    }

    if len(tags) > 0 {
        return "`" + strings.Join(tags, " ") + "`"
    }
    return ""
}

Grails 3.2.0 GORM does not create sequences for PostgreSQL · Issue #10234 · grails/grails-core
https://github.com/grails/grails-core/issues/new

GrailsのGORMとID管理とPostgreSQLのシーケンス - 豆無日記
http://nobeans.hatenablog.com/entry/20091030/1256896937

gormのデータ型

gorm.AutoIntegerという型指定も用意されていたが、、primary指定できなかったので使うのをやめておく。

データ型
https://www.postgresql.jp/document/8.1/html/datatype.html

一応、UUIDも使ってみた。場合によっては検討か。。
serial型とシーケンス作成はほぼ同じというのはわかってるけど、
UUIDのことはあまりわかってない気がする。

  • 予測しにくい方がいい時にはUUID
  • 容量はUUIDの方がくう

Golangのgormで、PrimaryKeyにUUIDを使う - Qiita
http://qiita.com/roothybrid7/items/dc58bae01f941e1a72be

DSL

DSLの実装例

goa の API デザインの書き方 後編 (Resource と Payload) - 押してダメならふて寝しろ
http://ikawaha.hateblo.jp/entry/2016/09/14/194237

chat api

goaとxoでchat apiを作ってみた。 - Qiita
http://qiita.com/m0a/items/ab26b5d92b714860c909

気になるtrait

· goa :: Design-first API Generation
https://goa.design/reference/goa/design/apidsl/#func-trait-a-name-apidsl-trait-a

putかpostかを(また)考える

PUT か POST か PATCH か? - Qiita
http://qiita.com/suin/items/d17bdfc8dba086d36115

冪等性か。。ひとまずプロトタイピングでputでやってみてあとから調整しつつ考えよう。