2025-03-31 17:36:49 +08:00

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