79 lines
2.0 KiB
Go
79 lines
2.0 KiB
Go
|
|
package service
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"errors"
|
||
|
|
"fmt"
|
||
|
|
"time"
|
||
|
|
|
||
|
|
"github.com/google/uuid"
|
||
|
|
"github.com/muyuqingfeng/iloom/auth-service/internal/model"
|
||
|
|
"github.com/muyuqingfeng/iloom/auth-service/internal/repository"
|
||
|
|
sgrpc "github.com/muyuqingfeng/iloom/shared/pkg/grpc"
|
||
|
|
)
|
||
|
|
|
||
|
|
type MemberService struct {
|
||
|
|
memberRepo *repository.MemberRepo
|
||
|
|
sysClient *sgrpc.SystemClient
|
||
|
|
}
|
||
|
|
|
||
|
|
func NewMemberService(memberRepo *repository.MemberRepo, sysClient *sgrpc.SystemClient) *MemberService {
|
||
|
|
return &MemberService{
|
||
|
|
memberRepo: memberRepo,
|
||
|
|
sysClient: sysClient,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
type CreateMemberRequest struct {
|
||
|
|
Username string `json:"username"`
|
||
|
|
Password string `json:"password"`
|
||
|
|
RealName string `json:"real_name"`
|
||
|
|
Phone string `json:"phone"`
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *MemberService) List(ctx context.Context, companyID string) ([]model.Profile, error) {
|
||
|
|
return s.memberRepo.ListByCompany(ctx, companyID)
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *MemberService) Create(ctx context.Context, companyID, roleKey string, req CreateMemberRequest) (*model.Profile, error) {
|
||
|
|
roleID := roleIDMap[roleKey]
|
||
|
|
|
||
|
|
userID, err := s.sysClient.CreateUser(ctx, req.Username, req.Password, req.RealName, req.Phone, roleID)
|
||
|
|
if err != nil {
|
||
|
|
return nil, fmt.Errorf("create user: %w", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
now := time.Now()
|
||
|
|
member := &model.CompanyMember{
|
||
|
|
ID: uuid.New().String(),
|
||
|
|
CompanyID: companyID,
|
||
|
|
UserID: userID,
|
||
|
|
Role: "member",
|
||
|
|
CreatedAt: now,
|
||
|
|
}
|
||
|
|
if err := s.memberRepo.Create(ctx, member); err != nil {
|
||
|
|
return nil, fmt.Errorf("create member: %w", err)
|
||
|
|
}
|
||
|
|
|
||
|
|
return &model.Profile{
|
||
|
|
ID: userID,
|
||
|
|
Username: req.Username,
|
||
|
|
RealName: req.RealName,
|
||
|
|
Phone: req.Phone,
|
||
|
|
CompanyID: companyID,
|
||
|
|
CreatedAt: now,
|
||
|
|
}, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *MemberService) Delete(ctx context.Context, memberID, companyID string) error {
|
||
|
|
member, err := s.memberRepo.GetByUserAndCompany(ctx, memberID, companyID)
|
||
|
|
if err != nil {
|
||
|
|
return fmt.Errorf("get member: %w", err)
|
||
|
|
}
|
||
|
|
if member == nil {
|
||
|
|
return errors.New("member not found")
|
||
|
|
}
|
||
|
|
|
||
|
|
return s.memberRepo.Delete(ctx, member.ID, companyID)
|
||
|
|
}
|