package api import ( "context" "gim/internal/business/comm/utils" "gim/internal/logic/app" "gim/pkg/grpclib" "gim/pkg/pb" "google.golang.org/protobuf/proto" ) type LogicExtServer struct{} func (s *LogicExtServer) SetGroupAddFriend(ctx context.Context, req *pb.SetGroupAddFriendReq) (*pb.Empty, error) { userId, _, err := grpclib.GetCtxData(ctx) if err != nil { return nil, err } err = app.GroupApp.SetGroupAddFriend(ctx, userId, req) if err != nil { return nil, err } return &pb.Empty{}, nil } func (s *LogicExtServer) SetGroupRemoveBannedMembers(ctx context.Context, in *pb.SetGroupMemberRemoveBannedReq) (*pb.Empty, error) { userId, _, err := grpclib.GetCtxData(ctx) if err != nil { return nil, err } err = app.GroupApp.SetGroupMemberRemoveBanned(ctx, userId, in.GroupId, in.RemoveUserIds) if err != nil { return nil, err } return &pb.Empty{}, nil } // SetGroupBannedMembers 设置禁言 func (s *LogicExtServer) SetGroupBannedMembers(ctx context.Context, in *pb.SetGroupMemberBannedReq) (*pb.SetGroupMemberBannedResp, error) { userId, _, err := grpclib.GetCtxData(ctx) if err != nil { return nil, err } var isAllMemberBanned = false if in.IsAllMemberBanned == pb.AllMemberBannedType_YES_All_Member_Banned { isAllMemberBanned = true } members, err := app.GroupApp.SetGroupMemberBanned(ctx, userId, in.GroupId, in.UserIds, isAllMemberBanned) return &pb.SetGroupMemberBannedResp{Members: members, IsAllMemberBanned: in.IsAllMemberBanned}, err } // GetGroupBannedMembers 获取群组禁言列表 func (s *LogicExtServer) GetGroupBannedMembers(ctx context.Context, in *pb.GetGroupBannedMembersReq) (*pb.GetGroupBannedMembersResp, error) { members, err := app.GroupApp.GetBannedMembers(ctx, in.GroupId) return &pb.GetGroupBannedMembersResp{Members: members}, err } func (s *LogicExtServer) SendRedPacket(ctx context.Context, in *pb.SendRedPacketReq) (*pb.SendRedPacketResp, error) { userId, deviceId, err := grpclib.GetCtxData(ctx) if err != nil { return nil, err } if in.MessageContentBack != "" { buf, err := proto.Marshal(&pb.Text{ Text: in.MessageContentBack, }) if err != nil { return nil, err } in.MessageContent = buf } sender := pb.Sender{ SenderType: pb.SenderType_ST_USER, SenderId: userId, DeviceId: deviceId, } seq, err := app.MessageApp.SendRedPackage(ctx, &sender, in) if err != nil { return nil, err } return &pb.SendRedPacketResp{Seq: seq}, nil } func (s *LogicExtServer) RecallMessage(ctx context.Context, in *pb.RecallMessageReq) (*pb.RecallMessageResp, error) { userId, deviceId, err := grpclib.GetCtxData(ctx) if err != nil { return nil, err } if in.MessageContentBack != "" { buf, err := proto.Marshal(&pb.RECALL{RecallSeq: utils.StrToInt64(in.MessageContentBack)}) if err != nil { return nil, err } in.MessageContent = buf } sender := pb.Sender{ SenderType: pb.SenderType_ST_USER, SenderId: userId, DeviceId: deviceId, } utils.FilePutContents("RecallMessage", utils.SerializeStr(map[string]interface{}{ "args": in, })) seq, err := app.MessageApp.RecallMessage(ctx, &sender, in) if err != nil { return nil, err } return &pb.RecallMessageResp{Seq: seq}, nil } // RegisterDevice 注册设备 func (*LogicExtServer) RegisterDevice(ctx context.Context, in *pb.RegisterDeviceReq) (*pb.RegisterDeviceResp, error) { deviceId, err := app.DeviceApp.Register(ctx, in) return &pb.RegisterDeviceResp{DeviceId: deviceId}, err } // SendMessage 发送消息 func (*LogicExtServer) SendMessage(ctx context.Context, in *pb.SendMessageReq) (*pb.SendMessageResp, error) { userId, deviceId, err := grpclib.GetCtxData(ctx) if err != nil { return nil, err } if in.MessageContentBack != "" { buf, err := proto.Marshal(&pb.Text{ Text: in.MessageContentBack, }) if err != nil { return nil, err } in.MessageContent = buf } sender := pb.Sender{ SenderType: pb.SenderType_ST_USER, SenderId: userId, DeviceId: deviceId, } seq, err := app.MessageApp.SendMessage(ctx, &sender, in) if err != nil { return nil, err } return &pb.SendMessageResp{Seq: seq}, nil } // PushRoom 推送房间 func (s *LogicExtServer) PushRoom(ctx context.Context, req *pb.PushRoomReq) (*pb.Empty, error) { userId, deviceId, err := grpclib.GetCtxData(ctx) if err != nil { return nil, err } return &pb.Empty{}, app.RoomApp.Push(ctx, &pb.Sender{ SenderType: pb.SenderType_ST_USER, SenderId: userId, DeviceId: deviceId, }, req) } func (s *LogicExtServer) AddFriend(ctx context.Context, in *pb.AddFriendReq) (*pb.Empty, error) { userId, _, err := grpclib.GetCtxData(ctx) if err != nil { return nil, err } err = app.FriendApp.AddFriend(ctx, userId, in.FriendId, in.Remarks, in.Description) if err != nil { return nil, err } return &pb.Empty{}, nil } func (s *LogicExtServer) AgreeAddFriend(ctx context.Context, in *pb.AgreeAddFriendReq) (*pb.Empty, error) { userId, _, err := grpclib.GetCtxData(ctx) if err != nil { return nil, err } err = app.FriendApp.AgreeAddFriend(ctx, userId, in.UserId, in.Remarks) if err != nil { return nil, err } return &pb.Empty{}, nil } func (s *LogicExtServer) DeleteFriend(ctx context.Context, in *pb.DeleteFriendReq) (*pb.Empty, error) { userId, _, err := grpclib.GetCtxData(ctx) if err != nil { return nil, err } err = app.FriendApp.DeleteFriend(ctx, userId, in.UserId) if err != nil { return nil, err } return &pb.Empty{}, nil } func (s *LogicExtServer) SetFriend(ctx context.Context, req *pb.SetFriendReq) (*pb.SetFriendResp, error) { userId, _, err := grpclib.GetCtxData(ctx) if err != nil { return nil, err } app.FriendApp.SetFriend(ctx, userId, req) if err != nil { return nil, err } return &pb.SetFriendResp{}, nil } func (s *LogicExtServer) GetFriends(ctx context.Context, in *pb.Empty) (*pb.GetFriendsResp, error) { userId, _, err := grpclib.GetCtxData(ctx) if err != nil { return nil, err } friends, err := app.FriendApp.List(ctx, userId) return &pb.GetFriendsResp{Friends: friends}, err } // CreateGroup 创建群组 func (*LogicExtServer) CreateGroup(ctx context.Context, in *pb.CreateGroupReq) (*pb.CreateGroupResp, error) { userId, _, err := grpclib.GetCtxData(ctx) if err != nil { return nil, err } groupId, err := app.GroupApp.CreateGroup(ctx, userId, in) return &pb.CreateGroupResp{GroupId: groupId}, err } // UpdateGroup 更新群组 func (*LogicExtServer) UpdateGroup(ctx context.Context, in *pb.UpdateGroupReq) (*pb.Empty, error) { userId, _, err := grpclib.GetCtxData(ctx) if err != nil { return nil, err } return &pb.Empty{}, app.GroupApp.Update(ctx, userId, in) } // GetGroup 获取群组信息 func (*LogicExtServer) GetGroup(ctx context.Context, in *pb.GetGroupReq) (*pb.GetGroupResp, error) { group, memberType, userStatusType, err := app.GroupApp.GetGroup(ctx, in.GroupId) return &pb.GetGroupResp{Group: group, MemberType: memberType, GroupUserStatusType: userStatusType}, err } // GetGroups 获取用户加入的所有群组 func (*LogicExtServer) GetGroups(ctx context.Context, in *pb.Empty) (*pb.GetGroupsResp, error) { userId, _, err := grpclib.GetCtxData(ctx) if err != nil { return nil, err } groups, err := app.GroupApp.GetUserGroups(ctx, userId) return &pb.GetGroupsResp{Groups: groups}, err } func (s *LogicExtServer) AddGroupMembers(ctx context.Context, in *pb.AddGroupMembersReq) (*pb.AddGroupMembersResp, error) { userId, _, err := grpclib.GetCtxData(ctx) if err != nil { return nil, err } masterId, err := grpclib.GetCtxMasterId(ctx) if err != nil { return nil, err } userIds, err := app.GroupApp.AddMembers(ctx, userId, in.GroupId, in.UserIds, masterId) return &pb.AddGroupMembersResp{UserIds: userIds}, err } // UpdateGroupMember 更新群组成员信息 func (*LogicExtServer) UpdateGroupMember(ctx context.Context, in *pb.UpdateGroupMemberReq) (*pb.Empty, error) { userId, _, err := grpclib.GetCtxData(ctx) if err != nil { return nil, err } return &pb.Empty{}, app.GroupApp.UpdateMember(ctx, in, userId) } // DeleteGroupMember 删除群组成员 func (*LogicExtServer) DeleteGroupMember(ctx context.Context, in *pb.DeleteGroupMemberReq) (*pb.Empty, error) { userId, _, err := grpclib.GetCtxData(ctx) if err != nil { return nil, err } err = app.GroupApp.DeleteMember(ctx, in.GroupId, in.UserId, userId) return &pb.Empty{}, err } // GetGroupMembers 获取群组成员信息 func (s *LogicExtServer) GetGroupMembers(ctx context.Context, in *pb.GetGroupMembersReq) (*pb.GetGroupMembersResp, error) { members, err := app.GroupApp.GetMembers(ctx, in.GroupId, in.Limit) utils.FilePutContents("GetGroupMembers", utils.SerializeStr(map[string]interface{}{ "req": map[string]interface{}{ "group_id": in.GroupId, "limit": in.Limit, }, "resp": members, })) return &pb.GetGroupMembersResp{Members: members}, err }