mirror of
https://github.com/APIParkLab/APIPark.git
synced 2026-06-04 10:13:53 +08:00
306 lines
9.1 KiB
Go
306 lines
9.1 KiB
Go
package subscribe
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/eolinker/go-common/utils"
|
|
|
|
"github.com/APIParkLab/APIPark/service/universally"
|
|
"github.com/APIParkLab/APIPark/stores/subscribe"
|
|
)
|
|
|
|
const (
|
|
// ApplyStatusRefuse 拒绝
|
|
ApplyStatusRefuse = iota
|
|
// ApplyStatusReview 审核中
|
|
ApplyStatusReview
|
|
// ApplyStatusSubscribe 已订阅
|
|
ApplyStatusSubscribe
|
|
// ApplyStatusUnsubscribe 已退订
|
|
ApplyStatusUnsubscribe
|
|
// ApplyStatusCancel 取消申请
|
|
ApplyStatusCancel
|
|
)
|
|
|
|
const (
|
|
// FromUser 用户添加
|
|
FromUser = iota
|
|
// FromSubscribe 订阅
|
|
FromSubscribe
|
|
)
|
|
|
|
var (
|
|
_ ISubscribeService = (*imlSubscribeService)(nil)
|
|
)
|
|
|
|
type imlSubscribeService struct {
|
|
store subscribe.ISubscribeStore `autowired:""`
|
|
universally.IServiceGet[Subscribe]
|
|
universally.IServiceDelete
|
|
universally.IServiceCreate[CreateSubscribe]
|
|
universally.IServiceEdit[UpdateSubscribe]
|
|
}
|
|
|
|
func (i *imlSubscribeService) GetByServiceAndApplication(ctx context.Context, serviceId string, applicationId string) (*Subscribe, error) {
|
|
info, err := i.store.First(ctx, map[string]interface{}{"service": serviceId, "application": applicationId})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return FromEntity(info), nil
|
|
}
|
|
|
|
func (i *imlSubscribeService) CountMapByService(ctx context.Context, status int, service ...string) (map[string]int64, error) {
|
|
w := make(map[string]interface{})
|
|
if len(service) > 0 {
|
|
w["service"] = service
|
|
}
|
|
|
|
w["apply_status"] = status
|
|
return i.store.CountByGroup(ctx, "", w, "service")
|
|
}
|
|
|
|
func (i *imlSubscribeService) ListByServices(ctx context.Context, serviceIds ...string) ([]*Subscribe, error) {
|
|
w := make(map[string]interface{})
|
|
if len(serviceIds) > 0 {
|
|
w["service"] = serviceIds
|
|
}
|
|
list, err := i.store.List(ctx, w, "create_at desc")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return utils.SliceToSlice(list, FromEntity), nil
|
|
}
|
|
|
|
func (i *imlSubscribeService) SubscriptionsByApplication(ctx context.Context, applicationIds ...string) ([]*Subscribe, error) {
|
|
w := make(map[string]interface{})
|
|
if len(applicationIds) > 0 {
|
|
w["application"] = applicationIds
|
|
}
|
|
|
|
//w["apply_status"] = ApplyStatusSubscribe
|
|
list, err := i.store.List(ctx, w, "create_at desc")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return utils.SliceToSlice(list, FromEntity), nil
|
|
}
|
|
|
|
func (i *imlSubscribeService) DeleteByApplication(ctx context.Context, service string, application string) error {
|
|
_, err := i.store.DeleteWhere(ctx, map[string]interface{}{"service": service, "application": application})
|
|
return err
|
|
}
|
|
|
|
func (i *imlSubscribeService) SubscribersByProject(ctx context.Context, serviceIds ...string) ([]*Subscribe, error) {
|
|
w := make(map[string]interface{})
|
|
if len(serviceIds) > 0 {
|
|
w["service"] = serviceIds
|
|
}
|
|
|
|
w["apply_status"] = ApplyStatusSubscribe
|
|
list, err := i.store.List(ctx, w, "create_at desc")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return utils.SliceToSlice(list, FromEntity), nil
|
|
}
|
|
|
|
func (i *imlSubscribeService) Subscribers(ctx context.Context, service string, status int) ([]*Subscribe, error) {
|
|
list, err := i.store.List(ctx, map[string]interface{}{"apply_status": status, "service": service}, "create_at desc")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return utils.SliceToSlice(list, FromEntity), nil
|
|
}
|
|
|
|
func (i *imlSubscribeService) ListBySubscribeStatus(ctx context.Context, serviceId string, status int) ([]*Subscribe, error) {
|
|
w := make(map[string]interface{})
|
|
if serviceId != "" {
|
|
w["service"] = serviceId
|
|
}
|
|
w["apply_status"] = status
|
|
list, err := i.store.List(ctx, w, "create_at desc")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return utils.SliceToSlice(list, FromEntity), nil
|
|
}
|
|
|
|
func (i *imlSubscribeService) UpdateSubscribeStatus(ctx context.Context, application string, service string, status int) error {
|
|
info, err := i.store.First(ctx, map[string]interface{}{"service": service, "application": application})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
info.ApplyStatus = status
|
|
info.ApproveAt = time.Now()
|
|
//info.Approver = utils.UserId(ctx)
|
|
return i.store.Save(ctx, info)
|
|
}
|
|
|
|
func (i *imlSubscribeService) MySubscribeServices(ctx context.Context, application string, serviceIDs []string) ([]*Subscribe, error) {
|
|
w := make(map[string]interface{})
|
|
|
|
if len(serviceIDs) > 0 {
|
|
w["service"] = serviceIDs
|
|
}
|
|
//if len(partitionIds) > 0 {
|
|
// w["partition"] = partitionIds
|
|
//}
|
|
w["application"] = application
|
|
list, err := i.store.List(ctx, w, "create_at desc")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return utils.SliceToSlice(list, FromEntity), nil
|
|
}
|
|
|
|
func (i *imlSubscribeService) ListByApplication(ctx context.Context, service string, application ...string) ([]*Subscribe, error) {
|
|
w := make(map[string]interface{})
|
|
if len(application) > 0 {
|
|
w["application"] = application
|
|
}
|
|
w["service"] = service
|
|
list, err := i.store.List(ctx, w)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return utils.SliceToSlice(list, FromEntity), nil
|
|
}
|
|
|
|
func (i *imlSubscribeService) OnComplete() {
|
|
i.IServiceGet = universally.NewGet[Subscribe, subscribe.Subscribe](i.store, FromEntity)
|
|
i.IServiceCreate = universally.NewCreator[CreateSubscribe, subscribe.Subscribe](i.store, "subscribe", i.createEntityHandler, i.uniquestHandler, i.labelHandler)
|
|
i.IServiceDelete = universally.NewDelete[subscribe.Subscribe](i.store)
|
|
i.IServiceEdit = universally.NewEdit[UpdateSubscribe, subscribe.Subscribe](i.store, i.updateHandler, i.labelHandler)
|
|
}
|
|
|
|
func (i *imlSubscribeService) idHandler(e *subscribe.Subscribe) int64 {
|
|
return e.Id
|
|
}
|
|
func (i *imlSubscribeService) labelHandler(e *subscribe.Subscribe) []string {
|
|
return []string{e.Service}
|
|
}
|
|
func (i *imlSubscribeService) uniquestHandler(t *CreateSubscribe) []map[string]interface{} {
|
|
return []map[string]interface{}{{"uuid": t.Uuid}}
|
|
}
|
|
func (i *imlSubscribeService) createEntityHandler(t *CreateSubscribe) *subscribe.Subscribe {
|
|
return &subscribe.Subscribe{
|
|
UUID: t.Uuid,
|
|
Name: t.Uuid,
|
|
Application: t.Application,
|
|
Service: t.Service,
|
|
From: t.From,
|
|
Applier: t.Applier,
|
|
CreateAt: time.Now(),
|
|
ApplyStatus: t.ApplyStatus,
|
|
}
|
|
}
|
|
|
|
func (i *imlSubscribeService) updateHandler(e *subscribe.Subscribe, t *UpdateSubscribe) {
|
|
if t.ApplyStatus != nil {
|
|
e.ApplyStatus = *t.ApplyStatus
|
|
}
|
|
if t.From != nil {
|
|
e.From = *t.From
|
|
}
|
|
}
|
|
|
|
var (
|
|
_ ISubscribeApplyService = (*imlSubscribeApplyService)(nil)
|
|
)
|
|
|
|
type imlSubscribeApplyService struct {
|
|
store subscribe.ISubscribeApplyStore `autowired:""`
|
|
universally.IServiceGet[Apply]
|
|
universally.IServiceDelete
|
|
universally.IServiceCreate[CreateApply]
|
|
universally.IServiceEdit[EditApply]
|
|
}
|
|
|
|
func (i *imlSubscribeApplyService) GetApply(ctx context.Context, serviceId string, appId string) (*Apply, error) {
|
|
info, err := i.store.First(ctx, map[string]interface{}{"service": serviceId, "application": appId})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return FromApplyEntity(info), err
|
|
}
|
|
|
|
func (i *imlSubscribeApplyService) ListByStatus(ctx context.Context, pid string, status ...int) ([]*Apply, error) {
|
|
w := make(map[string]interface{})
|
|
w["service"] = pid
|
|
if len(status) > 0 {
|
|
w["status"] = status
|
|
}
|
|
list, err := i.store.List(ctx, w, "apply_at desc")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return utils.SliceToSlice(list, FromApplyEntity), nil
|
|
}
|
|
|
|
func (i *imlSubscribeApplyService) RevokeById(ctx context.Context, id string) error {
|
|
_, err := i.store.UpdateWhere(ctx, map[string]interface{}{"uuid": id}, map[string]interface{}{"status": -1})
|
|
return err
|
|
}
|
|
|
|
func (i *imlSubscribeApplyService) Revoke(ctx context.Context, service string, application string) error {
|
|
_, err := i.store.UpdateWhere(ctx, map[string]interface{}{"service": service, "application": application}, map[string]interface{}{"status": -1})
|
|
return err
|
|
}
|
|
|
|
func (i *imlSubscribeApplyService) OnComplete() {
|
|
i.IServiceGet = universally.NewGet[Apply, subscribe.Apply](i.store, FromApplyEntity)
|
|
i.IServiceCreate = universally.NewCreator[CreateApply, subscribe.Apply](i.store, "subscribe_apply", i.createEntityHandler, i.uniquestHandler, i.labelHandler)
|
|
i.IServiceDelete = universally.NewDelete[subscribe.Apply](i.store)
|
|
i.IServiceEdit = universally.NewEdit[EditApply, subscribe.Apply](i.store, i.updateHandler, i.labelHandler)
|
|
}
|
|
|
|
func (i *imlSubscribeApplyService) idHandler(e *subscribe.Apply) int64 {
|
|
return e.Id
|
|
}
|
|
|
|
func (i *imlSubscribeApplyService) labelHandler(e *subscribe.Apply) []string {
|
|
return []string{e.Service}
|
|
}
|
|
|
|
func (i *imlSubscribeApplyService) uniquestHandler(t *CreateApply) []map[string]interface{} {
|
|
return []map[string]interface{}{{"uuid": t.Uuid}}
|
|
}
|
|
|
|
func (i *imlSubscribeApplyService) createEntityHandler(t *CreateApply) *subscribe.Apply {
|
|
now := time.Now()
|
|
return &subscribe.Apply{
|
|
Uuid: t.Uuid,
|
|
Name: t.Uuid,
|
|
Service: t.Service,
|
|
Team: t.Team,
|
|
Application: t.Application,
|
|
ApplyTeam: t.ApplyTeam,
|
|
Applier: t.Applier,
|
|
ApplyAt: now,
|
|
Approver: "",
|
|
ApproveAt: now,
|
|
Status: t.Status,
|
|
Opinion: "",
|
|
Reason: t.Reason,
|
|
}
|
|
}
|
|
|
|
func (i *imlSubscribeApplyService) updateHandler(e *subscribe.Apply, t *EditApply) {
|
|
if t.Approver != nil {
|
|
e.Approver = *t.Approver
|
|
e.ApproveAt = time.Now()
|
|
}
|
|
if t.Status != nil {
|
|
e.Status = *t.Status
|
|
}
|
|
if t.Opinion != nil {
|
|
e.Opinion = *t.Opinion
|
|
}
|
|
if t.Applier != nil {
|
|
e.Applier = *t.Applier
|
|
e.ApplyAt = time.Now()
|
|
}
|
|
|
|
}
|