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) }