friendmodel类设计
提供了向数据库DB
层好友表的接口,有着添加好友关系和返回好友列表两个方法。
#ifndef FRIENDMODEL_H
#define FRIENDMODEL_H
#include "user.hpp"
#include <vector>
// 维护好友信息的操作接口方法
class FriendModel
{
public:
// 添加好友关系
void insert(int userId, int friendId);
// 返回用户好友列表
std::vector<User> query(int userId);
};
#endif // FRIENDMODEL_H
#include "friendmodel.hpp"
#include "db.h"
// 添加好友关系
void FriendModel::insert(int userId, int friendId)
{
// 组织sql语句
char sql[1024] = {0};
snprintf(sql, sizeof(sql), "insert into friend values(%d, %d)", userId, friendId);
MySQL mysql;
if (mysql.connect())
{
mysql.update(sql);
}
}
// 返回用户好友列表
std::vector<User> FriendModel::query(int userId)
{
// 1.组装sql语句
char sql[1024] = {0};
// 联合查询
sprintf(sql, "select a.id, a.name, a.state from user a inner join friend b on b.friendid = a.id where b.userid=%d", userId);
std::vector<User> vec;
MySQL mysql;
if (mysql.connect())
{
MYSQL_RES *res = mysql.query(sql);
if (res != nullptr)
{
// 把userid用户的所有离线消息放入vec中返回
MYSQL_ROW row;
while ((row = mysql_fetch_row(res)) != nullptr)
{
User user;
user.setId(atoi(row[0]));
user.setName(row[1]);
user.setState(row[2]);
vec.push_back(user);
}
mysql_free_result(res);
return vec;
}
}
return vec;
}
添加好友业务代码
- 获取登录用户
id
和想添加人的id
- 调用
friendModel
类对friend
表进行操纵
// 添加朋友业务
void ChatService::addFriendHandler(const TcpConnectionPtr &conn, json &js, Timestamp time)
{
int userId = js["id"].get<int>();
int friendId = js["friendid"].get<int>();
// 存储好友信息
_friendModel.insert(userId, friendId);
}
好友模块测试
在数据库中可以查看每个userid
所对应的好友friendid
,现在我们想要添加好友。
登录zhang san
用户,添加li si
为好友
可以看到id = 13
的好友中多出了id = 15
的好友