You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.4 KiB
82 lines
2.4 KiB
package inventory
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/cloudreve/Cloudreve/v4/ent"
|
|
"github.com/cloudreve/Cloudreve/v4/ent/fsevent"
|
|
"github.com/cloudreve/Cloudreve/v4/ent/schema"
|
|
"github.com/cloudreve/Cloudreve/v4/pkg/conf"
|
|
"github.com/gofrs/uuid"
|
|
"github.com/samber/lo"
|
|
)
|
|
|
|
type FsEventClient interface {
|
|
TxOperator
|
|
// Create a new FsEvent
|
|
Create(ctx context.Context, uid int, subscriberId uuid.UUID, events ...string) error
|
|
// Delete all FsEvents by subscriber
|
|
DeleteBySubscriber(ctx context.Context, subscriberId uuid.UUID) error
|
|
// Delete all FsEvents
|
|
DeleteAll(ctx context.Context) error
|
|
// Get all FsEvents by subscriber and user
|
|
TakeBySubscriber(ctx context.Context, subscriberId uuid.UUID, userId int) ([]*ent.FsEvent, error)
|
|
}
|
|
|
|
func NewFsEventClient(client *ent.Client, dbType conf.DBType) FsEventClient {
|
|
return &fsEventClient{client: client, maxSQlParam: sqlParamLimit(dbType)}
|
|
}
|
|
|
|
type fsEventClient struct {
|
|
maxSQlParam int
|
|
client *ent.Client
|
|
}
|
|
|
|
func (c *fsEventClient) SetClient(newClient *ent.Client) TxOperator {
|
|
return &fsEventClient{client: newClient, maxSQlParam: c.maxSQlParam}
|
|
}
|
|
|
|
func (c *fsEventClient) GetClient() *ent.Client {
|
|
return c.client
|
|
}
|
|
|
|
func (c *fsEventClient) Create(ctx context.Context, uid int, subscriberId uuid.UUID, events ...string) error {
|
|
stms := lo.Map(events, func(event string, index int) *ent.FsEventCreate {
|
|
res := c.client.FsEvent.
|
|
Create().
|
|
SetUserFsevent(uid).
|
|
SetEvent(event).
|
|
SetSubscriber(subscriberId).SetEvent(event)
|
|
|
|
return res
|
|
})
|
|
|
|
_, err := c.client.FsEvent.CreateBulk(stms...).Save(ctx)
|
|
return err
|
|
}
|
|
|
|
func (c *fsEventClient) DeleteBySubscriber(ctx context.Context, subscriberId uuid.UUID) error {
|
|
_, err := c.client.FsEvent.Delete().Where(fsevent.Subscriber(subscriberId)).Exec(schema.SkipSoftDelete(ctx))
|
|
return err
|
|
}
|
|
|
|
func (c *fsEventClient) DeleteAll(ctx context.Context) error {
|
|
_, err := c.client.FsEvent.Delete().Exec(schema.SkipSoftDelete(ctx))
|
|
return err
|
|
}
|
|
|
|
func (c *fsEventClient) TakeBySubscriber(ctx context.Context, subscriberId uuid.UUID, userId int) ([]*ent.FsEvent, error) {
|
|
res, err := c.client.FsEvent.Query().Where(fsevent.Subscriber(subscriberId), fsevent.UserFsevent(userId)).All(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Delete the FsEvents
|
|
_, err = c.client.FsEvent.Delete().Where(fsevent.Subscriber(subscriberId), fsevent.UserFsevent(userId)).Exec(schema.SkipSoftDelete(ctx))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return res, nil
|
|
}
|