@@ -11,7 +11,7 @@
Target Server Version : 80407 (8.4.7)
File Encoding : 65001
Date: 19 / 01 / 2026 21:19:15
Date: 20 / 01 / 2026 13:33:04
*/
SET NAMES utf8mb4 ;
@@ -259,6 +259,7 @@ CREATE TABLE `operation_logs` (
` user_id ` bigint UNSIGNED NOT NULL COMMENT ' 操作用户ID ' ,
` username ` varchar ( 50 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT ' 操作用户名 ' ,
` ip ` varchar ( 45 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT ' 操作IP地址 ' ,
` region ` varchar ( 255 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT ' IP归属地 ' ,
` path ` varchar ( 255 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT ' 操作路径 ' ,
` method ` varchar ( 10 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT ' HTTP方法 ' ,
` params ` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT ' 请求参数 ' ,
@@ -268,11 +269,235 @@ CREATE TABLE `operation_logs` (
` created_at ` bigint NOT NULL DEFAULT 0 ,
PRIMARY KEY ( ` id ` ) USING BTREE ,
INDEX ` idx_user_id ` ( ` user_id ` ASC ) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 644 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = ' 操作日志表 ' ROW_FORMAT = DYNAMIC ;
) ENGINE = InnoDB AUTO_INCREMENT = 225 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = ' 操作日志表 ' ROW_FORMAT = DYNAMIC ;
-- ----------------------------
-- Records of operation_logs
-- ----------------------------
INSERT INTO ` operation_logs ` VALUES ( 1 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/oss-configs ' , ' GET ' , ' ' , 200 , 97 , 0 , 1768828795 ) ;
INSERT INTO ` operation_logs ` VALUES ( 2 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/columns ' , ' GET ' , ' ' , 200 , 51 , 0 , 1768828812 ) ;
INSERT INTO ` operation_logs ` VALUES ( 3 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/columns ' , ' GET ' , ' ' , 200 , 45 , 0 , 1768828890 ) ;
INSERT INTO ` operation_logs ` VALUES ( 4 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 44 , 0 , 1768828891 ) ;
INSERT INTO ` operation_logs ` VALUES ( 5 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/operation-logs ' , ' GET ' , ' ' , 200 , 98 , 0 , 1768828901 ) ;
INSERT INTO ` operation_logs ` VALUES ( 6 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 48 , 0 , 1768829023 ) ;
INSERT INTO ` operation_logs ` VALUES ( 7 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/attachments ' , ' GET ' , ' ' , 200 , 144 , 0 , 1768829023 ) ;
INSERT INTO ` operation_logs ` VALUES ( 8 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/works ' , ' GET ' , ' ' , 200 , 85 , 0 , 1768829039 ) ;
INSERT INTO ` operation_logs ` VALUES ( 9 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 42 , 0 , 1768829041 ) ;
INSERT INTO ` operation_logs ` VALUES ( 10 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 46 , 0 , 1768829041 ) ;
INSERT INTO ` operation_logs ` VALUES ( 11 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/attachments ' , ' GET ' , ' ' , 200 , 133 , 0 , 1768829045 ) ;
INSERT INTO ` operation_logs ` VALUES ( 12 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 44 , 0 , 1768829482 ) ;
INSERT INTO ` operation_logs ` VALUES ( 13 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 44 , 0 , 1768829482 ) ;
INSERT INTO ` operation_logs ` VALUES ( 14 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/posts ' , ' GET ' , ' ' , 200 , 265 , 0 , 1768829814 ) ;
INSERT INTO ` operation_logs ` VALUES ( 15 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/columns ' , ' GET ' , ' ' , 200 , 49 , 0 , 1768869064 ) ;
INSERT INTO ` operation_logs ` VALUES ( 16 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 44 , 0 , 1768869065 ) ;
INSERT INTO ` operation_logs ` VALUES ( 17 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/attachments ' , ' GET ' , ' ' , 200 , 140 , 0 , 1768869068 ) ;
INSERT INTO ` operation_logs ` VALUES ( 18 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/columns ' , ' GET ' , ' ' , 200 , 49 , 0 , 1768869074 ) ;
INSERT INTO ` operation_logs ` VALUES ( 19 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/about ' , ' GET ' , ' ' , 200 , 47 , 0 , 1768869173 ) ;
INSERT INTO ` operation_logs ` VALUES ( 20 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 51 , 0 , 1768869180 ) ;
INSERT INTO ` operation_logs ` VALUES ( 21 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/attachments ' , ' GET ' , ' ' , 200 , 139 , 0 , 1768869189 ) ;
INSERT INTO ` operation_logs ` VALUES ( 22 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/partners/2 ' , ' PUT ' , ' {\"name\":\"Supabase\",\"logo\":\"/uploads/2026/01/19/cc_upload_HiPDFg6oL0Q5ijfo693ce1f5eb57c_1768825204.jpg\",\"description\":\"开源 Firebase 替代方案\"} ' , 200 , 100 , 0 , 1768869197 ) ;
INSERT INTO ` operation_logs ` VALUES ( 23 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/snippets ' , ' GET ' , ' ' , 200 , 95 , 0 , 1768869231 ) ;
INSERT INTO ` operation_logs ` VALUES ( 24 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 379 , 0 , 1768869446 ) ;
INSERT INTO ` operation_logs ` VALUES ( 25 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 376 , 0 , 1768869486 ) ;
INSERT INTO ` operation_logs ` VALUES ( 26 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 327 , 0 , 1768869688 ) ;
INSERT INTO ` operation_logs ` VALUES ( 27 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 372 , 0 , 1768869729 ) ;
INSERT INTO ` operation_logs ` VALUES ( 28 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 325 , 0 , 1768869747 ) ;
INSERT INTO ` operation_logs ` VALUES ( 29 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 375 , 0 , 1768869756 ) ;
INSERT INTO ` operation_logs ` VALUES ( 30 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 375 , 0 , 1768869758 ) ;
INSERT INTO ` operation_logs ` VALUES ( 31 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 375 , 0 , 1768869760 ) ;
INSERT INTO ` operation_logs ` VALUES ( 32 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 358 , 0 , 1768869781 ) ;
INSERT INTO ` operation_logs ` VALUES ( 33 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 376 , 0 , 1768869786 ) ;
INSERT INTO ` operation_logs ` VALUES ( 34 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 386 , 0 , 1768869793 ) ;
INSERT INTO ` operation_logs ` VALUES ( 35 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 385 , 0 , 1768869795 ) ;
INSERT INTO ` operation_logs ` VALUES ( 36 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 388 , 0 , 1768869800 ) ;
INSERT INTO ` operation_logs ` VALUES ( 37 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 341 , 0 , 1768870363 ) ;
INSERT INTO ` operation_logs ` VALUES ( 38 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 340 , 0 , 1768870495 ) ;
INSERT INTO ` operation_logs ` VALUES ( 39 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 354 , 0 , 1768870522 ) ;
INSERT INTO ` operation_logs ` VALUES ( 40 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 335 , 0 , 1768870535 ) ;
INSERT INTO ` operation_logs ` VALUES ( 41 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 334 , 0 , 1768870539 ) ;
INSERT INTO ` operation_logs ` VALUES ( 42 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 338 , 0 , 1768870541 ) ;
INSERT INTO ` operation_logs ` VALUES ( 43 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 325 , 0 , 1768870546 ) ;
INSERT INTO ` operation_logs ` VALUES ( 44 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 322 , 0 , 1768870579 ) ;
INSERT INTO ` operation_logs ` VALUES ( 45 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 321 , 0 , 1768870581 ) ;
INSERT INTO ` operation_logs ` VALUES ( 46 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 321 , 0 , 1768870587 ) ;
INSERT INTO ` operation_logs ` VALUES ( 47 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/operation-logs ' , ' GET ' , ' ' , 200 , 95 , 0 , 1768870656 ) ;
INSERT INTO ` operation_logs ` VALUES ( 48 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 280 , 0 , 1768870656 ) ;
INSERT INTO ` operation_logs ` VALUES ( 49 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 376 , 0 , 1768870657 ) ;
INSERT INTO ` operation_logs ` VALUES ( 50 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/posts ' , ' GET ' , ' ' , 200 , 275 , 0 , 1768870658 ) ;
INSERT INTO ` operation_logs ` VALUES ( 51 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/categories ' , ' GET ' , ' ' , 200 , 47 , 0 , 1768870659 ) ;
INSERT INTO ` operation_logs ` VALUES ( 52 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/columns ' , ' GET ' , ' ' , 200 , 48 , 0 , 1768870660 ) ;
INSERT INTO ` operation_logs ` VALUES ( 53 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/works ' , ' GET ' , ' ' , 200 , 92 , 0 , 1768870660 ) ;
INSERT INTO ` operation_logs ` VALUES ( 54 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/snippets ' , ' GET ' , ' ' , 200 , 92 , 0 , 1768870661 ) ;
INSERT INTO ` operation_logs ` VALUES ( 55 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/tags ' , ' GET ' , ' ' , 200 , 44 , 0 , 1768870661 ) ;
INSERT INTO ` operation_logs ` VALUES ( 56 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 47 , 0 , 1768870663 ) ;
INSERT INTO ` operation_logs ` VALUES ( 57 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/about ' , ' GET ' , ' ' , 200 , 47 , 0 , 1768870663 ) ;
INSERT INTO ` operation_logs ` VALUES ( 58 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 47 , 0 , 1768870664 ) ;
INSERT INTO ` operation_logs ` VALUES ( 59 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/about ' , ' GET ' , ' ' , 200 , 47 , 0 , 1768870664 ) ;
INSERT INTO ` operation_logs ` VALUES ( 60 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/inquiries ' , ' GET ' , ' ' , 200 , 47 , 0 , 1768870668 ) ;
INSERT INTO ` operation_logs ` VALUES ( 61 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/email-suffixes ' , ' GET ' , ' ' , 200 , 49 , 0 , 1768870669 ) ;
INSERT INTO ` operation_logs ` VALUES ( 62 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/users ' , ' GET ' , ' ' , 200 , 93 , 0 , 1768870671 ) ;
INSERT INTO ` operation_logs ` VALUES ( 63 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/roles ' , ' GET ' , ' ' , 200 , 138 , 0 , 1768870672 ) ;
INSERT INTO ` operation_logs ` VALUES ( 64 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 49 , 0 , 1768870674 ) ;
INSERT INTO ` operation_logs ` VALUES ( 65 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/attachments ' , ' GET ' , ' ' , 200 , 104 , 0 , 1768870674 ) ;
INSERT INTO ` operation_logs ` VALUES ( 66 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 47 , 0 , 1768870675 ) ;
INSERT INTO ` operation_logs ` VALUES ( 67 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/oss-configs ' , ' GET ' , ' ' , 200 , 97 , 0 , 1768870676 ) ;
INSERT INTO ` operation_logs ` VALUES ( 68 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 49 , 0 , 1768870678 ) ;
INSERT INTO ` operation_logs ` VALUES ( 69 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/operation-logs ' , ' GET ' , ' ' , 200 , 95 , 0 , 1768870678 ) ;
INSERT INTO ` operation_logs ` VALUES ( 70 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 46 , 0 , 1768870679 ) ;
INSERT INTO ` operation_logs ` VALUES ( 71 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":4,\"keyName\":\"site_keywords\",\"value\":\"前端, 设计, 技术博客\",\"description\":\"网站关键词\"} ' , 400 , 5 , 0 , 1768870685 ) ;
INSERT INTO ` operation_logs ` VALUES ( 72 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":5,\"keyName\":\"posts_per_page\",\"value\":\"12\",\"description\":\"每页显示的文章数量\"} ' , 400 , 2 , 0 , 1768870685 ) ;
INSERT INTO ` operation_logs ` VALUES ( 73 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":3,\"keyName\":\"site_author\",\"value\":\"年糕崽崽\",\"description\":\"网站作者\"} ' , 400 , 4 , 0 , 1768870685 ) ;
INSERT INTO ` operation_logs ` VALUES ( 74 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":2,\"keyName\":\"site_description\",\"value\":\"分享前端技术、交互设计以及数字艺术的深度思考\",\"description\":\"网站描述\"} ' , 400 , 3 , 0 , 1768870685 ) ;
INSERT INTO ` operation_logs ` VALUES ( 75 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":1,\"keyName\":\"site_title\",\"value\":\"年糕博客\",\"description\":\"网站标题\"} ' , 400 , 6 , 0 , 1768870685 ) ;
INSERT INTO ` operation_logs ` VALUES ( 76 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":7,\"keyName\":\"snippets_per_page\",\"value\":\"8\",\"description\":\"每页显示的代码片段数量\"} ' , 400 , 3 , 0 , 1768870685 ) ;
INSERT INTO ` operation_logs ` VALUES ( 77 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":6,\"keyName\":\"works_per_page\",\"value\":\"6\",\"description\":\"每页显示的作品数量\"} ' , 400 , 4 , 0 , 1768870685 ) ;
INSERT INTO ` operation_logs ` VALUES ( 78 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":5,\"keyName\":\"posts_per_page\",\"value\":\"12\",\"description\":\"每页显示的文章数量\"} ' , 200 , 95 , 0 , 1768870798 ) ;
INSERT INTO ` operation_logs ` VALUES ( 79 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":3,\"keyName\":\"site_author\",\"value\":\"年糕崽崽\",\"description\":\"网站作者\"} ' , 200 , 97 , 0 , 1768870798 ) ;
INSERT INTO ` operation_logs ` VALUES ( 80 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":2,\"keyName\":\"site_description\",\"value\":\"分享前端技术、交互设计以及数字艺术的深度思考\",\"description\":\"网站描述\"} ' , 200 , 96 , 0 , 1768870799 ) ;
INSERT INTO ` operation_logs ` VALUES ( 81 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":4,\"keyName\":\"site_keywords\",\"value\":\"前端, 设计, 技术博客\",\"description\":\"网站关键词\"} ' , 200 , 96 , 0 , 1768870799 ) ;
INSERT INTO ` operation_logs ` VALUES ( 82 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":1,\"keyName\":\"site_title\",\"value\":\"年糕博客\",\"description\":\"网站标题\"} ' , 200 , 94 , 0 , 1768870799 ) ;
INSERT INTO ` operation_logs ` VALUES ( 83 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":7,\"keyName\":\"snippets_per_page\",\"value\":\"8\",\"description\":\"每页显示的代码片段数量\"} ' , 200 , 96 , 0 , 1768870799 ) ;
INSERT INTO ` operation_logs ` VALUES ( 84 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":6,\"keyName\":\"works_per_page\",\"value\":\"6\",\"description\":\"每页显示的作品数量\"} ' , 200 , 96 , 0 , 1768870799 ) ;
INSERT INTO ` operation_logs ` VALUES ( 85 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 46 , 0 , 1768870799 ) ;
INSERT INTO ` operation_logs ` VALUES ( 86 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 47 , 0 , 1768870807 ) ;
INSERT INTO ` operation_logs ` VALUES ( 87 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 49 , 0 , 1768870895 ) ;
INSERT INTO ` operation_logs ` VALUES ( 88 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 48 , 0 , 1768870907 ) ;
INSERT INTO ` operation_logs ` VALUES ( 89 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 45 , 0 , 1768870951 ) ;
INSERT INTO ` operation_logs ` VALUES ( 90 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 53 , 0 , 1768871123 ) ;
INSERT INTO ` operation_logs ` VALUES ( 91 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 50 , 0 , 1768871142 ) ;
INSERT INTO ` operation_logs ` VALUES ( 92 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 47 , 0 , 1768871185 ) ;
INSERT INTO ` operation_logs ` VALUES ( 93 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 50 , 0 , 1768871213 ) ;
INSERT INTO ` operation_logs ` VALUES ( 94 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 49 , 0 , 1768871273 ) ;
INSERT INTO ` operation_logs ` VALUES ( 95 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 50 , 0 , 1768871314 ) ;
INSERT INTO ` operation_logs ` VALUES ( 96 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 49 , 0 , 1768871359 ) ;
INSERT INTO ` operation_logs ` VALUES ( 97 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 47 , 0 , 1768871360 ) ;
INSERT INTO ` operation_logs ` VALUES ( 98 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 48 , 0 , 1768871381 ) ;
INSERT INTO ` operation_logs ` VALUES ( 99 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 57 , 0 , 1768871394 ) ;
INSERT INTO ` operation_logs ` VALUES ( 100 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 49 , 0 , 1768871427 ) ;
INSERT INTO ` operation_logs ` VALUES ( 101 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 44 , 0 , 1768871860 ) ;
INSERT INTO ` operation_logs ` VALUES ( 102 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/operation-logs ' , ' GET ' , ' ' , 200 , 97 , 0 , 1768872916 ) ;
INSERT INTO ` operation_logs ` VALUES ( 103 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 334 , 0 , 1768872916 ) ;
INSERT INTO ` operation_logs ` VALUES ( 104 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/operation-logs ' , ' GET ' , ' ' , 200 , 98 , 0 , 1768872983 ) ;
INSERT INTO ` operation_logs ` VALUES ( 105 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 338 , 0 , 1768872983 ) ;
INSERT INTO ` operation_logs ` VALUES ( 106 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/posts ' , ' GET ' , ' ' , 200 , 277 , 0 , 1768873803 ) ;
INSERT INTO ` operation_logs ` VALUES ( 107 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/posts ' , ' GET ' , ' ' , 200 , 290 , 0 , 1768877345 ) ;
INSERT INTO ` operation_logs ` VALUES ( 108 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 51 , 0 , 1768877347 ) ;
INSERT INTO ` operation_logs ` VALUES ( 109 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":5,\"keyName\":\"posts_per_page\",\"value\":\"12\",\"description\":\"每页显示的文章数量\"} ' , 200 , 98 , 0 , 1768877365 ) ;
INSERT INTO ` operation_logs ` VALUES ( 110 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":3,\"keyName\":\"site_author\",\"value\":\"年糕崽崽1\",\"description\":\"网站作者\"} ' , 200 , 93 , 0 , 1768877365 ) ;
INSERT INTO ` operation_logs ` VALUES ( 111 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":2,\"keyName\":\"site_description\",\"value\":\"分享前端技术、交互设计以及数字艺术的深度思考\",\"description\":\"网站描述\"} ' , 200 , 96 , 0 , 1768877365 ) ;
INSERT INTO ` operation_logs ` VALUES ( 112 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":4,\"keyName\":\"site_keywords\",\"value\":\"前端, 设计, 技术博客\",\"description\":\"网站关键词\"} ' , 200 , 98 , 0 , 1768877365 ) ;
INSERT INTO ` operation_logs ` VALUES ( 113 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":1,\"keyName\":\"site_title\",\"value\":\"年糕博客\",\"description\":\"网站标题\"} ' , 200 , 96 , 0 , 1768877365 ) ;
INSERT INTO ` operation_logs ` VALUES ( 114 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":7,\"keyName\":\"snippets_per_page\",\"value\":\"8\",\"description\":\"每页显示的代码片段数量\"} ' , 200 , 97 , 0 , 1768877365 ) ;
INSERT INTO ` operation_logs ` VALUES ( 115 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":6,\"keyName\":\"works_per_page\",\"value\":\"6\",\"description\":\"每页显示的作品数量\"} ' , 200 , 96 , 0 , 1768877365 ) ;
INSERT INTO ` operation_logs ` VALUES ( 116 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 47 , 0 , 1768877365 ) ;
INSERT INTO ` operation_logs ` VALUES ( 117 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/operation-logs ' , ' GET ' , ' ' , 200 , 101 , 0 , 1768877421 ) ;
INSERT INTO ` operation_logs ` VALUES ( 118 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 332 , 0 , 1768877421 ) ;
INSERT INTO ` operation_logs ` VALUES ( 119 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 373 , 0 , 1768877441 ) ;
INSERT INTO ` operation_logs ` VALUES ( 120 , 1 , ' lq ' , ' ::1 ' , NULL , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 373 , 0 , 1768877446 ) ;
INSERT INTO ` operation_logs ` VALUES ( 121 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 332 , 0 , 1768877578 ) ;
INSERT INTO ` operation_logs ` VALUES ( 122 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 328 , 0 , 1768877614 ) ;
INSERT INTO ` operation_logs ` VALUES ( 123 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 328 , 0 , 1768877620 ) ;
INSERT INTO ` operation_logs ` VALUES ( 124 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 329 , 0 , 1768877627 ) ;
INSERT INTO ` operation_logs ` VALUES ( 125 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 330 , 0 , 1768877629 ) ;
INSERT INTO ` operation_logs ` VALUES ( 126 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/access-logs ' , ' GET ' , ' ' , 200 , 95 , 0 , 1768877636 ) ;
INSERT INTO ` operation_logs ` VALUES ( 127 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/operation-logs ' , ' GET ' , ' ' , 200 , 97 , 0 , 1768877637 ) ;
INSERT INTO ` operation_logs ` VALUES ( 128 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/access-logs ' , ' GET ' , ' ' , 200 , 94 , 0 , 1768877641 ) ;
INSERT INTO ` operation_logs ` VALUES ( 129 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/operation-logs ' , ' GET ' , ' ' , 200 , 94 , 0 , 1768877642 ) ;
INSERT INTO ` operation_logs ` VALUES ( 130 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 48 , 0 , 1768877642 ) ;
INSERT INTO ` operation_logs ` VALUES ( 131 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 330 , 0 , 1768877655 ) ;
INSERT INTO ` operation_logs ` VALUES ( 132 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 328 , 0 , 1768877658 ) ;
INSERT INTO ` operation_logs ` VALUES ( 133 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 329 , 0 , 1768877716 ) ;
INSERT INTO ` operation_logs ` VALUES ( 134 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 48 , 0 , 1768877809 ) ;
INSERT INTO ` operation_logs ` VALUES ( 135 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 52 , 0 , 1768878153 ) ;
INSERT INTO ` operation_logs ` VALUES ( 136 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 49 , 0 , 1768878166 ) ;
INSERT INTO ` operation_logs ` VALUES ( 137 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 55 , 0 , 1768878174 ) ;
INSERT INTO ` operation_logs ` VALUES ( 138 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 57 , 0 , 1768878177 ) ;
INSERT INTO ` operation_logs ` VALUES ( 139 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 52 , 0 , 1768878188 ) ;
INSERT INTO ` operation_logs ` VALUES ( 140 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 51 , 0 , 1768878472 ) ;
INSERT INTO ` operation_logs ` VALUES ( 141 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 47 , 0 , 1768878512 ) ;
INSERT INTO ` operation_logs ` VALUES ( 142 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 52 , 0 , 1768878616 ) ;
INSERT INTO ` operation_logs ` VALUES ( 143 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":5,\"keyName\":\"posts_per_page\",\"value\":\"12\",\"description\":\"每页显示的文章数量\"} ' , 200 , 96 , 0 , 1768878627 ) ;
INSERT INTO ` operation_logs ` VALUES ( 144 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":3,\"keyName\":\"site_author\",\"value\":\"年糕崽崽1\",\"description\":\"网站作者\"} ' , 200 , 98 , 0 , 1768878627 ) ;
INSERT INTO ` operation_logs ` VALUES ( 145 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":2,\"keyName\":\"site_description\",\"value\":\"分享前端技术、交互设计以及数字艺术的深度思考\",\"description\":\"网站描述\"} ' , 200 , 96 , 0 , 1768878627 ) ;
INSERT INTO ` operation_logs ` VALUES ( 146 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":4,\"keyName\":\"site_keywords\",\"value\":\"前端, 设计, 技术博客\",\"description\":\"网站关键词\"} ' , 200 , 98 , 0 , 1768878628 ) ;
INSERT INTO ` operation_logs ` VALUES ( 147 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":1,\"keyName\":\"site_title\",\"value\":\"年糕崽崽\",\"description\":\"网站标题\"} ' , 200 , 97 , 0 , 1768878628 ) ;
INSERT INTO ` operation_logs ` VALUES ( 148 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":7,\"keyName\":\"snippets_per_page\",\"value\":\"8\",\"description\":\"每页显示的代码片段数量\"} ' , 200 , 98 , 0 , 1768878628 ) ;
INSERT INTO ` operation_logs ` VALUES ( 149 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":6,\"keyName\":\"works_per_page\",\"value\":\"6\",\"description\":\"每页显示的作品数量\"} ' , 200 , 97 , 0 , 1768878628 ) ;
INSERT INTO ` operation_logs ` VALUES ( 150 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 50 , 0 , 1768878628 ) ;
INSERT INTO ` operation_logs ` VALUES ( 151 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 50 , 0 , 1768878630 ) ;
INSERT INTO ` operation_logs ` VALUES ( 152 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 52 , 0 , 1768878632 ) ;
INSERT INTO ` operation_logs ` VALUES ( 153 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 51 , 0 , 1768878651 ) ;
INSERT INTO ` operation_logs ` VALUES ( 154 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 51 , 0 , 1768878667 ) ;
INSERT INTO ` operation_logs ` VALUES ( 155 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":5,\"keyName\":\"posts_per_page\",\"value\":\"12\",\"description\":\"每页显示的文章数量\"} ' , 200 , 98 , 0 , 1768878783 ) ;
INSERT INTO ` operation_logs ` VALUES ( 156 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":3,\"keyName\":\"site_author\",\"value\":\"年糕崽崽1\",\"description\":\"网站作者\"} ' , 200 , 96 , 0 , 1768878783 ) ;
INSERT INTO ` operation_logs ` VALUES ( 157 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":2,\"keyName\":\"site_description\",\"value\":\"分享前端技术、交互设计以及数字艺术的深度思考\",\"description\":\"网站描述\"} ' , 200 , 97 , 0 , 1768878783 ) ;
INSERT INTO ` operation_logs ` VALUES ( 158 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":4,\"keyName\":\"site_keywords\",\"value\":\"前端, 设计, 技术博客\",\"description\":\"网站关键词\"} ' , 200 , 98 , 0 , 1768878783 ) ;
INSERT INTO ` operation_logs ` VALUES ( 159 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":1,\"keyName\":\"site_title\",\"value\":\"年糕崽崽\",\"description\":\"网站标题\"} ' , 200 , 96 , 0 , 1768878783 ) ;
INSERT INTO ` operation_logs ` VALUES ( 160 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":7,\"keyName\":\"snippets_per_page\",\"value\":\"8\",\"description\":\"每页显示的代码片段数量\"} ' , 200 , 98 , 0 , 1768878783 ) ;
INSERT INTO ` operation_logs ` VALUES ( 161 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":6,\"keyName\":\"works_per_page\",\"value\":\"6\",\"description\":\"每页显示的作品数量\"} ' , 200 , 104 , 0 , 1768878783 ) ;
INSERT INTO ` operation_logs ` VALUES ( 162 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 48 , 0 , 1768878783 ) ;
INSERT INTO ` operation_logs ` VALUES ( 163 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 45 , 0 , 1768878798 ) ;
INSERT INTO ` operation_logs ` VALUES ( 164 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 47 , 0 , 1768878805 ) ;
INSERT INTO ` operation_logs ` VALUES ( 165 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 46 , 0 , 1768878844 ) ;
INSERT INTO ` operation_logs ` VALUES ( 166 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 50 , 0 , 1768878871 ) ;
INSERT INTO ` operation_logs ` VALUES ( 167 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 50 , 0 , 1768878985 ) ;
INSERT INTO ` operation_logs ` VALUES ( 168 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":15,\"keyName\":\"visible_menus\",\"value\":\"[\\\"home\\\",\\\"blog\\\",\\\"columns\\\",\\\"works\\\",\\\"about\\\",\\\"services\\\"]\",\"description\":\"前台显示的菜单项( JSON数组格式) \"} ' , 200 , 95 , 0 , 1768878990 ) ;
INSERT INTO ` operation_logs ` VALUES ( 169 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 44 , 0 , 1768878990 ) ;
INSERT INTO ` operation_logs ` VALUES ( 170 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 47 , 0 , 1768879150 ) ;
INSERT INTO ` operation_logs ` VALUES ( 171 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 46 , 0 , 1768879154 ) ;
INSERT INTO ` operation_logs ` VALUES ( 172 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 48 , 0 , 1768879158 ) ;
INSERT INTO ` operation_logs ` VALUES ( 173 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 16 , 0 , 1768880799 ) ;
INSERT INTO ` operation_logs ` VALUES ( 174 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 53 , 0 , 1768880809 ) ;
INSERT INTO ` operation_logs ` VALUES ( 175 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' PUT ' , ' {\"id\":15,\"keyName\":\"visible_menus\",\"value\":\"[\\\"home\\\",\\\"blog\\\",\\\"columns\\\",\\\"works\\\",\\\"about\\\"]\",\"description\":\"前台显示的菜单项( JSON数组格式) \"} ' , 200 , 99 , 0 , 1768881703 ) ;
INSERT INTO ` operation_logs ` VALUES ( 176 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/settings ' , ' GET ' , ' ' , 200 , 50 , 0 , 1768881703 ) ;
INSERT INTO ` operation_logs ` VALUES ( 177 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 312 , 0 , 1768881885 ) ;
INSERT INTO ` operation_logs ` VALUES ( 178 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 289 , 0 , 1768881900 ) ;
INSERT INTO ` operation_logs ` VALUES ( 179 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 329 , 0 , 1768882129 ) ;
INSERT INTO ` operation_logs ` VALUES ( 180 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 342 , 0 , 1768882288 ) ;
INSERT INTO ` operation_logs ` VALUES ( 181 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 330 , 0 , 1768882702 ) ;
INSERT INTO ` operation_logs ` VALUES ( 182 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 406 , 0 , 1768882750 ) ;
INSERT INTO ` operation_logs ` VALUES ( 183 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 387 , 0 , 1768882851 ) ;
INSERT INTO ` operation_logs ` VALUES ( 184 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 390 , 0 , 1768882853 ) ;
INSERT INTO ` operation_logs ` VALUES ( 185 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 392 , 0 , 1768882899 ) ;
INSERT INTO ` operation_logs ` VALUES ( 186 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 390 , 0 , 1768882943 ) ;
INSERT INTO ` operation_logs ` VALUES ( 187 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 344 , 0 , 1768883044 ) ;
INSERT INTO ` operation_logs ` VALUES ( 188 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 393 , 0 , 1768883048 ) ;
INSERT INTO ` operation_logs ` VALUES ( 189 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 337 , 0 , 1768883061 ) ;
INSERT INTO ` operation_logs ` VALUES ( 190 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 403 , 0 , 1768883292 ) ;
INSERT INTO ` operation_logs ` VALUES ( 191 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 385 , 0 , 1768883350 ) ;
INSERT INTO ` operation_logs ` VALUES ( 192 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 390 , 0 , 1768883362 ) ;
INSERT INTO ` operation_logs ` VALUES ( 193 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 380 , 0 , 1768883369 ) ;
INSERT INTO ` operation_logs ` VALUES ( 194 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 386 , 0 , 1768883370 ) ;
INSERT INTO ` operation_logs ` VALUES ( 195 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 382 , 0 , 1768883398 ) ;
INSERT INTO ` operation_logs ` VALUES ( 196 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 380 , 0 , 1768883424 ) ;
INSERT INTO ` operation_logs ` VALUES ( 197 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 379 , 0 , 1768883445 ) ;
INSERT INTO ` operation_logs ` VALUES ( 198 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/dashboard/stats ' , ' GET ' , ' ' , 200 , 383 , 0 , 1768883471 ) ;
INSERT INTO ` operation_logs ` VALUES ( 199 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 49 , 0 , 1768885354 ) ;
INSERT INTO ` operation_logs ` VALUES ( 200 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachments ' , ' GET ' , ' ' , 200 , 101 , 0 , 1768885354 ) ;
INSERT INTO ` operation_logs ` VALUES ( 201 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 47 , 0 , 1768885377 ) ;
INSERT INTO ` operation_logs ` VALUES ( 202 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachments ' , ' GET ' , ' ' , 200 , 143 , 0 , 1768885377 ) ;
INSERT INTO ` operation_logs ` VALUES ( 203 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 51 , 0 , 1768885548 ) ;
INSERT INTO ` operation_logs ` VALUES ( 204 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachments ' , ' GET ' , ' ' , 200 , 101 , 0 , 1768885548 ) ;
INSERT INTO ` operation_logs ` VALUES ( 205 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 52 , 0 , 1768886215 ) ;
INSERT INTO ` operation_logs ` VALUES ( 206 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachments ' , ' GET ' , ' ' , 200 , 98 , 0 , 1768886215 ) ;
INSERT INTO ` operation_logs ` VALUES ( 207 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 55 , 0 , 1768886263 ) ;
INSERT INTO ` operation_logs ` VALUES ( 208 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachments ' , ' GET ' , ' ' , 200 , 99 , 0 , 1768886263 ) ;
INSERT INTO ` operation_logs ` VALUES ( 209 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 54 , 0 , 1768886265 ) ;
INSERT INTO ` operation_logs ` VALUES ( 210 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachments ' , ' GET ' , ' ' , 200 , 102 , 0 , 1768886265 ) ;
INSERT INTO ` operation_logs ` VALUES ( 211 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 52 , 0 , 1768886268 ) ;
INSERT INTO ` operation_logs ` VALUES ( 212 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachments ' , ' GET ' , ' ' , 200 , 99 , 0 , 1768886268 ) ;
INSERT INTO ` operation_logs ` VALUES ( 213 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 48 , 0 , 1768886279 ) ;
INSERT INTO ` operation_logs ` VALUES ( 214 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachments ' , ' GET ' , ' ' , 200 , 98 , 0 , 1768886279 ) ;
INSERT INTO ` operation_logs ` VALUES ( 215 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 45 , 0 , 1768886289 ) ;
INSERT INTO ` operation_logs ` VALUES ( 216 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachments ' , ' GET ' , ' ' , 200 , 133 , 0 , 1768886289 ) ;
INSERT INTO ` operation_logs ` VALUES ( 217 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 47 , 0 , 1768886433 ) ;
INSERT INTO ` operation_logs ` VALUES ( 218 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachments ' , ' GET ' , ' ' , 200 , 144 , 0 , 1768886433 ) ;
INSERT INTO ` operation_logs ` VALUES ( 219 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 55 , 0 , 1768886433 ) ;
INSERT INTO ` operation_logs ` VALUES ( 220 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachments ' , ' GET ' , ' ' , 200 , 152 , 0 , 1768886433 ) ;
INSERT INTO ` operation_logs ` VALUES ( 221 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 47 , 0 , 1768886790 ) ;
INSERT INTO ` operation_logs ` VALUES ( 222 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachments ' , ' GET ' , ' ' , 200 , 147 , 0 , 1768886790 ) ;
INSERT INTO ` operation_logs ` VALUES ( 223 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachment-categories ' , ' GET ' , ' ' , 200 , 49 , 0 , 1768887180 ) ;
INSERT INTO ` operation_logs ` VALUES ( 224 , 1 , ' lq ' , ' ::1 ' , ' Internal ' , ' /api/admin/attachments ' , ' GET ' , ' ' , 200 , 97 , 0 , 1768887180 ) ;
-- ----------------------------
-- Table structure for oss_configs
@@ -325,7 +550,7 @@ CREATE TABLE `partners` (
-- Records of partners
-- ----------------------------
INSERT INTO ` partners ` VALUES ( 1 , ' Vercel ' , ' https://upload.wikimedia.org/wikipedia/commons/5/5e/Vercel_logo_black.svg ' , ' 前端部署平台 ' , ' https://vercel.com ' , 0 , 0 , 1768482993 , 1768538953 ) ;
INSERT INTO ` partners ` VALUES ( 2 , ' Supabase ' , ' https://seeklogo.com/images/S/supabase-logo-DCC676FFE2-seeklogo.com.pn g' , ' 开源 Firebase 替代方案 ' , ' https://supabase.com ', 0 , 0 , 1768482993 , 1768538953 ) ;
INSERT INTO ` partners ` VALUES ( 2 , ' Supabase ' , ' /uploads/2026/01/19/cc_upload_HiPDFg6oL0Q5ijfo693ce1f5eb57c_1768825204.jp g' , ' 开源 Firebase 替代方案 ' , ' ' , 0 , 0 , 1768482993 , 1768869197 ) ;
INSERT INTO ` partners ` VALUES ( 3 , ' Stripe ' , ' https://upload.wikimedia.org/wikipedia/commons/b/ba/Stripe_Logo%2C_revised_2016.svg ' , ' 在线支付基础设施 ' , ' https://stripe.com ' , 0 , 0 , 1768482993 , 1768538953 ) ;
INSERT INTO ` partners ` VALUES ( 4 , ' Algolia ' , ' https://upload.wikimedia.org/wikipedia/commons/6/69/Algolia-logo.svg ' , ' 搜索即服务 API ' , ' https://algolia.com ' , 0 , 0 , 1768482993 , 1768538953 ) ;
INSERT INTO ` partners ` VALUES ( 5 , ' Prisma ' , ' https://seeklogo.com/images/P/prisma-logo-3805665B69-seeklogo.com.png ' , ' 下一代 ORM ' , ' https://prisma.io ' , 0 , 0 , 1768482993 , 1768538953 ) ;
@@ -457,12 +682,12 @@ CREATE TABLE `posts` (
-- ----------------------------
-- Records of posts
-- ----------------------------
INSERT INTO ` posts ` VALUES ( 1 , ' refactor ' , ' 重构的艺术:如何优雅地处理遗留代码 ' , 4 , NULL , ' 在本文中,我们将探讨重构的核心原则和实用技巧,帮助你优雅地处理遗留代码,提高代码质量和可维护性。 ' , ' <h2>什么是代码重构?</h2><p>代码重构是在不改变代码外部行为的前提下,优化代码内部结构的过程...</p>\n\n\n\n ' , 9 , 1 , 0 , 1768291814 , 1768811113 ) ;
INSERT INTO ` posts ` VALUES ( 1 , ' refactor ' , ' 重构的艺术:如何优雅地处理遗留代码 ' , 4 , NULL , ' 在本文中,我们将探讨重构的核心原则和实用技巧,帮助你优雅地处理遗留代码,提高代码质量和可维护性。 ' , ' <h2>什么是代码重构?</h2><p>代码重构是在不改变代码外部行为的前提下,优化代码内部结构的过程...</p>\n\n\n\n ' , 10 , 1 , 0 , 1768291814 , 1768811113 ) ;
INSERT INTO ` posts ` VALUES ( 2 , ' shader ' , ' 着色器魔法:从零开始写一个噪声生成器 ' , 2 , NULL , ' 深入了解WebGL着色器, 学习如何从零开始实现一个高性能的噪声生成器, 为你的3D作品增添独特的视觉效果。 ' , ' <p>GLSL (OpenGL Shading Language) 是一门让人生畏但也充满魅力的语言。它运行在 GPU 上,能够并行处理数百万个像素,创造出惊人的视觉效果。</p>\r\n <h2>什么是柏林噪声?</h2>\r\n <p>柏林噪声( Perlin Noise) 是一种梯度噪声, 它比普通的随机数生成的噪声看起来更自然、更平滑。它常被用来模拟云彩、地形、火焰等自然现象。</p>\r\n <h2>Three.js 中的实现</h2>\r\n <p>在 Three.js 中,我们可以通过 <code>ShaderMaterial</code> 直接编写 GLSL 代码。</p>\r\n <pre><code><span class=\"code-comment\">// 简单的顶点着色器</span>\r\n<span class=\"code-keyword\">varying</span> <span class=\"code-keyword\">vec2</span> vUv;\r\n<span class=\"code-keyword\">void</span> <span class=\"code-func\">main</span>() {\r\n vUv = uv;\r\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n}</code></pre>\r\n <p>通过调整噪声的频率和振幅,我们可以得到各种不同的纹理效果。在我的个人网站背景中,就使用了这种技术来生成流动的极光效果。</p>\r\n ' , 1 , 1 , 0 , 1768291815 , 1768538949 ) ;
INSERT INTO ` posts ` VALUES ( 3 , ' ux ' , ' 用户体验设计:从认知心理学到交互实践 ' , 3 , NULL , ' 探索用户体验设计的核心原理,结合认知心理学知识,学习如何设计出真正符合用户需求的交互界面。 ' , ' <h2>认知心理学在UX设计中的应用</h2><p>了解用户的认知过程是设计良好用户体验的基础...</p> ' , 0 , 1 , 0 , 1768291816 , 1768538949 ) ;
INSERT INTO ` posts ` VALUES ( 4 , ' goravel-guide-1 ' , ' Goravel 入门指南 (一):环境搭建与 Hello World ' , 4 , 1 , ' 本文将带你了解 Go 语言领域的 Laravel —— Goravel 框架,并演示如何快速搭建环境及运行第一个 Web 服务。 ' , ' ## 什么是 Goravel? \n\nGoravel 是一个基于 Go 语言的 Web 开发框架,它的设计理念深受 PHP Laravel 框架的启发。如果你是一名从 PHP 转 Go 的开发者,或者你喜欢 Laravel 那种“开箱即用、优雅简洁”的开发体验,那么 Goravel 绝对是你的不二之选。\n\n它集成了丰富的功能模块, 包括但不限于: \n- 强大的路由系统\n- ORM( 基于 GORM 封装)\n- 依赖注入容器\n- 队列与任务调度\n- 缓存与文件存储\n\n## 环境搭建\n\nGoravel 提供了一个名为 `knit` 的命令行工具(类似 Laravel 的 artisan) , 可以帮助我们快速初始化项目。\n\n### 1. 安装 Knit CLI\n\n确保你已经安装了 Go (1.20+),然后运行以下命令:\n\n```bash\ngo install github.com/goravel/knit/cmd/knit@latest\n```\n\n### 2. 创建新项目\n\n使用 `knit new` 命令创建项目:\n\n```bash\nknit new my-goravel-app\ncd my-goravel-app\n```\n\n### 3. 安装依赖\n\n```bash\ngo mod tidy\n```\n\n## 目录结构\n\n打开项目, 你会发现它的目录结构非常清晰, 带有浓厚的 Laravel 风格:\n\n- **app/**: 核心业务代码( Http 控制器、模型、服务提供者等)\n- **config/**: 配置文件(应用配置、数据库配置等)\n- **routes/**: 路由定义文件\n- **database/**: 数据库迁移与填充\n- **public/**: 静态资源文件\n\n## 运行 Hello World\n\nGoravel 的入口文件是根目录下的 `main.go`。在运行之前,我们先看一眼路由定义。打开 `routes/web.go`: \n\n```go\npackage routes\n\nimport (\n \"github.com/goravel/framework/contracts/http\"\n \"github.com/goravel/framework/facades\"\n)\n\nfunc Web() {\n facades.Route().Get(\"/\", func(ctx http.Context) http.Response {\n return ctx.Response().Json(200, http.Json{\n \"Hello\": \"Goravel\",\n })\n })\n}\n```\n\n非常直观! 现在让我们启动服务: \n\n```bash\ngo run .\n```\n\n默认情况下, 服务会运行在 `http://localhost:3000`。打开浏览器访问,你应该能看到 JSON 响应:\n\n```json\n{\n \"Hello\": \"Goravel\"\n}\n```\n\n至此, 你已经成功运行了你的第一个 Goravel 应用!在下一篇文章中,我们将深入探讨路由与控制器的使用。 ' , 1210 , 1 , 0 , 1768465932 , 1768538949 ) ;
INSERT INTO ` posts ` VALUES ( 5 , ' goravel-guide-2 ' , ' Goravel 入门指南 (二):路由与控制器 ' , 4 , 1 , ' 深入理解 Goravel 的 HTTP 层,学习如何定义 RESTful 路由、创建控制器以及处理 HTTP 请求与响应。 ' , ' ## 路由系统\n\n在 Goravel 中,路由定义通常位于 `routes/` 目录下。`api.go` 用于定义 API 路由,`web.go` 用于定义网页路由。Goravel 使用 `facades.Route()` 来定义路由,这得益于其强大的依赖注入系统。\n\n### 基础路由\n\n```go\n// GET 请求\nfacades.Route().Get(\"/users\", func(ctx http.Context) http.Response {\n return ctx.Response().String(200, \"User List\")\n})\n\n// POST 请求\nfacades.Route().Post(\"/users\", func(ctx http.Context) http.Response {\n return ctx.Response().Success().Json(http.Json{\"id\": 1})\n})\n```\n\n### 路由参数\n\n获取 URL 中的动态参数非常简单:\n\n```go\nfacades.Route().Get(\"/users/{id}\", func(ctx http.Context) http.Response {\n id := ctx.Request().Input(\"id\")\n return ctx.Response().Success().Json(http.Json{\"user_id\": id})\n})\n```\n\n## 控制器 (Controllers)\n\n随着应用变大, 我们不可能把所有逻辑都写在路由闭包里。这时候就需要控制器了。\n\n### 创建控制器\n\n使用 `knit` 工具可以快速生成控制器:\n\n```bash\nknit make:controller UserController\n```\n\n这会在 `app/http/controllers` 目录下生成 `user_controller.go`。让我们修改它来添加一个 `Show` 方法:\n\n```go\npackage controllers\n\nimport (\n \"github.com/goravel/framework/contracts/http\"\n)\n\ntype UserController struct {\n // 可以在这里注入服务\n}\n\nfunc NewUserController() *UserController {\n return &UserController{}\n}\n\nfunc (r *UserController) Show(ctx http.Context) http.Response {\n id := ctx.Request().Input(\"id\")\n // 模拟数据库查询\n return ctx.Response().Success().Json(http.Json{\n \"id\": id,\n \"name\": \"Goravel User\",\n })\n}\n```\n\n### 注册控制器路由\n\n回到 `routes/api.go`,我们需要先实例化控制器,然后绑定路由:\n\n```go\nimport \"my-goravel-app/app/http/controllers\"\n\nfunc Api() {\n userController := controllers.NewUserController()\n \n // 绑定到控制器方法\n facades.Route().Get(\"/users/{id}\", userController.Show)\n}\n```\n\n## 请求与响应\n\n在控制器方法中, `ctx` (http.Context) 是核心:\n\n- **获取输入**: `ctx.Request().Input(\"key\")`\n- **获取 JSON**: `ctx.Request().Bind(&user)`\n- **返回 JSON**: `ctx.Response().Json(200, data)`\n- **设置状态码**: `ctx.Response().Status(404)`\n\n通过这种方式, Goravel 让 HTTP 层的处理变得异常清晰和标准化。下一章,我们将学习如何通过 ORM 操作数据库。 ' , 904 , 1 , 0 , 1768465933 , 1768538949 ) ;
INSERT INTO ` posts ` VALUES ( 6 , ' goravel-guide-3 ' , ' Goravel 入门指南 (三): ORM 数据库操作 ' , 4 , 1 , ' 掌握 Goravel 强大的 ORM 功能, 从数据库配置、模型定义到执行增删改查( CRUD) 操作。 ' , ' ## Goravel ORM 简介\r\nGoravel 的 ORM 基于著名的 GORM 库构建,但它进行了一层优雅的封装,使其调用方式更接近 Laravel 的 Eloquent ORM。这意味着你可以使用 Facade 模式轻松调用数据库,且支持自动迁移。\r\n## 配置数据库\r\n打开 `config/database.go` 或 `.env` 文件,配置你的 MySQL 连接信息:\r\n```env\r\nDB_CONNECTION=mysql\r\nDB_HOST=127.0.0.1\r\nDB_PORT=3306\r\nDB_DATABASE=goravel\r\nDB_USERNAME=root\r\nDB_PASSWORD=password\r\n```\r\n## 定义模型\r\n使用 `knit` 生成模型:\r\n```bash\r\nknit make:model Post\r\n```\r\n生成的模型文件位于 `app/models/post.go`。我们需要定义结构体字段:\r\n```go\r\npackage models\r\nimport (\r\n \\\"github.com/goravel/framework/database/orm\\\"\r\n )\r\ntype Post struct {\r\n orm.Model\r\n Title string `gorm:\\\"size:255;not null\\\"`\r\n Content string `gorm:\\\"type:text\\\"`\r\n UserID uint\r\n }\r\n ```\r\n## 数据库迁移\r\n虽然 GORM 支持 AutoMigrate, 但 Goravel 推荐使用迁移文件来管理数据库变更。\r\n```bash\r\nknit make:migration create_posts_table\r\n```\r\n编辑生成的迁移文件 (`database/migrations/xxxx_create_posts_table.go`),定义表结构,然后运行:\r\n```bash\r\nknit migrate\r\n```\r\n## CRUD 操作\r\n有了模型, 我们就可以愉快地操作数据库了。所有操作都通过 `facades.Orm()` 入口。\r\n### 创建 (Create)\r\n```go\r\npost := models.Post{\r\n Title: \\\"My First Post\\\",\r\n Content: \\\"Content goes here...\\\",\r\n }\r\n err := facades.Orm().Query().Create(&post)\r\n ```\r\n### 查询 (Read)\r\n```go\r\nvar post models.Post\r\n// 根据主键查询\r\nfacades.Orm().Query().Find(&post, 1)\r\n// 条件查询\r\nvar posts []models.Post\r\nfacades.Orm().Query().Where(\\\"title\\\", \\\"My First Post\\\").Get(&posts)\r\n```\r\n### 更新 (Update)\r\n```go\r\nvar post models.Post\r\nfacades.Orm().Query().Find(&post, 1)\r\npost.Title = \\\"Updated Title\\\"\r\nfacades.Orm().Query().Save(&post)\r\n```\r\n### 删除 (Delete)\r\n```go\r\nvar post models.Post\r\nfacades.Orm().Query().Delete(&post, 1)\r\n```\r\nGoravel 的 ORM 让 Go 语言的数据库操作不再繁琐,极大地提高了开发效率。配合之前的路由和控制器知识,你现在已经具备了开发完整 RESTful API 的能力! ' , 1593 , 1 , 0 , 1768465934 , 1768809351 ) ;
INSERT INTO ` posts ` VALUES ( 4 , ' goravel-guide-1 ' , ' Goravel 入门指南 (一):环境搭建与 Hello World ' , 4 , 1 , ' 本文将带你了解 Go 语言领域的 Laravel —— Goravel 框架,并演示如何快速搭建环境及运行第一个 Web 服务。 ' , ' ## 什么是 Goravel? \n\nGoravel 是一个基于 Go 语言的 Web 开发框架,它的设计理念深受 PHP Laravel 框架的启发。如果你是一名从 PHP 转 Go 的开发者,或者你喜欢 Laravel 那种“开箱即用、优雅简洁”的开发体验,那么 Goravel 绝对是你的不二之选。\n\n它集成了丰富的功能模块, 包括但不限于: \n- 强大的路由系统\n- ORM( 基于 GORM 封装)\n- 依赖注入容器\n- 队列与任务调度\n- 缓存与文件存储\n\n## 环境搭建\n\nGoravel 提供了一个名为 `knit` 的命令行工具(类似 Laravel 的 artisan) , 可以帮助我们快速初始化项目。\n\n### 1. 安装 Knit CLI\n\n确保你已经安装了 Go (1.20+),然后运行以下命令:\n\n```bash\ngo install github.com/goravel/knit/cmd/knit@latest\n```\n\n### 2. 创建新项目\n\n使用 `knit new` 命令创建项目:\n\n```bash\nknit new my-goravel-app\ncd my-goravel-app\n```\n\n### 3. 安装依赖\n\n```bash\ngo mod tidy\n```\n\n## 目录结构\n\n打开项目, 你会发现它的目录结构非常清晰, 带有浓厚的 Laravel 风格:\n\n- **app/**: 核心业务代码( Http 控制器、模型、服务提供者等)\n- **config/**: 配置文件(应用配置、数据库配置等)\n- **routes/**: 路由定义文件\n- **database/**: 数据库迁移与填充\n- **public/**: 静态资源文件\n\n## 运行 Hello World\n\nGoravel 的入口文件是根目录下的 `main.go`。在运行之前,我们先看一眼路由定义。打开 `routes/web.go`: \n\n```go\npackage routes\n\nimport (\n \"github.com/goravel/framework/contracts/http\"\n \"github.com/goravel/framework/facades\"\n)\n\nfunc Web() {\n facades.Route().Get(\"/\", func(ctx http.Context) http.Response {\n return ctx.Response().Json(200, http.Json{\n \"Hello\": \"Goravel\",\n })\n })\n}\n```\n\n非常直观! 现在让我们启动服务: \n\n```bash\ngo run .\n```\n\n默认情况下, 服务会运行在 `http://localhost:3000`。打开浏览器访问,你应该能看到 JSON 响应:\n\n```json\n{\n \"Hello\": \"Goravel\"\n}\n```\n\n至此, 你已经成功运行了你的第一个 Goravel 应用!在下一篇文章中,我们将深入探讨路由与控制器的使用。 ' , 1223 , 1 , 0 , 1768465932 , 1768538949 ) ;
INSERT INTO ` posts ` VALUES ( 5 , ' goravel-guide-2 ' , ' Goravel 入门指南 (二):路由与控制器 ' , 4 , 1 , ' 深入理解 Goravel 的 HTTP 层,学习如何定义 RESTful 路由、创建控制器以及处理 HTTP 请求与响应。 ' , ' ## 路由系统\n\n在 Goravel 中,路由定义通常位于 `routes/` 目录下。`api.go` 用于定义 API 路由,`web.go` 用于定义网页路由。Goravel 使用 `facades.Route()` 来定义路由,这得益于其强大的依赖注入系统。\n\n### 基础路由\n\n```go\n// GET 请求\nfacades.Route().Get(\"/users\", func(ctx http.Context) http.Response {\n return ctx.Response().String(200, \"User List\")\n})\n\n// POST 请求\nfacades.Route().Post(\"/users\", func(ctx http.Context) http.Response {\n return ctx.Response().Success().Json(http.Json{\"id\": 1})\n})\n```\n\n### 路由参数\n\n获取 URL 中的动态参数非常简单:\n\n```go\nfacades.Route().Get(\"/users/{id}\", func(ctx http.Context) http.Response {\n id := ctx.Request().Input(\"id\")\n return ctx.Response().Success().Json(http.Json{\"user_id\": id})\n})\n```\n\n## 控制器 (Controllers)\n\n随着应用变大, 我们不可能把所有逻辑都写在路由闭包里。这时候就需要控制器了。\n\n### 创建控制器\n\n使用 `knit` 工具可以快速生成控制器:\n\n```bash\nknit make:controller UserController\n```\n\n这会在 `app/http/controllers` 目录下生成 `user_controller.go`。让我们修改它来添加一个 `Show` 方法:\n\n```go\npackage controllers\n\nimport (\n \"github.com/goravel/framework/contracts/http\"\n)\n\ntype UserController struct {\n // 可以在这里注入服务\n}\n\nfunc NewUserController() *UserController {\n return &UserController{}\n}\n\nfunc (r *UserController) Show(ctx http.Context) http.Response {\n id := ctx.Request().Input(\"id\")\n // 模拟数据库查询\n return ctx.Response().Success().Json(http.Json{\n \"id\": id,\n \"name\": \"Goravel User\",\n })\n}\n```\n\n### 注册控制器路由\n\n回到 `routes/api.go`,我们需要先实例化控制器,然后绑定路由:\n\n```go\nimport \"my-goravel-app/app/http/controllers\"\n\nfunc Api() {\n userController := controllers.NewUserController()\n \n // 绑定到控制器方法\n facades.Route().Get(\"/users/{id}\", userController.Show)\n}\n```\n\n## 请求与响应\n\n在控制器方法中, `ctx` (http.Context) 是核心:\n\n- **获取输入**: `ctx.Request().Input(\"key\")`\n- **获取 JSON**: `ctx.Request().Bind(&user)`\n- **返回 JSON**: `ctx.Response().Json(200, data)`\n- **设置状态码**: `ctx.Response().Status(404)`\n\n通过这种方式, Goravel 让 HTTP 层的处理变得异常清晰和标准化。下一章,我们将学习如何通过 ORM 操作数据库。 ' , 925 , 1 , 0 , 1768465933 , 1768538949 ) ;
INSERT INTO ` posts ` VALUES ( 6 , ' goravel-guide-3 ' , ' Goravel 入门指南 (三): ORM 数据库操作 ' , 4 , 1 , ' 掌握 Goravel 强大的 ORM 功能, 从数据库配置、模型定义到执行增删改查( CRUD) 操作。 ' , ' ## Goravel ORM 简介\r\nGoravel 的 ORM 基于著名的 GORM 库构建,但它进行了一层优雅的封装,使其调用方式更接近 Laravel 的 Eloquent ORM。这意味着你可以使用 Facade 模式轻松调用数据库,且支持自动迁移。\r\n## 配置数据库\r\n打开 `config/database.go` 或 `.env` 文件,配置你的 MySQL 连接信息:\r\n```env\r\nDB_CONNECTION=mysql\r\nDB_HOST=127.0.0.1\r\nDB_PORT=3306\r\nDB_DATABASE=goravel\r\nDB_USERNAME=root\r\nDB_PASSWORD=password\r\n```\r\n## 定义模型\r\n使用 `knit` 生成模型:\r\n```bash\r\nknit make:model Post\r\n```\r\n生成的模型文件位于 `app/models/post.go`。我们需要定义结构体字段:\r\n```go\r\npackage models\r\nimport (\r\n \\\"github.com/goravel/framework/database/orm\\\"\r\n )\r\ntype Post struct {\r\n orm.Model\r\n Title string `gorm:\\\"size:255;not null\\\"`\r\n Content string `gorm:\\\"type:text\\\"`\r\n UserID uint\r\n }\r\n ```\r\n## 数据库迁移\r\n虽然 GORM 支持 AutoMigrate, 但 Goravel 推荐使用迁移文件来管理数据库变更。\r\n```bash\r\nknit make:migration create_posts_table\r\n```\r\n编辑生成的迁移文件 (`database/migrations/xxxx_create_posts_table.go`),定义表结构,然后运行:\r\n```bash\r\nknit migrate\r\n```\r\n## CRUD 操作\r\n有了模型, 我们就可以愉快地操作数据库了。所有操作都通过 `facades.Orm()` 入口。\r\n### 创建 (Create)\r\n```go\r\npost := models.Post{\r\n Title: \\\"My First Post\\\",\r\n Content: \\\"Content goes here...\\\",\r\n }\r\n err := facades.Orm().Query().Create(&post)\r\n ```\r\n### 查询 (Read)\r\n```go\r\nvar post models.Post\r\n// 根据主键查询\r\nfacades.Orm().Query().Find(&post, 1)\r\n// 条件查询\r\nvar posts []models.Post\r\nfacades.Orm().Query().Where(\\\"title\\\", \\\"My First Post\\\").Get(&posts)\r\n```\r\n### 更新 (Update)\r\n```go\r\nvar post models.Post\r\nfacades.Orm().Query().Find(&post, 1)\r\npost.Title = \\\"Updated Title\\\"\r\nfacades.Orm().Query().Save(&post)\r\n```\r\n### 删除 (Delete)\r\n```go\r\nvar post models.Post\r\nfacades.Orm().Query().Delete(&post, 1)\r\n```\r\nGoravel 的 ORM 让 Go 语言的数据库操作不再繁琐,极大地提高了开发效率。配合之前的路由和控制器知识,你现在已经具备了开发完整 RESTful API 的能力! ' , 1602 , 1 , 0 , 1768465934 , 1768809351 ) ;
-- ----------------------------
-- Table structure for role_permissions
@@ -580,18 +805,19 @@ CREATE TABLE `settings` (
PRIMARY KEY ( ` id ` ) USING BTREE ,
UNIQUE INDEX ` key_name ` ( ` key_name ` ASC ) USING BTREE ,
INDEX ` idx_key_name ` ( ` key_name ` ASC ) USING BTREE COMMENT ' 按键名查询索引 '
) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = ' 网站配置表 ' ROW_FORMAT = DYNAMIC ;
) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = ' 网站配置表 ' ROW_FORMAT = DYNAMIC ;
-- ----------------------------
-- Records of settings
-- ----------------------------
INSERT INTO ` settings ` VALUES ( 1 , ' site_title ' , ' 年糕博客 ' , ' 网站标题 ' , 0 , 1768291814 , 1768538952 ) ;
INSERT INTO ` settings ` VALUES ( 2 , ' site_description ' , ' 分享前端技术、交互设计以及数字艺术的深度思考 ' , ' 网站描述 ' , 0 , 1768291814 , 1768538952 ) ;
INSERT INTO ` settings ` VALUES ( 3 , ' site_author ' , ' 年糕崽崽 ' , ' 网站作者 ' , 0 , 1768291814 , 1768538952 ) ;
INSERT INTO ` settings ` VALUES ( 4 , ' site_keywords ' , ' 前端, 设计, 技术博客 ' , ' 网站关键词 ' , 0 , 1768291814 , 1768538952 ) ;
INSERT INTO ` settings ` VALUES ( 5 , ' posts_per_page ' , ' 10 ' , ' 每页显示的文章数量 ' , 0 , 1768291814 , 1768538952 ) ;
INSERT INTO ` settings ` VALUES ( 6 , ' works_per_page ' , ' 6 ' , ' 每页显示的作品数量 ' , 0 , 1768291814 , 1768538952 ) ;
INSERT INTO ` settings ` VALUES ( 7 , ' snippets_per_page ' , ' 8 ' , ' 每页显示的代码片段数量 ' , 0 , 1768291814 , 1768538952 ) ;
INSERT INTO ` settings ` VALUES ( 1 , ' site_title ' , ' 年糕崽崽 ' , ' 网站标题 ' , 0 , 1768291814 , 1768878783 ) ;
INSERT INTO ` settings ` VALUES ( 2 , ' site_description ' , ' 分享前端技术、交互设计以及数字艺术的深度思考 ' , ' 网站描述 ' , 0 , 1768291814 , 1768878783 ) ;
INSERT INTO ` settings ` VALUES ( 3 , ' site_author ' , ' 年糕崽崽1 ' , ' 网站作者 ' , 0 , 1768291814 , 1768878783 ) ;
INSERT INTO ` settings ` VALUES ( 4 , ' site_keywords ' , ' 前端, 设计, 技术博客 ' , ' 网站关键词 ' , 0 , 1768291814 , 1768878783 ) ;
INSERT INTO ` settings ` VALUES ( 5 , ' posts_per_page ' , ' 12 ' , ' 每页显示的文章数量 ' , 0 , 1768291814 , 1768878783 ) ;
INSERT INTO ` settings ` VALUES ( 6 , ' works_per_page ' , ' 6 ' , ' 每页显示的作品数量 ' , 0 , 1768291814 , 1768878783 ) ;
INSERT INTO ` settings ` VALUES ( 7 , ' snippets_per_page ' , ' 8 ' , ' 每页显示的代码片段数量 ' , 0 , 1768291814 , 1768878783 ) ;
INSERT INTO ` settings ` VALUES ( 15 , ' visible_menus ' , ' [\"home\",\"blog\",\"columns\",\"works\",\"about\"] ' , ' 前台显示的菜单项( JSON数组格式) ' , 0 , 1768878978 , 1768881703 ) ;
-- ----------------------------
-- Table structure for snippets
@@ -685,11 +911,56 @@ CREATE TABLE `user_access_logs` (
PRIMARY KEY ( ` id ` ) USING BTREE ,
INDEX ` idx_user_id ` ( ` user_id ` ASC ) USING BTREE ,
INDEX ` idx_article_id ` ( ` article_id ` ASC ) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 19 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = ' 用户访问记录表 ' ROW_FORMAT = DYNAMIC ;
) ENGINE = InnoDB AUTO_INCREMENT = 46 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = ' 用户访问记录表 ' ROW_FORMAT = DYNAMIC ;
-- ----------------------------
-- Records of user_access_logs
-- ----------------------------
INSERT INTO ` user_access_logs ` VALUES ( 1 , 0 , ' ::1 ' , ' Internal ' , 1 , 0 , 1768829817 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 2 , 0 , ' ::1 ' , ' Internal ' , 4 , 0 , 1768829860 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 3 , 0 , ' ::1 ' , ' Internal ' , 4 , 0 , 1768869688 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 4 , 0 , ' ::1 ' , ' Internal ' , 4 , 0 , 1768869746 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 5 , 0 , ' ::1 ' , ' Internal ' , 4 , 0 , 1768870362 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 6 , 0 , ' ::1 ' , ' Internal ' , 4 , 0 , 1768870495 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 7 , 0 , ' ::1 ' , ' Internal ' , 4 , 0 , 1768870534 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 8 , 0 , ' ::1 ' , ' Internal ' , 4 , 0 , 1768870538 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 9 , 0 , ' ::1 ' , ' Internal ' , 4 , 0 , 1768870540 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 10 , 0 , ' ::1 ' , ' Internal ' , 4 , 0 , 1768870545 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 11 , 0 , ' ::1 ' , ' Internal ' , 4 , 0 , 1768870579 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 12 , 0 , ' ::1 ' , ' Internal ' , 4 , 0 , 1768870580 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 13 , 0 , ' ::1 ' , ' Internal ' , 4 , 0 , 1768870586 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 14 , 0 , ' ::1 ' , ' Internal ' , 4 , 0 , 1768870637 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 15 , 0 , ' ::1 ' , ' Internal ' , 5 , 0 , 1768870640 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 16 , 1 , ' ::1 ' , ' Internal ' , 0 , 0 , 1768872916 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 17 , 0 , ' ::1 ' , ' Internal ' , 6 , 0 , 1768878230 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 18 , 0 , ' ::1 ' , ' Internal ' , 6 , 0 , 1768878635 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 19 , 0 , ' ::1 ' , ' Internal ' , 6 , 0 , 1768878639 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 20 , 0 , ' ::1 ' , ' Internal ' , 6 , 0 , 1768878649 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 21 , 0 , ' ::1 ' , ' Internal ' , 6 , 0 , 1768878651 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 22 , 0 , ' ::1 ' , ' Internal ' , 6 , 0 , 1768878667 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 23 , 0 , ' ::1 ' , ' Internal ' , 6 , 0 , 1768878844 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 24 , 0 , ' ::1 ' , ' Internal ' , 6 , 0 , 1768878871 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 25 , 0 , ' ::1 ' , ' Internal ' , 6 , 0 , 1768878875 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 26 , 0 , ' ::1 ' , ' Internal ' , 5 , 0 , 1768879449 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 27 , 0 , ' ::1 ' , ' Internal ' , 5 , 0 , 1768879452 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 28 , 0 , ' ::1 ' , ' Internal ' , 5 , 0 , 1768879513 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 29 , 0 , ' ::1 ' , ' Internal ' , 5 , 0 , 1768880797 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 30 , 0 , ' ::1 ' , ' Internal ' , 5 , 0 , 1768880799 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 31 , 0 , ' ::1 ' , ' Internal ' , 5 , 0 , 1768880810 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 32 , 0 , ' ::1 ' , ' Internal ' , 5 , 0 , 1768881631 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 33 , 0 , ' ::1 ' , ' Internal ' , 5 , 0 , 1768881636 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 34 , 0 , ' ::1 ' , ' Internal ' , 5 , 0 , 1768881706 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 35 , 0 , ' ::1 ' , ' Internal ' , 5 , 0 , 1768883044 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 36 , 0 , ' ::1 ' , ' Internal ' , 5 , 0 , 1768883060 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 37 , 0 , ' ::1 ' , ' Internal ' , 5 , 0 , 1768883290 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 38 , 0 , ' ::1 ' , ' Internal ' , 5 , 0 , 1768883291 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 39 , 0 , ' ::1 ' , ' Internal ' , 5 , 0 , 1768886263 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 40 , 0 , ' ::1 ' , ' Internal ' , 5 , 0 , 1768886279 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 41 , 0 , ' ::1 ' , ' Internal ' , 5 , 0 , 1768886433 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 42 , 0 , ' ::1 ' , ' Internal ' , 5 , 0 , 1768886788 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 43 , 0 , ' ::1 ' , ' Internal ' , 5 , 0 , 1768886790 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 44 , 0 , ' ::1 ' , ' Internal ' , 5 , 0 , 1768887178 ) ;
INSERT INTO ` user_access_logs ` VALUES ( 45 , 0 , ' ::1 ' , ' Internal ' , 5 , 0 , 1768887180 ) ;
-- ----------------------------
-- Table structure for users
@@ -718,7 +989,7 @@ CREATE TABLE `users` (
-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO ` users ` VALUES ( 1 , ' lq ' , ' liqiworker@gmail.com ' , ' $2a$10$Bq6rv7714W3jGyXruYx4puXjflMTSkq2QM9kF54x9iZnk.0AD4B1G ' , 1 , ' admin ' , 1 , 0 , 1768291814 , 1768538951 ) ;
INSERT INTO ` users ` VALUES ( 1 , ' lq ' , ' liqiworker@gmail.com ' , ' $2a$10$b.KMnG261WjsvdKciKn01uRpuZs2eIiiIIXhpwIu6rgQ8AL5oxA8e ' , 1 , ' admin ' , 1 , 0 , 1768291814 , 1768538951 ) ;
INSERT INTO ` users ` VALUES ( 2 , ' editor ' , ' editor@example.com ' , ' $2a$14$OqZ7svgz3S68yuuXTJWz1.0CuqI2i3WvwC1jIGBy4l0mcJW9Kqvy2 ' , 2 , ' editor ' , 1 , 0 , 1768291814 , 1768538951 ) ;
INSERT INTO ` users ` VALUES ( 5 , ' cs ' , ' cs@nailaoyun.cn ' , ' $2a$14$OqZ7svgz3S68yuuXTJWz1.0CuqI2i3WvwC1jIGBy4l0mcJW9Kqvy2 ' , 3 , ' viewer ' , 1 , 0 , 1768462115 , 1768538951 ) ;