package com.emotionmuseum.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.emotionmuseum.dto.Result; import com.emotionmuseum.dto.diary.DiaryPostRequest; import com.emotionmuseum.entity.DiaryPost; import com.emotionmuseum.service.AuthService; import com.emotionmuseum.service.DiaryPostService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.Valid; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; /** * 日记控制器 * * @author emotion-museum * @version 1.0.0 * @since 2024-01-01 */ @RestController @RequestMapping("/diary") @Tag(name = "日记管理", description = "日记相关接口") @Slf4j public class DiaryPostController { @Autowired private DiaryPostService diaryPostService; @Autowired private AuthService authService; /** * 创建日记 */ @PostMapping("/create") @Operation(summary = "创建日记", description = "创建新的日记") public Result createDiary(HttpServletRequest request, @Valid @RequestBody DiaryPostRequest diaryRequest) { String token = extractToken(request); String userId = authService.getUserIdFromToken(token); if (userId == null) { return Result.unauthorized(); } log.info("用户创建日记: {}", userId); return diaryPostService.createDiary(userId, diaryRequest); } /** * 更新日记 */ @PutMapping("/{diaryId}") @Operation(summary = "更新日记", description = "更新指定的日记") public Result updateDiary(HttpServletRequest request, @PathVariable String diaryId, @Valid @RequestBody DiaryPostRequest diaryRequest) { String token = extractToken(request); String userId = authService.getUserIdFromToken(token); if (userId == null) { return Result.unauthorized(); } log.info("用户更新日记: {}, 日记: {}", userId, diaryId); return diaryPostService.updateDiary(userId, diaryId, diaryRequest); } /** * 获取日记详情 */ @GetMapping("/{diaryId}") @Operation(summary = "获取日记详情", description = "获取指定日记的详细信息") public Result getDiaryById(@PathVariable String diaryId) { return diaryPostService.getDiaryById(diaryId); } /** * 获取用户日记列表 */ @GetMapping("/user/list") @Operation(summary = "获取用户日记列表", description = "获取当前用户的日记列表") public Result> getUserDiaries(HttpServletRequest request, @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size) { String token = extractToken(request); String userId = authService.getUserIdFromToken(token); if (userId == null) { return Result.unauthorized(); } return diaryPostService.getUserDiaries(userId, page, size); } /** * 获取公开日记列表 */ @GetMapping("/public/list") @Operation(summary = "获取公开日记列表", description = "获取所有公开的日记列表") public Result> getPublicDiaries(@RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size) { return diaryPostService.getPublicDiaries(page, size); } /** * 根据情绪标签查询日记 */ @GetMapping("/emotion/{emotionTag}") @Operation(summary = "根据情绪标签查询日记", description = "根据情绪标签查询公开日记") public Result> getDiariesByEmotionTag(@PathVariable String emotionTag, @RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size) { return diaryPostService.getDiariesByEmotionTag(emotionTag, page, size); } /** * 删除日记 */ @DeleteMapping("/{diaryId}") @Operation(summary = "删除日记", description = "删除指定的日记") public Result deleteDiary(HttpServletRequest request, @PathVariable String diaryId) { String token = extractToken(request); String userId = authService.getUserIdFromToken(token); if (userId == null) { return Result.unauthorized(); } log.info("用户删除日记: {}, 日记: {}", userId, diaryId); return diaryPostService.deleteDiary(userId, diaryId); } /** * 点赞日记 */ @PostMapping("/{diaryId}/like") @Operation(summary = "点赞日记", description = "对指定日记进行点赞") public Result likeDiary(HttpServletRequest request, @PathVariable String diaryId) { String token = extractToken(request); String userId = authService.getUserIdFromToken(token); if (userId == null) { return Result.unauthorized(); } log.info("用户点赞日记: {}, 日记: {}", userId, diaryId); return diaryPostService.likeDiary(userId, diaryId); } /** * 取消点赞 */ @PostMapping("/{diaryId}/unlike") @Operation(summary = "取消点赞", description = "取消对指定日记的点赞") public Result unlikeDiary(HttpServletRequest request, @PathVariable String diaryId) { String token = extractToken(request); String userId = authService.getUserIdFromToken(token); if (userId == null) { return Result.unauthorized(); } log.info("用户取消点赞: {}, 日记: {}", userId, diaryId); return diaryPostService.unlikeDiary(userId, diaryId); } /** * 获取AI点评 */ @GetMapping("/{diaryId}/ai-comment") @Operation(summary = "获取AI点评", description = "获取指定日记的AI点评") public Result getAiComment(HttpServletRequest request, @PathVariable String diaryId) { String token = extractToken(request); String userId = authService.getUserIdFromToken(token); if (userId == null) { return Result.unauthorized(); } return diaryPostService.getAiComment(userId, diaryId); } /** * 从请求中提取令牌 */ private String extractToken(HttpServletRequest request) { String bearerToken = request.getHeader("Authorization"); if (bearerToken != null && bearerToken.startsWith("Bearer ")) { return bearerToken.substring(7); } return null; } }