feat:增加查询用户朋友接口

This commit is contained in:
2026-06-17 23:41:42 +08:00
parent 7554523f8d
commit 0bf484522c
8 changed files with 157 additions and 117 deletions

View File

@@ -0,0 +1,25 @@
using Microsoft.AspNetCore.Mvc;
using SweetChatService.Dto;
using SweetChatService.Entity;
using SweetChatService.Services;
namespace SweetChatService.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class UserController : ControllerBase
{
private readonly UserService _userService;
public UserController(UserService userService)
{
_userService = userService;
}
[HttpGet("friend/{userId}")]
public IActionResult QueryFriendByUserId(long userId)
{
return Ok(_userService.QueryUserFriends(userId));
}
}
}

View File

@@ -0,0 +1,30 @@
using FreeSql.DataAnnotations;
namespace SweetChatService.Entity
{
[Table(Name = "friend")]
[Index("uk_user_friend", "UserId,FriendId", true)]
public class Friend
{
[Column(Name = "id", IsPrimary = true, IsIdentity = true)]
public long Id { get; set; }
[Column(Name = "user_id")]
public long UserId { get; set; }
[Column(Name = "friend_id")]
public long FriendId { get; set; }
[Column(Name = "remark", StringLength = 64)]
public string? Remark { get; set; }
[Column(Name = "status")]
public byte Status { get; set; } = 1;
[Column(Name = "created_time", ServerTime = DateTimeKind.Local, CanInsert = true, CanUpdate = false)]
public DateTime? CreatedTime { get; set; }
[Column(Name = "update_time", ServerTime = DateTimeKind.Local)]
public DateTime UpdateTime { get; set; }
}
}

View File

@@ -20,7 +20,7 @@ namespace SweetChatService.Entity
[Column(Name = "gender")] [Column(Name = "gender")]
public byte Gender { get; set; } = 0; public byte Gender { get; set; } = 0;
[Column(Name = "create_time", ServerTime = DateTimeKind.Local, CanUpdate = false)] [Column(Name = "create_time", ServerTime = DateTimeKind.Local, CanInsert = true, CanUpdate = false)]
public DateTime CreateTime { get; set; } public DateTime CreateTime { get; set; }
[Column(Name = "update_time", ServerTime = DateTimeKind.Local)] [Column(Name = "update_time", ServerTime = DateTimeKind.Local)]

View File

@@ -1,14 +1,9 @@
using Microsoft.AspNetCore.Hosting; using NLog.Extensions.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using NLog.Extensions.Hosting;
using SuperSocket.Server.Host; using SuperSocket.Server.Host;
using SuperSocket.WebSocket.Server; using SuperSocket.WebSocket.Server;
using SweetChatService.Config; using SweetChatService.Config;
using SweetChatService.Handlers; using SweetChatService.Handlers;
using SweetChatService.Services; using SweetChatService.Services;
using System.IO;
var host = Host.CreateDefaultBuilder(args) var host = Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => .ConfigureWebHostDefaults(webBuilder =>

View File

@@ -6,7 +6,7 @@
"environmentVariables": { "environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development" "ASPNETCORE_ENVIRONMENT": "Development"
}, },
"applicationUrl": "https://localhost:2835;http://localhost:2836" "applicationUrl": "https://0.0.0.0:2835;http://0.0.0.0:2836"
} }
} }
} }

View File

@@ -14,5 +14,13 @@ namespace SweetChatService.Services
.Where(u => u.Nickname == username) .Where(u => u.Nickname == username)
.First(); .First();
} }
public List<User> QueryUserFriends(long userId)
{
return _fsql.Select<User, Friend>()
.InnerJoin((u, f) => u.Id == f.FriendId)
.Where((u, f) => f.UserId == userId && f.Status == 1)
.ToList((u, f) => u);
}
} }
} }

View File

@@ -1,6 +1,6 @@
{ {
"ConnectionStrings": { "ConnectionStrings": {
"Default": "Server=localhost;Port=3306;Database=sweet_chat;Uid=root;Pwd=estun@medical;Charset=utf8mb4;" "Default": "Server=localhost;Port=3306;Database=sweet_chat;Uid=root;Pwd=123456;Charset=utf8mb4;"
}, },
"serverOptions": { "serverOptions": {
"WebSocketServer": { "WebSocketServer": {

View File

@@ -1,141 +1,123 @@
-- MySQL dump 10.13 Distrib 8.0.27, for Win64 (x86_64) /*
-- Navicat Premium Data Transfer
-- Host: 127.0.0.1 Database: sweet_chat
-- ------------------------------------------------------
-- Server version 8.0.27
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; Source Server : localhost
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; Source Server Type : MySQL
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; Source Server Version : 80027
/*!50503 SET NAMES utf8 */; Source Host : localhost:3306
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; Source Schema : sweet_chat
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
-- Target Server Type : MySQL
-- Table structure for table `conversation` Target Server Version : 80027
-- File Encoding : 65001
Date: 17/06/2026 23:41:13
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for conversation
-- ----------------------------
DROP TABLE IF EXISTS `conversation`; DROP TABLE IF EXISTS `conversation`;
/*!40101 SET @saved_cs_client = @@character_set_client */; CREATE TABLE `conversation` (
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `conversation` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '会话ID', `id` bigint NOT NULL AUTO_INCREMENT COMMENT '会话ID',
`type` tinyint NOT NULL COMMENT '1单聊 2群聊', `type` tinyint NOT NULL COMMENT '1单聊 2群聊',
`last_msg_id` bigint DEFAULT '0' COMMENT '最后一条消息ID', `last_msg_id` bigint NULL DEFAULT 0 COMMENT '最后一条消息ID',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`) PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='会话表'; ) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '会话表' ROW_FORMAT = Dynamic;
/*!40101 SET character_set_client = @saved_cs_client */;
-- -- ----------------------------
-- Dumping data for table `conversation` -- Records of conversation
-- -- ----------------------------
INSERT INTO `conversation` VALUES (1, 1, 2, '2026-06-17 13:45:29', '2026-06-17 13:50:21');
LOCK TABLES `conversation` WRITE;
/*!40000 ALTER TABLE `conversation` DISABLE KEYS */;
INSERT INTO `conversation` VALUES (1,1,2,'2026-06-17 13:45:29','2026-06-17 13:50:21');
/*!40000 ALTER TABLE `conversation` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `conversation_member`
--
-- ----------------------------
-- Table structure for conversation_member
-- ----------------------------
DROP TABLE IF EXISTS `conversation_member`; DROP TABLE IF EXISTS `conversation_member`;
/*!40101 SET @saved_cs_client = @@character_set_client */; CREATE TABLE `conversation_member` (
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `conversation_member` (
`conversation_id` bigint NOT NULL COMMENT '会话ID', `conversation_id` bigint NOT NULL COMMENT '会话ID',
`user_id` bigint NOT NULL COMMENT '用户ID', `user_id` bigint NOT NULL COMMENT '用户ID',
`unread_count` int DEFAULT '0' COMMENT '未读消息数', `unread_count` int NULL DEFAULT 0 COMMENT '未读消息数',
`last_read_msg_id` bigint DEFAULT '0' COMMENT '已读到最后一条消息ID', `last_read_msg_id` bigint NULL DEFAULT 0 COMMENT '已读到最后一条消息ID',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`conversation_id`,`user_id`) PRIMARY KEY (`conversation_id`, `user_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='会话成员表'; ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '会话成员表' ROW_FORMAT = Dynamic;
/*!40101 SET character_set_client = @saved_cs_client */;
-- -- ----------------------------
-- Dumping data for table `conversation_member` -- Records of conversation_member
-- -- ----------------------------
INSERT INTO `conversation_member` VALUES (1, 1, 1, 0, '2026-06-17 13:46:18', '2026-06-17 13:50:36');
INSERT INTO `conversation_member` VALUES (1, 2, 1, 0, '2026-06-17 13:46:18', '2026-06-17 13:47:27');
LOCK TABLES `conversation_member` WRITE; -- ----------------------------
/*!40000 ALTER TABLE `conversation_member` DISABLE KEYS */; -- Table structure for friend
INSERT INTO `conversation_member` VALUES (1,1,1,0,'2026-06-17 13:46:18','2026-06-17 13:50:36'),(1,2,1,0,'2026-06-17 13:46:18','2026-06-17 13:47:27'); -- ----------------------------
/*!40000 ALTER TABLE `conversation_member` ENABLE KEYS */; DROP TABLE IF EXISTS `friend`;
UNLOCK TABLES; CREATE TABLE `friend` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`user_id` bigint UNSIGNED NOT NULL COMMENT '用户ID主动方',
`friend_id` bigint UNSIGNED NOT NULL COMMENT '好友用户ID',
`remark` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '好友备注名',
`status` tinyint NULL DEFAULT 1 COMMENT '0=待验证 1=正常 2=拉黑',
`created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uk_user_friend`(`user_id` ASC, `friend_id` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '好友关系表' ROW_FORMAT = Dynamic;
-- -- ----------------------------
-- Table structure for table `message` -- Records of friend
-- -- ----------------------------
INSERT INTO `friend` VALUES (1, 1, 2, NULL, 1, '2026-06-17 21:04:33', '2026-06-17 21:12:40');
INSERT INTO `friend` VALUES (2, 2, 1, NULL, 1, '2026-06-17 21:06:59', '2026-06-17 21:12:43');
-- ----------------------------
-- Table structure for message
-- ----------------------------
DROP TABLE IF EXISTS `message`; DROP TABLE IF EXISTS `message`;
/*!40101 SET @saved_cs_client = @@character_set_client */; CREATE TABLE `message` (
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `message` (
`msg_id` bigint NOT NULL AUTO_INCREMENT COMMENT '消息ID', `msg_id` bigint NOT NULL AUTO_INCREMENT COMMENT '消息ID',
`conversation_id` bigint NOT NULL COMMENT '会话ID', `conversation_id` bigint NOT NULL COMMENT '会话ID',
`sender_id` bigint NOT NULL COMMENT '发送者ID', `sender_id` bigint NOT NULL COMMENT '发送者ID',
`content` text NOT NULL COMMENT '消息内容', `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '消息内容',
`msg_type` tinyint DEFAULT '1' COMMENT '1文本 2图片 3语音', `msg_type` tinyint NULL DEFAULT 1 COMMENT '1文本 2图片 3语音',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`msg_id`) PRIMARY KEY (`msg_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='消息表'; ) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '消息表' ROW_FORMAT = Dynamic;
/*!40101 SET character_set_client = @saved_cs_client */;
-- -- ----------------------------
-- Dumping data for table `message` -- Records of message
-- -- ----------------------------
INSERT INTO `message` VALUES (1, 1, 1, '张三,在吗?', 1, '2026-06-17 13:46:35', '2026-06-17 13:46:35');
LOCK TABLES `message` WRITE; INSERT INTO `message` VALUES (2, 1, 2, '在,咋了?', 1, '2026-06-17 13:49:48', '2026-06-17 13:49:48');
/*!40000 ALTER TABLE `message` DISABLE KEYS */;
INSERT INTO `message` VALUES (1,1,1,'张三,在吗?',1,'2026-06-17 13:46:35','2026-06-17 13:46:35'),(2,1,2,'在,咋了?',1,'2026-06-17 13:49:48','2026-06-17 13:49:48');
/*!40000 ALTER TABLE `message` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `user`
--
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`; DROP TABLE IF EXISTS `user`;
/*!40101 SET @saved_cs_client = @@character_set_client */; CREATE TABLE `user` (
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `user` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID', `id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`phone` varchar(20) NOT NULL COMMENT '手机号', `phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '手机号',
`nickname` varchar(50) NOT NULL COMMENT '昵称', `nickname` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '昵称',
`avatar_url` varchar(255) DEFAULT '' COMMENT '头像', `avatar_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT '' COMMENT '头像',
`gender` tinyint DEFAULT '0' COMMENT '0未知 1男 2女', `gender` tinyint NULL DEFAULT 0 COMMENT '0未知 1男 2女',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`), PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `phone` (`phone`) UNIQUE INDEX `phone`(`phone` ASC) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表'; ) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '用户表' ROW_FORMAT = Dynamic;
/*!40101 SET character_set_client = @saved_cs_client */;
-- -- ----------------------------
-- Dumping data for table `user` -- Records of user
-- -- ----------------------------
INSERT INTO `user` VALUES (1, '13800000001', 'Cxx', 'https://images.xxapi.cn/images/head/7679300522.jpg', 1, '2026-06-17 13:42:21', '2026-06-17 21:30:49');
INSERT INTO `user` VALUES (2, '13800000002', 'Pjm', 'https://images.xxapi.cn/images/head/5963813620.jpg', 1, '2026-06-17 13:42:21', '2026-06-17 21:30:46');
LOCK TABLES `user` WRITE; SET FOREIGN_KEY_CHECKS = 1;
/*!40000 ALTER TABLE `user` DISABLE KEYS */;
INSERT INTO `user` VALUES (1,'13800000001','Cxx','',1,'2026-06-17 13:42:21','2026-06-17 13:42:21'),(2,'13800000002','Pjm','',1,'2026-06-17 13:42:21','2026-06-17 18:18:16');
/*!40000 ALTER TABLE `user` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2026-06-17 19:53:25