diff --git a/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/CreateMenuRequest.java b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/CreateMenuRequest.java new file mode 100644 index 0000000..2144e05 --- /dev/null +++ b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/CreateMenuRequest.java @@ -0,0 +1,14 @@ +package com.ljwx.tmpl.api.dto.system; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; + +public record CreateMenuRequest( + Long parentId, + @NotBlank @Size(max = 64) String code, + @NotBlank @Size(max = 128) String name, + @Size(max = 256) String path, + @Size(max = 64) String icon, + Integer sortOrder, + @NotBlank String menuType +) {} \ No newline at end of file diff --git a/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/CreatePermissionRequest.java b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/CreatePermissionRequest.java new file mode 100644 index 0000000..605a088 --- /dev/null +++ b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/CreatePermissionRequest.java @@ -0,0 +1,14 @@ +package com.ljwx.tmpl.api.dto.system; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; + +public record CreatePermissionRequest( + @NotBlank @Pattern(regexp = "^[a-z][a-z0-9_]*:[a-z][a-z0-9_]*:[a-z][a-z0-9_]*$", + message = "权限编码必须为三段式") + @Size(max = 128) String code, + @NotBlank @Size(max = 256) String name, + @NotBlank @Pattern(regexp = "^(API|PAGE|ACTION)$") String type, + @Size(max = 512) String description +) {} \ No newline at end of file diff --git a/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/CreateRoleRequest.java b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/CreateRoleRequest.java new file mode 100644 index 0000000..9052bcc --- /dev/null +++ b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/CreateRoleRequest.java @@ -0,0 +1,13 @@ +package com.ljwx.tmpl.api.dto.system; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; + +public record CreateRoleRequest( + @NotBlank @Size(max = 64) + @Pattern(regexp = "^[A-Z][A-Z0-9_]*$", message = "角色编码必须大写字母开头") + String code, + @NotBlank @Size(max = 128) String name, + @Size(max = 512) String description +) {} \ No newline at end of file diff --git a/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/CreateUserRequest.java b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/CreateUserRequest.java new file mode 100644 index 0000000..1f21531 --- /dev/null +++ b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/CreateUserRequest.java @@ -0,0 +1,11 @@ +package com.ljwx.tmpl.api.dto.system; + +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; + +public record CreateUserRequest( + @NotBlank @Size(max = 64) String username, + @NotBlank @Size(max = 128) String displayName, + @Email @Size(max = 128) String email +) {} \ No newline at end of file diff --git a/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/MeResponse.java b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/MeResponse.java new file mode 100644 index 0000000..202cb62 --- /dev/null +++ b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/MeResponse.java @@ -0,0 +1,17 @@ +package com.ljwx.tmpl.api.dto.system; + +import java.util.List; + +/** + * 当前用户信息响应 DTO + * 用于 /api/v1/me + */ +public record MeResponse( + Long id, + String tenantId, + String username, + String nickname, + String avatar, + List roleCodes +) { +} \ No newline at end of file diff --git a/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/MenuResponse.java b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/MenuResponse.java new file mode 100644 index 0000000..0436526 --- /dev/null +++ b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/MenuResponse.java @@ -0,0 +1,24 @@ +package com.ljwx.tmpl.api.dto.system; + +import java.time.LocalDateTime; + +/** + * 菜单响应 DTO(平铺,非树形) + */ +public record MenuResponse( + Long id, + String tenantId, + Long parentId, + String menuCode, + String menuName, + String menuType, + String path, + String component, + String icon, + Integer sortOrder, + Boolean visible, + Integer status, + LocalDateTime createTime, + LocalDateTime updateTime +) { +} \ No newline at end of file diff --git a/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/MenuTreeResponse.java b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/MenuTreeResponse.java new file mode 100644 index 0000000..654f0ae --- /dev/null +++ b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/MenuTreeResponse.java @@ -0,0 +1,22 @@ +package com.ljwx.tmpl.api.dto.system; + +import java.util.List; + +/** + * 菜单树响应 DTO(递归结构) + * 用于 /api/v1/system/menus/tree 和 /api/v1/me/menus + */ +public record MenuTreeResponse( + Long id, + Long parentId, + String menuCode, + String menuName, + String menuType, + String path, + String component, + String icon, + Integer sortOrder, + Boolean visible, + List children +) { +} \ No newline at end of file diff --git a/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/PermissionResponse.java b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/PermissionResponse.java new file mode 100644 index 0000000..e95e514 --- /dev/null +++ b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/PermissionResponse.java @@ -0,0 +1,19 @@ +package com.ljwx.tmpl.api.dto.system; + +import java.time.LocalDateTime; + +/** + * 权限响应 DTO + */ +public record PermissionResponse( + Long id, + String tenantId, + String permissionCode, + String permissionName, + String permissionType, + String description, + Integer status, + LocalDateTime createTime, + LocalDateTime updateTime +) { +} \ No newline at end of file diff --git a/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/RoleResponse.java b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/RoleResponse.java new file mode 100644 index 0000000..062cd96 --- /dev/null +++ b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/RoleResponse.java @@ -0,0 +1,19 @@ +package com.ljwx.tmpl.api.dto.system; + +import java.time.LocalDateTime; + +/** + * 角色响应 DTO + */ +public record RoleResponse( + Long id, + String tenantId, + String roleCode, + String roleName, + String description, + Integer sortOrder, + Integer status, + LocalDateTime createTime, + LocalDateTime updateTime +) { +} \ No newline at end of file diff --git a/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/UpdateMenuRequest.java b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/UpdateMenuRequest.java new file mode 100644 index 0000000..4d1082b --- /dev/null +++ b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/UpdateMenuRequest.java @@ -0,0 +1,13 @@ +package com.ljwx.tmpl.api.dto.system; + +import jakarta.validation.constraints.Size; + +/** 更新菜单 — 不允许修改 code。parentId 如需变更需显式传入(含防环校验)。 */ +public record UpdateMenuRequest( + @Size(max = 128) String name, + @Size(max = 256) String path, + @Size(max = 64) String icon, + Integer sortOrder, + Long parentId, + Boolean visible +) {} \ No newline at end of file diff --git a/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/UpdatePermissionRequest.java b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/UpdatePermissionRequest.java new file mode 100644 index 0000000..5b32362 --- /dev/null +++ b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/UpdatePermissionRequest.java @@ -0,0 +1,9 @@ +package com.ljwx.tmpl.api.dto.system; + +import jakarta.validation.constraints.Size; + +/** 更新权限点 — 不允许修改 code 和 type。 */ +public record UpdatePermissionRequest( + @Size(max = 256) String name, + @Size(max = 512) String description +) {} \ No newline at end of file diff --git a/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/UpdateRoleRequest.java b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/UpdateRoleRequest.java new file mode 100644 index 0000000..b1261fb --- /dev/null +++ b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/UpdateRoleRequest.java @@ -0,0 +1,10 @@ +package com.ljwx.tmpl.api.dto.system; + +import jakarta.validation.constraints.Size; + +/** 更新角色 — 不允许修改 code。 */ +public record UpdateRoleRequest( + @Size(max = 128) String name, + @Size(max = 512) String description, + Boolean enabled +) {} \ No newline at end of file diff --git a/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/UpdateUserRequest.java b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/UpdateUserRequest.java new file mode 100644 index 0000000..25f697a --- /dev/null +++ b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/UpdateUserRequest.java @@ -0,0 +1,11 @@ +package com.ljwx.tmpl.api.dto.system; + +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.Size; + +/** 更新用户 — 所有字段可选,非 null 才更新。不允许修改 username。 */ +public record UpdateUserRequest( + @Size(max = 128) String displayName, + @Email @Size(max = 128) String email, + Boolean enabled +) {} \ No newline at end of file diff --git a/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/UserResponse.java b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/UserResponse.java new file mode 100644 index 0000000..7652c6d --- /dev/null +++ b/tmpl-api/src/main/java/com/ljwx/tmpl/api/dto/system/UserResponse.java @@ -0,0 +1,20 @@ +package com.ljwx.tmpl.api.dto.system; + +import java.time.LocalDateTime; + +/** + * 用户响应 DTO + */ +public record UserResponse( + Long id, + String tenantId, + String username, + String nickname, + String email, + String phone, + String avatar, + Integer status, + LocalDateTime createTime, + LocalDateTime updateTime +) { +} \ No newline at end of file