LoginSignup
0
1

More than 5 years have passed since last update.

golangのお勉強14+goa

Last updated at Posted at 2017-07-15

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でやってみてあとから調整しつつ考えよう。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1