diff --git a/server/nl_blog.sql b/server/nl_blog.sql index d8c27ae..cebbaa9 100644 --- a/server/nl_blog.sql +++ b/server/nl_blog.sql @@ -11,7 +11,7 @@ Target Server Version : 80407 (8.4.7) File Encoding : 65001 - Date: 16/01/2026 12:21:22 + Date: 16/01/2026 13:10:06 */ SET NAMES utf8mb4; @@ -36,12 +36,12 @@ CREATE TABLE `about_profiles` ( `updated_at` bigint NOT NULL DEFAULT 0, `deleted_at` bigint NOT NULL DEFAULT 0, PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of about_profiles -- ---------------------------- -INSERT INTO `about_profiles` VALUES (1, '年糕崽崽', 'https://api.dicebear.com/7.x/avataaars/svg?seed=NianGao&backgroundColor=b6e3f4', '中国 · 浙江杭州', '嗨!我是年糕崽崽,一名热衷于探索数字边界的前端架构师。我的职业生涯始于对像素级完美的执念。从早期的 jQuery 插件开发到如今的 WebGL 3D 场景构建,我始终认为:技术是骨架,艺术是灵魂。

目前,我专注于高性能 B 端应用的体验升级,以及探索生成式艺术(Generative Art)在网页中的应用。闲暇之余,我喜欢在杭州的西湖边散步,或者捣腾我的客制化机械键盘。', 'hello@niangao.dev', 'Niangao_Dev', '[\"Vue 3\",\"React\",\"TypeScript\",\"Three.js\",\"Golang\",\"Tailwind CSS\",\"Rust\",\"Wails\"]', '[{\"year\":\"2024 - 至今\",\"role\":\"技术负责人\",\"company\":\"某医疗平台公司\"},{\"year\":\"2020 - 2024\",\"role\":\"PHP开发工程师\",\"company\":\"某电商公司\"}]', 1, '2026-01-15 15:22:08', '2026-01-15 15:41:51'); +INSERT INTO `about_profiles` VALUES (3, '年糕崽崽', 'https://api.dicebear.com/7.x/avataaars/svg?seed=NianGao&backgroundColor=b6e3f4', '中国 · 浙江杭州', '嗨!我是年糕崽崽,一名热衷于探索数字边界的前端架构师。我的职业生涯始于对像素级完美的执念。从早期的 jQuery 插件开发到如今的 WebGL 3D 场景构建,我始终认为:技术是骨架,艺术是灵魂。

目前,我专注于高性能 B 端应用的体验升级,以及探索生成式艺术(Generative Art)在网页中的应用。闲暇之余,我喜欢在杭州的西湖边散步,或者捣腾我的客制化机械键盘。', 'liqiworker@gmail.com', 'ngzz_0218', '[\\\"Vue 3\\\",\\\"React\\\",\\\"TypeScript\\\",\\\"Three.js\\\",\\\"Golang\\\",\\\"Tailwind CSS\\\",\\\"Rust\\\",\\\"Wails\\\"]', '[{\\\"year\\\":\\\"2024 - 至今\\\",\\\"role\\\":\\\"技术负责人\\\",\\\"company\\\":\\\"某医疗平台公司\\\"},{\\\"year\\\":\\\"2020 - 2024\\\",\\\"role\\\":\\\"PHP开发工程师\\\",\\\"company\\\":\\\"某电商公司\\\"}]', 0, 0, 0, 0); -- ---------------------------- -- Table structure for access_logs @@ -55,13 +55,12 @@ CREATE TABLE `access_logs` ( `method` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'HTTP方法', `status_code` int UNSIGNED NOT NULL COMMENT 'HTTP状态码', `response_time` int UNSIGNED NOT NULL COMMENT '响应时间(毫秒)', - `created_at` bigint NOT NULL DEFAULT 0 COMMENT '访问时间', `deleted_at` bigint NOT NULL DEFAULT 0, + `created_at` bigint NOT NULL DEFAULT 0, PRIMARY KEY (`id`) USING BTREE, INDEX `idx_path`(`path` ASC) USING BTREE COMMENT '按访问路径查询索引', - INDEX `idx_created_at`(`created_at` ASC) USING BTREE COMMENT '按访问时间查询索引', INDEX `idx_status_code`(`status_code` ASC) USING BTREE COMMENT '按状态码查询索引' -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '访问日志表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '访问日志表' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of access_logs @@ -76,23 +75,23 @@ CREATE TABLE `email_suffixes` ( `suffix` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '邮箱后缀', `is_active` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否启用', `sort_order` int NOT NULL DEFAULT 0 COMMENT '排序', + `deleted_at` bigint NOT NULL DEFAULT 0, `created_at` bigint NOT NULL DEFAULT 0, `updated_at` bigint NOT NULL DEFAULT 0, - `deleted_at` bigint NOT NULL DEFAULT 0, PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `uk_suffix`(`suffix` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '邮箱后缀配置表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '邮箱后缀配置表' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of email_suffixes -- ---------------------------- -INSERT INTO `email_suffixes` VALUES (1, '@gmail.com', 1, 1, '2026-01-16 08:37:46', '2026-01-16 08:37:46'); -INSERT INTO `email_suffixes` VALUES (2, '@163.com', 1, 2, '2026-01-16 08:37:46', '2026-01-16 08:37:46'); -INSERT INTO `email_suffixes` VALUES (3, '@qq.com', 1, 3, '2026-01-16 08:37:46', '2026-01-16 08:37:46'); -INSERT INTO `email_suffixes` VALUES (4, '@outlook.com', 1, 4, '2026-01-16 08:37:46', '2026-01-16 08:37:46'); -INSERT INTO `email_suffixes` VALUES (5, '@foxmail.com', 1, 5, '2026-01-16 08:37:46', '2026-01-16 08:37:46'); -INSERT INTO `email_suffixes` VALUES (6, '@sina.com', 1, 6, '2026-01-16 08:37:46', '2026-01-16 08:37:46'); -INSERT INTO `email_suffixes` VALUES (7, '@126.com', 1, 7, '2026-01-16 08:37:46', '2026-01-16 08:37:46'); +INSERT INTO `email_suffixes` VALUES (1, '@gmail.com', 1, 1, 0, 1768523866, 1768538954); +INSERT INTO `email_suffixes` VALUES (2, '@163.com', 1, 2, 0, 1768523866, 1768538954); +INSERT INTO `email_suffixes` VALUES (3, '@qq.com', 1, 3, 0, 1768523866, 1768538954); +INSERT INTO `email_suffixes` VALUES (4, '@outlook.com', 1, 4, 0, 1768523866, 1768538954); +INSERT INTO `email_suffixes` VALUES (5, '@foxmail.com', 1, 5, 0, 1768523866, 1768538954); +INSERT INTO `email_suffixes` VALUES (6, '@sina.com', 1, 6, 0, 1768523866, 1768538954); +INSERT INTO `email_suffixes` VALUES (7, '@126.com', 1, 7, 0, 1768523866, 1768538954); -- ---------------------------- -- Table structure for inquiries @@ -107,16 +106,16 @@ CREATE TABLE `inquiries` ( `budget` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '预算范围', `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '需求描述', `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态: 0-未读, 1-已读, 2-已联系', + `deleted_at` bigint NOT NULL DEFAULT 0, `created_at` bigint NOT NULL DEFAULT 0, `updated_at` bigint NOT NULL DEFAULT 0, - `deleted_at` bigint NOT NULL DEFAULT 0, PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '合作咨询表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '合作咨询表' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of inquiries -- ---------------------------- -INSERT INTO `inquiries` VALUES (1, '李先生', '萧康云医', 'wechat', 'ngzz_9527', '1w-5w', '我需要做一个诊所小程序', 2, '2026-01-16 08:52:45', '2026-01-16 09:01:19'); +INSERT INTO `inquiries` VALUES (1, '李先生', '萧康云医', 'wechat', 'ngzz_9527', '1w-5w', '我需要做一个诊所小程序', 2, 0, 1768524765, 1768538954); -- ---------------------------- -- Table structure for operation_logs @@ -132,295 +131,321 @@ CREATE TABLE `operation_logs` ( `params` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '请求参数', `status` int NOT NULL COMMENT '响应状态码', `duration` int NOT NULL COMMENT '响应时间(毫秒)', - `created_at` bigint NOT NULL DEFAULT 0 COMMENT '操作时间', `deleted_at` bigint NOT NULL DEFAULT 0, + `created_at` bigint NOT NULL DEFAULT 0, PRIMARY KEY (`id`) USING BTREE, - INDEX `idx_user_id`(`user_id` ASC) USING BTREE, - INDEX `idx_created_at`(`created_at` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 280 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '操作日志表' ROW_FORMAT = DYNAMIC; + INDEX `idx_user_id`(`user_id` ASC) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 307 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '操作日志表' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of operation_logs -- ---------------------------- -INSERT INTO `operation_logs` VALUES (1, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 403, 5, '2026-01-15 12:54:55'); -INSERT INTO `operation_logs` VALUES (2, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 48, '2026-01-15 13:34:45'); -INSERT INTO `operation_logs` VALUES (3, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 57, '2026-01-15 13:34:45'); -INSERT INTO `operation_logs` VALUES (4, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 51, '2026-01-15 13:34:46'); -INSERT INTO `operation_logs` VALUES (5, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 49, '2026-01-15 13:34:50'); -INSERT INTO `operation_logs` VALUES (6, 1, 'lq', '::1', '/api/admin/roles', 'GET', '', 200, 140, '2026-01-15 13:34:53'); -INSERT INTO `operation_logs` VALUES (7, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 46, '2026-01-15 13:34:54'); -INSERT INTO `operation_logs` VALUES (8, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 236, '2026-01-15 13:34:55'); -INSERT INTO `operation_logs` VALUES (9, 1, 'lq', '::1', '/api/admin/snippets', 'GET', '', 200, 45, '2026-01-15 13:34:55'); -INSERT INTO `operation_logs` VALUES (10, 1, 'lq', '::1', '/api/admin/settings', 'GET', '', 200, 46, '2026-01-15 13:34:56'); -INSERT INTO `operation_logs` VALUES (11, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 47, '2026-01-15 13:34:57'); -INSERT INTO `operation_logs` VALUES (12, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 50, '2026-01-15 13:35:01'); -INSERT INTO `operation_logs` VALUES (13, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 49, '2026-01-15 13:35:01'); -INSERT INTO `operation_logs` VALUES (14, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 54, '2026-01-15 13:37:17'); -INSERT INTO `operation_logs` VALUES (15, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 51, '2026-01-15 13:37:17'); -INSERT INTO `operation_logs` VALUES (16, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 59, '2026-01-15 15:28:19'); -INSERT INTO `operation_logs` VALUES (17, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 50, '2026-01-15 15:28:19'); -INSERT INTO `operation_logs` VALUES (18, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 47, '2026-01-15 15:28:20'); -INSERT INTO `operation_logs` VALUES (19, 1, 'lq', '::1', '/api/admin/users/2', 'GET', '', 200, 48, '2026-01-15 15:28:22'); -INSERT INTO `operation_logs` VALUES (20, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 49, '2026-01-15 15:28:23'); -INSERT INTO `operation_logs` VALUES (21, 1, 'lq', '::1', '/api/admin/users', 'POST', '{\"username\":\"cs\",\"email\":\"cs@nailaoyun.cn\",\"role\":\"viewer\",\"isActive\":1}', 200, 101, '2026-01-15 15:28:35'); -INSERT INTO `operation_logs` VALUES (22, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 49, '2026-01-15 15:28:35'); -INSERT INTO `operation_logs` VALUES (23, 1, 'lq', '::1', '/api/admin/users/2', 'GET', '', 200, 46, '2026-01-15 15:28:40'); -INSERT INTO `operation_logs` VALUES (24, 1, 'lq', '::1', '/api/admin/users/2', 'PUT', '{\"username\":\"editor\",\"email\":\"editor@example.com\",\"role\":\"viewer\",\"isActive\":1}', 200, 97, '2026-01-15 15:28:44'); -INSERT INTO `operation_logs` VALUES (25, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 45, '2026-01-15 15:28:44'); -INSERT INTO `operation_logs` VALUES (26, 1, 'lq', '::1', '/api/admin/users/2', 'GET', '', 200, 46, '2026-01-15 15:28:47'); -INSERT INTO `operation_logs` VALUES (27, 1, 'lq', '::1', '/api/admin/users/2', 'PUT', '{\"username\":\"editor\",\"email\":\"editor@example.com\",\"role\":\"editor\",\"isActive\":1}', 200, 98, '2026-01-15 15:28:49'); -INSERT INTO `operation_logs` VALUES (28, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 45, '2026-01-15 15:28:49'); -INSERT INTO `operation_logs` VALUES (29, 1, 'lq', '::1', '/api/admin/roles', 'GET', '', 200, 132, '2026-01-15 15:28:50'); -INSERT INTO `operation_logs` VALUES (30, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 46, '2026-01-15 15:28:51'); -INSERT INTO `operation_logs` VALUES (31, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 237, '2026-01-15 15:28:52'); -INSERT INTO `operation_logs` VALUES (32, 1, 'lq', '::1', '/api/admin/snippets', 'GET', '', 200, 45, '2026-01-15 15:28:53'); -INSERT INTO `operation_logs` VALUES (33, 1, 'lq', '::1', '/api/admin/settings', 'GET', '', 200, 47, '2026-01-15 15:28:54'); -INSERT INTO `operation_logs` VALUES (34, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 49, '2026-01-15 15:28:54'); -INSERT INTO `operation_logs` VALUES (35, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 48, '2026-01-15 15:28:55'); -INSERT INTO `operation_logs` VALUES (36, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 50, '2026-01-15 15:28:55'); -INSERT INTO `operation_logs` VALUES (37, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 47, '2026-01-15 15:28:55'); -INSERT INTO `operation_logs` VALUES (38, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 55, '2026-01-15 15:35:04'); -INSERT INTO `operation_logs` VALUES (39, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 54, '2026-01-15 15:35:04'); -INSERT INTO `operation_logs` VALUES (40, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 241, '2026-01-15 15:35:07'); -INSERT INTO `operation_logs` VALUES (41, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 44, '2026-01-15 15:35:08'); -INSERT INTO `operation_logs` VALUES (42, 1, 'lq', '::1', '/api/admin/roles', 'GET', '', 200, 145, '2026-01-15 15:35:09'); -INSERT INTO `operation_logs` VALUES (43, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 47, '2026-01-15 15:35:09'); -INSERT INTO `operation_logs` VALUES (44, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 47, '2026-01-15 15:35:12'); -INSERT INTO `operation_logs` VALUES (45, 1, 'lq', '::1', '/api/admin/settings', 'GET', '', 200, 47, '2026-01-15 15:35:14'); -INSERT INTO `operation_logs` VALUES (46, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 46, '2026-01-15 15:35:24'); -INSERT INTO `operation_logs` VALUES (47, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 44, '2026-01-15 15:35:26'); -INSERT INTO `operation_logs` VALUES (48, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 44, '2026-01-15 15:35:27'); -INSERT INTO `operation_logs` VALUES (49, 1, 'lq', '::1', '/api/admin/roles', 'GET', '', 200, 143, '2026-01-15 15:36:36'); -INSERT INTO `operation_logs` VALUES (50, 1, 'lq', '::1', '/api/admin/about', 'GET', '', 200, 49, '2026-01-15 15:40:41'); -INSERT INTO `operation_logs` VALUES (51, 1, 'lq', '::1', '/api/admin/about/2', 'DELETE', '', 200, 42, '2026-01-15 15:40:47'); -INSERT INTO `operation_logs` VALUES (52, 1, 'lq', '::1', '/api/admin/about', 'GET', '', 200, 42, '2026-01-15 15:40:47'); -INSERT INTO `operation_logs` VALUES (53, 1, 'lq', '::1', '/api/admin/about', 'GET', '', 200, 40, '2026-01-15 15:40:48'); -INSERT INTO `operation_logs` VALUES (54, 1, 'lq', '::1', '/api/admin/about/1', 'PUT', '{\"name\":\"年糕崽崽\",\"avatar\":\"https://api.dicebear.com/7.x/avataaars/svg?seed=NianGao&backgroundColor=b6e3f4\",\"location\":\"中国 · 浙江杭州\",\"bio\":\"嗨!我是年糕崽崽,一名热衷于探索数字边界的前端架构师。我的职业生涯始于对像素级完美的执念。从早期的 jQuery 插件开发到如今的 WebGL 3D 场景构建,我始终认为:技术是骨架,艺术是灵魂。

目前,我专注于高性能 B 端应用的体验升级,以及探索生成式艺术(Generative Art)在网页中的应用。闲暇之余,我喜欢在杭州的西湖边散步,或者捣腾我的客制化机械键盘。\",\"email\":\"hello@niangao.dev\",\"wechat\":\"Niangao_Dev\",\"isPrimary\":true,\"experiences\":[{\"year\":\"2024 - 至今\",\"role\":\"技术负责人\",\"company\":\"某医疗平台公司\"},{\"year\":\"2020 - 2024\",\"role\":\"PHP开发工程师\",\"company\":\"某电商公司\"}],\"techStack\":[\"Vue 3\",\"React\",\"TypeScript\",\"Three.js\",\"Golang\",\"Tailwind CSS\",\"Rust\",\"Wails\"]}', 200, 55, '2026-01-15 15:41:51'); -INSERT INTO `operation_logs` VALUES (55, 1, 'lq', '::1', '/api/admin/about', 'GET', '', 200, 47, '2026-01-15 15:41:51'); -INSERT INTO `operation_logs` VALUES (56, 1, 'lq', '::1', '/api/admin/tags', 'GET', '', 200, 45, '2026-01-15 15:41:59'); -INSERT INTO `operation_logs` VALUES (57, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 221, '2026-01-15 15:41:59'); -INSERT INTO `operation_logs` VALUES (58, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 45, '2026-01-15 15:42:01'); -INSERT INTO `operation_logs` VALUES (59, 1, 'lq', '::1', '/api/admin/roles', 'GET', '', 200, 131, '2026-01-15 15:42:02'); -INSERT INTO `operation_logs` VALUES (60, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 44, '2026-01-15 15:42:03'); -INSERT INTO `operation_logs` VALUES (61, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 42, '2026-01-15 15:42:04'); -INSERT INTO `operation_logs` VALUES (62, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 49, '2026-01-15 15:42:04'); -INSERT INTO `operation_logs` VALUES (63, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 42, '2026-01-15 15:42:07'); -INSERT INTO `operation_logs` VALUES (64, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 49, '2026-01-15 16:15:53'); -INSERT INTO `operation_logs` VALUES (65, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 51, '2026-01-15 16:15:53'); -INSERT INTO `operation_logs` VALUES (66, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 47, '2026-01-15 16:15:56'); -INSERT INTO `operation_logs` VALUES (67, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 51, '2026-01-15 16:16:31'); -INSERT INTO `operation_logs` VALUES (68, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 49, '2026-01-15 16:16:31'); -INSERT INTO `operation_logs` VALUES (69, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 49, '2026-01-15 16:16:33'); -INSERT INTO `operation_logs` VALUES (70, 1, 'lq', '::1', '/api/admin/roles', 'GET', '', 200, 145, '2026-01-15 16:16:33'); -INSERT INTO `operation_logs` VALUES (71, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 48, '2026-01-15 16:16:34'); -INSERT INTO `operation_logs` VALUES (72, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 239, '2026-01-15 16:16:35'); -INSERT INTO `operation_logs` VALUES (73, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 48, '2026-01-15 16:16:36'); -INSERT INTO `operation_logs` VALUES (74, 1, 'lq', '::1', '/api/admin/tags', 'GET', '', 200, 51, '2026-01-15 16:16:36'); -INSERT INTO `operation_logs` VALUES (75, 1, 'lq', '::1', '/api/admin/about', 'GET', '', 200, 47, '2026-01-15 16:16:37'); -INSERT INTO `operation_logs` VALUES (76, 1, 'lq', '::1', '/api/admin/settings', 'GET', '', 200, 50, '2026-01-15 16:16:37'); -INSERT INTO `operation_logs` VALUES (77, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 47, '2026-01-15 16:16:38'); -INSERT INTO `operation_logs` VALUES (78, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 49, '2026-01-15 16:16:38'); -INSERT INTO `operation_logs` VALUES (79, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 48, '2026-01-15 16:16:39'); -INSERT INTO `operation_logs` VALUES (80, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 49, '2026-01-15 16:18:36'); -INSERT INTO `operation_logs` VALUES (81, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 54, '2026-01-15 16:18:36'); -INSERT INTO `operation_logs` VALUES (82, 1, 'lq', '::1', '/api/admin/snippets', 'GET', '', 200, 47, '2026-01-15 16:18:40'); -INSERT INTO `operation_logs` VALUES (83, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 52, '2026-01-15 16:19:16'); -INSERT INTO `operation_logs` VALUES (84, 1, 'lq', '::1', '/api/admin/roles', 'GET', '', 200, 145, '2026-01-15 16:19:17'); -INSERT INTO `operation_logs` VALUES (85, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 46, '2026-01-15 16:19:17'); -INSERT INTO `operation_logs` VALUES (86, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 49, '2026-01-15 16:32:17'); -INSERT INTO `operation_logs` VALUES (87, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 47, '2026-01-15 16:32:18'); -INSERT INTO `operation_logs` VALUES (88, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 49, '2026-01-15 21:17:31'); -INSERT INTO `operation_logs` VALUES (89, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 93, '2026-01-15 21:17:31'); -INSERT INTO `operation_logs` VALUES (90, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 240, '2026-01-15 21:17:46'); -INSERT INTO `operation_logs` VALUES (91, 1, 'lq', '::1', '/api/admin/about', 'GET', '', 200, 50, '2026-01-15 21:17:54'); -INSERT INTO `operation_logs` VALUES (92, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 48, '2026-01-16 08:52:54'); -INSERT INTO `operation_logs` VALUES (93, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 47, '2026-01-16 08:52:54'); -INSERT INTO `operation_logs` VALUES (94, 1, 'lq', '::1', '/api/admin/snippets', 'GET', '', 200, 46, '2026-01-16 08:53:04'); -INSERT INTO `operation_logs` VALUES (95, 1, 'lq', '::1', '/api/admin/inquiries', 'GET', '', 200, 50, '2026-01-16 09:01:14'); -INSERT INTO `operation_logs` VALUES (96, 1, 'lq', '::1', '/api/admin/inquiries/1/status', 'PUT', '{\"status\":1}', 200, 49, '2026-01-16 09:01:16'); -INSERT INTO `operation_logs` VALUES (97, 1, 'lq', '::1', '/api/admin/inquiries', 'GET', '', 200, 46, '2026-01-16 09:01:16'); -INSERT INTO `operation_logs` VALUES (98, 1, 'lq', '::1', '/api/admin/inquiries/1/status', 'PUT', '{\"status\":2}', 200, 49, '2026-01-16 09:01:20'); -INSERT INTO `operation_logs` VALUES (99, 1, 'lq', '::1', '/api/admin/inquiries', 'GET', '', 200, 45, '2026-01-16 09:01:20'); -INSERT INTO `operation_logs` VALUES (100, 1, 'lq', '::1', '/api/admin/inquiries', 'GET', '', 200, 47, '2026-01-16 09:02:57'); -INSERT INTO `operation_logs` VALUES (101, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 48, '2026-01-16 09:03:49'); -INSERT INTO `operation_logs` VALUES (102, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 49, '2026-01-16 09:03:49'); -INSERT INTO `operation_logs` VALUES (103, 1, 'lq', '::1', '/api/admin/settings', 'GET', '', 200, 47, '2026-01-16 09:03:55'); -INSERT INTO `operation_logs` VALUES (104, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 43, '2026-01-16 09:03:57'); -INSERT INTO `operation_logs` VALUES (105, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 47, '2026-01-16 09:05:16'); -INSERT INTO `operation_logs` VALUES (106, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 49, '2026-01-16 09:05:22'); -INSERT INTO `operation_logs` VALUES (107, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 49, '2026-01-16 09:05:22'); -INSERT INTO `operation_logs` VALUES (108, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 48, '2026-01-16 09:13:46'); -INSERT INTO `operation_logs` VALUES (109, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 227, '2026-01-16 09:13:48'); -INSERT INTO `operation_logs` VALUES (110, 1, 'lq', '::1', '/api/admin/snippets', 'GET', '', 200, 46, '2026-01-16 09:13:49'); -INSERT INTO `operation_logs` VALUES (111, 1, 'lq', '::1', '/api/admin/tags', 'GET', '', 200, 43, '2026-01-16 09:13:50'); -INSERT INTO `operation_logs` VALUES (112, 1, 'lq', '::1', '/api/admin/snippets', 'GET', '', 200, 45, '2026-01-16 09:13:51'); -INSERT INTO `operation_logs` VALUES (113, 1, 'lq', '::1', '/api/admin/snippets', 'GET', '', 200, 50, '2026-01-16 09:13:59'); -INSERT INTO `operation_logs` VALUES (114, 1, 'lq', '::1', '/api/admin/email-suffixes', 'GET', '', 200, 45, '2026-01-16 09:14:06'); -INSERT INTO `operation_logs` VALUES (115, 1, 'lq', '::1', '/api/admin/email-suffixes', 'GET', '', 200, 55, '2026-01-16 09:15:10'); -INSERT INTO `operation_logs` VALUES (116, 1, 'lq', '::1', '/api/admin/roles', 'GET', '', 200, 142, '2026-01-16 09:15:16'); -INSERT INTO `operation_logs` VALUES (117, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 46, '2026-01-16 09:15:19'); -INSERT INTO `operation_logs` VALUES (118, 1, 'lq', '::1', '/api/admin/roles', 'GET', '', 200, 138, '2026-01-16 09:15:20'); -INSERT INTO `operation_logs` VALUES (119, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 46, '2026-01-16 09:15:23'); -INSERT INTO `operation_logs` VALUES (120, 1, 'lq', '::1', '/api/admin/settings', 'GET', '', 200, 47, '2026-01-16 09:15:29'); -INSERT INTO `operation_logs` VALUES (121, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 47, '2026-01-16 09:15:30'); -INSERT INTO `operation_logs` VALUES (122, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 47, '2026-01-16 09:15:33'); -INSERT INTO `operation_logs` VALUES (123, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 45, '2026-01-16 09:15:33'); -INSERT INTO `operation_logs` VALUES (124, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 50, '2026-01-16 09:25:08'); -INSERT INTO `operation_logs` VALUES (125, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 50, '2026-01-16 09:25:08'); -INSERT INTO `operation_logs` VALUES (126, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 52, '2026-01-16 09:25:23'); -INSERT INTO `operation_logs` VALUES (127, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 46, '2026-01-16 09:25:23'); -INSERT INTO `operation_logs` VALUES (128, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 53, '2026-01-16 09:26:23'); -INSERT INTO `operation_logs` VALUES (129, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 46, '2026-01-16 09:26:23'); -INSERT INTO `operation_logs` VALUES (130, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 49, '2026-01-16 09:29:33'); -INSERT INTO `operation_logs` VALUES (131, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 48, '2026-01-16 09:31:48'); -INSERT INTO `operation_logs` VALUES (132, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 55, '2026-01-16 09:36:19'); -INSERT INTO `operation_logs` VALUES (133, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 47, '2026-01-16 09:37:05'); -INSERT INTO `operation_logs` VALUES (134, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 46, '2026-01-16 09:37:05'); -INSERT INTO `operation_logs` VALUES (135, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 51, '2026-01-16 09:38:22'); -INSERT INTO `operation_logs` VALUES (136, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 54, '2026-01-16 09:39:55'); -INSERT INTO `operation_logs` VALUES (137, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 57, '2026-01-16 09:39:55'); -INSERT INTO `operation_logs` VALUES (138, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 45, '2026-01-16 09:40:05'); -INSERT INTO `operation_logs` VALUES (139, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 44, '2026-01-16 09:40:08'); -INSERT INTO `operation_logs` VALUES (140, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 46, '2026-01-16 09:40:14'); -INSERT INTO `operation_logs` VALUES (141, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 48, '2026-01-16 09:40:25'); -INSERT INTO `operation_logs` VALUES (142, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 45, '2026-01-16 09:40:53'); -INSERT INTO `operation_logs` VALUES (143, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 48, '2026-01-16 09:40:58'); -INSERT INTO `operation_logs` VALUES (144, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 53, '2026-01-16 09:44:40'); -INSERT INTO `operation_logs` VALUES (145, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 46, '2026-01-16 09:44:45'); -INSERT INTO `operation_logs` VALUES (146, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 45, '2026-01-16 09:44:46'); -INSERT INTO `operation_logs` VALUES (147, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 46, '2026-01-16 09:44:47'); -INSERT INTO `operation_logs` VALUES (148, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 47, '2026-01-16 09:47:16'); -INSERT INTO `operation_logs` VALUES (149, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 51, '2026-01-16 09:48:11'); -INSERT INTO `operation_logs` VALUES (150, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 142, '2026-01-16 09:57:36'); -INSERT INTO `operation_logs` VALUES (151, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 153, '2026-01-16 09:57:49'); -INSERT INTO `operation_logs` VALUES (152, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 144, '2026-01-16 09:57:51'); -INSERT INTO `operation_logs` VALUES (153, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 132, '2026-01-16 09:57:52'); -INSERT INTO `operation_logs` VALUES (154, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 136, '2026-01-16 09:57:54'); -INSERT INTO `operation_logs` VALUES (155, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 144, '2026-01-16 09:57:54'); -INSERT INTO `operation_logs` VALUES (156, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 136, '2026-01-16 09:57:55'); -INSERT INTO `operation_logs` VALUES (157, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 143, '2026-01-16 09:57:56'); -INSERT INTO `operation_logs` VALUES (158, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 57, '2026-01-16 09:58:02'); -INSERT INTO `operation_logs` VALUES (159, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 97, '2026-01-16 09:58:02'); -INSERT INTO `operation_logs` VALUES (160, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 145, '2026-01-16 09:58:04'); -INSERT INTO `operation_logs` VALUES (161, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 46, '2026-01-16 09:58:04'); -INSERT INTO `operation_logs` VALUES (162, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 242, '2026-01-16 09:58:05'); -INSERT INTO `operation_logs` VALUES (163, 1, 'lq', '::1', '/api/admin/snippets', 'GET', '', 200, 49, '2026-01-16 09:58:07'); -INSERT INTO `operation_logs` VALUES (164, 1, 'lq', '::1', '/api/admin/tags', 'GET', '', 200, 50, '2026-01-16 09:58:08'); -INSERT INTO `operation_logs` VALUES (165, 1, 'lq', '::1', '/api/admin/about', 'GET', '', 200, 47, '2026-01-16 09:58:10'); -INSERT INTO `operation_logs` VALUES (166, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 245, '2026-01-16 09:58:13'); -INSERT INTO `operation_logs` VALUES (167, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 47, '2026-01-16 09:58:14'); -INSERT INTO `operation_logs` VALUES (168, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 99, '2026-01-16 09:58:14'); -INSERT INTO `operation_logs` VALUES (169, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 220, '2026-01-16 09:58:18'); -INSERT INTO `operation_logs` VALUES (170, 1, 'lq', '::1', '/api/admin/snippets', 'GET', '', 200, 47, '2026-01-16 09:58:19'); -INSERT INTO `operation_logs` VALUES (171, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 48, '2026-01-16 09:59:33'); -INSERT INTO `operation_logs` VALUES (172, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 92, '2026-01-16 09:59:33'); -INSERT INTO `operation_logs` VALUES (173, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 139, '2026-01-16 09:59:34'); -INSERT INTO `operation_logs` VALUES (174, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 95, '2026-01-16 10:02:12'); -INSERT INTO `operation_logs` VALUES (175, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 141, '2026-01-16 10:02:15'); -INSERT INTO `operation_logs` VALUES (176, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 137, '2026-01-16 10:02:17'); -INSERT INTO `operation_logs` VALUES (177, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 137, '2026-01-16 10:02:17'); -INSERT INTO `operation_logs` VALUES (178, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 143, '2026-01-16 10:02:21'); -INSERT INTO `operation_logs` VALUES (179, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 138, '2026-01-16 10:02:22'); -INSERT INTO `operation_logs` VALUES (180, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 136, '2026-01-16 10:02:23'); -INSERT INTO `operation_logs` VALUES (181, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 146, '2026-01-16 10:02:31'); -INSERT INTO `operation_logs` VALUES (182, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 47, '2026-01-16 10:03:27'); -INSERT INTO `operation_logs` VALUES (183, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 96, '2026-01-16 10:03:27'); -INSERT INTO `operation_logs` VALUES (184, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 45, '2026-01-16 10:03:32'); -INSERT INTO `operation_logs` VALUES (185, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 90, '2026-01-16 10:03:32'); -INSERT INTO `operation_logs` VALUES (186, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 136, '2026-01-16 10:03:33'); -INSERT INTO `operation_logs` VALUES (187, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 200, '2026-01-16 10:09:24'); -INSERT INTO `operation_logs` VALUES (188, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 193, '2026-01-16 10:09:33'); -INSERT INTO `operation_logs` VALUES (189, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 183, '2026-01-16 10:10:59'); -INSERT INTO `operation_logs` VALUES (190, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 138, '2026-01-16 10:13:38'); -INSERT INTO `operation_logs` VALUES (191, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 137, '2026-01-16 10:13:40'); -INSERT INTO `operation_logs` VALUES (192, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 141, '2026-01-16 10:16:30'); -INSERT INTO `operation_logs` VALUES (193, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 48, '2026-01-16 10:17:47'); -INSERT INTO `operation_logs` VALUES (194, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 95, '2026-01-16 10:17:47'); -INSERT INTO `operation_logs` VALUES (195, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 137, '2026-01-16 10:17:49'); -INSERT INTO `operation_logs` VALUES (196, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 96, '2026-01-16 10:21:44'); -INSERT INTO `operation_logs` VALUES (197, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 90, '2026-01-16 10:21:44'); -INSERT INTO `operation_logs` VALUES (198, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 90, '2026-01-16 10:21:44'); -INSERT INTO `operation_logs` VALUES (199, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 53, '2026-01-16 10:59:13'); -INSERT INTO `operation_logs` VALUES (200, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 103, '2026-01-16 10:59:13'); -INSERT INTO `operation_logs` VALUES (201, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 93, '2026-01-16 10:59:25'); -INSERT INTO `operation_logs` VALUES (202, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 55, '2026-01-16 10:59:25'); -INSERT INTO `operation_logs` VALUES (203, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 146, '2026-01-16 10:59:30'); -INSERT INTO `operation_logs` VALUES (204, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 49, '2026-01-16 10:59:31'); -INSERT INTO `operation_logs` VALUES (205, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 237, '2026-01-16 10:59:32'); -INSERT INTO `operation_logs` VALUES (206, 1, 'lq', '::1', '/api/admin/snippets', 'GET', '', 200, 47, '2026-01-16 10:59:35'); -INSERT INTO `operation_logs` VALUES (207, 1, 'lq', '::1', '/api/admin/tags', 'GET', '', 200, 47, '2026-01-16 10:59:35'); -INSERT INTO `operation_logs` VALUES (208, 1, 'lq', '::1', '/api/admin/about', 'GET', '', 200, 46, '2026-01-16 10:59:40'); -INSERT INTO `operation_logs` VALUES (209, 1, 'lq', '::1', '/api/admin/about', 'GET', '', 200, 45, '2026-01-16 10:59:45'); -INSERT INTO `operation_logs` VALUES (210, 1, 'lq', '::1', '/api/admin/about', 'GET', '', 200, 46, '2026-01-16 10:59:46'); -INSERT INTO `operation_logs` VALUES (211, 1, 'lq', '::1', '/api/admin/inquiries', 'GET', '', 200, 46, '2026-01-16 11:00:05'); -INSERT INTO `operation_logs` VALUES (212, 1, 'lq', '::1', '/api/admin/email-suffixes', 'GET', '', 200, 53, '2026-01-16 11:00:07'); -INSERT INTO `operation_logs` VALUES (213, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 49, '2026-01-16 11:00:09'); -INSERT INTO `operation_logs` VALUES (214, 1, 'lq', '::1', '/api/admin/roles', 'GET', '', 200, 147, '2026-01-16 11:00:10'); -INSERT INTO `operation_logs` VALUES (215, 1, 'lq', '::1', '/api/admin/settings', 'GET', '', 200, 45, '2026-01-16 11:00:40'); -INSERT INTO `operation_logs` VALUES (216, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 47, '2026-01-16 11:00:41'); -INSERT INTO `operation_logs` VALUES (217, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 48, '2026-01-16 11:00:43'); -INSERT INTO `operation_logs` VALUES (218, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 146, '2026-01-16 11:00:46'); -INSERT INTO `operation_logs` VALUES (219, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 150, '2026-01-16 11:01:00'); -INSERT INTO `operation_logs` VALUES (220, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 49, '2026-01-16 11:01:15'); -INSERT INTO `operation_logs` VALUES (221, 1, 'lq', '::1', '/api/admin/roles', 'GET', '', 200, 142, '2026-01-16 11:01:15'); -INSERT INTO `operation_logs` VALUES (222, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 148, '2026-01-16 11:02:00'); -INSERT INTO `operation_logs` VALUES (223, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 49, '2026-01-16 11:03:05'); -INSERT INTO `operation_logs` VALUES (224, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 96, '2026-01-16 11:03:05'); -INSERT INTO `operation_logs` VALUES (225, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 93, '2026-01-16 11:04:41'); -INSERT INTO `operation_logs` VALUES (226, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 49, '2026-01-16 11:04:41'); -INSERT INTO `operation_logs` VALUES (227, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 49, '2026-01-16 11:05:25'); -INSERT INTO `operation_logs` VALUES (228, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 100, '2026-01-16 11:05:25'); -INSERT INTO `operation_logs` VALUES (229, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 47, '2026-01-16 11:05:38'); -INSERT INTO `operation_logs` VALUES (230, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 95, '2026-01-16 11:05:38'); -INSERT INTO `operation_logs` VALUES (231, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 94, '2026-01-16 11:08:30'); -INSERT INTO `operation_logs` VALUES (232, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 50, '2026-01-16 11:08:30'); -INSERT INTO `operation_logs` VALUES (233, 1, 'lq', '::1', '/api/admin/tags', 'GET', '', 200, 49, '2026-01-16 11:08:32'); -INSERT INTO `operation_logs` VALUES (234, 1, 'lq', '::1', '/api/admin/settings', 'GET', '', 200, 46, '2026-01-16 11:08:34'); -INSERT INTO `operation_logs` VALUES (235, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 45, '2026-01-16 11:08:35'); -INSERT INTO `operation_logs` VALUES (236, 1, 'lq', '::1', '/api/admin/about', 'GET', '', 200, 46, '2026-01-16 11:08:37'); -INSERT INTO `operation_logs` VALUES (237, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 46, '2026-01-16 11:08:39'); -INSERT INTO `operation_logs` VALUES (238, 1, 'lq', '::1', '/api/admin/snippets', 'GET', '', 200, 51, '2026-01-16 11:10:52'); -INSERT INTO `operation_logs` VALUES (239, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 246, '2026-01-16 11:12:34'); -INSERT INTO `operation_logs` VALUES (240, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 46, '2026-01-16 11:12:39'); -INSERT INTO `operation_logs` VALUES (241, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 46, '2026-01-16 11:12:47'); -INSERT INTO `operation_logs` VALUES (242, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 44, '2026-01-16 11:12:53'); -INSERT INTO `operation_logs` VALUES (243, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 46, '2026-01-16 11:13:22'); -INSERT INTO `operation_logs` VALUES (244, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 92, '2026-01-16 11:13:22'); -INSERT INTO `operation_logs` VALUES (245, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 94, '2026-01-16 11:13:32'); -INSERT INTO `operation_logs` VALUES (246, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 55, '2026-01-16 11:13:32'); -INSERT INTO `operation_logs` VALUES (247, 1, 'lq', '::1', '/api/admin/settings', 'GET', '', 200, 46, '2026-01-16 11:13:34'); -INSERT INTO `operation_logs` VALUES (248, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 137, '2026-01-16 11:13:42'); -INSERT INTO `operation_logs` VALUES (249, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 143, '2026-01-16 11:13:46'); -INSERT INTO `operation_logs` VALUES (250, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 92, '2026-01-16 11:13:49'); -INSERT INTO `operation_logs` VALUES (251, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 45, '2026-01-16 11:13:49'); -INSERT INTO `operation_logs` VALUES (252, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 47, '2026-01-16 11:13:58'); -INSERT INTO `operation_logs` VALUES (253, 1, 'lq', '::1', '/api/admin/users/2', 'GET', '', 200, 48, '2026-01-16 11:14:02'); -INSERT INTO `operation_logs` VALUES (254, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 45, '2026-01-16 11:14:04'); -INSERT INTO `operation_logs` VALUES (255, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 96, '2026-01-16 11:14:25'); -INSERT INTO `operation_logs` VALUES (256, 5, 'cs', '::1', '/api/admin/operation-logs', 'GET', '', 200, 51, '2026-01-16 11:14:25'); -INSERT INTO `operation_logs` VALUES (257, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 142, '2026-01-16 11:14:30'); -INSERT INTO `operation_logs` VALUES (258, 5, 'cs', '::1', '/api/admin/works', 'GET', '', 200, 233, '2026-01-16 11:14:31'); -INSERT INTO `operation_logs` VALUES (259, 5, 'cs', '::1', '/api/admin/posts', 'GET', '', 200, 45, '2026-01-16 11:14:32'); -INSERT INTO `operation_logs` VALUES (260, 5, 'cs', '::1', '/api/admin/works', 'GET', '', 200, 219, '2026-01-16 11:16:01'); -INSERT INTO `operation_logs` VALUES (261, 5, 'cs', '::1', '/api/admin/works', 'GET', '', 200, 221, '2026-01-16 11:16:06'); -INSERT INTO `operation_logs` VALUES (262, 5, 'cs', '::1', '/api/admin/snippets', 'GET', '', 200, 48, '2026-01-16 11:16:10'); -INSERT INTO `operation_logs` VALUES (263, 5, 'cs', '::1', '/api/admin/tags', 'GET', '', 200, 44, '2026-01-16 11:16:11'); -INSERT INTO `operation_logs` VALUES (264, 5, 'cs', '::1', '/api/admin/posts', 'GET', '', 200, 45, '2026-01-16 11:16:12'); -INSERT INTO `operation_logs` VALUES (265, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 139, '2026-01-16 11:16:13'); -INSERT INTO `operation_logs` VALUES (266, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 153, '2026-01-16 11:22:15'); -INSERT INTO `operation_logs` VALUES (267, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 183, '2026-01-16 11:24:06'); -INSERT INTO `operation_logs` VALUES (268, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 182, '2026-01-16 11:24:10'); -INSERT INTO `operation_logs` VALUES (269, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 180, '2026-01-16 11:24:11'); -INSERT INTO `operation_logs` VALUES (270, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 193, '2026-01-16 11:24:12'); -INSERT INTO `operation_logs` VALUES (271, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 192, '2026-01-16 11:24:14'); -INSERT INTO `operation_logs` VALUES (272, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 197, '2026-01-16 11:25:30'); -INSERT INTO `operation_logs` VALUES (273, 5, 'cs', '::1', '/api/admin/email-suffixes', 'GET', '', 200, 46, '2026-01-16 11:40:51'); -INSERT INTO `operation_logs` VALUES (274, 5, 'cs', '::1', '/api/admin/email-suffixes', 'GET', '', 200, 47, '2026-01-16 11:48:15'); -INSERT INTO `operation_logs` VALUES (275, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 189, '2026-01-16 11:57:59'); -INSERT INTO `operation_logs` VALUES (276, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 190, '2026-01-16 11:59:06'); -INSERT INTO `operation_logs` VALUES (277, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 190, '2026-01-16 11:59:08'); -INSERT INTO `operation_logs` VALUES (278, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 189, '2026-01-16 11:59:11'); -INSERT INTO `operation_logs` VALUES (279, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 196, '2026-01-16 11:59:13'); +INSERT INTO `operation_logs` VALUES (1, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 403, 5, 0, 1768452895); +INSERT INTO `operation_logs` VALUES (2, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 48, 0, 1768455285); +INSERT INTO `operation_logs` VALUES (3, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 57, 0, 1768455285); +INSERT INTO `operation_logs` VALUES (4, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 51, 0, 1768455286); +INSERT INTO `operation_logs` VALUES (5, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 49, 0, 1768455290); +INSERT INTO `operation_logs` VALUES (6, 1, 'lq', '::1', '/api/admin/roles', 'GET', '', 200, 140, 0, 1768455293); +INSERT INTO `operation_logs` VALUES (7, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 46, 0, 1768455294); +INSERT INTO `operation_logs` VALUES (8, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 236, 0, 1768455295); +INSERT INTO `operation_logs` VALUES (9, 1, 'lq', '::1', '/api/admin/snippets', 'GET', '', 200, 45, 0, 1768455295); +INSERT INTO `operation_logs` VALUES (10, 1, 'lq', '::1', '/api/admin/settings', 'GET', '', 200, 46, 0, 1768455296); +INSERT INTO `operation_logs` VALUES (11, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 47, 0, 1768455297); +INSERT INTO `operation_logs` VALUES (12, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 50, 0, 1768455301); +INSERT INTO `operation_logs` VALUES (13, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 49, 0, 1768455301); +INSERT INTO `operation_logs` VALUES (14, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 54, 0, 1768455437); +INSERT INTO `operation_logs` VALUES (15, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 51, 0, 1768455437); +INSERT INTO `operation_logs` VALUES (16, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 59, 0, 1768462099); +INSERT INTO `operation_logs` VALUES (17, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 50, 0, 1768462099); +INSERT INTO `operation_logs` VALUES (18, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 47, 0, 1768462100); +INSERT INTO `operation_logs` VALUES (19, 1, 'lq', '::1', '/api/admin/users/2', 'GET', '', 200, 48, 0, 1768462102); +INSERT INTO `operation_logs` VALUES (20, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 49, 0, 1768462103); +INSERT INTO `operation_logs` VALUES (21, 1, 'lq', '::1', '/api/admin/users', 'POST', '{\"username\":\"cs\",\"email\":\"cs@nailaoyun.cn\",\"role\":\"viewer\",\"isActive\":1}', 200, 101, 0, 1768462115); +INSERT INTO `operation_logs` VALUES (22, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 49, 0, 1768462115); +INSERT INTO `operation_logs` VALUES (23, 1, 'lq', '::1', '/api/admin/users/2', 'GET', '', 200, 46, 0, 1768462120); +INSERT INTO `operation_logs` VALUES (24, 1, 'lq', '::1', '/api/admin/users/2', 'PUT', '{\"username\":\"editor\",\"email\":\"editor@example.com\",\"role\":\"viewer\",\"isActive\":1}', 200, 97, 0, 1768462124); +INSERT INTO `operation_logs` VALUES (25, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 45, 0, 1768462124); +INSERT INTO `operation_logs` VALUES (26, 1, 'lq', '::1', '/api/admin/users/2', 'GET', '', 200, 46, 0, 1768462127); +INSERT INTO `operation_logs` VALUES (27, 1, 'lq', '::1', '/api/admin/users/2', 'PUT', '{\"username\":\"editor\",\"email\":\"editor@example.com\",\"role\":\"editor\",\"isActive\":1}', 200, 98, 0, 1768462129); +INSERT INTO `operation_logs` VALUES (28, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 45, 0, 1768462129); +INSERT INTO `operation_logs` VALUES (29, 1, 'lq', '::1', '/api/admin/roles', 'GET', '', 200, 132, 0, 1768462130); +INSERT INTO `operation_logs` VALUES (30, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 46, 0, 1768462131); +INSERT INTO `operation_logs` VALUES (31, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 237, 0, 1768462132); +INSERT INTO `operation_logs` VALUES (32, 1, 'lq', '::1', '/api/admin/snippets', 'GET', '', 200, 45, 0, 1768462133); +INSERT INTO `operation_logs` VALUES (33, 1, 'lq', '::1', '/api/admin/settings', 'GET', '', 200, 47, 0, 1768462134); +INSERT INTO `operation_logs` VALUES (34, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 49, 0, 1768462134); +INSERT INTO `operation_logs` VALUES (35, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 48, 0, 1768462135); +INSERT INTO `operation_logs` VALUES (36, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 50, 0, 1768462135); +INSERT INTO `operation_logs` VALUES (37, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 47, 0, 1768462135); +INSERT INTO `operation_logs` VALUES (38, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 55, 0, 1768462504); +INSERT INTO `operation_logs` VALUES (39, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 54, 0, 1768462504); +INSERT INTO `operation_logs` VALUES (40, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 241, 0, 1768462507); +INSERT INTO `operation_logs` VALUES (41, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 44, 0, 1768462508); +INSERT INTO `operation_logs` VALUES (42, 1, 'lq', '::1', '/api/admin/roles', 'GET', '', 200, 145, 0, 1768462509); +INSERT INTO `operation_logs` VALUES (43, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 47, 0, 1768462509); +INSERT INTO `operation_logs` VALUES (44, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 47, 0, 1768462512); +INSERT INTO `operation_logs` VALUES (45, 1, 'lq', '::1', '/api/admin/settings', 'GET', '', 200, 47, 0, 1768462514); +INSERT INTO `operation_logs` VALUES (46, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 46, 0, 1768462524); +INSERT INTO `operation_logs` VALUES (47, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 44, 0, 1768462526); +INSERT INTO `operation_logs` VALUES (48, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 44, 0, 1768462527); +INSERT INTO `operation_logs` VALUES (49, 1, 'lq', '::1', '/api/admin/roles', 'GET', '', 200, 143, 0, 1768462596); +INSERT INTO `operation_logs` VALUES (50, 1, 'lq', '::1', '/api/admin/about', 'GET', '', 200, 49, 0, 1768462841); +INSERT INTO `operation_logs` VALUES (51, 1, 'lq', '::1', '/api/admin/about/2', 'DELETE', '', 200, 42, 0, 1768462847); +INSERT INTO `operation_logs` VALUES (52, 1, 'lq', '::1', '/api/admin/about', 'GET', '', 200, 42, 0, 1768462847); +INSERT INTO `operation_logs` VALUES (53, 1, 'lq', '::1', '/api/admin/about', 'GET', '', 200, 40, 0, 1768462848); +INSERT INTO `operation_logs` VALUES (54, 1, 'lq', '::1', '/api/admin/about/1', 'PUT', '{\"name\":\"年糕崽崽\",\"avatar\":\"https://api.dicebear.com/7.x/avataaars/svg?seed=NianGao&backgroundColor=b6e3f4\",\"location\":\"中国 · 浙江杭州\",\"bio\":\"嗨!我是年糕崽崽,一名热衷于探索数字边界的前端架构师。我的职业生涯始于对像素级完美的执念。从早期的 jQuery 插件开发到如今的 WebGL 3D 场景构建,我始终认为:技术是骨架,艺术是灵魂。

目前,我专注于高性能 B 端应用的体验升级,以及探索生成式艺术(Generative Art)在网页中的应用。闲暇之余,我喜欢在杭州的西湖边散步,或者捣腾我的客制化机械键盘。\",\"email\":\"hello@niangao.dev\",\"wechat\":\"Niangao_Dev\",\"isPrimary\":true,\"experiences\":[{\"year\":\"2024 - 至今\",\"role\":\"技术负责人\",\"company\":\"某医疗平台公司\"},{\"year\":\"2020 - 2024\",\"role\":\"PHP开发工程师\",\"company\":\"某电商公司\"}],\"techStack\":[\"Vue 3\",\"React\",\"TypeScript\",\"Three.js\",\"Golang\",\"Tailwind CSS\",\"Rust\",\"Wails\"]}', 200, 55, 0, 1768462911); +INSERT INTO `operation_logs` VALUES (55, 1, 'lq', '::1', '/api/admin/about', 'GET', '', 200, 47, 0, 1768462911); +INSERT INTO `operation_logs` VALUES (56, 1, 'lq', '::1', '/api/admin/tags', 'GET', '', 200, 45, 0, 1768462919); +INSERT INTO `operation_logs` VALUES (57, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 221, 0, 1768462919); +INSERT INTO `operation_logs` VALUES (58, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 45, 0, 1768462921); +INSERT INTO `operation_logs` VALUES (59, 1, 'lq', '::1', '/api/admin/roles', 'GET', '', 200, 131, 0, 1768462922); +INSERT INTO `operation_logs` VALUES (60, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 44, 0, 1768462923); +INSERT INTO `operation_logs` VALUES (61, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 42, 0, 1768462924); +INSERT INTO `operation_logs` VALUES (62, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 49, 0, 1768462924); +INSERT INTO `operation_logs` VALUES (63, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 42, 0, 1768462927); +INSERT INTO `operation_logs` VALUES (64, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 49, 0, 1768464953); +INSERT INTO `operation_logs` VALUES (65, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 51, 0, 1768464953); +INSERT INTO `operation_logs` VALUES (66, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 47, 0, 1768464956); +INSERT INTO `operation_logs` VALUES (67, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 51, 0, 1768464991); +INSERT INTO `operation_logs` VALUES (68, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 49, 0, 1768464991); +INSERT INTO `operation_logs` VALUES (69, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 49, 0, 1768464993); +INSERT INTO `operation_logs` VALUES (70, 1, 'lq', '::1', '/api/admin/roles', 'GET', '', 200, 145, 0, 1768464993); +INSERT INTO `operation_logs` VALUES (71, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 48, 0, 1768464994); +INSERT INTO `operation_logs` VALUES (72, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 239, 0, 1768464995); +INSERT INTO `operation_logs` VALUES (73, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 48, 0, 1768464996); +INSERT INTO `operation_logs` VALUES (74, 1, 'lq', '::1', '/api/admin/tags', 'GET', '', 200, 51, 0, 1768464996); +INSERT INTO `operation_logs` VALUES (75, 1, 'lq', '::1', '/api/admin/about', 'GET', '', 200, 47, 0, 1768464997); +INSERT INTO `operation_logs` VALUES (76, 1, 'lq', '::1', '/api/admin/settings', 'GET', '', 200, 50, 0, 1768464997); +INSERT INTO `operation_logs` VALUES (77, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 47, 0, 1768464998); +INSERT INTO `operation_logs` VALUES (78, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 49, 0, 1768464998); +INSERT INTO `operation_logs` VALUES (79, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 48, 0, 1768464999); +INSERT INTO `operation_logs` VALUES (80, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 49, 0, 1768465116); +INSERT INTO `operation_logs` VALUES (81, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 54, 0, 1768465116); +INSERT INTO `operation_logs` VALUES (82, 1, 'lq', '::1', '/api/admin/snippets', 'GET', '', 200, 47, 0, 1768465120); +INSERT INTO `operation_logs` VALUES (83, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 52, 0, 1768465156); +INSERT INTO `operation_logs` VALUES (84, 1, 'lq', '::1', '/api/admin/roles', 'GET', '', 200, 145, 0, 1768465157); +INSERT INTO `operation_logs` VALUES (85, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 46, 0, 1768465157); +INSERT INTO `operation_logs` VALUES (86, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 49, 0, 1768465937); +INSERT INTO `operation_logs` VALUES (87, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 47, 0, 1768465938); +INSERT INTO `operation_logs` VALUES (88, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 49, 0, 1768483051); +INSERT INTO `operation_logs` VALUES (89, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 93, 0, 1768483051); +INSERT INTO `operation_logs` VALUES (90, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 240, 0, 1768483066); +INSERT INTO `operation_logs` VALUES (91, 1, 'lq', '::1', '/api/admin/about', 'GET', '', 200, 50, 0, 1768483074); +INSERT INTO `operation_logs` VALUES (92, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 48, 0, 1768524774); +INSERT INTO `operation_logs` VALUES (93, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 47, 0, 1768524774); +INSERT INTO `operation_logs` VALUES (94, 1, 'lq', '::1', '/api/admin/snippets', 'GET', '', 200, 46, 0, 1768524784); +INSERT INTO `operation_logs` VALUES (95, 1, 'lq', '::1', '/api/admin/inquiries', 'GET', '', 200, 50, 0, 1768525274); +INSERT INTO `operation_logs` VALUES (96, 1, 'lq', '::1', '/api/admin/inquiries/1/status', 'PUT', '{\"status\":1}', 200, 49, 0, 1768525276); +INSERT INTO `operation_logs` VALUES (97, 1, 'lq', '::1', '/api/admin/inquiries', 'GET', '', 200, 46, 0, 1768525276); +INSERT INTO `operation_logs` VALUES (98, 1, 'lq', '::1', '/api/admin/inquiries/1/status', 'PUT', '{\"status\":2}', 200, 49, 0, 1768525280); +INSERT INTO `operation_logs` VALUES (99, 1, 'lq', '::1', '/api/admin/inquiries', 'GET', '', 200, 45, 0, 1768525280); +INSERT INTO `operation_logs` VALUES (100, 1, 'lq', '::1', '/api/admin/inquiries', 'GET', '', 200, 47, 0, 1768525377); +INSERT INTO `operation_logs` VALUES (101, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 48, 0, 1768525429); +INSERT INTO `operation_logs` VALUES (102, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 49, 0, 1768525429); +INSERT INTO `operation_logs` VALUES (103, 1, 'lq', '::1', '/api/admin/settings', 'GET', '', 200, 47, 0, 1768525435); +INSERT INTO `operation_logs` VALUES (104, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 43, 0, 1768525437); +INSERT INTO `operation_logs` VALUES (105, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 47, 0, 1768525516); +INSERT INTO `operation_logs` VALUES (106, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 49, 0, 1768525522); +INSERT INTO `operation_logs` VALUES (107, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 49, 0, 1768525522); +INSERT INTO `operation_logs` VALUES (108, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 48, 0, 1768526026); +INSERT INTO `operation_logs` VALUES (109, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 227, 0, 1768526028); +INSERT INTO `operation_logs` VALUES (110, 1, 'lq', '::1', '/api/admin/snippets', 'GET', '', 200, 46, 0, 1768526029); +INSERT INTO `operation_logs` VALUES (111, 1, 'lq', '::1', '/api/admin/tags', 'GET', '', 200, 43, 0, 1768526030); +INSERT INTO `operation_logs` VALUES (112, 1, 'lq', '::1', '/api/admin/snippets', 'GET', '', 200, 45, 0, 1768526031); +INSERT INTO `operation_logs` VALUES (113, 1, 'lq', '::1', '/api/admin/snippets', 'GET', '', 200, 50, 0, 1768526039); +INSERT INTO `operation_logs` VALUES (114, 1, 'lq', '::1', '/api/admin/email-suffixes', 'GET', '', 200, 45, 0, 1768526046); +INSERT INTO `operation_logs` VALUES (115, 1, 'lq', '::1', '/api/admin/email-suffixes', 'GET', '', 200, 55, 0, 1768526110); +INSERT INTO `operation_logs` VALUES (116, 1, 'lq', '::1', '/api/admin/roles', 'GET', '', 200, 142, 0, 1768526116); +INSERT INTO `operation_logs` VALUES (117, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 46, 0, 1768526119); +INSERT INTO `operation_logs` VALUES (118, 1, 'lq', '::1', '/api/admin/roles', 'GET', '', 200, 138, 0, 1768526120); +INSERT INTO `operation_logs` VALUES (119, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 46, 0, 1768526123); +INSERT INTO `operation_logs` VALUES (120, 1, 'lq', '::1', '/api/admin/settings', 'GET', '', 200, 47, 0, 1768526129); +INSERT INTO `operation_logs` VALUES (121, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 47, 0, 1768526130); +INSERT INTO `operation_logs` VALUES (122, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 47, 0, 1768526133); +INSERT INTO `operation_logs` VALUES (123, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 45, 0, 1768526133); +INSERT INTO `operation_logs` VALUES (124, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 50, 0, 1768526708); +INSERT INTO `operation_logs` VALUES (125, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 50, 0, 1768526708); +INSERT INTO `operation_logs` VALUES (126, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 52, 0, 1768526723); +INSERT INTO `operation_logs` VALUES (127, 1, 'lq', '::1', '/api/admin/dashboard/activities', 'GET', '', 200, 46, 0, 1768526723); +INSERT INTO `operation_logs` VALUES (128, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 53, 0, 1768526783); +INSERT INTO `operation_logs` VALUES (129, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 46, 0, 1768526783); +INSERT INTO `operation_logs` VALUES (130, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 49, 0, 1768526973); +INSERT INTO `operation_logs` VALUES (131, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 48, 0, 1768527108); +INSERT INTO `operation_logs` VALUES (132, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 55, 0, 1768527379); +INSERT INTO `operation_logs` VALUES (133, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 47, 0, 1768527425); +INSERT INTO `operation_logs` VALUES (134, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 46, 0, 1768527425); +INSERT INTO `operation_logs` VALUES (135, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 51, 0, 1768527502); +INSERT INTO `operation_logs` VALUES (136, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 54, 0, 1768527595); +INSERT INTO `operation_logs` VALUES (137, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 57, 0, 1768527595); +INSERT INTO `operation_logs` VALUES (138, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 45, 0, 1768527605); +INSERT INTO `operation_logs` VALUES (139, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 44, 0, 1768527608); +INSERT INTO `operation_logs` VALUES (140, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 46, 0, 1768527614); +INSERT INTO `operation_logs` VALUES (141, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 48, 0, 1768527625); +INSERT INTO `operation_logs` VALUES (142, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 45, 0, 1768527653); +INSERT INTO `operation_logs` VALUES (143, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 48, 0, 1768527658); +INSERT INTO `operation_logs` VALUES (144, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 53, 0, 1768527880); +INSERT INTO `operation_logs` VALUES (145, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 46, 0, 1768527885); +INSERT INTO `operation_logs` VALUES (146, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 45, 0, 1768527886); +INSERT INTO `operation_logs` VALUES (147, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 46, 0, 1768527887); +INSERT INTO `operation_logs` VALUES (148, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 47, 0, 1768528036); +INSERT INTO `operation_logs` VALUES (149, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 51, 0, 1768528091); +INSERT INTO `operation_logs` VALUES (150, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 142, 0, 1768528656); +INSERT INTO `operation_logs` VALUES (151, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 153, 0, 1768528669); +INSERT INTO `operation_logs` VALUES (152, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 144, 0, 1768528671); +INSERT INTO `operation_logs` VALUES (153, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 132, 0, 1768528672); +INSERT INTO `operation_logs` VALUES (154, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 136, 0, 1768528674); +INSERT INTO `operation_logs` VALUES (155, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 144, 0, 1768528674); +INSERT INTO `operation_logs` VALUES (156, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 136, 0, 1768528675); +INSERT INTO `operation_logs` VALUES (157, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 143, 0, 1768528676); +INSERT INTO `operation_logs` VALUES (158, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 57, 0, 1768528682); +INSERT INTO `operation_logs` VALUES (159, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 97, 0, 1768528682); +INSERT INTO `operation_logs` VALUES (160, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 145, 0, 1768528684); +INSERT INTO `operation_logs` VALUES (161, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 46, 0, 1768528684); +INSERT INTO `operation_logs` VALUES (162, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 242, 0, 1768528685); +INSERT INTO `operation_logs` VALUES (163, 1, 'lq', '::1', '/api/admin/snippets', 'GET', '', 200, 49, 0, 1768528687); +INSERT INTO `operation_logs` VALUES (164, 1, 'lq', '::1', '/api/admin/tags', 'GET', '', 200, 50, 0, 1768528688); +INSERT INTO `operation_logs` VALUES (165, 1, 'lq', '::1', '/api/admin/about', 'GET', '', 200, 47, 0, 1768528690); +INSERT INTO `operation_logs` VALUES (166, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 245, 0, 1768528693); +INSERT INTO `operation_logs` VALUES (167, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 47, 0, 1768528694); +INSERT INTO `operation_logs` VALUES (168, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 99, 0, 1768528694); +INSERT INTO `operation_logs` VALUES (169, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 220, 0, 1768528698); +INSERT INTO `operation_logs` VALUES (170, 1, 'lq', '::1', '/api/admin/snippets', 'GET', '', 200, 47, 0, 1768528699); +INSERT INTO `operation_logs` VALUES (171, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 48, 0, 1768528773); +INSERT INTO `operation_logs` VALUES (172, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 92, 0, 1768528773); +INSERT INTO `operation_logs` VALUES (173, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 139, 0, 1768528774); +INSERT INTO `operation_logs` VALUES (174, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 95, 0, 1768528932); +INSERT INTO `operation_logs` VALUES (175, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 141, 0, 1768528935); +INSERT INTO `operation_logs` VALUES (176, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 137, 0, 1768528937); +INSERT INTO `operation_logs` VALUES (177, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 137, 0, 1768528937); +INSERT INTO `operation_logs` VALUES (178, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 143, 0, 1768528941); +INSERT INTO `operation_logs` VALUES (179, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 138, 0, 1768528942); +INSERT INTO `operation_logs` VALUES (180, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 136, 0, 1768528943); +INSERT INTO `operation_logs` VALUES (181, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 146, 0, 1768528951); +INSERT INTO `operation_logs` VALUES (182, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 47, 0, 1768529007); +INSERT INTO `operation_logs` VALUES (183, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 96, 0, 1768529007); +INSERT INTO `operation_logs` VALUES (184, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 45, 0, 1768529012); +INSERT INTO `operation_logs` VALUES (185, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 90, 0, 1768529012); +INSERT INTO `operation_logs` VALUES (186, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 136, 0, 1768529013); +INSERT INTO `operation_logs` VALUES (187, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 200, 0, 1768529364); +INSERT INTO `operation_logs` VALUES (188, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 193, 0, 1768529373); +INSERT INTO `operation_logs` VALUES (189, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 183, 0, 1768529459); +INSERT INTO `operation_logs` VALUES (190, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 138, 0, 1768529618); +INSERT INTO `operation_logs` VALUES (191, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 137, 0, 1768529620); +INSERT INTO `operation_logs` VALUES (192, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 141, 0, 1768529790); +INSERT INTO `operation_logs` VALUES (193, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 48, 0, 1768529867); +INSERT INTO `operation_logs` VALUES (194, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 95, 0, 1768529867); +INSERT INTO `operation_logs` VALUES (195, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 137, 0, 1768529869); +INSERT INTO `operation_logs` VALUES (196, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 96, 0, 1768530104); +INSERT INTO `operation_logs` VALUES (197, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 90, 0, 1768530104); +INSERT INTO `operation_logs` VALUES (198, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 90, 0, 1768530104); +INSERT INTO `operation_logs` VALUES (199, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 53, 0, 1768532353); +INSERT INTO `operation_logs` VALUES (200, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 103, 0, 1768532353); +INSERT INTO `operation_logs` VALUES (201, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 93, 0, 1768532365); +INSERT INTO `operation_logs` VALUES (202, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 55, 0, 1768532365); +INSERT INTO `operation_logs` VALUES (203, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 146, 0, 1768532370); +INSERT INTO `operation_logs` VALUES (204, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 49, 0, 1768532371); +INSERT INTO `operation_logs` VALUES (205, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 237, 0, 1768532372); +INSERT INTO `operation_logs` VALUES (206, 1, 'lq', '::1', '/api/admin/snippets', 'GET', '', 200, 47, 0, 1768532375); +INSERT INTO `operation_logs` VALUES (207, 1, 'lq', '::1', '/api/admin/tags', 'GET', '', 200, 47, 0, 1768532375); +INSERT INTO `operation_logs` VALUES (208, 1, 'lq', '::1', '/api/admin/about', 'GET', '', 200, 46, 0, 1768532380); +INSERT INTO `operation_logs` VALUES (209, 1, 'lq', '::1', '/api/admin/about', 'GET', '', 200, 45, 0, 1768532385); +INSERT INTO `operation_logs` VALUES (210, 1, 'lq', '::1', '/api/admin/about', 'GET', '', 200, 46, 0, 1768532386); +INSERT INTO `operation_logs` VALUES (211, 1, 'lq', '::1', '/api/admin/inquiries', 'GET', '', 200, 46, 0, 1768532405); +INSERT INTO `operation_logs` VALUES (212, 1, 'lq', '::1', '/api/admin/email-suffixes', 'GET', '', 200, 53, 0, 1768532407); +INSERT INTO `operation_logs` VALUES (213, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 49, 0, 1768532409); +INSERT INTO `operation_logs` VALUES (214, 1, 'lq', '::1', '/api/admin/roles', 'GET', '', 200, 147, 0, 1768532410); +INSERT INTO `operation_logs` VALUES (215, 1, 'lq', '::1', '/api/admin/settings', 'GET', '', 200, 45, 0, 1768532440); +INSERT INTO `operation_logs` VALUES (216, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 47, 0, 1768532441); +INSERT INTO `operation_logs` VALUES (217, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 48, 0, 1768532443); +INSERT INTO `operation_logs` VALUES (218, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 146, 0, 1768532446); +INSERT INTO `operation_logs` VALUES (219, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 150, 0, 1768532460); +INSERT INTO `operation_logs` VALUES (220, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 49, 0, 1768532475); +INSERT INTO `operation_logs` VALUES (221, 1, 'lq', '::1', '/api/admin/roles', 'GET', '', 200, 142, 0, 1768532475); +INSERT INTO `operation_logs` VALUES (222, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 148, 0, 1768532520); +INSERT INTO `operation_logs` VALUES (223, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 49, 0, 1768532585); +INSERT INTO `operation_logs` VALUES (224, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 96, 0, 1768532585); +INSERT INTO `operation_logs` VALUES (225, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 93, 0, 1768532681); +INSERT INTO `operation_logs` VALUES (226, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 49, 0, 1768532681); +INSERT INTO `operation_logs` VALUES (227, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 49, 0, 1768532725); +INSERT INTO `operation_logs` VALUES (228, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 100, 0, 1768532725); +INSERT INTO `operation_logs` VALUES (229, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 47, 0, 1768532738); +INSERT INTO `operation_logs` VALUES (230, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 95, 0, 1768532738); +INSERT INTO `operation_logs` VALUES (231, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 94, 0, 1768532910); +INSERT INTO `operation_logs` VALUES (232, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 50, 0, 1768532910); +INSERT INTO `operation_logs` VALUES (233, 1, 'lq', '::1', '/api/admin/tags', 'GET', '', 200, 49, 0, 1768532912); +INSERT INTO `operation_logs` VALUES (234, 1, 'lq', '::1', '/api/admin/settings', 'GET', '', 200, 46, 0, 1768532914); +INSERT INTO `operation_logs` VALUES (235, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 45, 0, 1768532915); +INSERT INTO `operation_logs` VALUES (236, 1, 'lq', '::1', '/api/admin/about', 'GET', '', 200, 46, 0, 1768532917); +INSERT INTO `operation_logs` VALUES (237, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 46, 0, 1768532919); +INSERT INTO `operation_logs` VALUES (238, 1, 'lq', '::1', '/api/admin/snippets', 'GET', '', 200, 51, 0, 1768533052); +INSERT INTO `operation_logs` VALUES (239, 1, 'lq', '::1', '/api/admin/works', 'GET', '', 200, 246, 0, 1768533154); +INSERT INTO `operation_logs` VALUES (240, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 46, 0, 1768533159); +INSERT INTO `operation_logs` VALUES (241, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 46, 0, 1768533167); +INSERT INTO `operation_logs` VALUES (242, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 44, 0, 1768533173); +INSERT INTO `operation_logs` VALUES (243, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 46, 0, 1768533202); +INSERT INTO `operation_logs` VALUES (244, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 92, 0, 1768533202); +INSERT INTO `operation_logs` VALUES (245, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 94, 0, 1768533212); +INSERT INTO `operation_logs` VALUES (246, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 55, 0, 1768533212); +INSERT INTO `operation_logs` VALUES (247, 1, 'lq', '::1', '/api/admin/settings', 'GET', '', 200, 46, 0, 1768533214); +INSERT INTO `operation_logs` VALUES (248, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 137, 0, 1768533222); +INSERT INTO `operation_logs` VALUES (249, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 143, 0, 1768533226); +INSERT INTO `operation_logs` VALUES (250, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 92, 0, 1768533229); +INSERT INTO `operation_logs` VALUES (251, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 45, 0, 1768533229); +INSERT INTO `operation_logs` VALUES (252, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 47, 0, 1768533238); +INSERT INTO `operation_logs` VALUES (253, 1, 'lq', '::1', '/api/admin/users/2', 'GET', '', 200, 48, 0, 1768533242); +INSERT INTO `operation_logs` VALUES (254, 1, 'lq', '::1', '/api/admin/users', 'GET', '', 200, 45, 0, 1768533244); +INSERT INTO `operation_logs` VALUES (255, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 96, 0, 1768533265); +INSERT INTO `operation_logs` VALUES (256, 5, 'cs', '::1', '/api/admin/operation-logs', 'GET', '', 200, 51, 0, 1768533265); +INSERT INTO `operation_logs` VALUES (257, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 142, 0, 1768533270); +INSERT INTO `operation_logs` VALUES (258, 5, 'cs', '::1', '/api/admin/works', 'GET', '', 200, 233, 0, 1768533271); +INSERT INTO `operation_logs` VALUES (259, 5, 'cs', '::1', '/api/admin/posts', 'GET', '', 200, 45, 0, 1768533272); +INSERT INTO `operation_logs` VALUES (260, 5, 'cs', '::1', '/api/admin/works', 'GET', '', 200, 219, 0, 1768533361); +INSERT INTO `operation_logs` VALUES (261, 5, 'cs', '::1', '/api/admin/works', 'GET', '', 200, 221, 0, 1768533366); +INSERT INTO `operation_logs` VALUES (262, 5, 'cs', '::1', '/api/admin/snippets', 'GET', '', 200, 48, 0, 1768533370); +INSERT INTO `operation_logs` VALUES (263, 5, 'cs', '::1', '/api/admin/tags', 'GET', '', 200, 44, 0, 1768533371); +INSERT INTO `operation_logs` VALUES (264, 5, 'cs', '::1', '/api/admin/posts', 'GET', '', 200, 45, 0, 1768533372); +INSERT INTO `operation_logs` VALUES (265, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 139, 0, 1768533373); +INSERT INTO `operation_logs` VALUES (266, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 153, 0, 1768533735); +INSERT INTO `operation_logs` VALUES (267, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 183, 0, 1768533846); +INSERT INTO `operation_logs` VALUES (268, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 182, 0, 1768533850); +INSERT INTO `operation_logs` VALUES (269, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 180, 0, 1768533851); +INSERT INTO `operation_logs` VALUES (270, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 193, 0, 1768533852); +INSERT INTO `operation_logs` VALUES (271, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 192, 0, 1768533854); +INSERT INTO `operation_logs` VALUES (272, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 197, 0, 1768533930); +INSERT INTO `operation_logs` VALUES (273, 5, 'cs', '::1', '/api/admin/email-suffixes', 'GET', '', 200, 46, 0, 1768534851); +INSERT INTO `operation_logs` VALUES (274, 5, 'cs', '::1', '/api/admin/email-suffixes', 'GET', '', 200, 47, 0, 1768535295); +INSERT INTO `operation_logs` VALUES (275, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 189, 0, 1768535879); +INSERT INTO `operation_logs` VALUES (276, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 190, 0, 1768535946); +INSERT INTO `operation_logs` VALUES (277, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 190, 0, 1768535948); +INSERT INTO `operation_logs` VALUES (278, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 189, 0, 1768535951); +INSERT INTO `operation_logs` VALUES (279, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 196, 0, 1768535953); +INSERT INTO `operation_logs` VALUES (280, 5, 'cs', '::1', '/api/admin/about', 'GET', '', 200, 47, 0, 1768537859); +INSERT INTO `operation_logs` VALUES (281, 5, 'cs', '::1', '/api/admin/posts', 'GET', '', 200, 50, 0, 1768537860); +INSERT INTO `operation_logs` VALUES (282, 5, 'cs', '::1', '/api/admin/works', 'GET', '', 200, 250, 0, 1768538179); +INSERT INTO `operation_logs` VALUES (283, 5, 'cs', '::1', '/api/admin/posts', 'GET', '', 200, 47, 0, 1768538180); +INSERT INTO `operation_logs` VALUES (284, 5, 'cs', '::1', '/api/admin/works', 'GET', '', 200, 224, 0, 1768538193); +INSERT INTO `operation_logs` VALUES (285, 5, 'cs', '::1', '/api/admin/posts', 'GET', '', 200, 46, 0, 1768538193); +INSERT INTO `operation_logs` VALUES (286, 5, 'cs', '::1', '/api/admin/works', 'GET', '', 200, 245, 0, 1768539279); +INSERT INTO `operation_logs` VALUES (287, 5, 'cs', '::1', '/api/admin/posts', 'GET', '', 200, 49, 0, 1768539282); +INSERT INTO `operation_logs` VALUES (288, 5, 'cs', '::1', '/api/admin/posts', 'GET', '', 200, 47, 0, 1768539301); +INSERT INTO `operation_logs` VALUES (289, 5, 'cs', '::1', '/api/admin/works', 'GET', '', 200, 236, 0, 1768539305); +INSERT INTO `operation_logs` VALUES (290, 5, 'cs', '::1', '/api/admin/snippets', 'GET', '', 200, 43, 0, 1768539306); +INSERT INTO `operation_logs` VALUES (291, 5, 'cs', '::1', '/api/admin/tags', 'GET', '', 200, 45, 0, 1768539308); +INSERT INTO `operation_logs` VALUES (292, 5, 'cs', '::1', '/api/admin/snippets', 'GET', '', 200, 48, 0, 1768539309); +INSERT INTO `operation_logs` VALUES (293, 5, 'cs', '::1', '/api/admin/posts', 'GET', '', 200, 53, 0, 1768539311); +INSERT INTO `operation_logs` VALUES (294, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 306, 0, 1768539314); +INSERT INTO `operation_logs` VALUES (295, 5, 'cs', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 299, 0, 1768539320); +INSERT INTO `operation_logs` VALUES (296, 5, 'cs', '::1', '/api/admin/about', 'GET', '', 200, 46, 0, 1768539435); +INSERT INTO `operation_logs` VALUES (297, 5, 'cs', '::1', '/api/admin/about', 'GET', '', 200, 62, 0, 1768539635); +INSERT INTO `operation_logs` VALUES (298, 5, 'cs', '::1', '/api/admin/about', 'GET', '', 200, 53, 0, 1768539805); +INSERT INTO `operation_logs` VALUES (299, 5, 'cs', '::1', '/api/admin/testimonials', 'POST', '{\"author\":\"李二狗\",\"role\":\"CTP\",\"avatar\":\"\",\"rating\":5,\"content\":\"服务很贴心\"}', 403, 0, 0, 1768539861); +INSERT INTO `operation_logs` VALUES (300, 5, 'cs', '::1', '/api/admin/testimonials', 'POST', '{\"author\":\"李二狗\",\"role\":\"CTP\",\"avatar\":\"https://api.dicebear.com/7.x/avataaars/svg?seed=David\",\"rating\":5,\"content\":\"服务很贴心\"}', 403, 3, 0, 1768539894); +INSERT INTO `operation_logs` VALUES (301, 5, 'cs', '::1', '/api/admin/testimonials', 'POST', '{\"author\":\"李二狗\",\"role\":\"CTO\",\"avatar\":\"https://api.dicebear.com/7.x/avataaars/svg?seed=David\",\"rating\":5,\"content\":\"服务很贴心\"}', 403, 1, 0, 1768539901); +INSERT INTO `operation_logs` VALUES (302, 1, 'lq', '::1', '/api/admin/operation-logs', 'GET', '', 200, 55, 0, 1768539911); +INSERT INTO `operation_logs` VALUES (303, 1, 'lq', '::1', '/api/admin/dashboard/stats', 'GET', '', 200, 230, 0, 1768539911); +INSERT INTO `operation_logs` VALUES (304, 1, 'lq', '::1', '/api/admin/testimonials', 'POST', '{\"author\":\"王甜甜\",\"role\":\"CTO\",\"avatar\":\"https://api.dicebear.com/7.x/avataaars/svg?seed=David\",\"rating\":5,\"content\":\"服务很贴心,技术够硬\"}', 200, 56, 0, 1768539952); +INSERT INTO `operation_logs` VALUES (305, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 49, 0, 1768539988); +INSERT INTO `operation_logs` VALUES (306, 1, 'lq', '::1', '/api/admin/posts', 'GET', '', 200, 49, 0, 1768540005); -- ---------------------------- -- Table structure for partners @@ -433,20 +458,20 @@ CREATE TABLE `partners` ( `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '合作伙伴介绍', `url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '合作伙伴官网链接', `sort_order` int UNSIGNED NULL DEFAULT 0 COMMENT '排序权重', - `created_at` bigint NOT NULL DEFAULT 0 COMMENT '创建时间', - `updated_at` bigint NOT NULL DEFAULT 0 COMMENT '更新时间', `deleted_at` bigint NOT NULL DEFAULT 0, + `created_at` bigint NOT NULL DEFAULT 0, + `updated_at` bigint NOT NULL DEFAULT 0, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '合作伙伴表' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- 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, '2026-01-15 21:16:33', '2026-01-15 21:16:33'); -INSERT INTO `partners` VALUES (2, 'Supabase', 'https://seeklogo.com/images/S/supabase-logo-DCC676FFE2-seeklogo.com.png', '开源 Firebase 替代方案', 'https://supabase.com', 0, '2026-01-15 21:16:33', '2026-01-15 21:16:33'); -INSERT INTO `partners` VALUES (3, 'Stripe', 'https://upload.wikimedia.org/wikipedia/commons/b/ba/Stripe_Logo%2C_revised_2016.svg', '在线支付基础设施', 'https://stripe.com', 0, '2026-01-15 21:16:33', '2026-01-15 21:16:33'); -INSERT INTO `partners` VALUES (4, 'Algolia', 'https://upload.wikimedia.org/wikipedia/commons/6/69/Algolia-logo.svg', '搜索即服务 API', 'https://algolia.com', 0, '2026-01-15 21:16:33', '2026-01-15 21:16:33'); -INSERT INTO `partners` VALUES (5, 'Prisma', 'https://seeklogo.com/images/P/prisma-logo-3805665B69-seeklogo.com.png', '下一代 ORM', 'https://prisma.io', 0, '2026-01-15 21:16:33', '2026-01-15 21:16:33'); +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.png', '开源 Firebase 替代方案', 'https://supabase.com', 0, 0, 1768482993, 1768538953); +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); -- ---------------------------- -- Table structure for permissions @@ -457,9 +482,9 @@ CREATE TABLE `permissions` ( `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '权限名称', `resource` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '资源名称', `action` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '操作名称', - `created_at` bigint NOT NULL DEFAULT 0 COMMENT '创建时间', - `updated_at` bigint NOT NULL DEFAULT 0 COMMENT '更新时间', `deleted_at` bigint NOT NULL DEFAULT 0, + `created_at` bigint NOT NULL DEFAULT 0, + `updated_at` bigint NOT NULL DEFAULT 0, PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `unique_resource_action`(`resource` ASC, `action` ASC) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 31 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '权限表' ROW_FORMAT = DYNAMIC; @@ -467,36 +492,36 @@ CREATE TABLE `permissions` ( -- ---------------------------- -- Records of permissions -- ---------------------------- -INSERT INTO `permissions` VALUES (1, 'Create User', 'users', 'create', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (2, 'Read User', 'users', 'read', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (3, 'Update User', 'users', 'update', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (4, 'Delete User', 'users', 'delete', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (5, 'Create Role', 'roles', 'create', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (6, 'Read Role', 'roles', 'read', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (7, 'Update Role', 'roles', 'update', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (8, 'Delete Role', 'roles', 'delete', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (9, 'Create Post', 'posts', 'create', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (10, 'Read Post', 'posts', 'read', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (11, 'Update Post', 'posts', 'update', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (12, 'Delete Post', 'posts', 'delete', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (13, 'Create Work', 'works', 'create', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (14, 'Read Work', 'works', 'read', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (15, 'Update Work', 'works', 'update', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (16, 'Delete Work', 'works', 'delete', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (17, 'Create Snippet', 'snippets', 'create', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (18, 'Read Snippet', 'snippets', 'read', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (19, 'Update Snippet', 'snippets', 'update', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (20, 'Delete Snippet', 'snippets', 'delete', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (21, 'Create Setting', 'settings', 'create', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (22, 'Read Setting', 'settings', 'read', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (23, 'Update Setting', 'settings', 'update', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (24, 'Delete Setting', 'settings', 'delete', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (25, 'Create Tag', 'tags', 'create', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (26, 'Read Tag', 'tags', 'read', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (27, 'Update Tag', 'tags', 'update', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (28, 'Delete Tag', 'tags', 'delete', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (29, 'Read Operation Log', 'operation_logs', 'read', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `permissions` VALUES (30, 'Read Dashboard', 'dashboard', 'read', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); +INSERT INTO `permissions` VALUES (1, 'Create User', 'users', 'create', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (2, 'Read User', 'users', 'read', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (3, 'Update User', 'users', 'update', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (4, 'Delete User', 'users', 'delete', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (5, 'Create Role', 'roles', 'create', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (6, 'Read Role', 'roles', 'read', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (7, 'Update Role', 'roles', 'update', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (8, 'Delete Role', 'roles', 'delete', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (9, 'Create Post', 'posts', 'create', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (10, 'Read Post', 'posts', 'read', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (11, 'Update Post', 'posts', 'update', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (12, 'Delete Post', 'posts', 'delete', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (13, 'Create Work', 'works', 'create', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (14, 'Read Work', 'works', 'read', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (15, 'Update Work', 'works', 'update', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (16, 'Delete Work', 'works', 'delete', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (17, 'Create Snippet', 'snippets', 'create', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (18, 'Read Snippet', 'snippets', 'read', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (19, 'Update Snippet', 'snippets', 'update', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (20, 'Delete Snippet', 'snippets', 'delete', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (21, 'Create Setting', 'settings', 'create', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (22, 'Read Setting', 'settings', 'read', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (23, 'Update Setting', 'settings', 'update', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (24, 'Delete Setting', 'settings', 'delete', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (25, 'Create Tag', 'tags', 'create', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (26, 'Read Tag', 'tags', 'read', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (27, 'Update Tag', 'tags', 'update', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (28, 'Delete Tag', 'tags', 'delete', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (29, 'Read Operation Log', 'operation_logs', 'read', 0, 1768452892, 1768538956); +INSERT INTO `permissions` VALUES (30, 'Read Dashboard', 'dashboard', 'read', 0, 1768452892, 1768538956); -- ---------------------------- -- Table structure for post_tags @@ -504,8 +529,8 @@ INSERT INTO `permissions` VALUES (30, 'Read Dashboard', 'dashboard', 'read', '20 DROP TABLE IF EXISTS `post_tags`; CREATE TABLE `post_tags` ( `tag_id` bigint UNSIGNED NOT NULL COMMENT '关联的标签ID', - `created_at` bigint NOT NULL DEFAULT 0 COMMENT '创建时间', `post_id` int UNSIGNED NOT NULL COMMENT '关联的文章ID', + `created_at` bigint NOT NULL DEFAULT 0, PRIMARY KEY (`post_id`, `tag_id`) USING BTREE, INDEX `idx_tag_id`(`tag_id` ASC) USING BTREE, CONSTRAINT `post_tags_ibfk_1` FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT, @@ -529,9 +554,9 @@ CREATE TABLE `posts` ( `content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文章内容', `read_count` int UNSIGNED NULL DEFAULT 0 COMMENT '阅读量', `is_published` tinyint(1) NULL DEFAULT 1 COMMENT '是否已发布(0:草稿,1:已发布)', - `created_at` bigint NOT NULL DEFAULT 0 COMMENT '创建时间', - `updated_at` bigint NOT NULL DEFAULT 0 COMMENT '更新时间', `deleted_at` bigint NOT NULL DEFAULT 0, + `created_at` bigint NOT NULL DEFAULT 0, + `updated_at` bigint NOT NULL DEFAULT 0, PRIMARY KEY (`id`) USING BTREE, INDEX `idx_category`(`category` ASC) USING BTREE COMMENT '按分类查询索引', INDEX `idx_is_published`(`is_published` ASC) USING BTREE COMMENT '按发布状态查询索引', @@ -542,12 +567,12 @@ CREATE TABLE `posts` ( -- ---------------------------- -- Records of posts -- ---------------------------- -INSERT INTO `posts` VALUES (1, 'refactor', '重构的艺术:如何优雅地处理遗留代码', '工程化', '2026-01-13', '在本文中,我们将探讨重构的核心原则和实用技巧,帮助你优雅地处理遗留代码,提高代码质量和可维护性。', '

什么是代码重构?

代码重构是在不改变代码外部行为的前提下,优化代码内部结构的过程...

', 4, 1, '2026-01-13 16:10:14', '2026-01-15 17:01:44'); -INSERT INTO `posts` VALUES (2, 'shader', '着色器魔法:从零开始写一个噪声生成器', '图形渲染', '2026-01-13', '深入了解WebGL着色器,学习如何从零开始实现一个高性能的噪声生成器,为你的3D作品增添独特的视觉效果。', '

GLSL (OpenGL Shading Language) 是一门让人生畏但也充满魅力的语言。它运行在 GPU 上,能够并行处理数百万个像素,创造出惊人的视觉效果。

\r\n

什么是柏林噪声?

\r\n

柏林噪声(Perlin Noise)是一种梯度噪声,它比普通的随机数生成的噪声看起来更自然、更平滑。它常被用来模拟云彩、地形、火焰等自然现象。

\r\n

Three.js 中的实现

\r\n

在 Three.js 中,我们可以通过 ShaderMaterial 直接编写 GLSL 代码。

\r\n
// 简单的顶点着色器\r\nvarying vec2 vUv;\r\nvoid main() {\r\n    vUv = uv;\r\n    gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n}
\r\n

通过调整噪声的频率和振幅,我们可以得到各种不同的纹理效果。在我的个人网站背景中,就使用了这种技术来生成流动的极光效果。

\r\n ', 1, 1, '2026-01-13 16:10:14', '2026-01-15 17:01:44'); -INSERT INTO `posts` VALUES (3, 'ux', '用户体验设计:从认知心理学到交互实践', '设计思维', '2026-01-13', '探索用户体验设计的核心原理,结合认知心理学知识,学习如何设计出真正符合用户需求的交互界面。', '

认知心理学在UX设计中的应用

了解用户的认知过程是设计良好用户体验的基础...

', 0, 1, '2026-01-13 16:10:14', '2026-01-15 17:01:44'); -INSERT INTO `posts` VALUES (4, 'goravel-guide-1', 'Goravel 入门指南 (一):环境搭建与 Hello World', 'Go语言', '2026-01-15', '本文将带你了解 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, '2026-01-15 16:32:12', '2026-01-16 11:08:41'); -INSERT INTO `posts` VALUES (5, 'goravel-guide-2', 'Goravel 入门指南 (二):路由与控制器', 'Go语言', '2026-01-15', '深入理解 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 操作数据库。', 900, 1, '2026-01-15 16:32:12', '2026-01-16 11:12:49'); -INSERT INTO `posts` VALUES (6, 'goravel-guide-3', 'Goravel 入门指南 (三):ORM 数据库操作', 'Go语言', '2026-01-15', '掌握 Goravel 强大的 ORM 功能,从数据库配置、模型定义到执行增删改查(CRUD)操作。', '## Goravel ORM 简介\n\nGoravel 的 ORM 基于著名的 GORM 库构建,但它进行了一层优雅的封装,使其调用方式更接近 Laravel 的 Eloquent ORM。这意味着你可以使用 Facade 模式轻松调用数据库,且支持自动迁移。\n\n## 配置数据库\n\n打开 `config/database.go` 或 `.env` 文件,配置你的 MySQL 连接信息:\n\n```env\nDB_CONNECTION=mysql\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_DATABASE=goravel\nDB_USERNAME=root\nDB_PASSWORD=password\n```\n\n## 定义模型\n\n使用 `knit` 生成模型:\n\n```bash\nknit make:model Post\n```\n\n生成的模型文件位于 `app/models/post.go`。我们需要定义结构体字段:\n\n```go\npackage models\n\nimport (\n \"github.com/goravel/framework/database/orm\"\n)\n\ntype Post struct {\n orm.Model\n Title string `gorm:\"size:255;not null\"`\n Content string `gorm:\"type:text\"`\n UserID uint\n}\n```\n\n## 数据库迁移\n\n虽然 GORM 支持 AutoMigrate,但 Goravel 推荐使用迁移文件来管理数据库变更。\n\n```bash\nknit make:migration create_posts_table\n```\n\n编辑生成的迁移文件 (`database/migrations/xxxx_create_posts_table.go`),定义表结构,然后运行:\n\n```bash\nknit migrate\n```\n\n## CRUD 操作\n\n有了模型,我们就可以愉快地操作数据库了。所有操作都通过 `facades.Orm()` 入口。\n\n### 创建 (Create)\n\n```go\npost := models.Post{\n Title: \"My First Post\",\n Content: \"Content goes here...\",\n}\nerr := facades.Orm().Query().Create(&post)\n```\n\n### 查询 (Read)\n\n```go\nvar post models.Post\n// 根据主键查询\nfacades.Orm().Query().Find(&post, 1)\n\n// 条件查询\nvar posts []models.Post\nfacades.Orm().Query().Where(\"title\", \"My First Post\").Get(&posts)\n```\n\n### 更新 (Update)\n\n```go\nvar post models.Post\nfacades.Orm().Query().Find(&post, 1)\n\npost.Title = \"Updated Title\"\nfacades.Orm().Query().Save(&post)\n```\n\n### 删除 (Delete)\n\n```go\nvar post models.Post\nfacades.Orm().Query().Delete(&post, 1)\n```\n\nGoravel 的 ORM 让 Go 语言的数据库操作不再繁琐,极大地提高了开发效率。配合之前的路由和控制器知识,你现在已经具备了开发完整 RESTful API 的能力!', 1561, 1, '2026-01-15 16:32:12', '2026-01-16 11:14:59'); +INSERT INTO `posts` VALUES (1, 'refactor', '重构的艺术:如何优雅地处理遗留代码', '工程化', '在本文中,我们将探讨重构的核心原则和实用技巧,帮助你优雅地处理遗留代码,提高代码质量和可维护性。', '

什么是代码重构?

代码重构是在不改变代码外部行为的前提下,优化代码内部结构的过程...

', 5, 1, 0, 1768291814, 1768538949); +INSERT INTO `posts` VALUES (2, 'shader', '着色器魔法:从零开始写一个噪声生成器', '图形渲染', '深入了解WebGL着色器,学习如何从零开始实现一个高性能的噪声生成器,为你的3D作品增添独特的视觉效果。', '

GLSL (OpenGL Shading Language) 是一门让人生畏但也充满魅力的语言。它运行在 GPU 上,能够并行处理数百万个像素,创造出惊人的视觉效果。

\r\n

什么是柏林噪声?

\r\n

柏林噪声(Perlin Noise)是一种梯度噪声,它比普通的随机数生成的噪声看起来更自然、更平滑。它常被用来模拟云彩、地形、火焰等自然现象。

\r\n

Three.js 中的实现

\r\n

在 Three.js 中,我们可以通过 ShaderMaterial 直接编写 GLSL 代码。

\r\n
// 简单的顶点着色器\r\nvarying vec2 vUv;\r\nvoid main() {\r\n    vUv = uv;\r\n    gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\r\n}
\r\n

通过调整噪声的频率和振幅,我们可以得到各种不同的纹理效果。在我的个人网站背景中,就使用了这种技术来生成流动的极光效果。

\r\n ', 1, 1, 0, 1768291815, 1768538949); +INSERT INTO `posts` VALUES (3, 'ux', '用户体验设计:从认知心理学到交互实践', '设计思维', '探索用户体验设计的核心原理,结合认知心理学知识,学习如何设计出真正符合用户需求的交互界面。', '

认知心理学在UX设计中的应用

了解用户的认知过程是设计良好用户体验的基础...

', 0, 1, 0, 1768291816, 1768538949); +INSERT INTO `posts` VALUES (4, 'goravel-guide-1', 'Goravel 入门指南 (一):环境搭建与 Hello World', 'Go语言', '本文将带你了解 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 入门指南 (二):路由与控制器', 'Go语言', '深入理解 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 操作数据库。', 901, 1, 0, 1768465933, 1768538949); +INSERT INTO `posts` VALUES (6, 'goravel-guide-3', 'Goravel 入门指南 (三):ORM 数据库操作', 'Go语言', '掌握 Goravel 强大的 ORM 功能,从数据库配置、模型定义到执行增删改查(CRUD)操作。', '## Goravel ORM 简介\n\nGoravel 的 ORM 基于著名的 GORM 库构建,但它进行了一层优雅的封装,使其调用方式更接近 Laravel 的 Eloquent ORM。这意味着你可以使用 Facade 模式轻松调用数据库,且支持自动迁移。\n\n## 配置数据库\n\n打开 `config/database.go` 或 `.env` 文件,配置你的 MySQL 连接信息:\n\n```env\nDB_CONNECTION=mysql\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_DATABASE=goravel\nDB_USERNAME=root\nDB_PASSWORD=password\n```\n\n## 定义模型\n\n使用 `knit` 生成模型:\n\n```bash\nknit make:model Post\n```\n\n生成的模型文件位于 `app/models/post.go`。我们需要定义结构体字段:\n\n```go\npackage models\n\nimport (\n \"github.com/goravel/framework/database/orm\"\n)\n\ntype Post struct {\n orm.Model\n Title string `gorm:\"size:255;not null\"`\n Content string `gorm:\"type:text\"`\n UserID uint\n}\n```\n\n## 数据库迁移\n\n虽然 GORM 支持 AutoMigrate,但 Goravel 推荐使用迁移文件来管理数据库变更。\n\n```bash\nknit make:migration create_posts_table\n```\n\n编辑生成的迁移文件 (`database/migrations/xxxx_create_posts_table.go`),定义表结构,然后运行:\n\n```bash\nknit migrate\n```\n\n## CRUD 操作\n\n有了模型,我们就可以愉快地操作数据库了。所有操作都通过 `facades.Orm()` 入口。\n\n### 创建 (Create)\n\n```go\npost := models.Post{\n Title: \"My First Post\",\n Content: \"Content goes here...\",\n}\nerr := facades.Orm().Query().Create(&post)\n```\n\n### 查询 (Read)\n\n```go\nvar post models.Post\n// 根据主键查询\nfacades.Orm().Query().Find(&post, 1)\n\n// 条件查询\nvar posts []models.Post\nfacades.Orm().Query().Where(\"title\", \"My First Post\").Get(&posts)\n```\n\n### 更新 (Update)\n\n```go\nvar post models.Post\nfacades.Orm().Query().Find(&post, 1)\n\npost.Title = \"Updated Title\"\nfacades.Orm().Query().Save(&post)\n```\n\n### 删除 (Delete)\n\n```go\nvar post models.Post\nfacades.Orm().Query().Delete(&post, 1)\n```\n\nGoravel 的 ORM 让 Go 语言的数据库操作不再繁琐,极大地提高了开发效率。配合之前的路由和控制器知识,你现在已经具备了开发完整 RESTful API 的能力!', 1563, 1, 0, 1768465934, 1768538949); -- ---------------------------- -- Table structure for role_permissions @@ -617,9 +642,9 @@ CREATE TABLE `roles` ( `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色名称', `description` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '角色描述', - `created_at` bigint NOT NULL DEFAULT 0 COMMENT '创建时间', - `updated_at` bigint NOT NULL DEFAULT 0 COMMENT '更新时间', `deleted_at` bigint NOT NULL DEFAULT 0, + `created_at` bigint NOT NULL DEFAULT 0, + `updated_at` bigint NOT NULL DEFAULT 0, PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `name`(`name` ASC) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '角色表' ROW_FORMAT = DYNAMIC; @@ -627,9 +652,9 @@ CREATE TABLE `roles` ( -- ---------------------------- -- Records of roles -- ---------------------------- -INSERT INTO `roles` VALUES (1, 'admin', '系统管理员', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `roles` VALUES (2, 'editor', '内容编辑', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); -INSERT INTO `roles` VALUES (3, 'viewer', '普通访客', '2026-01-15 12:54:52', '2026-01-15 12:54:52'); +INSERT INTO `roles` VALUES (1, 'admin', '系统管理员', 0, 1768452892, 1768538956); +INSERT INTO `roles` VALUES (2, 'editor', '内容编辑', 0, 1768452892, 1768538956); +INSERT INTO `roles` VALUES (3, 'viewer', '普通访客', 0, 1768452892, 1768538956); -- ---------------------------- -- Table structure for settings @@ -640,9 +665,9 @@ CREATE TABLE `settings` ( `key_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '配置项键名', `value` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '配置项值', `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '配置项描述', - `created_at` bigint NOT NULL DEFAULT 0 COMMENT '创建时间', - `updated_at` bigint NOT NULL DEFAULT 0 COMMENT '更新时间', `deleted_at` bigint NOT NULL DEFAULT 0, + `created_at` bigint NOT NULL DEFAULT 0, + `updated_at` bigint NOT NULL DEFAULT 0, PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `key_name`(`key_name` ASC) USING BTREE, INDEX `idx_key_name`(`key_name` ASC) USING BTREE COMMENT '按键名查询索引' @@ -651,13 +676,13 @@ CREATE TABLE `settings` ( -- ---------------------------- -- Records of settings -- ---------------------------- -INSERT INTO `settings` VALUES (1, 'site_title', '年糕博客', '网站标题', '2026-01-13 16:10:14', '2026-01-13 16:10:14'); -INSERT INTO `settings` VALUES (2, 'site_description', '分享前端技术、交互设计以及数字艺术的深度思考', '网站描述', '2026-01-13 16:10:14', '2026-01-13 16:10:14'); -INSERT INTO `settings` VALUES (3, 'site_author', '年糕崽崽', '网站作者', '2026-01-13 16:10:14', '2026-01-13 16:10:14'); -INSERT INTO `settings` VALUES (4, 'site_keywords', '前端, 设计, 技术博客', '网站关键词', '2026-01-13 16:10:14', '2026-01-13 16:10:14'); -INSERT INTO `settings` VALUES (5, 'posts_per_page', '10', '每页显示的文章数量', '2026-01-13 16:10:14', '2026-01-13 16:10:14'); -INSERT INTO `settings` VALUES (6, 'works_per_page', '6', '每页显示的作品数量', '2026-01-13 16:10:14', '2026-01-13 16:10:14'); -INSERT INTO `settings` VALUES (7, 'snippets_per_page', '8', '每页显示的代码片段数量', '2026-01-13 16:10:14', '2026-01-13 16:10:14'); +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); -- ---------------------------- -- Table structure for snippets @@ -670,9 +695,9 @@ CREATE TABLE `snippets` ( `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '代码类型(如:javascript、css、html等)', `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '代码片段描述', `view_count` int UNSIGNED NULL DEFAULT 0 COMMENT '查看次数', - `created_at` bigint NOT NULL DEFAULT 0 COMMENT '创建时间', - `updated_at` bigint NOT NULL DEFAULT 0 COMMENT '更新时间', `deleted_at` bigint NOT NULL DEFAULT 0, + `created_at` bigint NOT NULL DEFAULT 0, + `updated_at` bigint NOT NULL DEFAULT 0, PRIMARY KEY (`id`) USING BTREE, INDEX `idx_type`(`type` ASC) USING BTREE COMMENT '按代码类型查询索引', INDEX `idx_view_count`(`view_count` ASC) USING BTREE COMMENT '按查看次数查询索引' @@ -681,7 +706,7 @@ CREATE TABLE `snippets` ( -- ---------------------------- -- Records of snippets -- ---------------------------- -INSERT INTO `snippets` VALUES ('1', 'React 鼠标追踪 Hook', 'import { useState, useEffect } from \'react\';\r\n\r\nexport const useMousePosition = () => {\r\n const [pos, setPos] = useState({ x: 0, y: 0 });\r\n useEffect(() => {\r\n const update = (e) => setPos({ x: e.clientX, y: e.clientY });\r\n window.addEventListener(\'mousemove\', update);\r\n return () => window.removeEventListener(\'mousemove\', update);\r\n }, []);\r\n return pos;\r\n};', 'mouse', '这是一个鼠标追踪', 1, '2026-01-14 08:32:19', '2026-01-16 11:10:53'); +INSERT INTO `snippets` VALUES ('1', 'React 鼠标追踪 Hook', 'import { useState, useEffect } from \'react\';\r\n\r\nexport const useMousePosition = () => {\r\n const [pos, setPos] = useState({ x: 0, y: 0 });\r\n useEffect(() => {\r\n const update = (e) => setPos({ x: e.clientX, y: e.clientY });\r\n window.addEventListener(\'mousemove\', update);\r\n return () => window.removeEventListener(\'mousemove\', update);\r\n }, []);\r\n return pos;\r\n};', 'mouse', '这是一个鼠标追踪', 1, 0, 1768350739, 1768538952); -- ---------------------------- -- Table structure for tags @@ -691,14 +716,14 @@ CREATE TABLE `tags` ( `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '标签名称', `slug` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '标签别名,用于URL', - `created_at` bigint NOT NULL DEFAULT 0 COMMENT '创建时间', - `updated_at` bigint NOT NULL DEFAULT 0 COMMENT '更新时间', `deleted_at` bigint NOT NULL DEFAULT 0, + `created_at` bigint NOT NULL DEFAULT 0, + `updated_at` bigint NOT NULL DEFAULT 0, PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `name`(`name` ASC) USING BTREE, UNIQUE INDEX `slug`(`slug` ASC) USING BTREE, INDEX `idx_slug`(`slug` ASC) USING BTREE COMMENT '按别名查询索引' -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '标签表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '标签表' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of tags @@ -716,20 +741,21 @@ CREATE TABLE `testimonials` ( `avatar` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '客户头像URL', `rating` tinyint UNSIGNED NULL DEFAULT 5 COMMENT '评分(1-5)', `sort_order` int UNSIGNED NULL DEFAULT 0 COMMENT '排序权重', - `created_at` bigint NOT NULL DEFAULT 0 COMMENT '创建时间', - `updated_at` bigint NOT NULL DEFAULT 0 COMMENT '更新时间', `deleted_at` bigint NOT NULL DEFAULT 0, + `created_at` bigint NOT NULL DEFAULT 0, + `updated_at` bigint NOT NULL DEFAULT 0, PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '客户评价表' ROW_FORMAT = DYNAMIC; +) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '客户评价表' ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of testimonials -- ---------------------------- -INSERT INTO `testimonials` VALUES (1, 'Alex Chen', 'Product Owner @ TechFlow', '年糕不仅技术过硬,对设计细节的把控更是令人惊叹。', 'https://api.dicebear.com/7.x/avataaars/svg?seed=Alex', 5, 0, '2026-01-15 21:16:33', '2026-01-15 21:16:33'); -INSERT INTO `testimonials` VALUES (2, 'Sarah Wu', 'Design Director @ ArtSpace', '很少见到能把代码写得像诗一样的工程师,合作非常愉快!', 'https://api.dicebear.com/7.x/avataaars/svg?seed=Sarah', 5, 0, '2026-01-15 21:16:33', '2026-01-15 21:16:33'); -INSERT INTO `testimonials` VALUES (3, 'Mike Zhang', 'CTO @ FutureWave', '交付质量远超预期,特别是在性能优化方面做得非常出色。', 'https://api.dicebear.com/7.x/avataaars/svg?seed=Mike', 5, 0, '2026-01-15 21:16:33', '2026-01-15 21:16:33'); -INSERT INTO `testimonials` VALUES (4, 'Jessica Li', 'Founder @ ZenMode', '从交互动效到整体架构,都体现了极高的专业水准。', 'https://api.dicebear.com/7.x/avataaars/svg?seed=Jessica', 5, 0, '2026-01-15 21:16:33', '2026-01-15 21:16:33'); -INSERT INTO `testimonials` VALUES (5, 'David Wang', 'Tech Lead @ Innovate', '代码结构清晰,注释完善,后续维护非常轻松。', 'https://api.dicebear.com/7.x/avataaars/svg?seed=David', 5, 0, '2026-01-15 21:16:33', '2026-01-15 21:16:33'); +INSERT INTO `testimonials` VALUES (1, 'Alex Chen', 'Product Owner @ TechFlow', '年糕不仅技术过硬,对设计细节的把控更是令人惊叹。', 'https://api.dicebear.com/7.x/avataaars/svg?seed=Alex', 5, 0, 0, 1768482993, 1768538954); +INSERT INTO `testimonials` VALUES (2, 'Sarah Wu', 'Design Director @ ArtSpace', '很少见到能把代码写得像诗一样的工程师,合作非常愉快!', 'https://api.dicebear.com/7.x/avataaars/svg?seed=Sarah', 5, 0, 0, 1768482993, 1768538954); +INSERT INTO `testimonials` VALUES (3, 'Mike Zhang', 'CTO @ FutureWave', '交付质量远超预期,特别是在性能优化方面做得非常出色。', 'https://api.dicebear.com/7.x/avataaars/svg?seed=Mike', 5, 0, 0, 1768482993, 1768538954); +INSERT INTO `testimonials` VALUES (4, 'Jessica Li', 'Founder @ ZenMode', '从交互动效到整体架构,都体现了极高的专业水准。', 'https://api.dicebear.com/7.x/avataaars/svg?seed=Jessica', 5, 0, 0, 1768482993, 1768538954); +INSERT INTO `testimonials` VALUES (5, 'David Wang', 'Tech Lead @ Innovate', '代码结构清晰,注释完善,后续维护非常轻松。', 'https://api.dicebear.com/7.x/avataaars/svg?seed=David', 5, 0, 0, 1768482993, 1768538954); +INSERT INTO `testimonials` VALUES (6, '', 'CTO', '服务很贴心,技术够硬', 'https://api.dicebear.com/7.x/avataaars/svg?seed=David', 5, 0, 0, 20260116130552, 20260116130552); -- ---------------------------- -- Table structure for user_access_logs @@ -741,25 +767,28 @@ CREATE TABLE `user_access_logs` ( `user_ip` varchar(45) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户IP地址', `user_location` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户归属地', `article_id` int NOT NULL COMMENT '访问的文章ID', - `access_time` bigint NOT NULL DEFAULT 0 COMMENT '访问时间', `deleted_at` bigint NOT NULL DEFAULT 0, + `access_time` bigint NOT NULL DEFAULT 0, PRIMARY KEY (`id`) USING BTREE, INDEX `idx_user_id`(`user_id` ASC) USING BTREE, - INDEX `idx_article_id`(`article_id` ASC) USING BTREE, - INDEX `idx_access_time`(`access_time` ASC) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '用户访问记录表' ROW_FORMAT = Dynamic; + INDEX `idx_article_id`(`article_id` ASC) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 13 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', 'Unknown', 5, '2026-01-16 10:11:55'); -INSERT INTO `user_access_logs` VALUES (2, 0, '::1', 'Unknown', 4, '2026-01-16 10:13:10'); -INSERT INTO `user_access_logs` VALUES (3, 0, '::1', 'Unknown', 5, '2026-01-16 10:13:24'); -INSERT INTO `user_access_logs` VALUES (4, 0, '::1', 'Unknown', 4, '2026-01-16 10:13:34'); -INSERT INTO `user_access_logs` VALUES (5, 0, '::1', 'Unknown', 5, '2026-01-16 10:13:35'); -INSERT INTO `user_access_logs` VALUES (6, 0, '::1', 'Unknown', 4, '2026-01-16 11:08:41'); -INSERT INTO `user_access_logs` VALUES (7, 0, '::1', 'Unknown', 5, '2026-01-16 11:12:49'); -INSERT INTO `user_access_logs` VALUES (8, 0, '::1', 'Unknown', 6, '2026-01-16 11:14:59'); +INSERT INTO `user_access_logs` VALUES (1, 0, '::1', 'Unknown', 5, 0, 1768529515); +INSERT INTO `user_access_logs` VALUES (2, 0, '::1', 'Unknown', 4, 0, 1768529590); +INSERT INTO `user_access_logs` VALUES (3, 0, '::1', 'Unknown', 5, 0, 1768529604); +INSERT INTO `user_access_logs` VALUES (4, 0, '::1', 'Unknown', 4, 0, 1768529614); +INSERT INTO `user_access_logs` VALUES (5, 0, '::1', 'Unknown', 5, 0, 1768529615); +INSERT INTO `user_access_logs` VALUES (6, 0, '::1', 'Unknown', 4, 0, 1768532921); +INSERT INTO `user_access_logs` VALUES (7, 0, '::1', 'Unknown', 5, 0, 1768533169); +INSERT INTO `user_access_logs` VALUES (8, 0, '::1', 'Unknown', 6, 0, 1768533299); +INSERT INTO `user_access_logs` VALUES (9, 0, '::1', 'Unknown', 1, 0, 1768538210); +INSERT INTO `user_access_logs` VALUES (10, 0, '::1', 'Unknown', 6, 0, 20260116125547); +INSERT INTO `user_access_logs` VALUES (11, 0, '::1', 'Unknown', 5, 0, 20260116125614); +INSERT INTO `user_access_logs` VALUES (12, 0, '::1', 'Unknown', 6, 0, 20260116130641); -- ---------------------------- -- Table structure for users @@ -773,9 +802,9 @@ CREATE TABLE `users` ( `role_id` bigint UNSIGNED NULL DEFAULT NULL COMMENT '角色ID', `role` enum('admin','editor','viewer') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT 'viewer' COMMENT '用户角色(兼容旧版)', `is_active` tinyint(1) NULL DEFAULT 1 COMMENT '是否激活(0:禁用,1:激活)', - `created_at` bigint NOT NULL DEFAULT 0 COMMENT '创建时间', - `updated_at` bigint NOT NULL DEFAULT 0 COMMENT '更新时间', `deleted_at` bigint NOT NULL DEFAULT 0, + `created_at` bigint NOT NULL DEFAULT 0, + `updated_at` bigint NOT NULL DEFAULT 0, PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `username`(`username` ASC) USING BTREE, UNIQUE INDEX `email`(`email` ASC) USING BTREE, @@ -789,9 +818,9 @@ CREATE TABLE `users` ( -- ---------------------------- -- Records of users -- ---------------------------- -INSERT INTO `users` VALUES (1, 'lq', 'liqiworker@gmail.com', '$2a$10$yl.1yCZ2PSTsW14byyDQ3uekuEiqnC4VBr/TzR6OvMqFVRuiiHu5e', 1, 'admin', 1, '2026-01-13 16:10:14', '2026-01-15 13:22:46'); -INSERT INTO `users` VALUES (2, 'editor', 'editor@example.com', '$2a$10$yl.1yCZ2PSTsW14byyDQ3uekuEiqnC4VBr/TzR6OvMqFVRuiiHu5e', 2, 'editor', 1, '2026-01-13 16:10:14', '2026-01-16 11:14:14'); -INSERT INTO `users` VALUES (5, 'cs', 'cs@nailaoyun.cn', '$2a$10$yl.1yCZ2PSTsW14byyDQ3uekuEiqnC4VBr/TzR6OvMqFVRuiiHu5e', 3, 'viewer', 1, '2026-01-15 15:28:35', '2026-01-16 11:14:17'); +INSERT INTO `users` VALUES (1, 'lq', 'liqiworker@gmail.com', '$2a$10$yl.1yCZ2PSTsW14byyDQ3uekuEiqnC4VBr/TzR6OvMqFVRuiiHu5e', 1, 'admin', 1, 0, 1768291814, 1768538951); +INSERT INTO `users` VALUES (2, 'editor', 'editor@example.com', '$2a$10$yl.1yCZ2PSTsW14byyDQ3uekuEiqnC4VBr/TzR6OvMqFVRuiiHu5e', 2, 'editor', 1, 0, 1768291814, 1768538951); +INSERT INTO `users` VALUES (5, 'cs', 'cs@nailaoyun.cn', '$2a$10$yl.1yCZ2PSTsW14byyDQ3uekuEiqnC4VBr/TzR6OvMqFVRuiiHu5e', 3, 'viewer', 1, 0, 1768462115, 1768538951); -- ---------------------------- -- Table structure for work_gallery @@ -803,7 +832,8 @@ CREATE TABLE `work_gallery` ( `image_url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '图片URL', `sort_order` int UNSIGNED NULL DEFAULT 0 COMMENT '排序顺序,数值越小越靠前', `description` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '图片描述', - `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `deleted_at` bigint NOT NULL DEFAULT 0, + `created_at` bigint NOT NULL DEFAULT 0, PRIMARY KEY (`id`) USING BTREE, INDEX `idx_work_id`(`work_id` ASC) USING BTREE, INDEX `idx_sort_order`(`sort_order` ASC) USING BTREE, @@ -813,10 +843,10 @@ CREATE TABLE `work_gallery` ( -- ---------------------------- -- Records of work_gallery -- ---------------------------- -INSERT INTO `work_gallery` VALUES (1, 'nova', 'https://images.unsplash.com/photo-1642543492481-44e81e3914a7?q=80&w=2070', 1, 'Nova 交易平台首页', '2026-01-13 16:12:17'); -INSERT INTO `work_gallery` VALUES (2, 'nova', 'https://images.unsplash.com/photo-1551288049-bebda4e38f71?q=80&w=2070', 2, 'Nova 交易平台交易界面', '2026-01-13 16:12:17'); -INSERT INTO `work_gallery` VALUES (3, 'archdaily', 'https://images.unsplash.com/photo-1503387762-592deb58ef4e?q=80&w=2089', 1, 'ArchDaily 网站首页', '2026-01-13 16:12:17'); -INSERT INTO `work_gallery` VALUES (4, 'archdaily', 'https://images.unsplash.com/photo-1518005020951-ecc859466abc?q=80&w=1920', 2, 'ArchDaily 文章详情页', '2026-01-13 16:12:17'); +INSERT INTO `work_gallery` VALUES (1, 'nova', 'https://images.unsplash.com/photo-1642543492481-44e81e3914a7?q=80&w=2070', 1, 'Nova 交易平台首页', 0, 1768291937); +INSERT INTO `work_gallery` VALUES (2, 'nova', 'https://images.unsplash.com/photo-1551288049-bebda4e38f71?q=80&w=2070', 2, 'Nova 交易平台交易界面', 0, 1768291937); +INSERT INTO `work_gallery` VALUES (3, 'archdaily', 'https://images.unsplash.com/photo-1503387762-592deb58ef4e?q=80&w=2089', 1, 'ArchDaily 网站首页', 0, 1768291937); +INSERT INTO `work_gallery` VALUES (4, 'archdaily', 'https://images.unsplash.com/photo-1518005020951-ecc859466abc?q=80&w=1920', 2, 'ArchDaily 文章详情页', 0, 1768291937); -- ---------------------------- -- Table structure for work_tech_stack @@ -827,7 +857,8 @@ CREATE TABLE `work_tech_stack` ( `work_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '关联的作品ID', `category` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '技术分类(如:前端、后端、数据库等)', `item` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '具体技术项(如:Vue 3、Golang、MySQL等)', - `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `deleted_at` bigint NOT NULL DEFAULT 0, + `created_at` bigint NOT NULL DEFAULT 0, PRIMARY KEY (`id`) USING BTREE, INDEX `idx_work_id`(`work_id` ASC) USING BTREE, INDEX `idx_category`(`category` ASC) USING BTREE, @@ -837,15 +868,15 @@ CREATE TABLE `work_tech_stack` ( -- ---------------------------- -- Records of work_tech_stack -- ---------------------------- -INSERT INTO `work_tech_stack` VALUES (1, 'nova', '前端层', 'React 18', '2026-01-13 16:12:17'); -INSERT INTO `work_tech_stack` VALUES (2, 'nova', '前端层', 'TypeScript', '2026-01-13 16:12:17'); -INSERT INTO `work_tech_stack` VALUES (3, 'nova', '前端层', 'D3.js', '2026-01-13 16:12:17'); -INSERT INTO `work_tech_stack` VALUES (4, 'nova', '后端服务', 'Golang', '2026-01-13 16:12:17'); -INSERT INTO `work_tech_stack` VALUES (5, 'nova', '后端服务', 'gRPC', '2026-01-13 16:12:17'); -INSERT INTO `work_tech_stack` VALUES (6, 'archdaily', '核心前端', 'Vue 3', '2026-01-13 16:12:17'); -INSERT INTO `work_tech_stack` VALUES (7, 'archdaily', '核心前端', 'Nuxt.js', '2026-01-13 16:12:17'); -INSERT INTO `work_tech_stack` VALUES (8, 'archdaily', '核心前端', 'GSAP', '2026-01-13 16:12:17'); -INSERT INTO `work_tech_stack` VALUES (9, 'archdaily', 'CMS', 'Strapi', '2026-01-13 16:12:17'); +INSERT INTO `work_tech_stack` VALUES (1, 'nova', '前端层', 'React 18', 0, 1768291937); +INSERT INTO `work_tech_stack` VALUES (2, 'nova', '前端层', 'TypeScript', 0, 1768291937); +INSERT INTO `work_tech_stack` VALUES (3, 'nova', '前端层', 'D3.js', 0, 1768291937); +INSERT INTO `work_tech_stack` VALUES (4, 'nova', '后端服务', 'Golang', 0, 1768291937); +INSERT INTO `work_tech_stack` VALUES (5, 'nova', '后端服务', 'gRPC', 0, 1768291937); +INSERT INTO `work_tech_stack` VALUES (6, 'archdaily', '核心前端', 'Vue 3', 0, 1768291937); +INSERT INTO `work_tech_stack` VALUES (7, 'archdaily', '核心前端', 'Nuxt.js', 0, 1768291937); +INSERT INTO `work_tech_stack` VALUES (8, 'archdaily', '核心前端', 'GSAP', 0, 1768291937); +INSERT INTO `work_tech_stack` VALUES (9, 'archdaily', 'CMS', 'Strapi', 0, 1768291937); -- ---------------------------- -- Table structure for works @@ -859,9 +890,9 @@ CREATE TABLE `works` ( `hero_img` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '作品主图URL', `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '作品详细描述', `is_featured` tinyint(1) NULL DEFAULT 0 COMMENT '是否为精选作品(0:否,1:是)', - `created_at` bigint NOT NULL DEFAULT 0 COMMENT '创建时间', - `updated_at` bigint NOT NULL DEFAULT 0 COMMENT '更新时间', `deleted_at` bigint NOT NULL DEFAULT 0, + `created_at` bigint NOT NULL DEFAULT 0, + `updated_at` bigint NOT NULL DEFAULT 0, PRIMARY KEY (`id`) USING BTREE, INDEX `idx_category`(`category` ASC) USING BTREE COMMENT '按分类查询索引', INDEX `idx_year`(`year` ASC) USING BTREE COMMENT '按年份查询索引', @@ -871,7 +902,7 @@ CREATE TABLE `works` ( -- ---------------------------- -- Records of works -- ---------------------------- -INSERT INTO `works` VALUES ('archdaily', 'ArchDaily 网站重构', '建筑设计', '2022', 'https://images.unsplash.com/photo-1487958449943-2429e8be8625?q=80&w=2070', 'ArchDaily 是全球最受欢迎的建筑网站之一。这次重构的目标是提升移动端体验。我们使用了 Nuxt 3 进行服务端渲染(SSR)。', 1, '2026-01-13 16:10:14', '2026-01-13 16:10:14'); -INSERT INTO `works` VALUES ('nova', 'Nova 交易平台', '金融科技', '2023', 'https://images.unsplash.com/photo-1487958449943-2429e8be8625?q=80&w=2070', 'Nova 是一个专为机构交易员设计的高频交易终端。我们面临的最大挑战是如何在处理毫秒级市场数据的同时,保持界面的流畅响应。我们采用 Web Worker 来处理繁重的数据计算,避免阻塞主线程。', 1, '2026-01-13 16:10:14', '2026-01-15 15:04:52'); +INSERT INTO `works` VALUES ('archdaily', 'ArchDaily 网站重构', '建筑设计', '2022', 'https://images.unsplash.com/photo-1487958449943-2429e8be8625?q=80&w=2070', 'ArchDaily 是全球最受欢迎的建筑网站之一。这次重构的目标是提升移动端体验。我们使用了 Nuxt 3 进行服务端渲染(SSR)。', 1, 0, 1768291814, 1768538952); +INSERT INTO `works` VALUES ('nova', 'Nova 交易平台', '金融科技', '2023', 'https://images.unsplash.com/photo-1487958449943-2429e8be8625?q=80&w=2070', 'Nova 是一个专为机构交易员设计的高频交易终端。我们面临的最大挑战是如何在处理毫秒级市场数据的同时,保持界面的流畅响应。我们采用 Web Worker 来处理繁重的数据计算,避免阻塞主线程。', 1, 0, 1768291814, 1768538952); SET FOREIGN_KEY_CHECKS = 1;