达人探店点赞实现
在当今的社交和电商领域中,达人探店功能成为了吸引用户、增加用户互动的重要手段。本文将深入探讨达人探店相关功能的实现,包括发布探店笔记、查看探店笔记、点赞功能、点赞排行榜、点赞查询列表等方面。
发布探店笔记
数据库设计
表结构设计
tb_blog
表:用于存储探店笔记的基本信息,包括商户 id、用户 id、标题、照片、文字描述、点赞数量、评论数量、创建时间和更新时间等字段。tb_blog_comments
表:用于存储探店笔记的评论信息,包括用户 id、探店 id、父级评论 id、回复评论 id、回复内容、点赞数、状态和创建时间等字段。
create table tb_blog
(
id bigint unsigned auto_increment comment '主键'
primary key,
shop_id bigint not null comment '商户id',
user_id bigint unsigned not null comment '用户id',
title varchar(255) collate utf8mb4_unicode_ci not null comment '标题',
images varchar(2048) not null comment '探店的照片,最多9张,多张以","隔开',
content varchar(2048) collate utf8mb4_unicode_ci not null comment '探店的文字描述',
liked int unsigned default '0' null comment '点赞数量',
comments int unsigned null comment '评论数量',
create_time timestamp default CURRENT_TIMESTAMP not null comment '创建时间',
update_time timestamp default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间'
)
collate = utf8mb4_general_ci
row_format = COMPACT;
create table tb_blog_comments
(
id bigint unsigned auto_increment comment '主键'
primary key,
user_id bigint unsigned not null comment '用户id',
blog_id bigint unsigned not null comment '探店id',
parent_id bigint unsigned not null comment '关联的1级评论id,如果是一级评论,则值为0',
answer_id bigint unsigned not null comment '回复的评论id',
content varchar(255) not null comment '回复的内容',
liked int unsigned null comment '点赞数',
status tinyint unsigned null comment '状态,0:正常,1:被举报,2:禁止查看',
create_time timestamp default CURRENT_TIMESTAMP not null comment '创建时间',
update_time timestamp default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间'
)
collate = utf8mb4_general_ci
row_format = COMPACT;
具体实现
上传文件接口:
@PostMapping("blog")
public Result uploadImage(@RequestParam("file") MultipartFile image) {
try {
// 获取原始文件名称
String originalFilename = image.getOriginalFilename();
// 生成新文件名
String fileName = createNewFileName(originalFilename);
// 保存文件
image.transferTo(new File(SystemConstants.IMAGE_UPLOAD_DIR, fileName));
// 返回结果
log.debug("文件上传成功,{}", fileName);
return Result.ok(fileName);
} catch (IOException e) {
throw new RuntimeException("文件上传失败", e);
}
}
修改路径为 自己的nginx前端里面的img目录:
public static final String IMAGE_UPLOAD_DIR = "/opt/homebrew/var/www/hmdp/imgs/";
发布博客 :
@PostMapping
public Result saveBlog(@RequestBody Blog blog) {
// 获取登录用户
UserDTO user = UserHolder.getUser();
blog.setUserId(user.getId());
// 保存探店博文
blogService.save(blog);
// 返回id
return Result.ok(blog.getId());
}
在发布博客时,首先获取当前登录用户的信息,并将其设置为博客的用户 id。然后,调用博客服务的保存方法将博客信息保存到数据库中。最后,返回博客的 id 作为响应。
查看探店笔记:
@Override
public Result queryBlogById(Long id) {
// 根据id查询
Blog blog = this.getById(id);
if (blog == null) {
return Result.fail("博文不存在");
}
// 查询用户
queryBlogUser(blog);
return Result.ok(blog);
}
private void queryBlogUser(Blog blog) {
Long userId = blog.getUserId();
User user = userService.getById(userId);
blog.setName(user.getNickName());
blog.setIcon(user.getIcon());
}