// Copyright © 2023 OpenIM open source community. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package pkg import "html/template" func checkTemplate(t string) *template.Template { return template.Must(template.New("").Parse(t)) } var hookTemplate = checkTemplate(` // Copyright © 2023 OpenIM open source community. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package dao import ( "context" "github.com/OpenIMSDK/OpenKF/server/internal/conn/db" "github.com/OpenIMSDK/OpenKF/server/internal/dal/cache" "github.com/OpenIMSDK/OpenKF/server/internal/dal/gen" {{.NormPkgName}} "github.com/OpenIMSDK/OpenKF/server/internal/models/{{.PkgName}}" ) // {{.ModelName}}Dao {{.NormModelName}} dao. type {{.ModelName}}Dao struct { Dao } // New{{.ModelName}}Dao return a {{.NormModelName}} dao. func New{{.ModelName}}Dao() *{{.ModelName}}Dao { query := gen.Use(db.GetMysqlDB()) cache := cache.Use(db.GetRedis()) return &{{.ModelName}}Dao{ Dao: Dao{ ctx: context.Background(), query: query, cache: &cache, }, } } // Create create one or multi models. func (d *{{.ModelName}}Dao) Create(m ...*{{.NormPkgName}}.{{.ModelName}}) error { return d.query.WithContext(d.ctx).{{.ModelName}}.Create(m...) } // First get first matched result. func (d *{{.ModelName}}Dao) First() (*{{.NormPkgName}}.{{.ModelName}}, error) { return d.query.WithContext(d.ctx).{{.ModelName}}.First() } // FindAll get all matched results. func (d *{{.ModelName}}Dao) FindAll() ([]*{{.NormPkgName}}.{{.ModelName}}, error) { return d.query.WithContext(d.ctx).{{.ModelName}}.Find() } {{$modelName := .ModelName}}{{$normPkgName := .NormPkgName}}{{range .Fields}} // FindFirstBy{{.FieldName}} get first matched result by {{.NormFieldName}}. func (d *{{$modelName}}Dao) FindFirstBy{{.FieldName}}({{.NormFieldName}} {{.FieldType}}) (*{{$normPkgName}}.{{$modelName}}, error) { m := d.query.{{$modelName}} return m.WithContext(d.ctx).Where(m.{{.FieldName}}.Eq({{.NormFieldName}})).First() } // FindBy{{.FieldName}}Page get page by {{.FieldName}}. func (d *{{$modelName}}Dao) FindBy{{.FieldName}}Page({{.NormFieldName}} {{.FieldType}}, offset int, limit int) ([]*{{$normPkgName}}.{{$modelName}}, int64, error) { m := d.query.{{$modelName}} result, count, err := m.WithContext(d.ctx).Where(m.{{.FieldName}}.Eq({{.NormFieldName}})).FindByPage(offset, limit) return result, count, err } {{end}} // Update update model. func (d *{{.ModelName}}Dao) Update(m *{{.NormPkgName}}.{{.ModelName}}) error { res, err := d.query.WithContext(d.ctx).{{.ModelName}}.Updates(m) if err != nil && res.Error != nil { return err } return nil } // Delete delete model. func (d *{{.ModelName}}Dao) Delete(m ...*{{.NormPkgName}}.{{.ModelName}}) error { res, err := d.query.WithContext(d.ctx).{{.ModelName}}.Delete(m...) if err != nil && res.Error != nil { return err } return nil } // Count count matched records. func (d *{{.ModelName}}Dao) Count() (int64, error) { return d.query.WithContext(d.ctx).{{.ModelName}}.Count() } /////////////////////////////////////////////////////////// // Append your code here. // /////////////////////////////////////////////////////////// `)