blob: 9190d57f172063f5109be722eb1cf55efe18d099 [file] [log] [blame]
// package com.example.myproject.service;
// import com.example.myproject.entity.*;
// import com.example.myproject.repository.*;
// import org.springframework.beans.factory.annotation.Autowired;
// import org.springframework.stereotype.Service;
// import org.springframework.web.multipart.MultipartFile;
// import java.io.IOException;
// import java.nio.file.Files;
// import java.nio.file.Path;
// import java.nio.file.Paths;
// import java.util.*;
// @Service
// public class DynamicService {
// @Autowired
// private UserDynamicRepository userDynamicRepository;
// @Autowired
// private UserRepository userRepository;
// @Autowired
// private DynamicCommentRepository dynamicCommentRepository;
// @Autowired
// private DynamicLikesRepository dynamicLikesRepository;
// @Autowired
// private FriendRelationRepository friendRelationRepository;
// private static final String IMAGE_DIR = "uploads/post/";
// // 创建好友动态
// public Map<String, Object> createDynamic(Long userId, String title, String content, MultipartFile[] imageFiles) {
// // 查找用户信息
// Users user = userRepository.findById(userId)
// .orElseThrow(() -> new RuntimeException("User not found"));
// // 创建新的动态
// UserDynamic userDynamic = new UserDynamic();
// userDynamic.setUserId(userId);
// userDynamic.setTitle(title != null ? title : "默认标题");
// userDynamic.setContent(content);
// userDynamic.setTime(new Date());
// userDynamic.setLikesCount(0);
// userDynamic.setCommentsCount(0);
// // 处理图片上传
// StringBuilder imageUrlsBuilder = new StringBuilder();
// if (imageFiles != null && imageFiles.length > 0) {
// for (int i = 0; i < imageFiles.length; i++) {
// if (i > 0) {
// imageUrlsBuilder.append(",");
// }
// try {
// String imageUrl = saveImage(imageFiles[i]);
// imageUrlsBuilder.append(imageUrl);
// } catch (IOException e) {
// throw new RuntimeException("Image upload failed: " + e.getMessage());
// }
// }
// }
// // 将多个图片 URL 拼接
// userDynamic.setImageUrl(imageUrlsBuilder.toString());
// // 保存数据库
// UserDynamic savedUserDynamic = userDynamicRepository.save(userDynamic);
// // 返回结果
// Map<String, Object> response = new HashMap<>();
// response.put("dynamicId", savedUserDynamic.getDynamicId());
// response.put("message", "动态创建成功");
// return response;
// }
// // 保存图片并返回图片的 URL
// public String saveImage(MultipartFile imageFile) throws IOException {
// String fileName = imageFile.getOriginalFilename();
// Path path = Paths.get(IMAGE_DIR + fileName);
// Files.createDirectories(path.getParent());
// Files.write(path, imageFile.getBytes());
// return "/images/" + fileName;
// }
// // 删除动态
// public void deleteDynamic(Long dynamicId) {
// if (userDynamicRepository.existsById(dynamicId)) {
// userDynamicRepository.deleteById(dynamicId);
// } else {
// throw new RuntimeException("Dynamic with id " + dynamicId + " not found");
// }
// }
// //好友动态评论
// public Map<String, Object> addComment(Long userId, Long dynamicId, String commentContent) {
// Users user = userRepository.findById(userId)
// .orElseThrow(() -> new RuntimeException("User not found"));
// UserDynamic dynamic = userDynamicRepository.findById(dynamicId)
// .orElseThrow(() -> new RuntimeException("Dynamic not found"));
// DynamicComment comment = new DynamicComment();
// comment.setDynamicId(dynamicId);
// comment.setUserId(userId);
// comment.setCommentContent(commentContent);
// comment.setCommentTime(new Date());
// // 保存评论
// DynamicComment savedComment = dynamicCommentRepository.save(comment);
// // 返回成功消息
// Map<String, Object> response = new HashMap<>();
// response.put("comment_id", savedComment.getCommentId());
// response.put("message", "评论成功");
// return response;
// }
// //返回某个好友的所有动态
// public Map<String, Object> getAllUserDynamics(Long userId) {
// // 查找用户的所有动态
// List<UserDynamic> userDynamics = userDynamicRepository.findByUserId(userId);
// Map<String, Object> postData = new LinkedHashMap<>();
// List<Map<String, Object>> dynamicList = new ArrayList<>();
// // 遍历动态,获取点赞和评论
// for (UserDynamic dynamic : userDynamics) {
// Map<String, Object> dynamicData = new LinkedHashMap<>();
// dynamicData.put("dynamic_id", dynamic.getDynamicId());
// dynamicData.put("user_id", dynamic.getUserId());
// Users user = userRepository.findById(dynamic.getUserId()).orElse(null);
// if (user != null) {
// dynamicData.put("username", user.getUsername());
// dynamicData.put("avatar_url", user.getAvatarUrl());
// } else {
// dynamicData.put("username", "Unknown");
// dynamicData.put("avatar_url", "http://example.com/default-avatar.jpg");
// }
// dynamicData.put("title", dynamic.getTitle());
// dynamicData.put("content", dynamic.getContent());
// dynamicData.put("images", dynamic.getImageUrl());
// dynamicData.put("time", dynamic.getTime());
// // 获取点赞
// List<DynamicLikes> likes = dynamicLikesRepository.findByDynamicId(dynamic.getDynamicId());
// List<Map<String, Object>> likeList = new ArrayList<>();
// for (DynamicLikes like : likes) {
// Map<String, Object> likeData = new HashMap<>();
// likeData.put("user_id", like.getUserId());
// // 获取点赞用户的用户名
// Users likeUser = userRepository.findById(like.getUserId()).orElse(null);
// if (likeUser != null) {
// likeData.put("username", likeUser.getUsername());
// } else {
// likeData.put("username", "Unknown");
// }
// likeList.add(likeData);
// }
// dynamicData.put("likes", likeList);
// // 获取评论
// List<DynamicComment> comments = dynamicCommentRepository.findByDynamicId(dynamic.getDynamicId());
// List<Map<String, Object>> commentList = new ArrayList<>();
// for (DynamicComment comment : comments) {
// Map<String, Object> commentData = new HashMap<>();
// commentData.put("comment_id", comment.getCommentId());
// commentData.put("user_id", comment.getUserId());
// // 获取评论用户的用户名
// Users commentUser = userRepository.findById(comment.getUserId()).orElse(null);
// if (commentUser != null) {
// commentData.put("username", commentUser.getUsername());
// } else {
// commentData.put("username", "Unknown");
// }
// commentData.put("content", comment.getCommentContent());
// commentData.put("time", comment.getCommentTime());
// commentList.add(commentData);
// }
// dynamicData.put("comments", commentList);
// dynamicList.add(dynamicData);
// }
// Map<String, Object> response = new HashMap<>();
// response.put("dynamic", dynamicList);
// return response;
// }
// //获取当前所有好友的id
// public List<Long> getAllFriendIds(Long userId) {
// List<FriendRelation> friendRelations = friendRelationRepository.findByUserId(userId);
// List<Long> friendIds = new ArrayList<>();
// for (FriendRelation relation : friendRelations) {
// // 添加好友ID
// if (!friendIds.contains(relation.getFriendId())) {
// friendIds.add(relation.getFriendId());
// }
// }
// return friendIds;
// }
// public Map<String, Object> getAllUserAndFriendsDynamics(List<Long> userIds) {
// List<Map<String, Object>> allDynamics = new ArrayList<>();
// // 遍历所有用户获取他们的动态
// for (Long userId : userIds) {
// Map<String, Object> userDynamics = getAllUserDynamics(userId);
// if (userDynamics != null && !userDynamics.isEmpty()) {
// allDynamics.addAll((List<Map<String, Object>>) userDynamics.get("dynamic"));
// }
// }
// // 返回所有动态的合集
// Map<String, Object> response = new HashMap<>();
// response.put("dynamic", allDynamics);
// return response;
// }
// //点赞动态
// public boolean likeDynamic(Long userId, Long dynamicId) {
// // 检查该用户是否已经点赞过该动态
// DynamicLikes existingLike = dynamicLikesRepository.findByUserIdAndDynamicId(userId, dynamicId);
// if (existingLike != null) {
// return false;
// }
// // 新增点赞记录
// DynamicLikes newLike = new DynamicLikes();
// newLike.setUserId(userId);
// newLike.setDynamicId(dynamicId);
// newLike.setLikeTime(new java.util.Date());
// dynamicLikesRepository.save(newLike);
// // 更新动态表的点赞数
// UserDynamic dynamic = userDynamicRepository.findById(dynamicId).orElse(null);
// if (dynamic != null) {
// dynamic.setLikesCount(dynamic.getLikesCount() + 1);
// userDynamicRepository.save(dynamic);
// }
// return true;
// }
// //取消点赞
// public boolean unlikeDynamic(Long userId, Long dynamicId) {
// // 查找该用户的点赞记录
// DynamicLikes existingLike = dynamicLikesRepository.findByUserIdAndDynamicId(userId, dynamicId);
// if (existingLike == null) {
// return false;
// }
// // 删除点赞记录
// dynamicLikesRepository.delete(existingLike);
// // 更新动态表的点赞数
// UserDynamic dynamic = userDynamicRepository.findById(dynamicId).orElse(null);
// if (dynamic != null) {
// dynamic.setLikesCount(dynamic.getLikesCount() - 1);
// userDynamicRepository.save(dynamic);
// }
// return true;
// }
// }
package com.example.myproject.service;
import com.example.myproject.entity.*;
import com.example.myproject.repository.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;
@Service
public class DynamicService {
@Autowired
private UserDynamicRepository userDynamicRepository;
@Autowired
private UserRepository userRepository;
@Autowired
private DynamicCommentRepository dynamicCommentRepository;
@Autowired
private DynamicLikesRepository dynamicLikesRepository;
@Autowired
private FriendRelationRepository friendRelationRepository;
private static final String IMAGE_DIR = "uploads/post/";
// 创建好友动态
public Map<String, Object> createDynamic(Long userId, String title, String content, MultipartFile[] imageFiles) {
// 查找用户信息
Users user = userRepository.findById(userId)
.orElseThrow(() -> new RuntimeException("User not found"));
// 创建新的动态
UserDynamic userDynamic = new UserDynamic();
userDynamic.setUserId(userId);
userDynamic.setTitle(title != null ? title : "默认标题");
userDynamic.setContent(content);
userDynamic.setTime(new Date());
userDynamic.setLikesCount(0);
userDynamic.setCommentsCount(0);
// 处理图片上传
StringBuilder imageUrlsBuilder = new StringBuilder();
if (imageFiles != null && imageFiles.length > 0) {
for (int i = 0; i < imageFiles.length; i++) {
if (i > 0) {
imageUrlsBuilder.append(",");
}
try {
String imageUrl = saveImage(imageFiles[i]);
imageUrlsBuilder.append(imageUrl);
} catch (IOException e) {
throw new RuntimeException("Image upload failed: " + e.getMessage());
}
}
}
// 将多个图片 URL 拼接
userDynamic.setImageUrl(imageUrlsBuilder.toString());
// 保存数据库
UserDynamic savedUserDynamic = userDynamicRepository.save(userDynamic);
// 返回结果
Map<String, Object> response = new HashMap<>();
response.put("dynamicId", savedUserDynamic.getDynamicId());
response.put("message", "动态创建成功");
return response;
}
// 保存图片并返回图片的 URL
public String saveImage(MultipartFile imageFile) throws IOException {
String fileName = imageFile.getOriginalFilename();
Path path = Paths.get(IMAGE_DIR + fileName);
Files.createDirectories(path.getParent());
Files.write(path, imageFile.getBytes());
return "/images/" + fileName;
}
// 删除动态
public void deleteDynamic(Long dynamicId) {
if (userDynamicRepository.existsById(dynamicId)) {
userDynamicRepository.deleteById(dynamicId);
} else {
throw new RuntimeException("Dynamic with id " + dynamicId + " not found");
}
}
//好友动态评论
public Map<String, Object> addComment(Long userId, Long dynamicId, String commentContent, Long parentCommentId) {
Users user = userRepository.findById(userId)
.orElseThrow(() -> new RuntimeException("User not found"));
UserDynamic dynamic = userDynamicRepository.findById(dynamicId)
.orElseThrow(() -> new RuntimeException("Dynamic not found"));
DynamicComment comment = new DynamicComment();
comment.setDynamicId(dynamicId);
comment.setUserId(userId);
comment.setCommentContent(commentContent);
comment.setCommentTime(new Date());
comment.setParentCommentId(parentCommentId); // 设置父评论ID
// 保存评论
DynamicComment savedComment = dynamicCommentRepository.save(comment);
// 返回成功消息
Map<String, Object> response = new HashMap<>();
response.put("comment_id", savedComment.getCommentId());
response.put("parent_comment_id", savedComment.getParentCommentId());
response.put("message", "评论成功");
return response;
}
//返回某个好友的所有动态
public Map<String, Object> getAllUserDynamics(Long userId) {
// 查找用户的所有动态
List<UserDynamic> userDynamics = userDynamicRepository.findByUserId(userId);
Map<String, Object> postData = new LinkedHashMap<>();
List<Map<String, Object>> dynamicList = new ArrayList<>();
// 遍历动态,获取点赞和评论
for (UserDynamic dynamic : userDynamics) {
Map<String, Object> dynamicData = new LinkedHashMap<>();
dynamicData.put("dynamic_id", dynamic.getDynamicId());
dynamicData.put("user_id", dynamic.getUserId());
Users user = userRepository.findById(dynamic.getUserId()).orElse(null);
if (user != null) {
dynamicData.put("username", user.getUsername());
dynamicData.put("avatar_url", user.getAvatarUrl());
} else {
dynamicData.put("username", "Unknown");
dynamicData.put("avatar_url", "http://example.com/default-avatar.jpg");
}
dynamicData.put("title", dynamic.getTitle());
dynamicData.put("content", dynamic.getContent());
dynamicData.put("images", dynamic.getImageUrl());
dynamicData.put("time", dynamic.getTime());
// 获取点赞
List<DynamicLikes> likes = dynamicLikesRepository.findByDynamicId(dynamic.getDynamicId());
List<Map<String, Object>> likeList = new ArrayList<>();
for (DynamicLikes like : likes) {
Map<String, Object> likeData = new HashMap<>();
likeData.put("user_id", like.getUserId());
// 获取点赞用户的用户名
Users likeUser = userRepository.findById(like.getUserId()).orElse(null);
if (likeUser != null) {
likeData.put("username", likeUser.getUsername());
} else {
likeData.put("username", "Unknown");
}
likeList.add(likeData);
}
dynamicData.put("likes", likeList);
// 获取评论
List<DynamicComment> comments = dynamicCommentRepository.findByDynamicId(dynamic.getDynamicId());
List<Map<String, Object>> commentList = new ArrayList<>();
for (DynamicComment comment : comments) {
Map<String, Object> commentData = new HashMap<>();
commentData.put("comment_id", comment.getCommentId());
commentData.put("user_id", comment.getUserId());
// 获取评论用户的用户名
Users commentUser = userRepository.findById(comment.getUserId()).orElse(null);
if (commentUser != null) {
commentData.put("username", commentUser.getUsername());
} else {
commentData.put("username", "Unknown");
}
commentData.put("content", comment.getCommentContent());
commentData.put("time", comment.getCommentTime());
commentList.add(commentData);
}
dynamicData.put("comments", commentList);
dynamicList.add(dynamicData);
}
Map<String, Object> response = new HashMap<>();
response.put("dynamic", dynamicList);
return response;
}
//获取当前所有好友的id
public List<Long> getAllFriendIds(Long userId) {
List<FriendRelation> friendRelations = friendRelationRepository.findByUserId(userId);
List<Long> friendIds = new ArrayList<>();
for (FriendRelation relation : friendRelations) {
// 添加好友ID
if (!friendIds.contains(relation.getFriendId())) {
friendIds.add(relation.getFriendId());
}
}
return friendIds;
}
public Map<String, Object> getAllUserAndFriendsDynamics(List<Long> userIds) {
List<Map<String, Object>> allDynamics = new ArrayList<>();
// 遍历所有用户获取他们的动态
for (Long userId : userIds) {
Map<String, Object> userDynamics = getAllUserDynamics(userId);
if (userDynamics != null && !userDynamics.isEmpty()) {
allDynamics.addAll((List<Map<String, Object>>) userDynamics.get("dynamic"));
}
}
// 返回所有动态的合集
Map<String, Object> response = new HashMap<>();
response.put("dynamic", allDynamics);
return response;
}
//点赞动态
public boolean likeDynamic(Long userId, Long dynamicId) {
// 检查该用户是否已经点赞过该动态
DynamicLikes existingLike = dynamicLikesRepository.findByUserIdAndDynamicId(userId, dynamicId);
if (existingLike != null) {
return false;
}
// 新增点赞记录
DynamicLikes newLike = new DynamicLikes();
newLike.setUserId(userId);
newLike.setDynamicId(dynamicId);
newLike.setLikeTime(new java.util.Date());
dynamicLikesRepository.save(newLike);
// 更新动态表的点赞数
UserDynamic dynamic = userDynamicRepository.findById(dynamicId).orElse(null);
if (dynamic != null) {
dynamic.setLikesCount(dynamic.getLikesCount() + 1);
userDynamicRepository.save(dynamic);
}
return true;
}
//取消点赞
public boolean unlikeDynamic(Long userId, Long dynamicId) {
// 查找该用户的点赞记录
DynamicLikes existingLike = dynamicLikesRepository.findByUserIdAndDynamicId(userId, dynamicId);
if (existingLike == null) {
return false;
}
// 删除点赞记录
dynamicLikesRepository.delete(existingLike);
// 更新动态表的点赞数
UserDynamic dynamic = userDynamicRepository.findById(dynamicId).orElse(null);
if (dynamic != null) {
dynamic.setLikesCount(dynamic.getLikesCount() - 1);
userDynamicRepository.save(dynamic);
}
return true;
}
}