|
|
package repository
|
|
|
|
|
|
import (
|
|
|
"fmt"
|
|
|
|
|
|
"github.com/go-pg/pg/v10"
|
|
|
"github.com/linmadan/egglib-go/persistent/pg/sqlbuilder"
|
|
|
pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
|
|
|
"github.com/linmadan/egglib-go/utils/snowflake"
|
|
|
"gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/domain"
|
|
|
"gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/infrastructure/pg/models"
|
|
|
"gitlab.fjmaimaimai.com/allied-creation/allied-creation-gateway/pkg/infrastructure/pg/transform"
|
|
|
)
|
|
|
|
|
|
type LoginAccessRepository struct {
|
|
|
transactionContext *pgTransaction.TransactionContext
|
|
|
}
|
|
|
|
|
|
func (repository *LoginAccessRepository) nextIdentify() (int64, error) {
|
|
|
IdWorker, err := snowflake.NewIdWorker(1)
|
|
|
if err != nil {
|
|
|
return 0, err
|
|
|
}
|
|
|
id, err := IdWorker.NextId()
|
|
|
return id, err
|
|
|
}
|
|
|
func (repository *LoginAccessRepository) Save(loginAccess *domain.LoginAccess) (*domain.LoginAccess, error) {
|
|
|
sqlBuildFields := []string{
|
|
|
"account",
|
|
|
"platform",
|
|
|
"company_id",
|
|
|
"organization_id",
|
|
|
"access_token",
|
|
|
"refresh_token",
|
|
|
"access_expired",
|
|
|
"refresh_expired",
|
|
|
"created_time",
|
|
|
"updated_time",
|
|
|
}
|
|
|
insertFieldsSnippet := sqlbuilder.SqlFieldsSnippet(sqlBuildFields)
|
|
|
insertPlaceHoldersSnippet := sqlbuilder.SqlPlaceHoldersSnippet(sqlBuildFields)
|
|
|
returningFieldsSnippet := sqlbuilder.SqlFieldsSnippet(sqlBuildFields)
|
|
|
updateFields := sqlbuilder.RemoveSqlFields(sqlBuildFields, "loginAccess_id")
|
|
|
updateFieldsSnippet := sqlbuilder.SqlUpdateFieldsSnippet(updateFields)
|
|
|
tx := repository.transactionContext.PgTx
|
|
|
if loginAccess.Identify() == nil {
|
|
|
loginAccessId, err := repository.nextIdentify()
|
|
|
if err != nil {
|
|
|
return loginAccess, err
|
|
|
} else {
|
|
|
loginAccess.LoginAccessId = loginAccessId
|
|
|
}
|
|
|
if _, err := tx.QueryOne(
|
|
|
pg.Scan(
|
|
|
&loginAccess.Account,
|
|
|
&loginAccess.Platform,
|
|
|
&loginAccess.CompanyId,
|
|
|
&loginAccess.OrganizationId,
|
|
|
&loginAccess.AccessToken,
|
|
|
&loginAccess.RefreshToken,
|
|
|
&loginAccess.AccessExpired,
|
|
|
&loginAccess.RefreshExpired,
|
|
|
&loginAccess.CreatedTime,
|
|
|
&loginAccess.UpdatedTime,
|
|
|
),
|
|
|
fmt.Sprintf("INSERT INTO login_accesss (%s) VALUES (%s) RETURNING %s", insertFieldsSnippet, insertPlaceHoldersSnippet, returningFieldsSnippet),
|
|
|
loginAccess.Account,
|
|
|
loginAccess.Platform,
|
|
|
loginAccess.CompanyId,
|
|
|
loginAccess.OrganizationId,
|
|
|
loginAccess.AccessToken,
|
|
|
loginAccess.RefreshToken,
|
|
|
loginAccess.AccessExpired,
|
|
|
loginAccess.RefreshExpired,
|
|
|
loginAccess.CreatedTime,
|
|
|
loginAccess.UpdatedTime,
|
|
|
); err != nil {
|
|
|
return loginAccess, err
|
|
|
}
|
|
|
} else {
|
|
|
if _, err := tx.QueryOne(
|
|
|
pg.Scan(
|
|
|
&loginAccess.Account,
|
|
|
&loginAccess.Platform,
|
|
|
&loginAccess.CompanyId,
|
|
|
&loginAccess.OrganizationId,
|
|
|
&loginAccess.AccessToken,
|
|
|
&loginAccess.RefreshToken,
|
|
|
&loginAccess.AccessExpired,
|
|
|
&loginAccess.RefreshExpired,
|
|
|
&loginAccess.CreatedTime,
|
|
|
&loginAccess.UpdatedTime,
|
|
|
),
|
|
|
fmt.Sprintf("UPDATE login_accesss SET %s WHERE login_access_id=? RETURNING %s", updateFieldsSnippet, returningFieldsSnippet),
|
|
|
loginAccess.Account,
|
|
|
loginAccess.Platform,
|
|
|
loginAccess.CompanyId,
|
|
|
loginAccess.OrganizationId,
|
|
|
loginAccess.AccessToken,
|
|
|
loginAccess.RefreshToken,
|
|
|
loginAccess.AccessExpired,
|
|
|
loginAccess.RefreshExpired,
|
|
|
loginAccess.CreatedTime,
|
|
|
loginAccess.UpdatedTime,
|
|
|
loginAccess.Identify(),
|
|
|
); err != nil {
|
|
|
return loginAccess, err
|
|
|
}
|
|
|
}
|
|
|
return loginAccess, nil
|
|
|
}
|
|
|
func (repository *LoginAccessRepository) Remove(loginAccess *domain.LoginAccess) (*domain.LoginAccess, error) {
|
|
|
tx := repository.transactionContext.PgTx
|
|
|
loginAccessModel := new(models.LoginAccess)
|
|
|
loginAccessModel.LoginAccessId = loginAccess.Identify().(int64)
|
|
|
if _, err := tx.Model(loginAccessModel).WherePK().Delete(); err != nil {
|
|
|
return loginAccess, err
|
|
|
}
|
|
|
return loginAccess, nil
|
|
|
}
|
|
|
func (repository *LoginAccessRepository) FindOne(queryOptions map[string]interface{}) (*domain.LoginAccess, error) {
|
|
|
tx := repository.transactionContext.PgTx
|
|
|
loginAccessModel := new(models.LoginAccess)
|
|
|
query := sqlbuilder.BuildQuery(tx.Model(loginAccessModel), queryOptions)
|
|
|
query.SetWhereByQueryOption("login_access.login_access_id = ?", "loginAccessId")
|
|
|
if err := query.First(); err != nil {
|
|
|
if err.Error() == "pg: no rows in result set" {
|
|
|
return nil, fmt.Errorf("没有此资源")
|
|
|
} else {
|
|
|
return nil, err
|
|
|
}
|
|
|
}
|
|
|
if loginAccessModel.LoginAccessId == 0 {
|
|
|
return nil, nil
|
|
|
} else {
|
|
|
return transform.TransformToLoginAccessDomainModelFromPgModels(loginAccessModel)
|
|
|
}
|
|
|
}
|
|
|
func (repository *LoginAccessRepository) Find(queryOptions map[string]interface{}) (int64, []*domain.LoginAccess, error) {
|
|
|
tx := repository.transactionContext.PgTx
|
|
|
var loginAccessModels []*models.LoginAccess
|
|
|
loginAccesss := make([]*domain.LoginAccess, 0)
|
|
|
query := sqlbuilder.BuildQuery(tx.Model(&loginAccessModels), queryOptions)
|
|
|
query.SetOffsetAndLimit(20)
|
|
|
query.SetOrderDirect("login_access_id", "DESC")
|
|
|
if count, err := query.SelectAndCount(); err != nil {
|
|
|
return 0, loginAccesss, err
|
|
|
} else {
|
|
|
for _, loginAccessModel := range loginAccessModels {
|
|
|
if loginAccess, err := transform.TransformToLoginAccessDomainModelFromPgModels(loginAccessModel); err != nil {
|
|
|
return 0, loginAccesss, err
|
|
|
} else {
|
|
|
loginAccesss = append(loginAccesss, loginAccess)
|
|
|
}
|
|
|
}
|
|
|
return int64(count), loginAccesss, nil
|
|
|
}
|
|
|
}
|
|
|
func NewLoginAccessRepository(transactionContext *pgTransaction.TransactionContext) (*LoginAccessRepository, error) {
|
|
|
if transactionContext == nil {
|
|
|
return nil, fmt.Errorf("transactionContext参数不能为nil")
|
|
|
} else {
|
|
|
return &LoginAccessRepository{
|
|
|
transactionContext: transactionContext,
|
|
|
}, nil
|
|
|
}
|
|
|
} |
...
|
...
|
|