Files
ent/entc/gen/template/ent.tmpl
Ariel Mashraki 619b63d5f7 ent/schema: rename nullable to nillable
Reviewed By: idoshveki

Differential Revision: D16687892

fbshipit-source-id: e8cfaaf1241e94c2de0a9fe9077326339d593716
2019-08-07 06:56:33 -07:00

102 lines
3.3 KiB
Cheetah

{{ define "model" }}
{{ $pkg := base $.Config.Package }}
{{ template "header" $ }}
{{ template "import" $ }}
// {{ $.Name }} is the model entity for the {{ $.Name }} schema.
type {{ $.Name }} struct {
config
// ID of the ent.
ID {{ $.ID.Type }} `json:"id,omitempty"`
{{ range $_, $f := $.Fields -}}
// {{ pascal $f.Name }} holds the value of the "{{ $f.Name }}" field.
{{ pascal $f.Name }} {{ if $f.Nillable }}*{{ end }}{{ $f.Type }} `{{ $f.StructTag }}`
{{ end -}}
{{ range $_, $e := $.Edges -}}
{{/* ignore generating edge fields */}}
{{- with $e.StructTag -}}
// {{ pascal $e.Name }} holds the value of the {{ $e.Name }} edge. The value set to nil, and should be updated manually.
{{ pascal $e.Name }} {{ if not $e.Unique }}[]{{ end }}*{{ $e.Type.Name }} `{{ $e.StructTag }}`
{{ end -}}
{{ end -}}
}
{{ range $_, $storage := $.Storage }}
{{ $tmpl := printf "dialect/%s/decode/one" $storage }}
{{ xtemplate $tmpl $ }}
{{ end }}
{{ $receiver := $.Receiver }}
{{ range $_, $e := $.Edges }}
{{ $func := print "Query" (pascal $e.Name) }}
// {{ $func }} queries the {{ $e.Name }} edge of the {{ $.Name }}.
func ({{ $receiver }} *{{ $.Name }}) {{ $func }}() *{{ $e.Type.Name}}Query {
return (&{{ $.Name }}Client{ {{ $receiver }}.config}).{{ $func }}({{ $receiver }})
}
{{ end }}
// Update returns a builder for updating this {{ $.Name }}.
// Note that, you need to call {{ $.Name }}.Unwrap() before calling this method, if this {{ $.Name }}
// was returned from a transaction, and the transaction was committed or rolled back.
func ({{ $receiver }} *{{ $.Name }}) Update() *{{ $.Name }}UpdateOne {
return (&{{ $.Name }}Client{ {{ $receiver }}.config}).UpdateOne({{ $receiver }})
}
// Unwrap unwraps the entity that was returned from a transaction after it was closed,
// so that all next queries will be executed through the driver which created the transaction.
func ({{ $receiver }} *{{ $.Name }}) Unwrap() *{{ $.Name }} {
tx, ok := {{ $receiver }}.config.driver.(*txDriver)
if !ok {
panic("{{ $pkg }}: {{ $.Name }} is not a transactional entity")
}
{{ $receiver }}.config.driver = tx.drv
return {{ $receiver }}
}
// String implements the fmt.Stringer.
func ({{ $receiver }} *{{ $.Name }}) String() string {
buf := bytes.NewBuffer(nil)
buf.WriteString("{{ $.Name }}(")
buf.WriteString(fmt.Sprintf("id=%v", {{ $receiver }}.ID))
{{- range $i, $f := $.Fields }}
{{- if $f.Nillable }}
if v := {{ $receiver }}.{{ pascal $f.Name }}; v != nil {
buf.WriteString(fmt.Sprintf(", {{ $f.Name }}=%v", *v))
}
{{- else }}
buf.WriteString(fmt.Sprintf(", {{ $f.Name }}=%v", {{ $receiver }}.{{ pascal $f.Name }}))
{{- end }}
{{- end }}
buf.WriteString(")")
return buf.String()
}
{{- if $.ID.IsString }}
// id returns the int representation of the ID field.
func ({{ $receiver }} *{{ $.Name }}) id() int {
id, _ := strconv.Atoi({{ $receiver }}.ID)
return id
}
{{- end }}
{{ $slice := plural $.Name }}
// {{ $slice }} is a parsable slice of {{ $.Name }}.
type {{ $slice }} []*{{ $.Name }}
{{ range $_, $storage := $.Storage }}
{{ with extend $ "Slice" $slice }}
{{ $tmpl := printf "dialect/%s/decode/many" $storage }}
{{ xtemplate $tmpl . }}
{{ end }}
{{ end }}
func ({{ $receiver }} {{ $slice }}) config(cfg config) {
for i := range {{ $receiver }} {
{{ $receiver }}[i].config = cfg
}
}
{{ end }}