group.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package biz
  2. import (
  3. "context"
  4. "github.com/bwmarrin/snowflake"
  5. "os"
  6. "w303a/server/app/user/internal/conf"
  7. "w303a/server/pkg/zaplog"
  8. )
  9. // Group 群聊
  10. type Group struct {
  11. Entity[int64]
  12. Name string
  13. Members []*Member
  14. }
  15. type GroupRepo interface {
  16. // Save 创建群聊数据
  17. Save(ctx context.Context, group *Group) error
  18. // FindByID 根据 id 查找群聊数据
  19. FindByID(ctx context.Context, id ID[int64]) (*Group, error)
  20. }
  21. type GroupUsecase struct {
  22. c *conf.Server
  23. log *zaplog.Logger
  24. groupRepo GroupRepo
  25. }
  26. // Create 创建群聊
  27. func (uc *GroupUsecase) Create(ctx context.Context, memberList []*Member) error {
  28. group := &Group{Members: memberList}
  29. group.ID = generateGroupID()
  30. return uc.groupRepo.Save(ctx, group)
  31. }
  32. // Leave 退出群聊
  33. func (uc *GroupUsecase) Leave(ctx context.Context, groupId ID[int64], memb Member) error {
  34. return nil
  35. }
  36. // Join 加入群聊
  37. func (uc *GroupUsecase) Join(ctx context.Context, groupId ID[int64], memb Member) error {
  38. return nil
  39. }
  40. // generateGroupID generates a new group id.
  41. func generateGroupID() ID[int64] {
  42. node, err := snowflake.NewNode(int64(os.Getgid()))
  43. if err != nil {
  44. return ID[int64]{id: 0}
  45. }
  46. return ID[int64]{id: node.Generate().Int64()}
  47. }
  48. // NewGroupUsecase creates a new group usecase.
  49. func NewGroupUsecase(c *conf.Server, log *zaplog.Logger, groupRepo GroupRepo) *GroupUsecase {
  50. return &GroupUsecase{
  51. c: c,
  52. log: log,
  53. groupRepo: groupRepo,
  54. }
  55. }