94 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package project
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 
 | |
| 	db "management/internal/db/sqlc"
 | |
| 	"management/internal/pkg/redis"
 | |
| )
 | |
| 
 | |
| type ProjectBiz interface {
 | |
| 	Create(ctx context.Context, p *db.CreateProjectParams, pf []*db.CreateProjectFileParams) error
 | |
| 	Update(ctx context.Context, p *db.UpdateProjectParams, pf []*db.CreateProjectFileParams) error
 | |
| 	List(ctx context.Context, q *db.ListProjectConditionParam) ([]*db.ProjectView, int64, error)
 | |
| 	Get(ctx context.Context, id int64) (*db.Project, error)
 | |
| 
 | |
| 	ProjectExpansion
 | |
| }
 | |
| 
 | |
| type ProjectExpansion interface {
 | |
| 	ListProjectFiles(ctx context.Context, projectID int64) ([]*db.ProjectFile, error)
 | |
| }
 | |
| 
 | |
| type projectBiz struct {
 | |
| 	store db.Store
 | |
| 	redis redis.IRedis
 | |
| }
 | |
| 
 | |
| var _ ProjectBiz = (*projectBiz)(nil)
 | |
| 
 | |
| func New(store db.Store, redis redis.IRedis) *projectBiz {
 | |
| 	return &projectBiz{
 | |
| 		store: store,
 | |
| 		redis: redis,
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (b *projectBiz) Create(ctx context.Context, p *db.CreateProjectParams, pf []*db.CreateProjectFileParams) error {
 | |
| 	return b.store.ExecTx(ctx, func(q *db.Queries) error {
 | |
| 		_, err := q.CreateProject(ctx, p)
 | |
| 		if err != nil {
 | |
| 			return err
 | |
| 		}
 | |
| 
 | |
| 		for _, item := range pf {
 | |
| 			_, err = q.CreateProjectFile(ctx, item)
 | |
| 			if err != nil {
 | |
| 				return err
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		return nil
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func (b *projectBiz) Update(ctx context.Context, p *db.UpdateProjectParams, pf []*db.CreateProjectFileParams) error {
 | |
| 	return b.store.ExecTx(ctx, func(q *db.Queries) error {
 | |
| 		_, err := q.UpdateProject(ctx, p)
 | |
| 		if err != nil {
 | |
| 			return err
 | |
| 		}
 | |
| 
 | |
| 		err = q.DeleteProjectFile(ctx, p.ID)
 | |
| 		if err != nil {
 | |
| 			return err
 | |
| 		}
 | |
| 
 | |
| 		for _, item := range pf {
 | |
| 			_, err = q.CreateProjectFile(ctx, item)
 | |
| 			if err != nil {
 | |
| 				return err
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		return nil
 | |
| 	})
 | |
| }
 | |
| 
 | |
| func (b *projectBiz) List(ctx context.Context, q *db.ListProjectConditionParam) ([]*db.ProjectView, int64, error) {
 | |
| 	res, total, err := b.store.ListProjectCondition(ctx, q)
 | |
| 	if err != nil {
 | |
| 		return nil, 0, err
 | |
| 	}
 | |
| 
 | |
| 	return res, total, nil
 | |
| }
 | |
| 
 | |
| func (b *projectBiz) Get(ctx context.Context, id int64) (*db.Project, error) {
 | |
| 	return b.store.GetProject(ctx, id)
 | |
| }
 | |
| 
 | |
| func (b *projectBiz) ListProjectFiles(ctx context.Context, projectID int64) ([]*db.ProjectFile, error) {
 | |
| 	return b.store.ListProjectFiles(ctx, projectID)
 | |
| }
 |