iloom/auth-service/internal/service/member_service.go
Chever John 9c39c8cbd7
init: iloom WMS monorepo with K8s deployment manifests
Go workspace (go.work) with 5 microservices + shared library:
- gateway (8080), auth-service (8081), purchaser-service (8082)
- textile-service (8083), washing-service (8084)
- shared: proto definitions, common packages

Infrastructure: docker-compose for local dev, K8s manifests for
K3s cluster deployment (mysql/redis/etcd + traefik ingress).

Frontend (iloom-flatten) added as git submodule.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-14 11:33:31 +08:00

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