migrate from github
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
package membership_service
|
||||
|
||||
import (
|
||||
"github.com/XingfenD/yoresee_doc/internal/dto"
|
||||
"github.com/XingfenD/yoresee_doc/internal/model"
|
||||
"github.com/XingfenD/yoresee_doc/internal/repository"
|
||||
"github.com/XingfenD/yoresee_doc/internal/repository/membership_repo"
|
||||
"github.com/XingfenD/yoresee_doc/internal/repository/user_repo"
|
||||
"github.com/XingfenD/yoresee_doc/internal/status"
|
||||
"github.com/sirupsen/logrus"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type MembershipService struct {
|
||||
db *gorm.DB
|
||||
repo *membership_repo.MembershipRepository
|
||||
useRepo *user_repo.UserRepository
|
||||
}
|
||||
|
||||
func NewMembershipService(repos *repository.Repositories) *MembershipService {
|
||||
return &MembershipService{
|
||||
db: repos.DB,
|
||||
repo: repos.Membership,
|
||||
useRepo: repos.User,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *MembershipService) GetMembershipIDByExternalID(req *dto.MembershipBaseRequest) (int64, error) {
|
||||
var membershipID int64
|
||||
if req.Type == dto.MembershipType_OrgNode {
|
||||
orgNodeID, err := s.repo.GetOrgNodeIDByExternalID(req.MembershipExternalID).Exec()
|
||||
if err != nil {
|
||||
return 0, status.StatusMembershipMetaNotFound
|
||||
}
|
||||
membershipID = orgNodeID
|
||||
} else if req.Type == dto.MembershipType_UserGroup {
|
||||
userGroupID, err := s.repo.GetUserGroupIDByExternalID(req.MembershipExternalID).Exec()
|
||||
if err != nil {
|
||||
return 0, status.StatusMembershipMetaNotFound
|
||||
}
|
||||
membershipID = userGroupID
|
||||
} else {
|
||||
return 0, status.StatusInvalidMembershipType
|
||||
}
|
||||
return membershipID, nil
|
||||
}
|
||||
|
||||
func (s *MembershipService) CreateMembershipRelation(membership *dto.CreateMembershipRelationRequest) error {
|
||||
userID, err := s.useRepo.GetIDByExternalID(membership.UserExternalID).Exec()
|
||||
if err != nil {
|
||||
logrus.Errorf("[Service layer: MembershipService] GetIDByExternalID failed, user_external_id=%s, err=%+v", membership.UserExternalID, err)
|
||||
return status.StatusUserNotFound
|
||||
}
|
||||
|
||||
membershipID, err := s.GetMembershipIDByExternalID(&membership.MembershipBaseRequest)
|
||||
if err != nil {
|
||||
logrus.Errorf("[Service layer: MembershipService] GetMembershipIDByExternalID failed, membership_external_id=%s, type=%d, err=%+v", membership.MembershipExternalID, membership.Type, err)
|
||||
return status.GenErrWithCustomMsg(err, "membership target not found")
|
||||
}
|
||||
model := &model.MembershipRelation{
|
||||
UserID: userID,
|
||||
MembershipID: membershipID,
|
||||
Type: model.MembershipType(membership.Type),
|
||||
}
|
||||
|
||||
if err := s.repo.CreateMembership(model).Exec(); err != nil {
|
||||
logrus.Errorf("[Service layer: MembershipService] CreateMembership failed, user_id=%d, membership_id=%d, type=%d, err=%+v", userID, membershipID, membership.Type, err)
|
||||
return status.GenErrWithCustomMsg(status.StatusWriteDBError, "create membership relation failed")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *MembershipService) GetUserGroupMeta(externalID string) (*model.UserGroupMeta, error) {
|
||||
meta, err := s.repo.GetUserGroupByExternalID(externalID).Exec()
|
||||
if err != nil {
|
||||
logrus.Errorf("[Service layer: MembershipService] GetUserGroupMeta failed, external_id=%s, err=%+v", externalID, err)
|
||||
return nil, status.GenErrWithCustomMsg(status.StatusMembershipMetaNotFound, "user group not found")
|
||||
}
|
||||
return meta, nil
|
||||
}
|
||||
|
||||
func (s *MembershipService) GetOrgNodeMeta(externalID string) (*model.OrgNodeMeta, error) {
|
||||
meta, err := s.repo.GetOrgNodeByExternalID(externalID).Exec()
|
||||
if err != nil {
|
||||
logrus.Errorf("[Service layer: MembershipService] GetOrgNodeMeta failed, external_id=%s, err=%+v", externalID, err)
|
||||
return nil, status.GenErrWithCustomMsg(status.StatusMembershipMetaNotFound, "org node not found")
|
||||
}
|
||||
return meta, nil
|
||||
}
|
||||
|
||||
// func (s *MembershipService) GetMembershipRelation(req *dto.MembershipBaseRequest) (*dto.MembershipRelationResponse, error) {
|
||||
// var membershipMetaResponse *dto.MembershipMetaResponse
|
||||
// var membershipID int64
|
||||
// switch req.Type {
|
||||
// case model.MembershipType_UserGroup:
|
||||
// userGroupMeta, err := s.GetUserGroupMeta(req.MembershipExternalID)
|
||||
// if err != nil {
|
||||
// return nil, err
|
||||
// }
|
||||
// membershipMetaResponse = dto.NewMembershipMetaResponseFromUserGroupMetaModel(userGroupMeta)
|
||||
// membershipID = userGroupMeta.ID
|
||||
// case model.MembershipType_OrgNode:
|
||||
// orgNodeMeta, err := s.GetOrgNodeMeta(req.MembershipExternalID)
|
||||
// if err != nil {
|
||||
// return nil, err
|
||||
// }
|
||||
// membershipMetaResponse = dto.NewMembershipMetaResponseFromOrgNodeMetaModel(orgNodeMeta)
|
||||
// membershipID = orgNodeMeta.ID
|
||||
// default:
|
||||
// return nil, status.StatusInvalidMembershipType
|
||||
// }
|
||||
// model := &model.MembershipRelation{
|
||||
// Type: req.Type,
|
||||
// MembershipID: membershipID,
|
||||
// }
|
||||
// memberships, err := s.repo.ListMembership(model).Exec()
|
||||
// if err != nil {
|
||||
// return nil, err
|
||||
// }
|
||||
// }
|
||||
|
||||
var MembershipSvc *MembershipService
|
||||
Reference in New Issue
Block a user