feat: 初始化音乐项目后台管理系统- 新增后台管理相关页面和功能组件

- 实现管理员评论管理、数据统计等功能
- 添加后台布局和路由管理
-配置数据库和Redis连接
- 实现文件上传和访问路径配置
- 添加Sa-Token安全配置
This commit is contained in:
ikmkj
2025-04-26 19:32:45 +08:00
commit b275ffab5a
185 changed files with 32763 additions and 0 deletions

View File

@@ -0,0 +1,216 @@
package com.test.musichouduan.controller;
import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckRole;
import cn.dev33.satoken.stp.StpUtil;
import com.test.musichouduan.dto.MusicDTO;
import com.test.musichouduan.dto.PageResult;
import com.test.musichouduan.dto.Result;
import com.test.musichouduan.service.MusicService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* 音乐控制器
*/
@RestController
@RequestMapping("/api/music")
public class MusicController {
@Autowired
private MusicService musicService;
/**
* 根据ID获取音乐
*
* @param id 音乐ID
* @return 响应结果
*/
@GetMapping("/{id}")
public Result<MusicDTO> getMusicById(@PathVariable Long id) {
MusicDTO musicDTO = musicService.getMusicById(id);
if (musicDTO == null) {
// 如果音乐不存在,返回空数据而不是错误
return Result.success(null);
}
return Result.success(musicDTO);
}
/**
* 分页获取音乐列表
*
* @param page 页码
* @param size 每页大小
* @param keyword 关键字
* @param typeId 类型ID
* @return 响应结果
*/
@GetMapping("/list")
public Result<PageResult<MusicDTO>> getMusicList(
@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer size,
@RequestParam(required = false) String keyword,
@RequestParam(required = false) Long typeId) {
PageResult<MusicDTO> pageResult = musicService.getMusicList(page, size, keyword, typeId);
return Result.success(pageResult);
}
/**
* 根据歌手ID获取音乐列表
*
* @param singerId 歌手ID
* @param page 页码
* @param size 每页大小
* @return 响应结果
*/
@GetMapping("/singer/{singerId}")
public Result<PageResult<MusicDTO>> getMusicListBySinger(
@PathVariable Long singerId,
@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer size) {
PageResult<MusicDTO> pageResult = musicService.getMusicListBySinger(singerId, page, size);
return Result.success(pageResult);
}
/**
* 获取最新音乐列表
*
* @param limit 限制数量
* @return 响应结果
*/
@GetMapping("/latest")
public Result<List<MusicDTO>> getLatestMusic(@RequestParam(defaultValue = "10") Integer limit) {
List<MusicDTO> musicList = musicService.getLatestMusic(limit);
return Result.success(musicList);
}
/**
* 获取热门音乐列表
*
* @param limit 限制数量
* @return 响应结果
*/
@GetMapping("/hot")
public Result<List<MusicDTO>> getHotMusic(@RequestParam(defaultValue = "10") Integer limit) {
List<MusicDTO> musicList = musicService.getHotMusic(limit);
return Result.success(musicList);
}
/**
* 搜索音乐
*
* @param keyword 关键字
* @param page 页码
* @param size 每页大小
* @return 响应结果
*/
@GetMapping("/search")
public Result<PageResult<MusicDTO>> searchMusic(
@RequestParam String keyword,
@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer size) {
PageResult<MusicDTO> pageResult = musicService.getMusicList(page, size, keyword, null);
return Result.success(pageResult);
}
/**
* 添加音乐
*
* @param musicDTO 音乐DTO
* @param file 音乐文件
* @param cover 封面文件
* @return 响应结果
*/
@SaCheckRole("admin")
@PostMapping("/add")
public Result<MusicDTO> addMusic(
@RequestPart("music") MusicDTO musicDTO,
@RequestPart(value = "file", required = false) MultipartFile file,
@RequestPart(value = "cover", required = false) MultipartFile cover) {
MusicDTO result = musicService.addMusic(musicDTO, file, cover);
return Result.success("添加成功", result);
}
/**
* 更新音乐
*
* @param id 音乐ID
* @param musicDTO 音乐DTO
* @param file 音乐文件
* @param cover 封面文件
* @return 响应结果
*/
@SaCheckRole("admin")
@PutMapping("/{id}")
public Result<MusicDTO> updateMusic(
@PathVariable Long id,
@RequestPart("music") MusicDTO musicDTO,
@RequestPart(value = "file", required = false) MultipartFile file,
@RequestPart(value = "cover", required = false) MultipartFile cover,
@RequestPart(value = "lyric", required = false) MultipartFile lyric) {
MusicDTO result = musicService.updateMusic(id, musicDTO, file, cover, lyric);
return Result.success("更新成功", result);
}
/**
* 删除音乐
*
* @param id 音乐ID
* @return 响应结果
*/
@SaCheckRole("admin")
@DeleteMapping("/{id}")
public Result<Boolean> deleteMusic(@PathVariable Long id) {
boolean result = musicService.deleteMusic(id);
return Result.success("删除成功", result);
}
/**
* 收藏/取消收藏音乐
*
* @param id 音乐ID
* @return 响应结果
*/
@SaCheckLogin
@PostMapping("/{id}/collect")
public Result<Boolean> toggleCollectMusic(@PathVariable Long id) {
// 获取当前登录用户ID
Long userId = StpUtil.getLoginIdAsLong();
boolean isCollected = musicService.toggleCollectMusic(id, userId);
String message = isCollected ? "收藏成功" : "取消收藏成功";
return Result.success(message, isCollected);
}
/**
* 获取用户收藏的音乐列表
*
* @param page 页码
* @param size 每页大小
* @return 响应结果
*/
@SaCheckLogin
@GetMapping("/collect")
public Result<PageResult<MusicDTO>> getCollectedMusic(
@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer size) {
// 获取当前登录用户ID
Long userId = StpUtil.getLoginIdAsLong();
PageResult<MusicDTO> pageResult = musicService.getCollectedMusic(userId, page, size);
return Result.success(pageResult);
}
/**
* 播放音乐
*
* @param id 音乐ID
* @return 响应结果
*/
@PostMapping("/{id}/play")
public Result<MusicDTO> playMusic(@PathVariable Long id) {
MusicDTO musicDTO = musicService.playMusic(id);
return Result.success(musicDTO);
}
}