基于SpringBoot的online_music_player(移除喜欢的音乐)

87 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第15天,点击查看活动详情 

从喜欢列表移除音乐

请求和响应设计

请求:
{
    get,
    /lovemusic/deleteloveMusic,
    data:{id}
}
响应:
{
    status:0,
    message:"取消收藏成功",
    data:true
}

代码实现

  • LoveMusicMapper接口新增方法
  /**
     * 通过用户id和音乐id取消音乐收藏
     * @param user_id
     * @param music_id
     * @return
     */
    int deleteLoveMusicByUidAndMusicId(int user_id, int music_id);
​
    /**
     * 通过音乐id删除lovemusic表中的信息
     * @param music_id
     * @return
     */
    int deleteLoveMusicByMusicId(int music_id);
  • xml实现接口
   <!--通过用户id和音乐id移除收藏歌曲-->
    <delete id="deleteLoveMusicByUidAndMusicId">
        delete from lovemusic where user_id = #{user_id} and music_id = #{music_id}
    </delete>
    <!--通过musicId移除收藏列表-->
    <delete id="deleteLoveMusicByMusicId">
      delete from lovemusic where music_id = #{music_id}
    </delete>
  • LoveMusicMapperController代码实现
 //通过收藏表中的id取消收藏歌曲信息
    @RequestMapping("/deleteloveMusic")
    public ResponseBodyMessage<Boolean> deleteLoveMusic(@RequestParam Integer id,HttpServletRequest request){
        //1.检查登入状态,未登入不创建回话
        HttpSession session = request.getSession(false);
        if(session==null||null==request.getSession().getAttribute(Contant.USERINFO_SESSION_KEY)){
            //未登入状态
            return new ResponseBodyMessage<>(-1,"请登入用户",false);
        }
        //登入状态,可进行取消音乐收藏功能
        //1.获取到用户id
        User user = (User)session.getAttribute(Contant.USERINFO_SESSION_KEY);
        int user_id = user.getId();
        //取消收藏!
        int ret = loveMusicMapper.deleteLoveMusicByUidAndMusicId(user_id,id);
        if(ret!=1){
            return new ResponseBodyMessage<>(-1,"取消收藏失败",false);
        }
        return new ResponseBodyMessage<>(0,"取消收藏成功",true);
    }

验证结果

数据库信息:

image-20220802005252299

image-20220802083542038

  • 歌曲不存在,移除失败

image-20220802083625829

  • 歌曲存在,取消收藏成功

image-20220802083657166

完善删除音乐模块代码

我们对项目增添了收藏列表后,发现一个问题!我们上传的音乐删除后,收藏的音乐就不存在了,那么收藏列表中关于这首歌曲的信息也要删除,所以我们对我们的删除音乐代码进行完善!

  • 删除音乐时,要先检查该音乐是否在收藏列表中,如果在就将歌曲移除收藏列表

我们只需要添加一个通过music_id取消收藏音乐的方法即可

LoveMusicMapper新增方法

/**
     * 通过音乐id删除lovemusic表中的信息
     * @param music_id
     * @return
     */
    int deleteLoveMusicByMusicId(int music_id);

xml实现

<!--通过musicId移除收藏列表-->
    <delete id="deleteLoveMusicByMusicId">
      delete from lovemusic where music_id = #{music_id}
    </delete>
   //删除单个音乐
    @RequestMapping("/delete")
    public ResponseBodyMessage<Boolean> deleteMusic(@RequestParam Integer id){
        //1.首先找到该音乐信息
        Music music = musicMapper.getMusicById(id);
        if(music==null){//音乐不存在
            //未找到该音乐
            return new ResponseBodyMessage<>(-1,"需要删除的音乐不存在",false);
        }
        //2.进行音乐删除
        //2.1 删除服务器下的音乐文件
            //找到服务器下该音乐文件路径
            File file = new File(SAVE_PATH+File.separator+music.getTitle()+".mp3");
        System.out.println("musicPath:"+file.getPath());
            if(file==null){//服务器下不存在该文件
                return new ResponseBodyMessage<>(-1,"删除失败,服务器下未找到该文件信息",false);
            }
            //删除
            if(!file.delete()){
                //删除失败
                return new ResponseBodyMessage<>(-1,"服务器删除失败",false);
            }
        //2.2 删除数据库下的音乐信息
        //2.2.1删除music表中的音乐信息
       int ret = musicMapper.deleteById(id);
       if(ret!=1){//数据库删除失败
           return new ResponseBodyMessage<>(-1,"数据库信息删除失败",false);
       }
       //2.2.2删除lovemusic表中的音乐信息
       loveMusicMapper.deleteLoveMusicByMusicId(id); 
       return new ResponseBodyMessage<>(0,"删除成功!",true);
    }
​
    //批量删除音乐
    @RequestMapping("/deleteAll")
    public ResponseBodyMessage<Boolean> deleteMusicAll(@RequestParam(value = "id[]") List<Integer> ids){
        String message = "";
        for (Integer id:ids) {
            //1.首先找到该音乐信息
            Music music = musicMapper.getMusicById(id);
            if(music==null){//音乐不存在
                //未找到该音乐
                //保存这个音乐id信息
                message += id+" ";
                continue;
                //return new ResponseBodyMessage<>(-1,"需要删除的音乐不存在",false);
            }
            //2.进行音乐删除
            //2.1 删除服务器下的音乐文件
            //找到服务器下该音乐文件路径
            File file = new File(SAVE_PATH+File.separator+music.getTitle()+".mp3");
            System.out.println("musicPath:"+file.getPath());
            if(file==null){//服务器下不存在该文件
                //保存这个id信息
                 message += id + "";
                 continue;
                //return new ResponseBodyMessage<>(-1,"删除失败,服务器下未找到该文件信息",false);
            }
            //删除
            if(!file.delete()){
                //删除失败
                message += id + "";
                continue;
                //return new ResponseBodyMessage<>(-1,"服务器删除失败",false);
            }
            //2.2 删除数据库下的音乐信息
            int ret = musicMapper.deleteById(id);
            if(ret!=1){//数据库删除失败
                message += id+" ";
                continue;
                //return new ResponseBodyMessage<>(-1,"数据库信息删除失败",false);
            }
            //取消该歌曲的所有收藏
            loveMusicMapper.deleteLoveMusicByMusicId(id);
        }
        if(message==""){
            return new ResponseBodyMessage<>(0,"删除成功!",true);
        }
        //部分删除失败
        return new ResponseBodyMessage<>(0,"id:" + message+" 删除失败!",true);
    }

验证结果:

数据库信息:

image-20220802085312234

我们将music_id为51音乐删除!

image-20220802085918389

image-20220802085753764