feat: backend core - auth, user, role, permission, device, webhook, monitoring, cache, repository, service, middleware, API handlers
This commit is contained in:
150
internal/repository/custom_field.go
Normal file
150
internal/repository/custom_field.go
Normal file
@@ -0,0 +1,150 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/user-management-system/internal/domain"
|
||||
)
|
||||
|
||||
// CustomFieldRepository 自定义字段数据访问层
|
||||
type CustomFieldRepository struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
// NewCustomFieldRepository 创建自定义字段数据访问层
|
||||
func NewCustomFieldRepository(db *gorm.DB) *CustomFieldRepository {
|
||||
return &CustomFieldRepository{db: db}
|
||||
}
|
||||
|
||||
// Create 创建自定义字段
|
||||
func (r *CustomFieldRepository) Create(ctx context.Context, field *domain.CustomField) error {
|
||||
return r.db.WithContext(ctx).Create(field).Error
|
||||
}
|
||||
|
||||
// Update 更新自定义字段
|
||||
func (r *CustomFieldRepository) Update(ctx context.Context, field *domain.CustomField) error {
|
||||
return r.db.WithContext(ctx).Save(field).Error
|
||||
}
|
||||
|
||||
// Delete 删除自定义字段
|
||||
func (r *CustomFieldRepository) Delete(ctx context.Context, id int64) error {
|
||||
return r.db.WithContext(ctx).Delete(&domain.CustomField{}, id).Error
|
||||
}
|
||||
|
||||
// GetByID 根据ID获取自定义字段
|
||||
func (r *CustomFieldRepository) GetByID(ctx context.Context, id int64) (*domain.CustomField, error) {
|
||||
var field domain.CustomField
|
||||
err := r.db.WithContext(ctx).First(&field, id).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &field, nil
|
||||
}
|
||||
|
||||
// GetByFieldKey 根据FieldKey获取自定义字段
|
||||
func (r *CustomFieldRepository) GetByFieldKey(ctx context.Context, fieldKey string) (*domain.CustomField, error) {
|
||||
var field domain.CustomField
|
||||
err := r.db.WithContext(ctx).Where("field_key = ?", fieldKey).First(&field).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &field, nil
|
||||
}
|
||||
|
||||
// List 获取所有启用的自定义字段
|
||||
func (r *CustomFieldRepository) List(ctx context.Context) ([]*domain.CustomField, error) {
|
||||
var fields []*domain.CustomField
|
||||
err := r.db.WithContext(ctx).Where("status = ?", 1).Order("sort ASC").Find(&fields).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return fields, nil
|
||||
}
|
||||
|
||||
// ListAll 获取所有自定义字段
|
||||
func (r *CustomFieldRepository) ListAll(ctx context.Context) ([]*domain.CustomField, error) {
|
||||
var fields []*domain.CustomField
|
||||
err := r.db.WithContext(ctx).Order("sort ASC").Find(&fields).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return fields, nil
|
||||
}
|
||||
|
||||
// UserCustomFieldValueRepository 用户自定义字段值数据访问层
|
||||
type UserCustomFieldValueRepository struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
// NewUserCustomFieldValueRepository 创建用户自定义字段值数据访问层
|
||||
func NewUserCustomFieldValueRepository(db *gorm.DB) *UserCustomFieldValueRepository {
|
||||
return &UserCustomFieldValueRepository{db: db}
|
||||
}
|
||||
|
||||
// Set 为用户设置自定义字段值(upsert)
|
||||
func (r *UserCustomFieldValueRepository) Set(ctx context.Context, userID int64, fieldID int64, fieldKey, value string) error {
|
||||
return r.db.WithContext(ctx).Exec(`
|
||||
INSERT INTO user_custom_field_values (user_id, field_id, field_key, value, created_at, updated_at)
|
||||
VALUES (?, ?, ?, ?, NOW(), NOW())
|
||||
ON CONFLICT(user_id, field_id) DO UPDATE SET value = ?, updated_at = NOW()
|
||||
`, userID, fieldID, fieldKey, value, value).Error
|
||||
}
|
||||
|
||||
// GetByUserID 获取用户的所有自定义字段值
|
||||
func (r *UserCustomFieldValueRepository) GetByUserID(ctx context.Context, userID int64) ([]*domain.UserCustomFieldValue, error) {
|
||||
var values []*domain.UserCustomFieldValue
|
||||
err := r.db.WithContext(ctx).Where("user_id = ?", userID).Find(&values).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return values, nil
|
||||
}
|
||||
|
||||
// GetByUserIDAndFieldKey 获取用户指定字段的值
|
||||
func (r *UserCustomFieldValueRepository) GetByUserIDAndFieldKey(ctx context.Context, userID int64, fieldKey string) (*domain.UserCustomFieldValue, error) {
|
||||
var value domain.UserCustomFieldValue
|
||||
err := r.db.WithContext(ctx).Where("user_id = ? AND field_key = ?", userID, fieldKey).First(&value).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &value, nil
|
||||
}
|
||||
|
||||
// Delete 删除用户的自定义字段值
|
||||
func (r *UserCustomFieldValueRepository) Delete(ctx context.Context, userID int64, fieldID int64) error {
|
||||
return r.db.WithContext(ctx).Where("user_id = ? AND field_id = ?", userID, fieldID).Delete(&domain.UserCustomFieldValue{}).Error
|
||||
}
|
||||
|
||||
// DeleteByUserID 删除用户的所有自定义字段值
|
||||
func (r *UserCustomFieldValueRepository) DeleteByUserID(ctx context.Context, userID int64) error {
|
||||
return r.db.WithContext(ctx).Where("user_id = ?", userID).Delete(&domain.UserCustomFieldValue{}).Error
|
||||
}
|
||||
|
||||
// BatchSet 批量设置用户的自定义字段值
|
||||
func (r *UserCustomFieldValueRepository) BatchSet(ctx context.Context, userID int64, values map[string]string) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
return r.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
|
||||
for fieldKey, value := range values {
|
||||
if err := tx.Exec(`
|
||||
INSERT INTO user_custom_field_values (user_id, field_id, field_key, value, created_at, updated_at)
|
||||
VALUES (
|
||||
?,
|
||||
(SELECT id FROM custom_fields WHERE field_key = ? LIMIT 1),
|
||||
?,
|
||||
?,
|
||||
NOW(),
|
||||
NOW()
|
||||
)
|
||||
ON CONFLICT(user_id, field_id) DO UPDATE SET value = ?, updated_at = NOW()
|
||||
`, userID, fieldKey, fieldKey, value, value).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user