package repository import ( "fmt" "github.com/go-pg/pg" "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/domain" "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/pg/models" "gitlab.fjmaimaimai.com/mmm-go/partnermg/pkg/infrastructure/pg/transaction" ) type ColumnSettingRepository struct { transactionContext *transaction.TransactionContext } //func (repository *ColumnSettingRepository) nextIdentify() (int64, error) { // return 0, nil //} func (repository *ColumnSettingRepository) Save(columnSetting *domain.ColumnSetting) (*domain.ColumnSetting, error) { tx := repository.transactionContext.PgTx columnSettingModel := &models.ColumnSetting{ Id: columnSetting.Id, CompanyId: columnSetting.CompanyId, CreatedAt: columnSetting.CreatedAt, Description: columnSetting.Description, Key: columnSetting.Key, Uid: columnSetting.Uid, UpdatedAt: columnSetting.UpdatedAt, UserName: columnSetting.UserName, Value: columnSetting.Value, InvalidValue: columnSetting.InvalidValue, } if columnSetting.Identify() == nil { _, err := tx.Model(columnSettingModel).Insert() if err != nil { return nil, err } //_, err := repository.nextIdentify() //if err != nil { // return columnSetting, err //} //if _, errInsert := tx.QueryOne( // pg.Scan(&columnSetting.Id, &columnSetting.CompanyId, &columnSetting.CreatedAt, &columnSetting.Description, &columnSetting.Key, &columnSetting.Uid, &columnSetting.UpdatedAt, &columnSetting.UserName, pg.Array(&columnSetting.Value), pg.Array(&columnSetting.InvalidValue)), // "INSERT INTO column_settings (company_id, created_at, description, key, uid, updated_at, user_name, value, invalid_value) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING id, company_id, created_at, description, key, uid, updated_at, user_name, value, invalid_value", // columnSetting.CompanyId, columnSetting.CreatedAt, columnSetting.Description, columnSetting.Key, columnSetting.Uid, columnSetting.UpdatedAt, columnSetting.UserName, pg.Array(columnSetting.Value), pg.Array(columnSetting.InvalidValue)); errInsert != nil { // return columnSetting, errInsert //} } else { //if _, errUpdate := tx.QueryOne( // pg.Scan(&columnSetting.Id, &columnSetting.CompanyId, &columnSetting.CreatedAt, &columnSetting.Description, &columnSetting.Key, &columnSetting.Uid, &columnSetting.UpdatedAt, &columnSetting.UserName, pg.Array(&columnSetting.Value), pg.Array(&columnSetting.InvalidValue)), // "UPDATE column_settings SET company_id=?, created_at=?, description=?, key=?, uid=?, updated_at=?, user_name=?, value=?, invalid_value=? WHERE id=? RETURNING id, company_id, created_at, description, key, uid, updated_at, user_name, value, invalid_value", // columnSetting.CompanyId, columnSetting.CreatedAt, columnSetting.Description, columnSetting.Key, columnSetting.Uid, columnSetting.UpdatedAt, columnSetting.UserName, pg.Array(columnSetting.Value), pg.Array(columnSetting.InvalidValue), columnSetting.Identify()); errUpdate != nil { // return columnSetting, errUpdate //} _, err := tx.Model(columnSettingModel).WherePK(). Column("company_id", "created_at", "description", "key", "uid", "updated_at", "user_name", "value", "invalid_value").Update() if err != nil { return nil, err } } return columnSetting, nil } func (repository *ColumnSettingRepository) Remove(columnSetting *domain.ColumnSetting, columnSettings []*domain.ColumnSetting) (*domain.ColumnSetting, []*domain.ColumnSetting, error) { tx := repository.transactionContext.PgTx // 单个删除 columnSettingModel := new(models.ColumnSetting) columnSettingModel.Id = columnSetting.Identify().(int64) if _, err := tx.Model(columnSettingModel).WherePK().Delete(); err != nil { return columnSetting, nil, err } // 批量删除 var columnSettingModels []*models.ColumnSetting for _, setting := range columnSettings { columnSettingModels = append(columnSettingModels, &models.ColumnSetting{ Id: setting.Identify().(int64), }) } if _, err := tx.Model(columnSettingModels).WherePK().Delete(); err != nil { return nil, columnSettings, err } return columnSetting, columnSettings, nil } func (repository *ColumnSettingRepository) FindOne(queryOptions map[string]interface{}) (*domain.ColumnSetting, error) { tx := repository.transactionContext.PgTx columnSettingModel := new(models.ColumnSetting) query := tx.Model(columnSettingModel) if columnSettingId, ok := queryOptions["column_settingId"]; ok { query = query.Where("column_setting.id = ?", columnSettingId) } if uid, ok := queryOptions["uid"]; ok { query = query.Where("column_setting.uid = ?", uid) } if companyId, ok := queryOptions["companyId"]; ok { query = query.Where("column_setting.company_id = ?", companyId) } if err := query.First(); err != nil { if err.Error() == "pg: no rows in result set" { return nil, fmt.Errorf("没有此资源") } else { return nil, err } } if columnSettingModel.Id == 0 { return nil, nil } else { return repository.transformPgModelToDomainModel(columnSettingModel) } } func (repository *ColumnSettingRepository) Find(queryOptions map[string]interface{}) (int64, []*domain.ColumnSetting, error) { tx := repository.transactionContext.PgTx var columnSettingModels []*models.ColumnSetting columnSettings := make([]*domain.ColumnSetting, 0) query := tx.Model(&columnSettingModels) if ids, ok := queryOptions["ids"]; ok { query = query.Where("column_setting.uid IN (?)", pg.In(ids.(int))) } if uid, ok := queryOptions["uid"]; ok { query = query.Where("column_setting.uid = ?", uid) } if companyId, ok := queryOptions["companyId"]; ok { query = query.Where("column_setting.company_id = ?", companyId) } if offset, ok := queryOptions["offset"]; ok { queryOffset := offset.(int) if queryOffset > -1 { query = query.Offset(queryOffset) } } else { query = query.Offset(0) } if limit, ok := queryOptions["limit"]; ok { queryLimit := limit.(int) if queryLimit > -1 { query = query.Limit(queryLimit) } } else { query = query.Limit(20) } if count, err := query.Order("id DESC").SelectAndCount(); err != nil { return 0, columnSettings, err } else { for _, columnSettingModel := range columnSettingModels { if columnSetting, errTrans := repository.transformPgModelToDomainModel(columnSettingModel); errTrans != nil { return 0, columnSettings, errTrans } else { columnSettings = append(columnSettings, columnSetting) } } return int64(count), columnSettings, nil } } func (repository *ColumnSettingRepository) transformPgModelToDomainModel(columnSettingModel *models.ColumnSetting) (*domain.ColumnSetting, error) { return &domain.ColumnSetting{ Id: columnSettingModel.Id, CompanyId: columnSettingModel.CompanyId, CreatedAt: columnSettingModel.CreatedAt, Description: columnSettingModel.Description, Key: columnSettingModel.Key, Uid: columnSettingModel.Uid, UpdatedAt: columnSettingModel.UpdatedAt, UserName: columnSettingModel.UserName, Value: columnSettingModel.Value, // 有效栏目设置 InvalidValue: columnSettingModel.InvalidValue, // 无效栏目设置 }, nil } func NewColumnSettingRepository(transactionContext *transaction.TransactionContext) (*ColumnSettingRepository, error) { if transactionContext == nil { return nil, fmt.Errorf("transactionContext参数不能为nil") } else { return &ColumnSettingRepository{ transactionContext: transactionContext, }, nil } }