举报相关上传

Change-Id: I3c13243a1442cc4ed00844d1a554f24f7313d8bb
diff --git a/src/main/java/com/pt5/pthouduan/controller/ComplainController.java b/src/main/java/com/pt5/pthouduan/controller/ComplainController.java
new file mode 100644
index 0000000..45ef0e2
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/controller/ComplainController.java
@@ -0,0 +1,78 @@
+package com.pt5.pthouduan.controller;
+
+import com.pt5.pthouduan.entity.Complain;
+import com.pt5.pthouduan.service.ComplainService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.stereotype.Controller;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  投诉前端控制器
+ * </p>
+ *
+ * 功能:增、删、改、查(按被投诉用户ID)
+ *
+ * @author ym
+ * @since 2025-04-14
+ */
+@CrossOrigin(origins = {"http://localhost:5173", "http://localhost:3000"})
+@Controller
+@RequestMapping("/complain")
+public class ComplainController {
+
+    @Autowired
+    private ComplainService complainService;
+
+    // 创建投诉
+    @PostMapping("/create")
+    @ResponseBody
+    public Complain createComplain(@RequestBody Complain complain) {
+        System.out.println("Received complain: " + complain);  // 输出接收到的投诉数据
+        return complainService.createComplain(complain);
+    }
+
+    // 删除投诉(根据complainid)
+    @DeleteMapping("/delete/{complainid}")
+    @ResponseBody
+    public boolean deleteComplain(@PathVariable Integer complainid) {
+        return complainService.deleteComplain(complainid);
+    }
+
+    // 更新投诉内容
+    @PutMapping("/update")
+    @ResponseBody
+    public boolean updateComplain(@RequestBody Complain complain) {
+        return complainService.updateComplain(complain);
+    }
+
+    // 获取某个用户被投诉的所有记录(根据duser)
+    @GetMapping("/target/{duser}")
+    @ResponseBody
+    public List<Complain> getComplainsByTargetUser(@PathVariable Long duser) {
+        return complainService.getComplainsByTargetUser(duser);
+    }
+
+    // 获取某个用户提交的所有投诉记录(根据puse)
+    @GetMapping("/from/{puse}")
+    @ResponseBody
+    public List<Complain> getComplainsByPostingUser(@PathVariable Long puse) {
+        return complainService.getComplainsByPostingUser(puse);
+    }
+
+    // 获取所有投诉记录(管理员查看用)
+    @GetMapping("/all")
+    @ResponseBody
+    public List<Complain> getAllComplains() {
+        return complainService.getAllComplains();
+    }
+
+    // 根据投诉号获取对应的投诉人、被投诉人和种子号
+    @GetMapping("/info/{complainid}")
+    @ResponseBody
+    public Complain getComplainInfo(@PathVariable Integer complainid) {
+        return complainService.getComplainById(complainid);
+    }
+}
diff --git a/src/main/java/com/pt5/pthouduan/entity/Complain.java b/src/main/java/com/pt5/pthouduan/entity/Complain.java
new file mode 100644
index 0000000..6a57648
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/Complain.java
@@ -0,0 +1,82 @@
+package com.pt5.pthouduan.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 投诉记录实体类
+ * </p>
+ *
+ * @author ym
+ * @since 2025-04-14
+ */
+@TableName("complain")
+public class Complain implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId("complainid")
+    private Integer complainid;
+
+    private Long puse;
+
+    private Long duser;
+
+    private String content;
+
+    private Long torrentid;
+
+    public Integer getComplainid() {
+        return complainid;
+    }
+
+    public void setComplainid(Integer complainid) {
+        this.complainid = complainid;
+    }
+
+    public Long getPuse() {
+        return puse;
+    }
+
+    public void setPuse(Long puse) {
+        this.puse = puse;
+    }
+
+    public Long getDuser() {
+        return duser;
+    }
+
+    public void setDuser(Long duser) {
+        this.duser = duser;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Long getTorrentid() {
+        return torrentid;
+    }
+
+    public void setTorrentid(Long torrentid) {
+        this.torrentid = torrentid;
+    }
+
+    @Override
+    public String toString() {
+        return "Complain{" +
+                "complainid=" + complainid +
+                ", puse=" + puse +
+                ", duser=" + duser +
+                ", content='" + content + '\'' +
+                ", torrentid=" + torrentid +
+                '}';
+    }
+}
diff --git a/src/main/java/com/pt5/pthouduan/mapper/ComplainMapper.java b/src/main/java/com/pt5/pthouduan/mapper/ComplainMapper.java
new file mode 100644
index 0000000..c39557d
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/mapper/ComplainMapper.java
@@ -0,0 +1,45 @@
+package com.pt5.pthouduan.mapper;
+
+import com.pt5.pthouduan.entity.Complain;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 投诉 Mapper 接口
+ * </p>
+ *
+ * 功能:增、删、改、查(按被投诉用户ID和投诉发起人ID)
+ *
+ * @author ym
+ * @since 2025-04-14
+ */
+@Mapper
+public interface ComplainMapper extends BaseMapper<Complain> {
+
+    // 创建投诉
+    void save(Complain complain);
+
+    // 根据投诉ID删除
+    int deleteByComplainid(@Param("complainid") Integer complainid);
+
+    // 更新投诉
+    int updateComplain(Complain complain);
+
+    // 根据被投诉用户ID查询投诉列表
+    List<Complain> selectByDuser(@Param("duser") Long duser);
+
+    // 根据投诉发起人ID查询投诉列表
+    List<Complain> selectByPuse(@Param("puse") Long puse);
+
+    // 根据投诉ID查询投诉记录
+    Complain selectByComplainId(@Param("complainid") Integer complainid);
+
+    // 获取所有投诉记录
+    List<Complain> selectAllComplains();
+
+
+}
diff --git a/src/main/java/com/pt5/pthouduan/service/ComplainService.java b/src/main/java/com/pt5/pthouduan/service/ComplainService.java
new file mode 100644
index 0000000..896f748
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/service/ComplainService.java
@@ -0,0 +1,38 @@
+package com.pt5.pthouduan.service;
+
+import com.pt5.pthouduan.entity.Complain;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 投诉服务接口
+ * </p>
+ *
+ * 功能:增、删、改、查(按被投诉用户ID、投诉发起人ID)
+ *
+ * @author ym
+ * @since 2025-04-14
+ */
+public interface ComplainService {
+
+    // 创建投诉
+    Complain createComplain(Complain complain);
+
+    // 删除投诉
+    boolean deleteComplain(Integer complainid);
+
+    // 更新投诉
+    boolean updateComplain(Complain complain);
+
+    // 根据被投诉用户ID查询投诉
+    List<Complain> getComplainsByTargetUser(Long duser);
+
+    // 根据投诉发起人ID查询投诉
+    List<Complain> getComplainsByPostingUser(Long puse);
+
+    List<Complain> getAllComplains();
+
+    Complain getComplainById(Integer complainid);
+
+}
diff --git a/src/main/java/com/pt5/pthouduan/service/impl/ComplainServiceImpl.java b/src/main/java/com/pt5/pthouduan/service/impl/ComplainServiceImpl.java
new file mode 100644
index 0000000..84b0be2
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/service/impl/ComplainServiceImpl.java
@@ -0,0 +1,64 @@
+package com.pt5.pthouduan.service.impl;
+
+import com.pt5.pthouduan.entity.Complain;
+import com.pt5.pthouduan.mapper.ComplainMapper;
+import com.pt5.pthouduan.service.ComplainService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 投诉服务实现类
+ * </p>
+ *
+ * 实现了投诉的增删改查逻辑
+ *
+ * @author ym
+ * @since 2025-04-14
+ */
+@Service
+public class ComplainServiceImpl implements ComplainService {
+
+    @Autowired
+    private ComplainMapper complainMapper;
+
+    @Override
+    public Complain createComplain(Complain complain) {
+        complainMapper.save(complain);
+        return complain;
+    }
+
+    @Override
+    public boolean deleteComplain(Integer complainid) {
+        return complainMapper.deleteByComplainid(complainid) > 0;
+    }
+
+    @Override
+    public boolean updateComplain(Complain complain) {
+        return complainMapper.updateComplain(complain) > 0;
+    }
+
+    @Override
+    public List<Complain> getComplainsByTargetUser(Long duser) {
+        return complainMapper.selectByDuser(duser);
+    }
+
+    @Override
+    public List<Complain> getComplainsByPostingUser(Long puse) {
+        return complainMapper.selectByPuse(puse);
+    }
+
+    @Override
+    public List<Complain> getAllComplains() {
+        return complainMapper.selectList(null); // 查询全部记录
+    }
+
+    @Override
+    public Complain getComplainById(Integer complainid) {
+        return complainMapper.selectById(complainid); // 根据主键查记录
+    }
+
+
+}
diff --git a/src/main/resources/mapper/ComplainMapper.xml b/src/main/resources/mapper/ComplainMapper.xml
new file mode 100644
index 0000000..978ca2e
--- /dev/null
+++ b/src/main/resources/mapper/ComplainMapper.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="com.pt5.pthouduan.mapper.ComplainMapper">
+
+    <!-- 插入投诉 -->
+    <insert id="save" parameterType="com.pt5.pthouduan.entity.Complain" useGeneratedKeys="true" keyProperty="complainid">
+        INSERT INTO complain (puse, duser, content, torrentid)
+        VALUES (#{puse}, #{duser}, #{content}, #{torrentid})
+    </insert>
+
+    <!-- 根据投诉ID删除投诉 -->
+    <delete id="deleteByComplainid" parameterType="int">
+        DELETE FROM complain WHERE complainid = #{complainid}
+    </delete>
+
+    <!-- 更新投诉 -->
+    <update id="updateComplain" parameterType="com.pt5.pthouduan.entity.Complain">
+        UPDATE complain
+        SET puse = #{puse},
+            duser = #{duser},
+            content = #{content},
+            torrentid = #{torrentid}
+        WHERE complainid = #{complainid}
+    </update>
+
+    <!-- 根据被投诉用户ID查询投诉列表 -->
+    <select id="selectByDuser" parameterType="long" resultType="com.pt5.pthouduan.entity.Complain">
+        SELECT * FROM complain
+        WHERE duser = #{duser}
+        ORDER BY complainid DESC
+    </select>
+
+    <!-- 根据投诉发起人ID查询投诉列表 -->
+    <select id="selectByPuse" parameterType="long" resultType="com.pt5.pthouduan.entity.Complain">
+        SELECT * FROM complain
+        WHERE puse = #{puse}
+        ORDER BY complainid DESC
+    </select>
+
+    <!-- ✅ 获取所有投诉记录 -->
+    <select id="selectAllComplains" resultType="com.pt5.pthouduan.entity.Complain">
+        SELECT * FROM complain
+        ORDER BY complainid DESC
+    </select>
+
+    <!-- ✅ 根据投诉ID查询投诉详情 -->
+    <select id="selectByComplainId" parameterType="int" resultType="com.pt5.pthouduan.entity.Complain">
+        SELECT * FROM complain
+        WHERE complainid = #{complainid}
+    </select>
+
+</mapper>
diff --git a/src/test/java/com/pt5/pthouduan/controller/ComplainControllerTest.java b/src/test/java/com/pt5/pthouduan/controller/ComplainControllerTest.java
new file mode 100644
index 0000000..105cc8b
--- /dev/null
+++ b/src/test/java/com/pt5/pthouduan/controller/ComplainControllerTest.java
@@ -0,0 +1,132 @@
+package com.pt5.pthouduan.controller;
+
+import com.pt5.pthouduan.entity.Complain;
+import com.pt5.pthouduan.service.ComplainService;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.Arrays;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+class ComplainControllerTest {
+
+    @Mock
+    private ComplainService complainService;
+
+    @InjectMocks
+    private ComplainController complainController;
+
+    @BeforeEach
+    void setUp() {
+        MockitoAnnotations.openMocks(this);
+    }
+
+    @Test
+    void createComplain_ShouldReturnCreatedComplain() {
+        Complain complain = new Complain();
+        complain.setComplainid(1);
+        complain.setPuse(100L);
+        complain.setDuser(200L);
+        complain.setContent("Bad behavior");
+        complain.setTorrentid(123L);
+
+        when(complainService.createComplain(any(Complain.class))).thenReturn(complain);
+
+        Complain result = complainController.createComplain(complain);
+
+        assertEquals("Bad behavior", result.getContent());
+        assertEquals(100L, result.getPuse());
+        verify(complainService).createComplain(any(Complain.class));
+    }
+
+    @Test
+    void deleteComplain_ShouldReturnTrue_WhenDeleted() {
+        when(complainService.deleteComplain(1)).thenReturn(true);
+
+        boolean result = complainController.deleteComplain(1);
+
+        assertTrue(result);
+        verify(complainService).deleteComplain(1);
+    }
+
+    @Test
+    void updateComplain_ShouldReturnTrue_WhenUpdated() {
+        Complain complain = new Complain();
+        complain.setComplainid(1);
+        complain.setContent("Updated complaint");
+
+        when(complainService.updateComplain(any(Complain.class))).thenReturn(true);
+
+        boolean result = complainController.updateComplain(complain);
+
+        assertTrue(result);
+        verify(complainService).updateComplain(complain);
+    }
+
+    @Test
+    void getComplainsByTargetUser_ShouldReturnList() {
+        Complain c1 = new Complain();
+        c1.setDuser(200L);
+        c1.setContent("Cheating");
+
+        when(complainService.getComplainsByTargetUser(200L)).thenReturn(List.of(c1));
+
+        List<Complain> result = complainController.getComplainsByTargetUser(200L);
+
+        assertEquals(1, result.size());
+        assertEquals("Cheating", result.get(0).getContent());
+    }
+
+    @Test
+    void getComplainsByPostingUser_ShouldReturnList() {
+        Complain c = new Complain();
+        c.setPuse(100L);
+        c.setContent("Spam complaint");
+
+        when(complainService.getComplainsByPostingUser(100L)).thenReturn(List.of(c));
+
+        List<Complain> result = complainController.getComplainsByPostingUser(100L);
+
+        assertEquals(1, result.size());
+        assertEquals("Spam complaint", result.get(0).getContent());
+    }
+
+    @Test
+    void getAllComplains_ShouldReturnAll() {
+        Complain c1 = new Complain();
+        c1.setContent("Complain A");
+        Complain c2 = new Complain();
+        c2.setContent("Complain B");
+
+        when(complainService.getAllComplains()).thenReturn(Arrays.asList(c1, c2));
+
+        List<Complain> result = complainController.getAllComplains();
+
+        assertEquals(2, result.size());
+        assertEquals("Complain A", result.get(0).getContent());
+        assertEquals("Complain B", result.get(1).getContent());
+    }
+
+    @Test
+    void getComplainInfo_ShouldReturnComplainDetails() {
+        Complain c = new Complain();
+        c.setComplainid(1);
+        c.setPuse(100L);
+        c.setDuser(200L);
+        c.setTorrentid(500L);
+
+        when(complainService.getComplainById(1)).thenReturn(c);
+
+        Complain result = complainController.getComplainInfo(1);
+
+        assertEquals(100L, result.getPuse());
+        assertEquals(200L, result.getDuser());
+        assertEquals(500L, result.getTorrentid());
+    }
+}