Skip to content

Commit

Permalink
commit
Browse files Browse the repository at this point in the history
  • Loading branch information
hulala1210 committed Jan 12, 2021
1 parent 2bade29 commit 98ab7af
Show file tree
Hide file tree
Showing 10 changed files with 153 additions and 109 deletions.
33 changes: 0 additions & 33 deletions internal/logic/cache/seq.go

This file was deleted.

3 changes: 3 additions & 0 deletions internal/logic/dao/base_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,12 @@ package dao
import (
"fmt"
"gim/pkg/db"
"gim/pkg/logger"
)

func init() {
fmt.Println("init db")
logger.Target = logger.Console
logger.Init()
db.InitByTest()
}
4 changes: 0 additions & 4 deletions internal/logic/dao/device_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,10 +34,6 @@ func TestDeviceDao_ListOnlineByUserId(t *testing.T) {
fmt.Printf("%+v \n", devices)
}

func TestDeviceDao_UpdateUserIdAndStatus(t *testing.T) {
fmt.Println(DeviceDao.UpdateUserIdAndStatus(1, 1, 1, "172.0.0.1:80000", 1))
}

func TestDeviceDao_UpdateStatus(t *testing.T) {
fmt.Println(DeviceDao.UpdateStatus(1, 0))
}
Expand Down
2 changes: 1 addition & 1 deletion internal/logic/dao/group_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,5 @@ func TestGroupDao_Add(t *testing.T) {
}

func TestGroupDao_Update(t *testing.T) {
fmt.Println(GroupDao.Update(1, "2", "2", "2"))
fmt.Println(GroupDao.Update(1, "2", "2", "2", ""))
}
17 changes: 15 additions & 2 deletions internal/logic/dao/group_user_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package dao

import (
"fmt"
"gim/internal/logic/model"
"testing"
)

Expand All @@ -20,13 +21,25 @@ func TestGroupUserDao_Get(t *testing.T) {
}

func TestGroupUserDao_Add(t *testing.T) {
fmt.Println(GroupUserDao.Add(1, 1, "1", "1"))
fmt.Println(GroupUserDao.Add(model.GroupUser{
GroupId: 1,
UserId: 1,
Remarks: "1",
Extra: "1",
Status: 0,
}))
}

func TestGroupUserDao_Delete(t *testing.T) {
fmt.Println(GroupUserDao.Delete(1, 1))
}

func TestGroupUserDao_Update(t *testing.T) {
fmt.Println(GroupUserDao.Update(1, 1, "2", "2"))
fmt.Println(GroupUserDao.Update(model.GroupUser{
GroupId: 1,
UserId: 1,
Remarks: "1",
Extra: "1",
Status: 0,
}))
}
30 changes: 15 additions & 15 deletions internal/logic/dao/message_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,27 +9,27 @@ import (

func TestMessageDao_Add(t *testing.T) {
message := model.Message{
ObjectType: 1,
ObjectId: 1,
RequestId: 1,
SenderType: 1,
SenderId: 1,
SenderDeviceId: 1,
ReceiverType: 1,
ReceiverId: 1,
ToUserIds: "1",
Type: 1,
Content: []byte("123456"),
Seq: 2,
SendTime: time.Now(),
Status: 0,
ObjectType: 1,
ObjectId: 1,
RequestId: 1,
SenderType: 1,
SenderId: 1,
ReceiverType: 1,
ReceiverId: 1,
ToUserIds: "1",
Type: 1,
Content: []byte("123456"),
Seq: 2,
SendTime: time.Now(),
Status: 0,
}
fmt.Println(MessageDao.Add("message", message))
}

func TestMessageDao_ListByUserIdAndUserSeq(t *testing.T) {
messages, err := MessageDao.ListBySeq("message", 1, 1, 0, 100)
messages, hasMore, err := MessageDao.ListBySeq("message", 1, 1, 0, 100)
fmt.Println(err)
fmt.Println(hasMore)
for i := range messages {
fmt.Printf("%+v\n", messages[i])
}
Expand Down
43 changes: 43 additions & 0 deletions internal/logic/dao/seq.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package dao

import (
"database/sql"
"gim/pkg/db"
"gim/pkg/gerrors"
)

const (
SeqObjectTypeUser = 1 // 用户
SeqObjectTypeGroup = 2 // 群组
)

type seqDao struct{}

var SeqDao = new(seqDao)

// Incr 自增seq,并且获取自增后的值
func (*seqDao) Incr(objectType int, objectId int64) (int64, error) {
tx := db.DB.Begin()
defer tx.Rollback()

var seq int64
err := db.DB.Raw("select seq from seq where object_type = ? and object_id = ? for update", objectType, objectId).
Row().Scan(&seq)
if err != nil && err != sql.ErrNoRows {
return 0, gerrors.WrapError(err)
}
if err == sql.ErrNoRows {
err = db.DB.Exec("insert into seq (object_type,object_id,seq) values (?,?,?)", objectType, objectId, seq+1).Error
if err != nil {
return 0, gerrors.WrapError(err)
}
} else {
err = db.DB.Exec("update seq set seq = seq + 1 where object_type = ? and object_id = ?", objectType, objectId).Error
if err != nil {
return 0, gerrors.WrapError(err)
}
}

tx.Commit()
return seq + 1, nil
}
10 changes: 10 additions & 0 deletions internal/logic/dao/seq_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package dao

import (
"fmt"
"testing"
)

func Test_seqDao_Incr(t *testing.T) {
fmt.Println(SeqDao.Incr(1, 5))
}
6 changes: 3 additions & 3 deletions internal/logic/service/seq.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package service

import (
"context"
"gim/internal/logic/cache"
"gim/internal/logic/dao"
)

type seqService struct{}
Expand All @@ -11,10 +11,10 @@ var SeqService = new(seqService)

// GetUserNext 获取下一个序列号
func (*seqService) GetUserNext(ctx context.Context, userId int64) (int64, error) {
return cache.SeqCache.Incr(cache.SeqCache.UserKey(userId))
return dao.SeqDao.Incr(dao.SeqObjectTypeUser, userId)
}

// GetGroupNext 获取下一个序列号
func (*seqService) GetGroupNext(ctx context.Context, groupId int64) (int64, error) {
return cache.SeqCache.Incr(cache.SeqCache.UserKey(groupId))
return dao.SeqDao.Incr(dao.SeqObjectTypeGroup, groupId)
}
114 changes: 63 additions & 51 deletions sql/create_table.sql
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,19 @@ CREATE TABLE `device`
(
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`user_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '账户id',
`type` tinyint(3) NOT NULL COMMENT '设备类型,1:Android;2:IOS;3:Windows; 4:MacOS;5:Web',
`brand` varchar(20) NOT NULL COMMENT '手机厂商',
`model` varchar(20) NOT NULL COMMENT '机型',
`system_version` varchar(10) NOT NULL COMMENT '系统版本',
`sdk_version` varchar(10) NOT NULL COMMENT 'app版本',
`status` tinyint(3) NOT NULL DEFAULT '0' COMMENT '在线状态,0:离线;1:在线',
`conn_addr` varchar(25) NOT NULL COMMENT '连接层服务器地址',
`conn_fd` bigint(20) NOT NULL COMMENT 'TCP连接对应的文件描述符',
`client_addr` varchar(25) NOT NULL COMMENT '客户端地址',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`type` tinyint(3) NOT NULL COMMENT '设备类型,1:Android;2:IOS;3:Windows; 4:MacOS;5:Web',
`brand` varchar(20) NOT NULL COMMENT '手机厂商',
`model` varchar(20) NOT NULL COMMENT '机型',
`system_version` varchar(10) NOT NULL COMMENT '系统版本',
`sdk_version` varchar(10) NOT NULL COMMENT 'app版本',
`status` tinyint(3) NOT NULL DEFAULT '0' COMMENT '在线状态,0:离线;1:在线',
`conn_addr` varchar(25) NOT NULL COMMENT '连接层服务器地址',
`conn_fd` bigint(20) NOT NULL COMMENT 'TCP连接对应的文件描述符',
`client_addr` varchar(25) NOT NULL COMMENT '客户端地址',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`) USING BTREE
KEY `idx_user_id` (`user_id`) USING BTREE
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_bin COMMENT ='设备';
Expand All @@ -32,11 +32,11 @@ CREATE TABLE `friend`
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`user_id` bigint(20) unsigned NOT NULL COMMENT '用户id',
`friend_id` bigint(20) unsigned NOT NULL COMMENT '好友id',
`remarks` varchar(20) NOT NULL COMMENT '备注',
`extra` varchar(1024) NOT NULL COMMENT '附加属性',
`status` tinyint(4) NOT NULL COMMENT '状态,1:申请,2:同意',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`remarks` varchar(20) NOT NULL COMMENT '备注',
`extra` varchar(1024) NOT NULL COMMENT '附加属性',
`status` tinyint(4) NOT NULL COMMENT '状态,1:申请,2:同意',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_id_friend_id` (`user_id`, `friend_id`)
) ENGINE = InnoDB
Expand All @@ -50,14 +50,14 @@ DROP TABLE IF EXISTS `group`;
CREATE TABLE `group`
(
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`name` varchar(50) NOT NULL COMMENT '群组名称',
`avatar_url` varchar(255) NOT NULL COMMENT '群组头像',
`introduction` varchar(255) NOT NULL COMMENT '群组简介',
`user_num` int(11) NOT NULL DEFAULT '0' COMMENT '群组人数',
`type` tinyint(4) NOT NULL COMMENT '群组类型,1:小群;2:大群',
`extra` varchar(1024) NOT NULL COMMENT '附加属性',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`name` varchar(50) NOT NULL COMMENT '群组名称',
`avatar_url` varchar(255) NOT NULL COMMENT '群组头像',
`introduction` varchar(255) NOT NULL COMMENT '群组简介',
`user_num` int(11) NOT NULL DEFAULT '0' COMMENT '群组人数',
`type` tinyint(4) NOT NULL COMMENT '群组类型,1:小群;2:大群',
`extra` varchar(1024) NOT NULL COMMENT '附加属性',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
Expand All @@ -72,15 +72,15 @@ CREATE TABLE `group_user`
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`group_id` bigint(20) unsigned NOT NULL COMMENT '组id',
`user_id` bigint(20) unsigned NOT NULL COMMENT '用户id',
`member_type` tinyint(4) NOT NULL COMMENT '成员类型,1:管理员;2:普通成员',
`remarks` varchar(20) NOT NULL COMMENT '备注',
`extra` varchar(1024) NOT NULL COMMENT '附加属性',
`status` tinyint(255) NOT NULL COMMENT '状态',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`member_type` tinyint(4) NOT NULL COMMENT '成员类型,1:管理员;2:普通成员',
`remarks` varchar(20) NOT NULL COMMENT '备注',
`extra` varchar(1024) NOT NULL COMMENT '附加属性',
`status` tinyint(255) NOT NULL COMMENT '状态',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_group_id_user_id` (`group_id`, `user_id`) USING BTREE,
KEY `idx_user_id` (`user_id`) USING BTREE
KEY `idx_user_id` (`user_id`) USING BTREE
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_bin COMMENT ='群组成员';
Expand All @@ -91,24 +91,24 @@ DROP TABLE IF EXISTS `message`;
CREATE TABLE `message`
(
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`object_type` tinyint(4) NOT NULL COMMENT '所属类型,1:用户;2:群组',
`object_type` tinyint(4) NOT NULL COMMENT '所属类型,1:用户;2:群组',
`object_id` bigint(20) unsigned NOT NULL COMMENT '所属类型的id',
`request_id` bigint(20) NOT NULL COMMENT '请求id',
`sender_type` tinyint(3) NOT NULL COMMENT '发送者类型',
`request_id` bigint(20) NOT NULL COMMENT '请求id',
`sender_type` tinyint(3) NOT NULL COMMENT '发送者类型',
`sender_id` bigint(20) unsigned NOT NULL COMMENT '发送者id',
`receiver_type` tinyint(3) NOT NULL COMMENT '接收者类型,1:个人;2:群组',
`receiver_type` tinyint(3) NOT NULL COMMENT '接收者类型,1:个人;2:群组',
`receiver_id` bigint(20) unsigned NOT NULL COMMENT '接收者id,如果是单聊信息,则为user_id,如果是群组消息,则为group_id',
`to_user_ids` varchar(255) NOT NULL COMMENT '需要@的用户id列表,多个用户用,隔开',
`type` tinyint(4) NOT NULL COMMENT '消息类型',
`content` blob NOT NULL COMMENT '消息内容',
`to_user_ids` varchar(255) NOT NULL COMMENT '需要@的用户id列表,多个用户用,隔开',
`type` tinyint(4) NOT NULL COMMENT '消息类型',
`content` blob NOT NULL COMMENT '消息内容',
`seq` bigint(20) unsigned NOT NULL COMMENT '消息序列号',
`send_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '消息发送时间',
`status` tinyint(255) NOT NULL DEFAULT '0' COMMENT '消息状态,0:未处理1:消息撤回',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`send_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP (3) COMMENT '消息发送时间',
`status` tinyint(255) NOT NULL DEFAULT '0' COMMENT '消息状态,0:未处理1:消息撤回',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_object_seq` (`object_type`, `object_id`, `seq`) USING BTREE,
KEY `idx_request_id` (`request_id`) USING BTREE
KEY `idx_request_id` (`request_id`) USING BTREE
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_bin COMMENT ='消息';
Expand All @@ -120,16 +120,28 @@ DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`
(
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`phone_number` varchar(20) NOT NULL COMMENT '手机号',
`nickname` varchar(20) NOT NULL COMMENT '昵称',
`sex` tinyint(4) NOT NULL COMMENT '性别,0:未知;1:男;2:女',
`avatar_url` varchar(256) NOT NULL COMMENT '用户头像链接',
`extra` varchar(1024) NOT NULL COMMENT '附加属性',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`phone_number` varchar(20) NOT NULL COMMENT '手机号',
`nickname` varchar(20) NOT NULL COMMENT '昵称',
`sex` tinyint(4) NOT NULL COMMENT '性别,0:未知;1:男;2:女',
`avatar_url` varchar(256) NOT NULL COMMENT '用户头像链接',
`extra` varchar(1024) NOT NULL COMMENT '附加属性',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_phone_number` (`phone_number`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_bin COMMENT ='用户';

CREATE TABLE `seq`
(
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`object_type` tinyint NOT NULL COMMENT '对象类型,1:用户;2:群组',
`object_id` bigint unsigned NOT NULL COMMENT '对象id',
`seq` bigint unsigned NOT NULL COMMENT '序列号',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_object` (`object_type`,`object_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='序列号';

0 comments on commit 98ab7af

Please sign in to comment.