123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- package data
- import (
- "context"
- "w303a/server/app/user/internal/biz"
- "w303a/server/app/user/internal/data/ent"
- "w303a/server/app/user/internal/data/ent/child"
- "w303a/server/app/user/internal/data/ent/childref"
- "github.com/google/uuid"
- "google.golang.org/protobuf/proto"
- )
- var _ biz.ChildRepo = (*childRepo)(nil)
- type childRepo struct {
- data *Data
- }
- func NewChildRepo(data *Data) biz.ChildRepo {
- return &childRepo{
- data: data,
- }
- }
- // Update updates the Child.
- func (repo *childRepo) Update(ctx context.Context, c *biz.Child) error {
- return repo.data.db.Child.Update().
- SetChildName(c.Name).
- SetPhoneNumber(c.PhoneNumber.Phone).
- SetAreaCode(c.PhoneNumber.AreaCode).
- SetNillableAvatar(c.Avatar).
- SetGender(c.Gender).
- SetHeight(c.Height).
- SetWeight(c.Weight).
- SetNillableBirthday(c.Birthday).
- Where(child.ID(c.ID.Get())).
- Exec(ctx)
- }
- // SaveRef implements biz.ChildRepo.
- func (repo *childRepo) SaveRef(ctx context.Context, ref *biz.ChildRef) error {
- panic("unimplemented")
- }
- // FindByChildID finds a Child by the Child ID.
- func (repo *childRepo) FindByChildID(ctx context.Context, cid biz.ID[biz.UUID]) (*biz.Child, error) {
- c, err := repo.data.db.Child.
- Query().
- Where(child.ID(cid.Get())).
- Only(ctx)
- if err != nil {
- return nil, err
- }
- bc := &biz.Child{
- Entity: biz.Entity[biz.UUID]{ID: biz.NewId(c.ID)},
- Name: c.ChildName,
- PhoneNumber: biz.NewPhoneNumber(c.PhoneNumber, c.AreaCode),
- Avatar: proto.String(c.Avatar),
- Gender: c.Gender,
- Height: c.Height,
- Weight: c.Height,
- Birthday: proto.String(c.Birthday),
- IsBlockUnknownCalls: c.IsEnableBlockUnknownCall,
- IsTotalFence: c.IsEnableFence,
- CreatedAt: c.CreatedAt,
- }
- //bind, err := repo.data.db.DeviceBind.Query().
- //WithDevice().
- //Where(devicebind.ChildID(c.ID)).
- //Only(ctx)
- if ent.IsNotFound(err) {
- // TODO 未绑定设备,不用解绑
- } else if err != nil {
- return nil, err
- } else {
- bc.Device = &biz.Device{
- //IMEI: bind.Edges.Device.Imei,
- //Model: bind.Edges.Device.Model,
- //Ticket: bind.Edges.Device.Ticket,
- //HC: bind.Edges.Device.Hc,
- //AesKey: bind.Edges.Device.AesKey,
- //ActivationTime: bind.Edges.Device.ActivationTime,
- //CreatedAt: bind.Edges.Device.CreatedAt,
- //UpdatedAt: bind.Edges.Device.UpdatedAt,
- //DeletedAt: bind.Edges.Device.DeletedAt,
- }
- }
- return bc, nil
- }
- // FindByPhoneNumber finds a Child by the Phone Number.
- func (repo *childRepo) FindByPhoneNumber(ctx context.Context, phoneNumber *biz.PhoneNumber) (*biz.Child, error) {
- c, err := repo.data.db.Child.
- Query().
- Unique(true).
- Where(child.PhoneNumber(phoneNumber.Phone), child.AreaCode(phoneNumber.AreaCode)).
- Only(ctx)
- if err != nil {
- return nil, err
- }
- bc := &biz.Child{
- Entity: biz.Entity[biz.UUID]{ID: biz.NewId(c.ID)},
- Name: c.ChildName,
- PhoneNumber: biz.NewPhoneNumber(c.PhoneNumber, c.AreaCode),
- Avatar: proto.String(c.Avatar),
- Gender: c.Gender,
- Height: c.Height,
- Weight: c.Height,
- Birthday: proto.String(c.Birthday),
- IsBlockUnknownCalls: c.IsEnableBlockUnknownCall,
- IsTotalFence: c.IsEnableFence,
- CreatedAt: c.CreatedAt,
- }
- return bc, nil
- }
- // Save saves the Child into the storage.
- func (repo *childRepo) Save(ctx context.Context, child *biz.Child) error {
- tx, err := repo.data.db.Tx(ctx)
- if err != nil {
- return err
- }
- var creates []*ent.ChildRefCreate
- for _, ref := range child.Refs {
- creates = append(creates, tx.ChildRef.
- Create().
- SetUserID(ref.UserID).
- SetChildID(ref.ChildID),
- )
- }
- _, err = tx.ChildRef.CreateBulk(creates...).Save(ctx)
- if err != nil {
- _ = tx.Rollback()
- return err
- }
- _, err = tx.Child.Create().
- SetID(child.ID.Get()).
- SetChildName(child.Name).
- SetPhoneNumber(child.PhoneNumber.Phone).
- SetAreaCode(child.PhoneNumber.AreaCode).
- SetNillableAvatar(child.Avatar).
- SetGender(child.Gender).
- SetHeight(child.Height).
- SetWeight(child.Weight).
- SetNillableBirthday(child.Birthday).
- Save(ctx)
- if err != nil {
- _ = tx.Rollback()
- return err
- }
- return tx.Commit()
- }
- // FindByUserID finds a Child by the User ID.
- func (repo *childRepo) FindByUserID(ctx context.Context, userID biz.ID[biz.UUID]) ([]*biz.Child, error) {
- refs, err := repo.data.db.ChildRef.
- Query().
- Where(childref.UserID(userID.Get())).
- All(ctx)
- if err != nil {
- if ent.IsNotFound(err) {
- return make([]*biz.Child, 0), nil
- }
- return nil, err
- }
- // 所有绑定的小孩ID
- var childIds []uuid.UUID
- for _, ref := range refs {
- childIds = append(childIds, ref.ChildID)
- }
- children, err := repo.data.db.Child.
- Query().
- Where(child.IDIn(childIds...), child.DeletedAtIsNil()).
- All(ctx)
- if err != nil {
- if ent.IsNotFound(err) {
- return make([]*biz.Child, 0), nil
- }
- return nil, err
- }
- var bizChild []*biz.Child
- for _, c := range children {
- bizChild = append(bizChild, &biz.Child{
- Entity: biz.Entity[biz.UUID]{ID: biz.NewId(c.ID)},
- Name: c.ChildName,
- PhoneNumber: biz.NewPhoneNumber(c.PhoneNumber, c.AreaCode),
- Avatar: proto.String(c.Avatar),
- Gender: c.Gender,
- Height: c.Height,
- Weight: c.Height,
- Birthday: proto.String(c.Birthday),
- IsBlockUnknownCalls: c.IsEnableBlockUnknownCall,
- IsTotalFence: c.IsEnableFence,
- CreatedAt: c.CreatedAt,
- })
- }
- return bizChild, nil
- }
|