build:functional basic code

This commit is contained in:
WangXu10 2023-05-18 11:40:24 +08:00 committed by 刘瑞斌
parent 57bd98888c
commit 54a1910c7e
72 changed files with 1590 additions and 79 deletions

View File

@ -46,7 +46,7 @@
</dependency>
<dependency>
<groupId>io.metersphere</groupId>
<artifactId>metersphere-test-track</artifactId>
<artifactId>metersphere-functional-test</artifactId>
<version>${revision}</version>
</dependency>
<dependency>

View File

@ -269,15 +269,15 @@
<appender-ref ref="testPlanRefAppender"/>
</logger>
<!-- 自定义test-track模块日志 -->
<!-- 自定义functional-test模块日志 -->
<appender name="testTrackAppender"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<File>${logging.file.path}/test-track.log</File>
<File>${logging.file.path}/functional-test.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<FileNamePattern>${logging.file.path}/history/test-track.%d{yyyyMMdd}-%i.log</FileNamePattern>
<FileNamePattern>${logging.file.path}/history/functional-test.%d{yyyyMMdd}-%i.log</FileNamePattern>
<maxHistory>${logger.max.history:-30}</maxHistory>
<maxFileSize>50MB</maxFileSize>
</rollingPolicy>

View File

@ -0,0 +1,72 @@
package io.metersphere.functional.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.metersphere.validation.groups.Created;
import io.metersphere.validation.groups.Updated;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "用例评审")
@TableName("case_review")
@Data
public class CaseReview implements Serializable {
private static final long serialVersionUID = 1L;
@TableId
@NotBlank(message = "{case_review.id.not_blank}", groups = {Updated.class})
@ApiModelProperty(name = "ID", required = true, allowableValues = "range[1, 50]")
private String id;
@Size(min = 1, max = 200, message = "{case_review.name.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{case_review.name.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "名称", required = true, allowableValues = "range[1, 200]")
private String name;
@Size(min = 1, max = 64, message = "{case_review.status.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{case_review.status.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "评审状态:未开始/进行中/已完成/已结束/已归档", required = true, allowableValues = "range[1, 64]")
private String status;
@ApiModelProperty(name = "创建时间", required = true, dataType = "Long")
private Long createTime;
@ApiModelProperty(name = "更新时间", required = true, dataType = "Long")
private Long updateTime;
@ApiModelProperty(name = "评审结束时间", required = true, dataType = "Long")
private Long endTime;
@ApiModelProperty(name = "描述", required = false)
private String description;
@Size(min = 1, max = 50, message = "{case_review.project_id.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{case_review.project_id.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "项目ID", required = true, allowableValues = "range[1, 50]")
private String projectId;
@ApiModelProperty(name = "标签", required = false, allowableValues = "range[1, 1000]")
private String tags;
@Size(min = 1, max = 50, message = "{case_review.create_user.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{case_review.create_user.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "创建人", required = true, allowableValues = "range[1, 50]")
private String createUser;
@Size(min = 1, max = 64, message = "{case_review.review_pass_rule.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{case_review.review_pass_rule.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "评审规则:单人通过/全部通过", required = true, allowableValues = "range[1, 64]")
private String reviewPassRule;
}

View File

@ -0,0 +1,32 @@
package io.metersphere.functional.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.metersphere.validation.groups.Created;
import io.metersphere.validation.groups.Updated;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "用例评审关注人")
@TableName("case_review_follow")
@Data
public class CaseReviewFollow implements Serializable {
private static final long serialVersionUID = 1L;
@TableId
@NotBlank(message = "{case_review_follow.review_id.not_blank}", groups = {Updated.class})
@ApiModelProperty(name = "评审ID", required = true, allowableValues = "range[1, 50]")
private String reviewId;
@NotBlank(message = "{case_review_follow.follow_id.not_blank}", groups = {Updated.class})
@ApiModelProperty(name = "关注人", required = true, allowableValues = "range[1, 50]")
private String followId;
}

View File

@ -0,0 +1,64 @@
package io.metersphere.functional.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.metersphere.validation.groups.Created;
import io.metersphere.validation.groups.Updated;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "用例评审和功能用例的中间表")
@TableName("case_review_functional_case")
@Data
public class CaseReviewFunctionalCase implements Serializable {
private static final long serialVersionUID = 1L;
@TableId
@NotBlank(message = "{case_review_functional_case.id.not_blank}", groups = {Updated.class})
@ApiModelProperty(name = "ID", required = true, allowableValues = "range[1, 50]")
private String id;
@Size(min = 1, max = 50, message = "{case_review_functional_case.review_id.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{case_review_functional_case.review_id.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "评审ID", required = true, allowableValues = "range[1, 50]")
private String reviewId;
@Size(min = 1, max = 50, message = "{case_review_functional_case.case_id.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{case_review_functional_case.case_id.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "用例ID", required = true, allowableValues = "range[1, 50]")
private String caseId;
@Size(min = 1, max = 64, message = "{case_review_functional_case.status.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{case_review_functional_case.status.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "评审状态:进行中/通过/不通过/重新提审", required = true, allowableValues = "range[1, 64]")
private String status;
@ApiModelProperty(name = "创建时间", required = true, dataType = "Long")
private Long createTime;
@ApiModelProperty(name = "更新时间", required = true, dataType = "Long")
private Long updateTime;
@Size(min = 1, max = 50, message = "{case_review_functional_case.create_user.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{case_review_functional_case.create_user.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "创建人", required = true, allowableValues = "range[1, 50]")
private String createUser;
@ApiModelProperty(name = "自定义排序间隔5000", required = true, dataType = "Long")
private Long pos;
@Size(min = 1, max = 1, message = "{case_review_functional_case.deleted.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{case_review_functional_case.deleted.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "关联的用例是否放入回收站", required = true, allowableValues = "range[1, 1]")
private Boolean deleted;
}

View File

@ -0,0 +1,37 @@
package io.metersphere.functional.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.metersphere.validation.groups.Created;
import io.metersphere.validation.groups.Updated;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "功能用例评审和评审人的中间表")
@TableName("case_review_functional_case_user")
@Data
public class CaseReviewFunctionalCaseUser implements Serializable {
private static final long serialVersionUID = 1L;
@Size(min = 1, max = 50, message = "{case_review_functional_case_user.case_id.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{case_review_functional_case_user.case_id.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "功能用例和评审中间表的ID", required = true, allowableValues = "range[1, 50]")
private String caseId;
@Size(min = 1, max = 50, message = "{case_review_functional_case_user.review_id.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{case_review_functional_case_user.review_id.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "评审ID", required = true, allowableValues = "range[1, 50]")
private String reviewId;
@Size(min = 1, max = 50, message = "{case_review_functional_case_user.user_id.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{case_review_functional_case_user.user_id.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "评审人ID", required = true, allowableValues = "range[1, 50]")
private String userId;
}

View File

@ -0,0 +1,29 @@
package io.metersphere.functional.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.metersphere.validation.groups.Created;
import io.metersphere.validation.groups.Updated;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "评审和评审人中间表")
@TableName("case_review_user")
@Data
public class CaseReviewUser implements Serializable {
private static final long serialVersionUID = 1L;
@NotBlank(message = "{case_review_user.review_id.not_blank}", groups = {Updated.class})
@ApiModelProperty(name = "评审ID", required = true, allowableValues="range[1, 50]")
private String reviewId;
@NotBlank(message = "{case_review_user.user_id.not_blank}", groups = {Updated.class})
@ApiModelProperty(name = "评审人ID", required = true, allowableValues="range[1, 50]")
private String userId;
}

View File

@ -0,0 +1,38 @@
package io.metersphere.functional.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.metersphere.validation.groups.Created;
import io.metersphere.validation.groups.Updated;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "自定义字段功能用例关系")
@TableName("custom_field_test_case")
@Data
public class CustomFieldTestCase implements Serializable {
private static final long serialVersionUID = 1L;
@NotBlank(message = "{custom_field_test_case.resource_id.not_blank}", groups = {Updated.class})
@ApiModelProperty(name = "资源ID", required = true, allowableValues = "range[1, 50]")
private String resourceId;
@NotBlank(message = "{custom_field_test_case.field_id.not_blank}", groups = {Updated.class})
@ApiModelProperty(name = "字段ID", required = true, allowableValues = "range[1, 50]")
private String fieldId;
@ApiModelProperty(name = "字段值", required = false, allowableValues = "range[1, 1000]")
private String value;
@ApiModelProperty(name = "", required = false, allowableValues = "range[1, ]")
private String textValue;
}

View File

@ -0,0 +1,120 @@
package io.metersphere.functional.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.metersphere.validation.groups.Created;
import io.metersphere.validation.groups.Updated;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "功能用例")
@TableName("functional_case")
@Data
public class FunctionalCase implements Serializable {
private static final long serialVersionUID = 1L;
@TableId
@NotBlank(message = "{functional_case.id.not_blank}", groups = {Updated.class})
@ApiModelProperty(name = "ID", required = true, allowableValues = "range[1, 50]")
private String id;
@ApiModelProperty(name = "业务ID", required = true, dataType = "Integer")
private Integer num;
@Size(min = 1, max = 64, message = "{functional_case.custom_num.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case.custom_num.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "自定义业务ID", required = true, allowableValues = "range[1, 64]")
private String customNum;
@Size(min = 1, max = 50, message = "{functional_case.module_id.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case.module_id.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "模块ID", required = true, allowableValues = "range[1, 50]")
private String moduleId;
@Size(min = 1, max = 50, message = "{functional_case.project_id.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case.project_id.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "项目ID", required = true, allowableValues = "range[1, 50]")
private String projectId;
@Size(min = 1, max = 255, message = "{functional_case.name.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case.name.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "名称", required = true, allowableValues = "range[1, 255]")
private String name;
@Size(min = 1, max = 64, message = "{functional_case.review_status.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case.review_status.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "评审状态:未开始/进行中/已完成/已结束", required = true, allowableValues = "range[1, 64]")
private String reviewStatus;
@ApiModelProperty(name = "标签JSON)", required = false, allowableValues = "range[1, 1000]")
private String tags;
@Size(min = 1, max = 64, message = "{functional_case.step_model.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case.step_model.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "编辑模式:步骤模式/文本模式", required = true, allowableValues = "range[1, 64]")
private String stepModel;
@ApiModelProperty(name = "自定义排序间隔5000", required = true, dataType = "Long")
private Long pos;
@Size(min = 1, max = 50, message = "{functional_case.version_id.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case.version_id.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "版本ID", required = true, allowableValues = "range[1, 50]")
private String versionId;
@Size(min = 1, max = 50, message = "{functional_case.ref_id.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case.ref_id.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "指向初始版本ID", required = true, allowableValues = "range[1, 50]")
private String refId;
@Size(min = 1, max = 64, message = "{functional_case.last_execute_result.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case.last_execute_result.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "最近的执行结果:未执行/通过/失败/阻塞/跳过", required = true, allowableValues = "range[1, 64]")
private String lastExecuteResult;
@Size(min = 1, max = 1, message = "{functional_case.deleted.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case.deleted.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "是否在回收站0-否1-是", required = true, allowableValues = "range[1, 1]")
private Boolean deleted;
@Size(min = 1, max = 1, message = "{functional_case.public_case.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case.public_case.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "是否是公共用例0-否1-是", required = true, allowableValues = "range[1, 1]")
private Boolean publicCase;
@Size(min = 1, max = 1, message = "{functional_case.latest.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case.latest.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "是否为最新版本0-否1-是", required = true, allowableValues = "range[1, 1]")
private Boolean latest;
@Size(min = 1, max = 100, message = "{functional_case.create_user.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case.create_user.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "创建人", required = true, allowableValues = "range[1, 100]")
private String createUser;
@ApiModelProperty(name = "删除人", required = false, allowableValues = "range[1, 64]")
private String deleteUser;
@ApiModelProperty(name = "创建时间", required = true, dataType = "Long")
private Long createTime;
@ApiModelProperty(name = "更新时间", required = true, dataType = "Long")
private Long updateTime;
@ApiModelProperty(name = "删除时间", required = false, dataType = "Long")
private Long deleteTime;
}

View File

@ -0,0 +1,29 @@
package io.metersphere.functional.domain;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.metersphere.validation.groups.Created;
import io.metersphere.validation.groups.Updated;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;
@ApiModel(value = "功能用例和附件的中间表")
@TableName("functional_case_attachment")
@Data
public class FunctionalCaseAttachment implements Serializable {
private static final long serialVersionUID = 1L;
@NotBlank(message = "{functional_case_attachment.functional_case_id.not_blank}", groups = {Updated.class})
@ApiModelProperty(name = "功能用例ID", required = true, allowableValues = "range[1, 50]")
private String functionalCaseId;
@NotBlank(message = "{functional_case_attachment.file_id.not_blank}", groups = {Updated.class})
@ApiModelProperty(name = "文件的ID", required = true, allowableValues = "range[1, 50]")
private String fileId;
}

View File

@ -0,0 +1,43 @@
package io.metersphere.functional.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.metersphere.validation.groups.Updated;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "功能用例")
@TableName("functional_case_blob")
@Data
public class FunctionalCaseBlob implements Serializable {
private static final long serialVersionUID = 1L;
@TableId
@NotBlank(message = "{functional_case_blob.functional_case_id.not_blank}", groups = {Updated.class})
@ApiModelProperty(name = "功能用例ID", required = true, allowableValues = "range[1, 50]")
private String functionalCaseId;
@ApiModelProperty(name = "用例步骤JSON)step_model 为 0 时启用", required = false)
private String steps;
@ApiModelProperty(name = "步骤描述step_model 为 1 时启用", required = false)
private String stepDescription;
@ApiModelProperty(name = "预期结果step_model 为 1 时启用", required = false)
private String expectedResult;
@ApiModelProperty(name = "前置条件", required = false)
private String prerequisite;
@ApiModelProperty(name = "备注", required = false)
private String description;
}

View File

@ -0,0 +1,62 @@
package io.metersphere.functional.domain;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.metersphere.validation.groups.Created;
import io.metersphere.validation.groups.Updated;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;
@ApiModel(value = "功能用例评论")
@TableName("functional_case_comment")
@Data
public class FunctionalCaseComment implements Serializable {
private static final long serialVersionUID = 1L;
@TableId
@NotBlank(message = "{functional_case_comment.id.not_blank}", groups = {Updated.class})
@ApiModelProperty(name = "ID", required = true, allowableValues = "range[1, 50]")
private String id;
@Size(min = 1, max = 50, message = "{functional_case_comment.case_id.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case_comment.case_id.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "功能用例ID", required = true, allowableValues = "range[1, 50]")
private String caseId;
@Size(min = 1, max = 50, message = "{functional_case_comment.create_user.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case_comment.create_user.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "评论人", required = true, allowableValues = "range[1, 50]")
private String createUser;
@ApiModelProperty(name = "评论时添加的状态:通过/不通过/重新提审/通过标准变更标记/强制通过标记/强制不通过标记/状态变更标记", required = false, allowableValues = "range[1, 64]")
private String status;
@Size(min = 1, max = 64, message = "{functional_case_comment.type.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case_comment.type.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "评论类型:用例评论/测试计划用例评论/评审用例评论", required = true, allowableValues = "range[1, 64]")
private String type;
@ApiModelProperty(name = "当前评审所属的测试计划ID或评审ID", required = false, allowableValues = "range[1, 50]")
private String belongId;
@ApiModelProperty(name = "创建时间", required = true, dataType = "Long")
private Long createTime;
@ApiModelProperty(name = "更新时间", required = true, dataType = "Long")
private Long updateTime;
@ApiModelProperty(name = "描述", required = false)
private String description;
}

View File

@ -0,0 +1,28 @@
package io.metersphere.functional.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.metersphere.validation.groups.Updated;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "功能用例和关注人的中间表")
@TableName("functional_case_follow")
@Data
public class FunctionalCaseFollow implements Serializable {
private static final long serialVersionUID = 1L;
@NotBlank(message = "{functional_case_follow.case_id.not_blank}", groups = {Updated.class})
@ApiModelProperty(name = "功能用例ID", required = true, allowableValues = "range[1, 50]")
private String caseId;
@NotBlank(message = "{functional_case_follow.follow_id.not_blank}", groups = {Updated.class})
@ApiModelProperty(name = "关注人ID", required = true, allowableValues = "range[1, 50]")
private String followId;
}

View File

@ -0,0 +1,58 @@
package io.metersphere.functional.domain;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.metersphere.validation.groups.Created;
import io.metersphere.validation.groups.Updated;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;
@ApiModel(value = "功能用例模块")
@TableName("functional_case_module")
@Data
public class FunctionalCaseModule implements Serializable {
private static final long serialVersionUID = 1L;
@TableId
@NotBlank(message = "{functional_case_module.id.not_blank}", groups = {Updated.class})
@ApiModelProperty(name = "ID", required = true, allowableValues = "range[1, 50]")
private String id;
@Size(min = 1, max = 50, message = "{functional_case_module.project_id.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case_module.project_id.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "项目ID", required = true, allowableValues = "range[1, 50]")
private String projectId;
@Size(min = 1, max = 100, message = "{functional_case_module.name.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case_module.name.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "名称", required = true, allowableValues = "range[1, 100]")
private String name;
@ApiModelProperty(name = "父节点ID", required = false, allowableValues = "range[1, 50]")
private String parentId;
@ApiModelProperty(name = "节点的层级", required = true, dataType = "Integer")
private Integer level;
@ApiModelProperty(name = "创建时间", required = true, dataType = "Long")
private Long createTime;
@ApiModelProperty(name = "更新时间", required = true, dataType = "Long")
private Long updateTime;
@Size(min = 1, max = 10, message = "{functional_case_module.pos.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case_module.pos.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "同一节点下的顺序", required = true, dataType = "Long")
private Long pos;
@Size(min = 1, max = 50, message = "{functional_case_module.create_user.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case_module.create_user.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "创建人", required = true, allowableValues = "range[1, 50]")
private String createUser;
}

View File

@ -0,0 +1,54 @@
package io.metersphere.functional.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.metersphere.validation.groups.Created;
import io.metersphere.validation.groups.Updated;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "功能用例的前后置关系")
@TableName("functional_case_relationship_edge")
@Data
public class FunctionalCaseRelationshipEdge implements Serializable {
private static final long serialVersionUID = 1L;
@TableId
@NotBlank(message = "{functional_case_relationship_edge.id.not_blank}", groups = {Updated.class})
@ApiModelProperty(name = "ID", required = true, allowableValues = "range[1, 50]")
private String id;
@Size(min = 1, max = 50, message = "{functional_case_relationship_edge.source_id.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case_relationship_edge.source_id.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "源节点的ID", required = true, allowableValues = "range[1, 50]")
private String sourceId;
@Size(min = 1, max = 50, message = "{functional_case_relationship_edge.target_id.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case_relationship_edge.target_id.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "目标节点的ID", required = true, allowableValues = "range[1, 50]")
private String targetId;
@Size(min = 1, max = 50, message = "{functional_case_relationship_edge.graph_id.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case_relationship_edge.graph_id.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "所属关系图的ID", required = true, allowableValues = "range[1, 50]")
private String graphId;
@Size(min = 1, max = 50, message = "{functional_case_relationship_edge.create_user.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case_relationship_edge.create_user.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "创建人", required = true, allowableValues = "range[1, 50]")
private String createUser;
@ApiModelProperty(name = "更新时间", required = true, dataType = "Long")
private Long updateTime;
@ApiModelProperty(name = "创建时间", required = true, dataType = "Long")
private Long createTime;
}

View File

@ -0,0 +1,50 @@
package io.metersphere.functional.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.metersphere.validation.groups.Created;
import io.metersphere.validation.groups.Updated;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "功能用例和其他用例的中间表")
@TableName("functional_case_test")
@Data
public class FunctionalCaseTest implements Serializable {
private static final long serialVersionUID = 1L;
@TableId
@NotBlank(message = "{functional_case_test.id.not_blank}", groups = {Updated.class})
@ApiModelProperty(name = "ID", required = true, allowableValues = "range[1, 50]")
private String id;
@Size(min = 1, max = 50, message = "{functional_case_test.functional_case_id.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case_test.functional_case_id.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "功能用例ID", required = true, allowableValues = "range[1, 50]")
private String functionalCaseId;
@Size(min = 1, max = 50, message = "{functional_case_test.test_id.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case_test.test_id.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "其他类型用例ID", required = true, allowableValues = "range[1, 50]")
private String testId;
@Size(min = 1, max = 64, message = "{functional_case_test.test_type.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{functional_case_test.test_type.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "用例类型:接口用例/场景用例/性能用例/UI用例", required = true, allowableValues = "range[1, 64]")
private String testType;
@ApiModelProperty(name = "创建时间", required = true, dataType = "Long")
private Long createTime;
@ApiModelProperty(name = "更新时间", required = true, dataType = "Long")
private Long updateTime;
}

View File

@ -0,0 +1,44 @@
package io.metersphere.functional.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.metersphere.validation.groups.Created;
import io.metersphere.validation.groups.Updated;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "脑图临时节点")
@TableName("minder_extra_node")
@Data
public class MinderExtraNode implements Serializable {
private static final long serialVersionUID = 1L;
@TableId
@NotBlank(message = "{minder_extra_node.id.not_blank}", groups = {Updated.class})
@ApiModelProperty(name = "ID", required = true, allowableValues="range[1, 50]")
private String id;
@Size(min = 1, max = 50, message = "{minder_extra_node.parent_id.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{minder_extra_node.parent_id.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "父节点的ID即模块ID", required = true, allowableValues="range[1, 50]")
private String parentId;
@Size(min = 1, max = 50, message = "{minder_extra_node.group_id.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{minder_extra_node.group_id.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "项目ID可扩展为其他资源ID", required = true, allowableValues="range[1, 50]")
private String groupId;
@Size(min = 1, max = 30, message = "{minder_extra_node.type.length_range}", groups = {Created.class, Updated.class})
@NotBlank(message = "{minder_extra_node.type.not_blank}", groups = {Created.class})
@ApiModelProperty(name = "类型,如:用例编辑脑图", required = true, allowableValues="range[1, 30]")
private String type;
@ApiModelProperty(name = "存储脑图节点额外信息", required = true, allowableValues="range[1, ]")
private String nodeData;
}

View File

@ -0,0 +1,50 @@
#moduleFunctionalCase
functional_case.id.not_blank=ID cannot be empty
functional_case.num.not_blank=Business ID cannot be empty
functional_case.custom_num.length_range=The length of the custom business ID must be between 1 and 64
functional_case.custom_num.not_blank=Custom business ID cannot be empty
functional_case.module_id.length_range=Module ID length must be between 1 and 50
functional_case.module_id.not_blank=Module ID cannot be empty
functional_case.project_id.length_range=The length of the project ID must be between 1 and 50
functional_case.project_id.not_blank=Project ID cannot be empty
functional_case.name.length_range=The name length must be between 1 and 255
functional_case.name.not_blank=Name cannot be empty
functional_case.review_status.length_range=The length of the review status must be between 1 and 64
functional_case.review_status.not_blank=Review status cannot be empty
functional_case.step_model.length_range=The length of the editing mode must be between 1 and 64
functional_case.step_model.not_blank=Edit mode cannot be empty
functional_case.version_id.length_range=Version ID length must be between 1 and 50
functional_case.version_id.not_blank=Version ID cannot be empty
functional_case.ref_id.length_range=Pointing to the initial version ID must be between 1 and 50
functional_case.ref_id.not_blank=Pointing to the initial version ID cannot be empty
functional_case.last_execute_result.length_range=The length of the most recent execution result must be between 1 and 64
functional_case.last_execute_result.not_blank=The recent execution result cannot be empty
functional_case.deleted.length_range=Whether the length of the recycle bin must be between 1 and 1
functional_case.deleted.not_blank=Whether it is in the recycle bin cannot be empty
functional_case.public_case.length_range=Whether it is a public use case, the length must be between 1 and 1
functional_case.public_case.not_blank=whether it is a public use case cannot be empty
functional_case.latest.length_range=Whether it is the latest version or not. The length must be between 1 and 1
functional_case.latest.not_blank=whether it is the latest version cannot be empty
functional_case.create_user.length_range=Creator length must be between 1 and 100
functional_case.create_user.not_blank=Creator cannot be empty
#moduleFunctionalCaseBlob
functional_case_blob.functional_case_id.not_blank=Function case ID cannot be empty
#moduleFunctionalCaseComment
functional_case_comment.id.not_blank=ID cannot be empty
functional_case_comment.case_id.length_range=The length of the function case ID must be between 1 and 50
functional_case_comment.case_id.not_blank=Function case ID cannot be empty
functional_case_comment.create_user.length_range=The length of the reviewer must be between 1 and 50
functional_case_comment.create_user.not_blank=Reviewer cannot be empty
functional_case_comment.type.length_range=Comment type length must be between 1 and 64
functional_case_comment.type.not_blank=Comment type cannot be empty
#moduleFunctionalCaseModule
functional_case_module.id.not_blank=ID cannot be empty
functional_case_module.project_id.length_range=The length of the project ID must be between 1 and 50
functional_case_module.project_id.not_blank=Project ID cannot be empty
functional_case_module.name.length_range=The name length must be between 1 and 100
functional_case_module.name.not_blank=Name cannot be empty
functional_case_module.pos.length_range=The order length under the same node must be between 1 and 10
functional_case_module.pos.not_blank=The order under the same node cannot be empty
functional_case_module.create_user.length_range=Creator length must be between 1 and 50
functional_case_module.create_user.not_blank=Creator cannot be empty

View File

@ -0,0 +1,49 @@
#moduleFunctionalCase
functional_case.id.not_blank=ID不能为空
functional_case.num.not_blank=业务ID不能为空
functional_case.custom_num.length_range=自定义业务ID长度必须在1-64之间
functional_case.custom_num.not_blank=自定义业务ID不能为空
functional_case.module_id.length_range=模块ID长度必须在1-50之间
functional_case.module_id.not_blank=模块ID不能为空
functional_case.project_id.length_range=项目ID长度必须在1-50之间
functional_case.project_id.not_blank=项目ID不能为空
functional_case.name.length_range=名称长度必须在1-255之间
functional_case.name.not_blank=名称不能为空
functional_case.review_status.length_range=评审状态长度必须在1-64之间
functional_case.review_status.not_blank=评审状态不能为空
functional_case.step_model.length_range=编辑模式长度必须在1-64之间
functional_case.step_model.not_blank=编辑模式不能为空
functional_case.version_id.length_range=版本ID长度必须在1-50之间
functional_case.version_id.not_blank=版本ID不能为空
functional_case.ref_id.length_range=指向初始版本ID必须在1-50之间
functional_case.ref_id.not_blank=指向初始版本ID不能为空
functional_case.last_execute_result.length_range=最近的执行结果长度必须在1-64之间
functional_case.last_execute_result.not_blank=最近的执行结果不能为空
functional_case.deleted.length_range=是否在回收站长度必须在1-1之间
functional_case.deleted.not_blank=是否在回收站不能为空
functional_case.public_case.length_range=是否是公共用例长度必须在1-1之间
functional_case.public_case.not_blank=是否是公共用例不能为空
functional_case.latest.length_range=是否为最新版本长度必须在1-1之间
functional_case.latest.not_blank=是否为最新版本不能为空
functional_case.create_user.length_range=创建人长度必须在1-100之间
functional_case.create_user.not_blank=创建人不能为空
#moduleFunctionalCaseBlob
functional_case_blob.functional_case_id.not_blank=功能用例ID不能为空
#moduleFunctionalCaseComment
functional_case_comment.id.not_blank=ID不能为空
functional_case_comment.case_id.length_range=功能用例ID长度必须在1-50之间
functional_case_comment.case_id.not_blank=功能用例ID不能为空
functional_case_comment.create_user.length_range=评论人长度必须在1-50之间
functional_case_comment.create_user.not_blank=评论人不能为空
functional_case_comment.type.length_range=评论类型长度必须在1-64之间
functional_case_comment.type.not_blank=评论类型不能为空
#moduleFunctionalCaseModule
functional_case_module.id.not_blank=ID不能为空
functional_case_module.project_id.length_range=项目ID长度必须在1-50之间
functional_case_module.project_id.not_blank=项目ID不能为空
functional_case_module.name.length_range=名称长度必须在1-100之间
functional_case_module.name.not_blank=名称不能为空
functional_case_module.pos.length_range=同一节点下的顺序长度必须在1-10之间
functional_case_module.pos.not_blank=同一节点下的顺序不能为空
functional_case_module.create_user.length_range=创建人长度必须在1-50之间
functional_case_module.create_user.not_blank=创建人不能为空

View File

@ -0,0 +1,49 @@
#moduleFunctionalCase
functional_case.id.not_blank=ID不能為空
functional_case.num.not_blank=业务ID不能為空
functional_case.custom_num.length_range=自定義業務ID長度必須在1-64之間
functional_case.custom_num.not_blank=自定義業務ID不能為空
functional_case.module_id.length_range=模塊ID長度必須在1-50之間
functional_case.module_id.not_blank=模塊ID不能為空
functional_case.project_id.length_range=項目ID長度必須在1-50之間
functional_case.project_id.not_blank=項目ID不能為空
functional_case.name.length_range=名稱長度必須在1-255之間
functional_case.name.not_blank=名稱不能為空
functional_case.review_status.length_range=評審狀態長度必須在1-64之間
functional_case.review_status.not_blank=評審狀態不能為空
functional_case.step_model.length_range=編輯模式長度必須在1-64之間
functional_case.step_model.not_blank=編輯模式不能為空
functional_case.version_id.length_range=版本ID長度必須在1-50之間
functional_case.version_id.not_blank=版本ID不能為空
functional_case.ref_id.length_range=指向初始版本ID必须在1-50之間
functional_case.ref_id.not_blank=指向初始版本ID不能為空
functional_case.last_execute_result.length_range=最近的執行結果長度必須在1-64之間
functional_case.last_execute_result.not_blank=最近的執行結果不能為空
functional_case.deleted.length_range=是否在回收站長度必須在1-1之間
functional_case.deleted.not_blank=是否在回收站不能為空
functional_case.public_case.length_range=是否是公共用例長度必須在1-1之間
functional_case.public_case.not_blank=是否是公共用例不能為空
functional_case.latest.length_range=是否为最新版本長度必須在1-1之間
functional_case.latest.not_blank=是否为最新版本不能為空
functional_case.create_user.length_range=創建人長度必須在1-100之間
functional_case.create_user.not_blank=創建人不能為空
#moduleFunctionalCaseBlob
functional_case_blob.functional_case_id.not_blank=功能用例ID不能為空
#moduleFunctionalCaseComment
functional_case_comment.id.not_blank=ID不能為空
functional_case_comment.case_id.length_range=功能用例ID長度必須在1-50之間
functional_case_comment.case_id.not_blank=功能用例ID不能為空
functional_case_comment.create_user.length_range=評論人長度必須在1-50之間
functional_case_comment.create_user.not_blank=評論人不能為空
functional_case_comment.type.length_range=評論類型長度必須在1-64之間
functional_case_comment.type.not_blank=評論類型不能為空
#moduleFunctionalCaseModule
functional_case_module.id.not_blank=ID不能為空
functional_case_module.project_id.length_range=項目ID長度必須在1-50之間
functional_case_module.project_id.not_blank=項目ID不能為空
functional_case_module.name.length_range=名稱長度必須在1-100之間
functional_case_module.name.not_blank=名稱不能為空
functional_case_module.pos.length_range=同一節點下的順序長度必須在1-10之間
functional_case_module.pos.not_blank=同一節點下的順序不能為空
functional_case_module.create_user.length_range=創建人長度必須在1-50之間
functional_case_module.create_user.not_blank=創建人不能為空

View File

@ -7,9 +7,9 @@
<artifactId>services</artifactId>
<version>${revision}</version>
</parent>
<artifactId>metersphere-test-track</artifactId>
<artifactId>metersphere-functional-test</artifactId>
<version>${revision}</version>
<name>test-track</name>
<name>functional-test</name>
<properties>
</properties>
<dependencies>

View File

@ -0,0 +1,16 @@
package io.metersphere.functional.controller;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.metersphere.functional.service.CaseReviewService;
@RestController
@RequestMapping("/case/review")
public class CaseReviewController {
@Resource
private CaseReviewService caseReviewService;
}

View File

@ -0,0 +1,16 @@
package io.metersphere.functional.controller;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.metersphere.functional.service.CaseReviewFollowService;
@RestController
@RequestMapping("/case/review/follow")
public class CaseReviewFollowController {
@Resource
private CaseReviewFollowService caseReviewFollowService;
}

View File

@ -0,0 +1,16 @@
package io.metersphere.functional.controller;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.metersphere.functional.service.CaseReviewFunctionalCaseService;
@RestController
@RequestMapping("/case/review/functional/case")
public class CaseReviewFunctionalCaseController {
@Resource
private CaseReviewFunctionalCaseService caseReviewFunctionalCaseService;
}

View File

@ -0,0 +1,16 @@
package io.metersphere.functional.controller;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.metersphere.functional.service.CaseReviewFunctionalCaseUserService;
@RestController
@RequestMapping("/case/review/functional/case/user")
public class CaseReviewFunctionalCaseUserController {
@Resource
private CaseReviewFunctionalCaseUserService caseReviewFunctionalCaseUserService;
}

View File

@ -0,0 +1,16 @@
package io.metersphere.functional.controller;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.metersphere.functional.service.CaseReviewUserService;
@RestController
@RequestMapping("/case/review/user")
public class CaseReviewUserController {
@Resource
private CaseReviewUserService caseReviewUserService;
}

View File

@ -0,0 +1,16 @@
package io.metersphere.functional.controller;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.metersphere.functional.service.CustomFieldTestCaseService;
@RestController
@RequestMapping("/custom/field/test/case")
public class CustomFieldTestCaseController {
@Resource
private CustomFieldTestCaseService customFieldTestCaseService;
}

View File

@ -0,0 +1,16 @@
package io.metersphere.functional.controller;
import io.metersphere.functional.service.FunctionalCaseAttachmentService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/functional/case/attachment")
public class FunctionalCaseAttachmentController {
@Resource
private FunctionalCaseAttachmentService functionalCaseAttachmentService;
}

View File

@ -0,0 +1,14 @@
package io.metersphere.functional.controller;
import io.metersphere.functional.service.FunctionalCaseBlobService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/functional/case/blob")
public class FunctionalCaseBlobController {
@Resource
private FunctionalCaseBlobService functionalCaseBlobService;
}

View File

@ -0,0 +1,16 @@
package io.metersphere.functional.controller;
import io.metersphere.functional.service.FunctionalCaseCommentService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/functional/case/comment")
public class FunctionalCaseCommentController {
@Resource
private FunctionalCaseCommentService functionalCaseCommentService;
}

View File

@ -0,0 +1,15 @@
package io.metersphere.functional.controller;
import io.metersphere.functional.service.FunctionalCaseService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/functional/case")
public class FunctionalCaseController {
@Resource
private FunctionalCaseService functionalCaseService;
}

View File

@ -0,0 +1,16 @@
package io.metersphere.functional.controller;
import io.metersphere.functional.service.FunctionalCaseFollowService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/functional/case/follow")
public class FunctionalCaseFollowController {
@Resource
private FunctionalCaseFollowService functionalCaseFollowService;
}

View File

@ -0,0 +1,17 @@
package io.metersphere.functional.controller;
import io.metersphere.functional.service.FunctionalCaseModuleService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/functional/case/Module")
public class FunctionalCaseModuleController {
@Resource
private FunctionalCaseModuleService functionalCaseModuleService;
}

View File

@ -0,0 +1,16 @@
package io.metersphere.functional.controller;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.metersphere.functional.service.FunctionalCaseRelationshipEdgeService;
@RestController
@RequestMapping("/functional/case/relationship/edge")
public class FunctionalCaseRelationshipEdgeController {
@Resource
private FunctionalCaseRelationshipEdgeService functionalCaseRelationshipEdgeService;
}

View File

@ -0,0 +1,16 @@
package io.metersphere.functional.controller;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.metersphere.functional.service.FunctionalCaseTestService;
@RestController
@RequestMapping("/functional/case/test")
public class FunctionalCaseTestController {
@Resource
private FunctionalCaseTestService functionalCaseTestService;
}

View File

@ -0,0 +1,16 @@
package io.metersphere.functional.controller;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.metersphere.functional.service.MinderExtraNodeService;
@RestController
@RequestMapping("/minder/extra/node")
public class MinderExtraNodeController {
@Resource
private MinderExtraNodeService minderExtraNodeService;
}

View File

@ -0,0 +1,11 @@
package io.metersphere.functional.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import io.metersphere.functional.domain.CaseReviewFollow;
@Mapper
public interface CaseReviewFollowMapper extends BaseMapper<CaseReviewFollow> {
}

View File

@ -0,0 +1,11 @@
package io.metersphere.functional.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import io.metersphere.functional.domain.CaseReviewFunctionalCase;
@Mapper
public interface CaseReviewFunctionalCaseMapper extends BaseMapper<CaseReviewFunctionalCase> {
}

View File

@ -0,0 +1,11 @@
package io.metersphere.functional.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import io.metersphere.functional.domain.CaseReviewFunctionalCaseUser;
@Mapper
public interface CaseReviewFunctionalCaseUserMapper extends BaseMapper<CaseReviewFunctionalCaseUser> {
}

View File

@ -0,0 +1,11 @@
package io.metersphere.functional.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import io.metersphere.functional.domain.CaseReview;
@Mapper
public interface CaseReviewMapper extends BaseMapper<CaseReview> {
}

View File

@ -0,0 +1,11 @@
package io.metersphere.functional.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import io.metersphere.functional.domain.CaseReviewUser;
@Mapper
public interface CaseReviewUserMapper extends BaseMapper<CaseReviewUser> {
}

View File

@ -0,0 +1,11 @@
package io.metersphere.functional.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import io.metersphere.functional.domain.CustomFieldTestCase;
@Mapper
public interface CustomFieldTestCaseMapper extends BaseMapper<CustomFieldTestCase> {
}

View File

@ -0,0 +1,17 @@
/**
* @filename:FunctionalCaseAttachmentDao 2023年5月17日
* @project ms V3.x
* Copyright(c) 2020 wx Co. Ltd.
* All right reserved.
*/
package io.metersphere.functional.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import io.metersphere.functional.domain.FunctionalCaseAttachment;
@Mapper
public interface FunctionalCaseAttachmentMapper extends BaseMapper<FunctionalCaseAttachment> {
}

View File

@ -0,0 +1,17 @@
/**
* @filename:FunctionalCaseBlobDao 2023年5月17日
* @project ms V3.x
* Copyright(c) 2020 wx Co. Ltd.
* All right reserved.
*/
package io.metersphere.functional.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import io.metersphere.functional.domain.FunctionalCaseBlob;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface FunctionalCaseBlobMapper extends BaseMapper<FunctionalCaseBlob> {
}

View File

@ -0,0 +1,9 @@
package io.metersphere.functional.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import io.metersphere.functional.domain.FunctionalCaseComment;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface FunctionalCaseCommentMapper extends BaseMapper<FunctionalCaseComment> {
}

View File

@ -0,0 +1,17 @@
/**
* @filename:FunctionalCaseFollowDao 2023年5月17日
* @project ms V3.x
* Copyright(c) 2020 wx Co. Ltd.
* All right reserved.
*/
package io.metersphere.functional.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import io.metersphere.functional.domain.FunctionalCaseFollow;
@Mapper
public interface FunctionalCaseFollowMapper extends BaseMapper<FunctionalCaseFollow> {
}

View File

@ -0,0 +1,9 @@
package io.metersphere.functional.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import io.metersphere.functional.domain.FunctionalCase;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface FunctionalCaseMapper extends BaseMapper<FunctionalCase> {
}

View File

@ -0,0 +1,17 @@
/**
* @filename:FunctionalCaseModuleDao 2023年5月17日
* @project ms V3.x
* Copyright(c) 2020 wx Co. Ltd.
* All right reserved.
*/
package io.metersphere.functional.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import io.metersphere.functional.domain.FunctionalCaseModule;
@Mapper
public interface FunctionalCaseModuleMapper extends BaseMapper<FunctionalCaseModule> {
}

View File

@ -0,0 +1,17 @@
/**
* @filename:FunctionalCaseRelationshipEdgeDao 2023年5月17日
* @project ms V3.x
* Copyright(c) 2020 wx Co. Ltd.
* All right reserved.
*/
package io.metersphere.functional.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import io.metersphere.functional.domain.FunctionalCaseRelationshipEdge;
@Mapper
public interface FunctionalCaseRelationshipEdgeMapper extends BaseMapper<FunctionalCaseRelationshipEdge> {
}

View File

@ -0,0 +1,11 @@
package io.metersphere.functional.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import io.metersphere.functional.domain.FunctionalCaseTest;
@Mapper
public interface FunctionalCaseTestMapper extends BaseMapper<FunctionalCaseTest> {
}

View File

@ -0,0 +1,11 @@
package io.metersphere.functional.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import io.metersphere.functional.domain.MinderExtraNode;
@Mapper
public interface MinderExtraNodeMapper extends BaseMapper<MinderExtraNode> {
}

View File

@ -0,0 +1,17 @@
package io.metersphere.functional.service;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.metersphere.functional.domain.CaseReviewFollow;
import io.metersphere.functional.mapper.CaseReviewFollowMapper;
/**
* 用例评审关注人表服务实现类
*
* @date : 2023-5-17
*/
@Service
public class CaseReviewFollowService extends ServiceImpl<CaseReviewFollowMapper, CaseReviewFollow> {
}

View File

@ -0,0 +1,17 @@
package io.metersphere.functional.service;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.metersphere.functional.domain.CaseReviewFunctionalCase;
import io.metersphere.functional.mapper.CaseReviewFunctionalCaseMapper;
/**
* 用例评审和功能用例的中间表服务实现类
*
* @date : 2023-5-17
*/
@Service
public class CaseReviewFunctionalCaseService extends ServiceImpl<CaseReviewFunctionalCaseMapper, CaseReviewFunctionalCase> {
}

View File

@ -0,0 +1,17 @@
package io.metersphere.functional.service;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.metersphere.functional.domain.CaseReviewFunctionalCaseUser;
import io.metersphere.functional.mapper.CaseReviewFunctionalCaseUserMapper;
/**
* 功能用例评审和评审人的中间表服务实现类
*
* @date : 2023-5-17
*/
@Service
public class CaseReviewFunctionalCaseUserService extends ServiceImpl<CaseReviewFunctionalCaseUserMapper, CaseReviewFunctionalCaseUser> {
}

View File

@ -0,0 +1,17 @@
package io.metersphere.functional.service;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.metersphere.functional.domain.CaseReview;
import io.metersphere.functional.mapper.CaseReviewMapper;
/**
* 用例评审表服务实现类
*
* @date : 2023-5-17
*/
@Service
public class CaseReviewService extends ServiceImpl<CaseReviewMapper, CaseReview> {
}

View File

@ -0,0 +1,17 @@
package io.metersphere.functional.service;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.metersphere.functional.domain.CaseReviewUser;
import io.metersphere.functional.mapper.CaseReviewUserMapper;
/**
* 评审和评审人中间表服务实现类
*
* @date : 2023-5-17
*/
@Service
public class CaseReviewUserService extends ServiceImpl<CaseReviewUserMapper, CaseReviewUser> {
}

View File

@ -0,0 +1,17 @@
package io.metersphere.functional.service;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.metersphere.functional.domain.CustomFieldTestCase;
import io.metersphere.functional.mapper.CustomFieldTestCaseMapper;
/**
* 自定义字段功能用例关系表服务实现类
*
* @date : 2023-5-17
*/
@Service
public class CustomFieldTestCaseService extends ServiceImpl<CustomFieldTestCaseMapper, CustomFieldTestCase> {
}

View File

@ -0,0 +1,13 @@
package io.metersphere.functional.service;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.metersphere.functional.domain.FunctionalCaseAttachment;
import io.metersphere.functional.mapper.FunctionalCaseAttachmentMapper;
@Service
public class FunctionalCaseAttachmentService extends ServiceImpl<FunctionalCaseAttachmentMapper, FunctionalCaseAttachment> {
}

View File

@ -0,0 +1,19 @@
/**
* @filename:FunctionalCaseBlobServiceImpl 2023年5月17日
* @project ms V3.x
* Copyright(c) 2018 wx Co. Ltd.
* All right reserved.
*/
package io.metersphere.functional.service;
import io.metersphere.functional.domain.FunctionalCaseBlob;
import io.metersphere.functional.mapper.FunctionalCaseBlobMapper;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@Service
public class FunctionalCaseBlobService extends ServiceImpl<FunctionalCaseBlobMapper, FunctionalCaseBlob> {
}

View File

@ -0,0 +1,10 @@
package io.metersphere.functional.service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.metersphere.functional.domain.FunctionalCaseComment;
import io.metersphere.functional.mapper.FunctionalCaseCommentMapper;
import org.springframework.stereotype.Service;
@Service
public class FunctionalCaseCommentService extends ServiceImpl<FunctionalCaseCommentMapper, FunctionalCaseComment> {
}

View File

@ -0,0 +1,19 @@
/**
* @filename:FunctionalCaseFollowServiceImpl 2023年5月17日
* @project ms V3.x
* Copyright(c) 2018 wx Co. Ltd.
* All right reserved.
*/
package io.metersphere.functional.service;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.metersphere.functional.domain.FunctionalCaseFollow;
import io.metersphere.functional.mapper.FunctionalCaseFollowMapper;
@Service
public class FunctionalCaseFollowService extends ServiceImpl<FunctionalCaseFollowMapper, FunctionalCaseFollow> {
}

View File

@ -0,0 +1,19 @@
/**
* @filename:FunctionalCaseModuleServiceImpl 2023年5月17日
* @project ms V3.x
* Copyright(c) 2018 wx Co. Ltd.
* All right reserved.
*/
package io.metersphere.functional.service;
import io.metersphere.functional.mapper.FunctionalCaseModuleMapper;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.metersphere.functional.domain.FunctionalCaseModule;
@Service
public class FunctionalCaseModuleService extends ServiceImpl<FunctionalCaseModuleMapper, FunctionalCaseModule> {
}

View File

@ -0,0 +1,19 @@
/**
* @filename:FunctionalCaseRelationshipEdgeServiceImpl 2023年5月17日
* @project ms V3.x
* Copyright(c) 2018 wx Co. Ltd.
* All right reserved.
*/
package io.metersphere.functional.service;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.metersphere.functional.domain.FunctionalCaseRelationshipEdge;
import io.metersphere.functional.mapper.FunctionalCaseRelationshipEdgeMapper;
@Service
public class FunctionalCaseRelationshipEdgeService extends ServiceImpl<FunctionalCaseRelationshipEdgeMapper, FunctionalCaseRelationshipEdge> {
}

View File

@ -0,0 +1,10 @@
package io.metersphere.functional.service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.metersphere.functional.domain.FunctionalCase;
import io.metersphere.functional.mapper.FunctionalCaseMapper;
import org.springframework.stereotype.Service;
@Service
public class FunctionalCaseService extends ServiceImpl<FunctionalCaseMapper, FunctionalCase> {
}

View File

@ -0,0 +1,18 @@
package io.metersphere.functional.service;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.metersphere.functional.domain.FunctionalCaseTest;
import io.metersphere.functional.mapper.FunctionalCaseTestMapper;
/**
* 功能用例和其他用例的中间表服务实现类
*
* @date : 2023-5-17
*/
@Service
public class FunctionalCaseTestService extends ServiceImpl<FunctionalCaseTestMapper, FunctionalCaseTest> {
}

View File

@ -0,0 +1,17 @@
package io.metersphere.functional.service;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.metersphere.functional.domain.MinderExtraNode;
import io.metersphere.functional.mapper.MinderExtraNodeMapper;
/**
* 脑图临时节点服务实现类
*
* @date : 2023-5-17
*/
@Service
public class MinderExtraNodeService extends ServiceImpl<MinderExtraNodeMapper, MinderExtraNode> {
}

View File

@ -20,7 +20,7 @@
<module>project-management</module>
<module>system-setting</module>
<module>test-plan</module>
<module>test-track</module>
<module>functional-test</module>
<module>ui-test</module>
<module>workstation</module>
</modules>

View File

@ -1,72 +0,0 @@
package io.metersphere.track.domain;
import lombok.Data;
import java.io.Serializable;
@Data
public class TestCase implements Serializable {
private String id;
private String nodeId;
private String testId;
private String nodePath;
private String projectId;
private String name;
private String type;
private String maintainer;
private String priority;
private String method;
private Long createTime;
private Long updateTime;
private Integer sort;
private Integer num;
private String reviewStatus;
private String tags;
private String demandId;
private String demandName;
private String status;
private String stepModel;
private String customNum;
private String createUser;
private String originalStatus;
private Long deleteTime;
private String deleteUserId;
private Long order;
private Boolean casePublic;
private String versionId;
private String refId;
private Boolean latest;
private String lastExecuteResult;
private static final long serialVersionUID = 1L;
}