123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- package biz
- import (
- "context"
- "go.uber.org/zap"
- "google.golang.org/grpc/codes"
- "google.golang.org/grpc/status"
- pb "sikey/w303a/http/api/user/v2"
- "sikey/w303a/http/internal/data/ent"
- "sikey/w303a/http/pkg/zaplog"
- "time"
- )
- const (
- MinHeight int32 = 150 // MinHeight 最小身高,当添加小孩时未设置身高体重时使用到
- MinWeight int32 = 150 // MinWeight 最小体重,当添加小孩时未设置身高体重时使用到
- )
- var (
- GenderDefault Gender = 0 // GenderDefault 默认值
- GenderMan Gender = 2 // GenderMan 男
- GenderWoman Gender = 3 // GenderWoman 女
- )
- type (
- Child struct {
- ID string // 小孩 ID
- Name string // 小孩名称
- Avatar *string // 头像
- Height int32 // 身高
- Weight int32 // 体重
- Birthday *string // 生日
- Gender Gender // 性别
- PhoneNumber *PhoneNumber // 手机号信息
- Refs []*ChildRef // 关联的小孩信息
- IsBlockUnknownCalls bool // 是否拦截陌生电话
- IsTotalFence bool // 是否开启围栏
- CreatedAt time.Time // 创建时间
- }
- ChildRepo interface {
- // FindByPhoneNumber finds a Child by the phone number.
- FindByPhoneNumber(ctx context.Context, phoneNumber *PhoneNumber) (*Child, error)
- // FindByChildID finds a Child by the child ID.
- FindByChildID(ctx context.Context, cid string) (*Child, error)
- // FindByUserID finds a Child by the user ID.
- FindByUserID(ctx context.Context, uid string) ([]*Child, error)
- // Create creates a new child.
- Create(ctx context.Context, child *Child) error
- // Update updates the child.
- Update(ctx context.Context, child *Child) error
- // Delete deletes the child.
- Delete(ctx context.Context, cid string) error
- }
- ChildUsecase struct {
- log *zaplog.Logger
- childRepo ChildRepo
- }
- )
- func NewChildUsecase(log *zaplog.Logger, childRepo ChildRepo) *ChildUsecase {
- return &ChildUsecase{log: log, childRepo: childRepo}
- }
- // GetChild gets the child list.
- func (uc *ChildUsecase) GetChild(ctx context.Context, req *pb.GetChildRequest) (*pb.GetChildResponse, error) {
- childs, err := uc.childRepo.FindByUserID(ctx, getIdByContext(ctx))
- if err != nil {
- if ent.IsNotFound(err) {
- return &pb.GetChildResponse{
- ChildList: make([]*pb.GetChildResponse_Child, 0),
- }, nil
- }
- return nil, err
- }
- var childList []*pb.GetChildResponse_Child
- for _, child := range childs {
- respChild := &pb.GetChildResponse_Child{
- Cid: child.ID,
- Name: child.Name,
- Avatar: child.Avatar,
- }
- // TODO 查询设备信息,和设备最后一次定位的傻乎乎
- childList = append(childList, respChild)
- }
- return &pb.GetChildResponse{ChildList: childList}, nil
- }
- // CreateChild creates a new child.
- func (uc *ChildUsecase) CreateChild(ctx context.Context, req *pb.CreateChildRequest) (resp *pb.CreateChildResponse, err error) {
- var (
- userId = getIdByContext(ctx)
- childId = newUUID().String()
- phoneNumber = NewPhoneNumber(req.PhoneNumber, req.AreaCode)
- )
- _, err = uc.childRepo.FindByPhoneNumber(ctx, phoneNumber)
- if err != nil {
- if !ent.IsNotFound(err) { // 手机号已经使用
- return &pb.CreateChildResponse{}, ErrUserPhoneNumberHasBeenUsed
- }
- }
- if err = uc.childRepo.Create(ctx, &Child{
- ID: childId,
- Name: req.Name,
- Avatar: req.Avatar,
- Height: req.Height,
- Weight: req.Weight,
- Birthday: req.Birthday,
- Gender: Gender(req.Gender),
- PhoneNumber: phoneNumber,
- Refs: []*ChildRef{newChildRef(userId, childId)},
- }); err != nil {
- return &pb.CreateChildResponse{}, err
- }
- uc.log.Info("创建小孩",
- zap.String("userId", userId),
- zap.String("childId", childId),
- zap.String("childName", req.Name),
- zap.String("phoneNumber", phoneNumber.String()))
- return &pb.CreateChildResponse{Cid: childId}, nil
- }
- // UpdateChild updates the child.
- func (uc *ChildUsecase) UpdateChild(context.Context, *pb.UpdateChildRequest) (*pb.UpdateChildResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method UpdateChild not implemented")
- }
- // DeleteChild deletes the child.
- func (uc *ChildUsecase) DeleteChild(context.Context, *pb.DeleteChildRequest) (*pb.DeleteChildResponse, error) {
- return nil, status.Errorf(codes.Unimplemented, "method DeleteChild not implemented")
- }
|