pg_project_module_files_repository.go 6.5 KB
package repository

import (
	"fmt"

	"github.com/go-pg/pg/v10"
	pgTransaction "github.com/linmadan/egglib-go/transaction/pg"
	"github.com/tiptok/godevp/pkg/domain"
	"github.com/tiptok/godevp/pkg/infrastructure/pg/models"
)

type ProjectModuleFilesRepository struct {
	transactionContext *pgTransaction.TransactionContext
}

func (repository *ProjectModuleFilesRepository) nextIdentify() (int64, error) {
	return 0, nil
}
func (repository *ProjectModuleFilesRepository) Save(projectModuleFiles *domain.ProjectModuleFiles) (*domain.ProjectModuleFiles, error) {
	tx := repository.transactionContext.PgTx
	if projectModuleFiles.Identify() == nil {
		_, err := repository.nextIdentify()
		if err != nil {
			return projectModuleFiles, err
		}
		if _, err := tx.QueryOne(
			pg.Scan(&projectModuleFiles.Id, &projectModuleFiles.ProjectModuleId, &projectModuleFiles.ProjectModuleVersion, &projectModuleFiles.FileType, &projectModuleFiles.CodeBlock, &projectModuleFiles.ParentId, &projectModuleFiles.Sort, &projectModuleFiles.Remark, &projectModuleFiles.CreateTime, &projectModuleFiles.UpdateTime, &projectModuleFiles.Path, &projectModuleFiles.Tag),
			"INSERT INTO project_module_filess (id, project_module_id, project_module_version, file_type, code_block, parent_id, sort, remark, create_time, update_time, path, tag) VALUES (DEFAULT, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING id, project_module_id, project_module_version, file_type, code_block, parent_id, sort, remark, create_time, update_time, path, tag",
			projectModuleFiles.ProjectModuleId, projectModuleFiles.ProjectModuleVersion, projectModuleFiles.FileType, projectModuleFiles.CodeBlock, projectModuleFiles.ParentId, projectModuleFiles.Sort, projectModuleFiles.Remark, projectModuleFiles.CreateTime, projectModuleFiles.UpdateTime, projectModuleFiles.Path, projectModuleFiles.Tag); err != nil {
			return projectModuleFiles, err
		}
	} else {
		if _, err := tx.QueryOne(
			pg.Scan(&projectModuleFiles.ProjectModuleId, &projectModuleFiles.ProjectModuleVersion, &projectModuleFiles.FileType, &projectModuleFiles.CodeBlock, &projectModuleFiles.ParentId, &projectModuleFiles.Sort, &projectModuleFiles.Remark, &projectModuleFiles.CreateTime, &projectModuleFiles.UpdateTime, &projectModuleFiles.Path, &projectModuleFiles.Tag),
			"UPDATE project_module_filess SET project_module_id=?, project_module_version=?, file_type=?, code_block=?, parent_id=?, sort=?, remark=?, create_time=?, update_time=?, path=?, tag=? WHERE id=? RETURNING project_module_id, project_module_version, file_type, code_block, parent_id, sort, remark, create_time, update_time, path, tag",
			projectModuleFiles.ProjectModuleId, projectModuleFiles.ProjectModuleVersion, projectModuleFiles.FileType, projectModuleFiles.CodeBlock, projectModuleFiles.ParentId, projectModuleFiles.Sort, projectModuleFiles.Remark, projectModuleFiles.CreateTime, projectModuleFiles.UpdateTime, projectModuleFiles.Path, projectModuleFiles.Tag, projectModuleFiles.Identify()); err != nil {
			return projectModuleFiles, err
		}
	}
	return projectModuleFiles, nil
}
func (repository *ProjectModuleFilesRepository) Remove(projectModuleFiles *domain.ProjectModuleFiles) (*domain.ProjectModuleFiles, error) {
	tx := repository.transactionContext.PgTx
	projectModuleFilesModel := new(models.ProjectModuleFiles)
	projectModuleFilesModel.Id = projectModuleFiles.Identify().(int64)
	if _, err := tx.Model(projectModuleFilesModel).WherePK().Delete(); err != nil {
		return projectModuleFiles, err
	}
	return projectModuleFiles, nil
}
func (repository *ProjectModuleFilesRepository) FindOne(queryOptions map[string]interface{}) (*domain.ProjectModuleFiles, error) {
	tx := repository.transactionContext.PgTx
	projectModuleFilesModel := new(models.ProjectModuleFiles)
	query := tx.Model(projectModuleFilesModel)
	if projectModuleFilesId, ok := queryOptions["projectModuleFilesId"]; ok {
		query = query.Where("project_module_files.id = ?", projectModuleFilesId)
	}
	if err := query.First(); err != nil {
		if err.Error() == "pg: no rows in result set" {
			return nil, fmt.Errorf("没有此资源")
		} else {
			return nil, err
		}
	}
	if projectModuleFilesModel.Id == 0 {
		return nil, nil
	} else {
		return repository.transformPgModelToDomainModel(projectModuleFilesModel)
	}
}
func (repository *ProjectModuleFilesRepository) Find(queryOptions map[string]interface{}) (int64, []*domain.ProjectModuleFiles, error) {
	tx := repository.transactionContext.PgTx
	var projectModuleFilesModels []*models.ProjectModuleFiles
	projectModuleFiless := make([]*domain.ProjectModuleFiles, 0)
	query := tx.Model(&projectModuleFilesModels)
	if offset, ok := queryOptions["offset"]; ok {
		offset := offset.(int)
		if offset > -1 {
			query = query.Offset(offset)
		}
	} else {
		query = query.Offset(0)
	}
	if limit, ok := queryOptions["limit"]; ok {
		limit := limit.(int)
		if limit > -1 {
			query = query.Limit(limit)
		}
	} else {
		query = query.Limit(20)
	}
	if count, err := query.Order("id DESC").SelectAndCount(); err != nil {
		return 0, projectModuleFiless, err
	} else {
		for _, projectModuleFilesModel := range projectModuleFilesModels {
			if projectModuleFiles, err := repository.transformPgModelToDomainModel(projectModuleFilesModel); err != nil {
				return 0, projectModuleFiless, err
			} else {
				projectModuleFiless = append(projectModuleFiless, projectModuleFiles)
			}
		}
		return int64(count), projectModuleFiless, nil
	}
}
func (repository *ProjectModuleFilesRepository) transformPgModelToDomainModel(projectModuleFilesModel *models.ProjectModuleFiles) (*domain.ProjectModuleFiles, error) {
	return &domain.ProjectModuleFiles{
		Id:                   projectModuleFilesModel.Id,
		ProjectModuleId:      projectModuleFilesModel.ProjectModuleId,
		ProjectModuleVersion: projectModuleFilesModel.ProjectModuleVersion,
		FileType:             projectModuleFilesModel.FileType,
		CodeBlock:            projectModuleFilesModel.CodeBlock,
		ParentId:             projectModuleFilesModel.ParentId,
		Sort:                 projectModuleFilesModel.Sort,
		Remark:               projectModuleFilesModel.Remark,
		CreateTime:           projectModuleFilesModel.CreateTime,
		UpdateTime:           projectModuleFilesModel.UpdateTime,
		Path:                 projectModuleFilesModel.Path,
		Tag:                  projectModuleFilesModel.Tag,
	}, nil
}
func NewProjectModuleFilesRepository(transactionContext *pgTransaction.TransactionContext) (*ProjectModuleFilesRepository, error) {
	if transactionContext == nil {
		return nil, fmt.Errorf("transactionContext参数不能为nil")
	} else {
		return &ProjectModuleFilesRepository{
			transactionContext: transactionContext,
		}, nil
	}
}