架构性调整【懒得区分了,哈哈哈哈】,主要是跑通了第一个功能测试

This commit is contained in:
guo
2024-07-11 22:59:16 +08:00
parent 39539e5ef6
commit b1358eaca0
24 changed files with 460 additions and 148 deletions
+41 -8
View File
@@ -15,6 +15,9 @@
<description>LearningProgressTracker</description> <description>LearningProgressTracker</description>
<properties> <properties>
<java.version>17</java.version> <java.version>17</java.version>
<mapstruct.version>1.5.5.Final</mapstruct.version>
<lombok.version>1.18.30</lombok.version>
<lombok-mapstruct-binding.version>0.2.0</lombok-mapstruct-binding.version>
</properties> </properties>
<dependencies> <dependencies>
<dependency> <dependency>
@@ -31,8 +34,9 @@
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
<optional>true</optional> <version>${lombok.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId> <artifactId>spring-boot-starter-test</artifactId>
@@ -51,6 +55,7 @@
<groupId>org.flywaydb</groupId> <groupId>org.flywaydb</groupId>
<artifactId>flyway-mysql</artifactId> <artifactId>flyway-mysql</artifactId>
</dependency> </dependency>
<!--引入mysql-connector--> <!--引入mysql-connector-->
<dependency> <dependency>
<groupId>mysql</groupId> <groupId>mysql</groupId>
@@ -63,11 +68,23 @@
<version>1.2.8</version> <version>1.2.8</version>
</dependency> </dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<dependency> <dependency>
<groupId>com.baomidou</groupId> <groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId> <artifactId>mybatis-plus-boot-starter</artifactId>
<exclusions> <exclusions>
<!-- 排除mybatis-spring,此版本的mybatis-plus中自带的mybatis-spring和springboot3不兼容--> <!-- 排除mybatis-spring,此版本的mybatis-plus中自带的mybatis-spring和springboot3不兼容-->
<exclusion> <exclusion>
<groupId>org.mybatis</groupId> <groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId> <artifactId>mybatis-spring</artifactId>
@@ -99,15 +116,31 @@
<build> <build>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration> <configuration>
<excludes> <forceJavacCompilerUse>true</forceJavacCompilerUse>
<exclude> <source>17</source>
<target>17</target>
<compilerArgs>--enable-preview</compilerArgs>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
</exclude> <version>${lombok.version}</version>
</excludes> </path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>${lombok-mapstruct-binding.version}</version>
</path>
</annotationProcessorPaths>
</configuration> </configuration>
</plugin> </plugin>
</plugins> </plugins>
@@ -0,0 +1,41 @@
package com.guo.learningprogresstracker.config;
import cn.dev33.satoken.stp.StpUtil;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.guo.learningprogresstracker.entity.UserEntity;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;
import java.time.LocalDateTime;
import java.util.Date;
/**
* 用于配置
*
* @author guo
*/
@Configuration
@Slf4j
public class AutoTableField implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("insert autoField");
this.strictInsertFill(metaObject, "createdBy", StpUtil::getLoginIdAsString, String.class);
this.strictInsertFill(metaObject, "createdTime", LocalDateTime::now, LocalDateTime.class);
this.strictInsertFill(metaObject, "lastModifiedBy", StpUtil::getLoginIdAsString, String.class);
this.strictInsertFill(metaObject, "lastModifiedTime", LocalDateTime::now, LocalDateTime.class);
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "lastModifiedBy", StpUtil::getLoginIdAsString, String.class);
this.strictInsertFill(metaObject, "lastModifiedTime", LocalDateTime::now, LocalDateTime.class);
}
}
@@ -0,0 +1,9 @@
package com.guo.learningprogresstracker.controller;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class StudySessionController {
}
@@ -1,26 +1,59 @@
package com.guo.learningprogresstracker.controller; package com.guo.learningprogresstracker.controller;
import com.guo.learningprogresstracker.entity.CommonResult; import com.guo.learningprogresstracker.entity.CommonResult;
import com.guo.learningprogresstracker.dto.request.TaskRequest;
import com.guo.learningprogresstracker.service.TasksService; import com.guo.learningprogresstracker.service.TasksService;
import com.guo.learningprogresstracker.service.impl.TasksServiceImpl; import io.swagger.v3.oas.annotations.Operation;
import org.springframework.stereotype.Controller; import lombok.RequiredArgsConstructor;
import org.springframework.scheduling.config.Task;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
/** /**
* 任务控制层 * 任务控制层
* @author guo
*/ */
@Controller @RestController
@RequiredArgsConstructor
public class TaskController { public class TaskController {
private final TasksService tasksService; private final TasksService tasksService;
public TaskController(TasksServiceImpl tasksService) { @PostMapping("/tasks")
this.tasksService = tasksService; @Operation(summary = "添加新任务")
public CommonResult addTask(@RequestBody TaskRequest taskRequest) {
return CommonResult.success(tasksService.addTask(taskRequest));
} }
@Operation(summary = "任务详情API-未完成")
@GetMapping("/tasks/{taskId}") @GetMapping("/tasks/{taskId}")
public CommonResult<TaskInfoResult> showTask(@PathVariable("taskId") String taskId) { public CommonResult showTask(@PathVariable("taskId") String taskId) {
return CommonResult.success(tasksService.showTask(taskId)); return CommonResult.success(tasksService.showTask(taskId));
} }
@PutMapping("/tasks/{taskId}")
@Operation(summary = "更新任务详情")
public CommonResult updateTask(@PathVariable("taskId") String taskId, @RequestBody Task updatedTask) {
// return CommonResult.success(tasksService.updateTask(taskId, updatedTask));
return null;
}
@DeleteMapping("/tasks/{taskId}")
@Operation(summary = "删除指定任务")
public CommonResult deleteTask(@PathVariable("taskId") String taskId) {
// return CommonResult.success(tasksService.deleteTask(taskId));
return null;
}
@GetMapping("/tasks")
@Operation(summary = "获取所有任务列表")
public CommonResult listTasks() {
// return CommonResult.success(tasksService.listTasks());
return null;
}
} }
@@ -0,0 +1,31 @@
package com.guo.learningprogresstracker.dto;
import lombok.Data;
@Data
public class PriorityDto {
/**
* 用户设置的任务紧急性
*/
private Integer urgency;
/**
* 用户设置的任务重要性
*/
private Integer importance;
/**
* 任务的内容难度
*/
private Integer contentDifficulty;
/**
* 任务的未来价值
*/
private Integer futureValue;
/**
* 用户对任务的主观优先级
*/
private Integer subjectivePriority;
}
@@ -0,0 +1,53 @@
package com.guo.learningprogresstracker.dto.request;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
/**
* 学习任务-请求参数-创建
*/
@Data
public class TaskRequest {
static class Create{}
/**
* 学习任务的名称
*/
@NotEmpty(message = "必须指定非空的任务名称", groups = TaskRequest.Create.class)
private String taskName;
/**
* 学习材料的存储URL
*/
private String materialUrl;
/**
* 用户设置的任务紧急性
*/
@NotEmpty(message = "必须指定【任务紧急性】指标", groups = Create.class)
private Integer urgency;
/**
* 用户设置的任务重要性
*/
@NotEmpty(message = "必须指定【任务重要性】指标", groups = Create.class)
private Integer importance;
/**
* 任务的内容难度
*/
@NotEmpty(message = "必须指定【内容难度】指标", groups = Create.class)
private Integer contentDifficulty;
/**
* 任务的未来价值
*/
@NotEmpty(message = "必须指定【未来价值】指标", groups = Create.class)
private Integer futureValue;
/**
* 用户对任务的主观优先级
*/
@NotEmpty(message = "必须指定【主观优先级】指标", groups = Create.class)
private Integer subjectivePriority;
}
@@ -0,0 +1,23 @@
package com.guo.learningprogresstracker.dto.response;
import lombok.Data;
import java.util.List;
@Data
public class TaskInfoResponse {
// 任务列表
private List<TaskInfo> taskList;
static class TaskInfo{
// 任务名称
private String taskName;
// 任务描述
private String taskDescription;
// 任务优先级
private Integer taskPriority;
// 上次该任务学习情况
private String lastLearningStatus;
}
}
@@ -15,12 +15,12 @@ public class BaseEntity {
@TableField(fill = FieldFill.INSERT) @TableField(fill = FieldFill.INSERT)
private LocalDateTime createdTime; private LocalDateTime createdTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
@TableField(fill = FieldFill.INSERT) @TableField(fill = FieldFill.INSERT)
private String createdBy; private String createdBy;
@TableField(fill = FieldFill.INSERT_UPDATE) @TableField(fill = FieldFill.INSERT_UPDATE)
private String updatedBy; private LocalDateTime lastModifiedTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private String lastModifiedBy;
} }
@@ -33,29 +33,6 @@ public class StudyExpectationsEntity extends BaseEntity implements Serializable
@TableField(value = "description") @TableField(value = "description")
private String description; private String description;
/**
*
*/
@TableField(value = "created_time")
private LocalDateTime createdTime;
/**
*
*/
@TableField(value = "created_by")
private String createdBy;
/**
*
*/
@TableField(value = "last_modified_time")
private LocalDateTime lastModifiedTime;
/**
*
*/
@TableField(value = "last_modified_by")
private String lastModifiedBy;
@TableField(exist = false) @TableField(exist = false)
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@@ -33,29 +33,6 @@ public class StudyReportFragmentsEntity extends BaseEntity implements Serializab
@TableField(value = "content") @TableField(value = "content")
private String content; private String content;
/**
* 创建时间
*/
@TableField(value = "created_time")
private LocalDateTime createdTime;
/**
*
*/
@TableField(value = "created_by")
private String createdBy;
/**
*
*/
@TableField(value = "last_modified_time")
private LocalDateTime lastModifiedTime;
/**
*
*/
@TableField(value = "last_modified_by")
private String lastModifiedBy;
@TableField(exist = false) @TableField(exist = false)
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@@ -33,29 +33,6 @@ public class StudyReportsEntity extends BaseEntity implements Serializable {
@TableField(value = "content") @TableField(value = "content")
private String content; private String content;
/**
* 创建时间
*/
@TableField(value = "created_time")
private LocalDateTime createdTime;
/**
*
*/
@TableField(value = "created_by")
private String createdBy;
/**
*
*/
@TableField(value = "last_modified_time")
private LocalDateTime lastModifiedTime;
/**
*
*/
@TableField(value = "last_modified_by")
private String lastModifiedBy;
@TableField(exist = false) @TableField(exist = false)
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@@ -63,29 +63,6 @@ public class StudySessionsEntity extends BaseEntity implements Serializable {
@TableField(value = "session_state") @TableField(value = "session_state")
private String sessionState; private String sessionState;
/**
*
*/
@TableField(value = "created_by")
private String createdBy;
/**
*
*/
@TableField(value = "last_modified_time")
private LocalDateTime lastModifiedTime;
/**
*
*/
@TableField(value = "last_modified_by")
private String lastModifiedBy;
/**
*
*/
@TableField(value = "created_time")
private LocalDateTime createdTime;
@TableField(exist = false) @TableField(exist = false)
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@@ -6,9 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable; import java.io.Serializable;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.Null;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
/** /**
* 存储学习任务的基本信息,包括优先级的多维度计算 * 存储学习任务的基本信息,包括优先级的多维度计算
@@ -17,11 +16,15 @@ import lombok.Data;
@TableName(value ="tasks") @TableName(value ="tasks")
@Data @Data
public class TaskEntity extends BaseEntity implements Serializable { public class TaskEntity extends BaseEntity implements Serializable {
@TableId(value = "id",type = IdType.AUTO)
private int id;
/** /**
* * 任务编码
*/ */
@TableId(value = "task_id", type = IdType.AUTO) @TableField(value = "task_num")
private Integer taskId; private String taskNum;
/** /**
* 学习任务的名称 * 学习任务的名称
@@ -31,29 +31,6 @@ public class UserTaskEntity extends BaseEntity implements Serializable {
@TableField(value = "task_id") @TableField(value = "task_id")
private Integer taskId; private Integer taskId;
/**
*
*/
@TableField(value = "created_time")
private LocalDateTime createdTime;
/**
*
*/
@TableField(value = "created_by")
private String createdBy;
/**
*
*/
@TableField(value = "last_modified_time")
private LocalDateTime lastModifiedTime;
/**
*
*/
@TableField(value = "last_modified_by")
private String lastModifiedBy;
@TableField(exist = false) @TableField(exist = false)
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@@ -0,0 +1,17 @@
package com.guo.learningprogresstracker.mapStruct;
import com.guo.learningprogresstracker.dto.PriorityDto;
import com.guo.learningprogresstracker.dto.request.TaskRequest;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
import org.mapstruct.factory.Mappers;
/**
* @author guo
*/
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface RequestConvert {
RequestConvert MAPPER = Mappers.getMapper(RequestConvert.class);
PriorityDto taskRequestToPriorityDto(TaskRequest taskRequest);
}
@@ -0,0 +1,20 @@
package com.guo.learningprogresstracker.mapStruct;
import com.guo.learningprogresstracker.dto.request.TaskRequest;
import com.guo.learningprogresstracker.entity.TaskEntity;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
import org.mapstruct.factory.Mappers;
/**
* 任务相关转换
* @author guo
*/
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface TaskConvert {
TaskConvert MAPPER = Mappers.getMapper(TaskConvert.class);
TaskEntity taskRequestToTaskEntity(TaskRequest taskRequest);
}
@@ -1,6 +1,6 @@
package com.guo.learningprogresstracker.mapper; package com.guo.learningprogresstracker.mapper;
import com.guo.learningprogresstracker.entity.TasksEntity; import com.guo.learningprogresstracker.entity.TaskEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@@ -11,7 +11,7 @@ import org.apache.ibatis.annotations.Mapper;
* @Entity com.guo.learningprogresstracker.entity.TasksEntity * @Entity com.guo.learningprogresstracker.entity.TasksEntity
*/ */
@Mapper @Mapper
public interface TasksMapper extends BaseMapper<TasksEntity> { public interface TasksMapper extends BaseMapper<TaskEntity> {
} }
@@ -1,6 +1,8 @@
package com.guo.learningprogresstracker.service; package com.guo.learningprogresstracker.service;
import com.guo.learningprogresstracker.entity.TasksEntity; import com.guo.learningprogresstracker.dto.request.TaskRequest;
import com.guo.learningprogresstracker.dto.response.TaskInfoResponse;
import com.guo.learningprogresstracker.entity.TaskEntity;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
/** /**
@@ -8,6 +10,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
* @description 针对表【tasks(存储学习任务的基本信息,包括优先级的多维度计算)】的数据库操作Service * @description 针对表【tasks(存储学习任务的基本信息,包括优先级的多维度计算)】的数据库操作Service
* @createDate 2024-06-09 15:28:48 * @createDate 2024-06-09 15:28:48
*/ */
public interface TasksService extends IService<TasksEntity> { public interface TasksService extends IService<TaskEntity> {
TaskInfoResponse showTask(String taskId);
String addTask(TaskRequest taskRequest);
} }
@@ -1,9 +1,17 @@
package com.guo.learningprogresstracker.service.impl; package com.guo.learningprogresstracker.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.guo.learningprogresstracker.entity.TasksEntity; import com.guo.learningprogresstracker.dto.PriorityDto;
import com.guo.learningprogresstracker.dto.request.TaskRequest;
import com.guo.learningprogresstracker.dto.response.TaskInfoResponse;
import com.guo.learningprogresstracker.entity.TaskEntity;
import com.guo.learningprogresstracker.mapStruct.RequestConvert;
import com.guo.learningprogresstracker.mapStruct.TaskConvert;
import com.guo.learningprogresstracker.service.TasksService; import com.guo.learningprogresstracker.service.TasksService;
import com.guo.learningprogresstracker.mapper.TasksMapper; import com.guo.learningprogresstracker.mapper.TasksMapper;
import com.guo.learningprogresstracker.utils.CalculatedPriorityTool;
import com.guo.learningprogresstracker.utils.GenerateNumTool;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
@@ -12,9 +20,27 @@ import org.springframework.stereotype.Service;
* @createDate 2024-06-09 15:28:48 * @createDate 2024-06-09 15:28:48
*/ */
@Service @Service
public class TasksServiceImpl extends ServiceImpl<TasksMapper, TasksEntity> @RequiredArgsConstructor
public class TasksServiceImpl extends ServiceImpl<TasksMapper, TaskEntity>
implements TasksService{ implements TasksService{
@Override
public TaskInfoResponse showTask(String taskId) {
TaskInfoResponse result = new TaskInfoResponse();
return result;
}
@Override
public String addTask(TaskRequest taskRequest) {
TaskEntity task= TaskConvert.MAPPER.taskRequestToTaskEntity(taskRequest);
task.setTaskNum(GenerateNumTool.generateNum("TASK"));
PriorityDto priorityDto = RequestConvert.MAPPER.taskRequestToPriorityDto(taskRequest);
task.setCalculatedPriority(CalculatedPriorityTool.calculatedPriority(priorityDto));
this.save(task);
return task.getTaskNum();
}
} }
@@ -0,0 +1,40 @@
package com.guo.learningprogresstracker.utils;
import com.guo.learningprogresstracker.dto.PriorityDto;
/**
* 加权优先级计算工具
*
* @author guo
*/
public class CalculatedPriorityTool {
/**
* 通过用户选择的5个选项,结合定义的权重计算任务的加权优先级。
* 急迫性 (Urgency)
* 急迫性代表任务的紧急程度。权重:0.35
* <p>
* 重要性 (Importance)
* 重要性指示任务的重要程度。权重:0.25
* <p>
* 内容难度 (Content Difficulty)
* 内容难度衡量任务内容的复杂性。权重:0.20
* <p>
* 未来价值 (Future Value)
* 未来价值估计完成任务的长期价值。权重:0.10
* <p>
* 主观优先级 (Subjective Priority)
* 主观优先级是用户对任务优先级的个人评估。权重:0.10
*
* @param priorityDto
* @return
*/
public static Double calculatedPriority(PriorityDto priorityDto) {
// 暂时写死权重,也许可以考虑让用户自行配置权重
return (priorityDto.getUrgency() * 0.35) +
(priorityDto.getImportance() * 0.25) +
(priorityDto.getContentDifficulty() * 0.20) +
(priorityDto.getFutureValue() * 0.10) +
(priorityDto.getSubjectivePriority() * 0.10);
}
}
@@ -12,7 +12,7 @@ import java.util.Date;
*/ */
@RequiredArgsConstructor @RequiredArgsConstructor
public class GenerateNumTool { public class GenerateNumTool {
public static int getNextSequence() { private static int getNextSequence() {
// 获取当前时间的毫秒级时间戳 // 获取当前时间的毫秒级时间戳
long timestamp = System.currentTimeMillis(); long timestamp = System.currentTimeMillis();
@@ -27,7 +27,18 @@ public class GenerateNumTool {
* @param separator * @param separator
* @return * @return
*/ */
public String generateNum(String prefix, String separator) { public static String generateNum(String prefix, String separator) {
String currentDate = new SimpleDateFormat("yyyyMMdd").format(new Date());
// 唯一的后缀
int sequence = getNextSequence();
// 返回完整的 taskNum
return prefix + separator + currentDate + separator + sequence;
}
public static String generateNum(String prefix) {
String separator = "-";
String currentDate = new SimpleDateFormat("yyyyMMdd").format(new Date()); String currentDate = new SimpleDateFormat("yyyyMMdd").format(new Date());
// 唯一的后缀 // 唯一的后缀
+1 -1
View File
@@ -9,7 +9,7 @@ spring:
password: password:
flyway: flyway:
# 是否启动 flyway # 是否启动 flyway
enabled: true enabled: false
# 文件编码 # 文件编码
encoding: UTF-8 encoding: UTF-8
# SQL 脚本位置,默认位于 classpath 下的 db/migration 目录 # SQL 脚本位置,默认位于 classpath 下的 db/migration 目录
+1 -1
View File
@@ -4,7 +4,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.guo.learningprogresstracker.mapper.TasksMapper"> <mapper namespace="com.guo.learningprogresstracker.mapper.TasksMapper">
<resultMap id="BaseResultMap" type="com.guo.learningprogresstracker.entity.TasksEntity"> <resultMap id="BaseResultMap" type="com.guo.learningprogresstracker.entity.TaskEntity">
<id property="taskId" column="task_id" jdbcType="INTEGER"/> <id property="taskId" column="task_id" jdbcType="INTEGER"/>
<result property="taskName" column="task_name" jdbcType="VARCHAR"/> <result property="taskName" column="task_name" jdbcType="VARCHAR"/>
<result property="materialUrl" column="material_url" jdbcType="VARCHAR"/> <result property="materialUrl" column="material_url" jdbcType="VARCHAR"/>
@@ -0,0 +1,81 @@
package com.guo.learningprogresstracker.controller;
import cn.dev33.satoken.stp.StpUtil;
import com.guo.learningprogresstracker.dto.request.TaskRequest;
import com.guo.learningprogresstracker.dto.response.TaskInfoResponse;
import com.guo.learningprogresstracker.entity.CommonResult;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@SpringBootTest
class TaskControllerTest {
@Autowired
private TaskController taskController;
@BeforeEach
void setUp() {
StpUtil.login("测试用户", "test_driver");
}
@Test
void addTask() {
TaskRequest taskRequest = mock(TaskRequest.class);
// 设置学习任务的名称
when(taskRequest.getTaskName()).thenReturn("测试任务名称");
// 设置学习材料的存储URL
when(taskRequest.getMaterialUrl()).thenReturn("http://example.com/material");
// 设置用户设置的任务紧急性
when(taskRequest.getUrgency()).thenReturn(5);
// 设置用户设置的任务重要性
when(taskRequest.getImportance()).thenReturn(3);
// 设置任务的内容难度
when(taskRequest.getContentDifficulty()).thenReturn(4);
// 设置任务的未来价值
when(taskRequest.getFutureValue()).thenReturn(5);
// 设置用户对任务的主观优先级
when(taskRequest.getSubjectivePriority()).thenReturn(2);
CommonResult commonResult = taskController.addTask(taskRequest);
// 验证 addTask 是否被调用一次
assertEquals(commonResult.getCode(), 200,"测试数据插入失败");
}
@Test
void showTask() {
String taskId = mock(String.class);
TaskInfoResponse mockData = mock(TaskInfoResponse.class);
CommonResult commonResult = taskController.showTask(taskId);
assertEquals(commonResult.getCode(),200,"获取数据失败");
assertNotNull(commonResult.getData(),"返回值中不存在数据");
assertEquals(commonResult.getData(),mockData,"返回值携带数据不正确");
}
@Test
void updateTask() {
}
@Test
void deleteTask() {
}
@Test
void listTasks() {
}
}