Browse Source

chat_producer

rkljw 8 months ago
parent
commit
d3261fb5eb
100 changed files with 430 additions and 6201 deletions
  1. 17 0
      .env
  2. 25 3
      README.en.md
  3. 6 0
      app/JsonRpc/ChatServiceInterface.php
  4. 2 1
      app/Model/Contact.php
  5. 1 1
      runtime/hyperf.pid
  6. 379 0
      runtime/logs/hyperf.log
  7. 0 1
      vendor/96qbhy/hyperf-auth/.gitattributes
  8. 0 9
      vendor/96qbhy/hyperf-auth/.gitignore
  9. 0 87
      vendor/96qbhy/hyperf-auth/.php_cs
  10. 0 6
      vendor/96qbhy/hyperf-auth/.phpstorm.meta.php
  11. 0 40
      vendor/96qbhy/hyperf-auth/.travis.yml
  12. 0 21
      vendor/96qbhy/hyperf-auth/LICENSE
  13. 0 292
      vendor/96qbhy/hyperf-auth/README.md
  14. 0 84
      vendor/96qbhy/hyperf-auth/composer.json
  15. 0 15
      vendor/96qbhy/hyperf-auth/phpunit.xml
  16. 0 183
      vendor/96qbhy/hyperf-auth/publish/auth.php
  17. 0 23
      vendor/96qbhy/hyperf-auth/src/Annotation/Auth.php
  18. 0 31
      vendor/96qbhy/hyperf-auth/src/AuthAbility.php
  19. 0 50
      vendor/96qbhy/hyperf-auth/src/AuthAspect.php
  20. 0 42
      vendor/96qbhy/hyperf-auth/src/AuthCommand.php
  21. 0 32
      vendor/96qbhy/hyperf-auth/src/AuthExceptionHandler.php
  22. 0 31
      vendor/96qbhy/hyperf-auth/src/AuthGuard.php
  23. 0 114
      vendor/96qbhy/hyperf-auth/src/AuthManager.php
  24. 0 43
      vendor/96qbhy/hyperf-auth/src/AuthMiddleware.php
  25. 0 19
      vendor/96qbhy/hyperf-auth/src/Authenticatable.php
  26. 0 44
      vendor/96qbhy/hyperf-auth/src/ConfigProvider.php
  27. 0 40
      vendor/96qbhy/hyperf-auth/src/Events/ForcedOfflineEvent.php
  28. 0 16
      vendor/96qbhy/hyperf-auth/src/Exception/AuthException.php
  29. 0 16
      vendor/96qbhy/hyperf-auth/src/Exception/GuardException.php
  30. 0 39
      vendor/96qbhy/hyperf-auth/src/Exception/UnauthorizedException.php
  31. 0 16
      vendor/96qbhy/hyperf-auth/src/Exception/UserProviderException.php
  32. 0 60
      vendor/96qbhy/hyperf-auth/src/Guard/AbstractAuthGuard.php
  33. 0 207
      vendor/96qbhy/hyperf-auth/src/Guard/JwtGuard.php
  34. 0 100
      vendor/96qbhy/hyperf-auth/src/Guard/SessionGuard.php
  35. 0 79
      vendor/96qbhy/hyperf-auth/src/Guard/SsoGuard.php
  36. 0 184
      vendor/96qbhy/hyperf-auth/src/HyperfRedisCache.php
  37. 0 30
      vendor/96qbhy/hyperf-auth/src/Provider/AbstractUserProvider.php
  38. 0 27
      vendor/96qbhy/hyperf-auth/src/Provider/EloquentProvider.php
  39. 0 29
      vendor/96qbhy/hyperf-auth/src/UserProvider.php
  40. 0 56
      vendor/96qbhy/hyperf-auth/src/helper.php
  41. 0 6
      vendor/96qbhy/simple-jwt/.gitignore
  42. 0 89
      vendor/96qbhy/simple-jwt/.php_cs
  43. 0 21
      vendor/96qbhy/simple-jwt/LICENSE
  44. 0 78
      vendor/96qbhy/simple-jwt/README.md
  45. 0 57
      vendor/96qbhy/simple-jwt/composer.json
  46. 0 18
      vendor/96qbhy/simple-jwt/phpunit.xml
  47. 0 50
      vendor/96qbhy/simple-jwt/src/AbstractEncrypter.php
  48. 0 27
      vendor/96qbhy/simple-jwt/src/Encoders/Base64Encoder.php
  49. 0 27
      vendor/96qbhy/simple-jwt/src/Encoders/Base64UrlSafeEncoder.php
  50. 0 27
      vendor/96qbhy/simple-jwt/src/EncryptAdapters/CryptEncrypter.php
  51. 0 44
      vendor/96qbhy/simple-jwt/src/EncryptAdapters/HS256Encrypter.php
  52. 0 27
      vendor/96qbhy/simple-jwt/src/EncryptAdapters/Md5Encrypter.php
  53. 0 32
      vendor/96qbhy/simple-jwt/src/EncryptAdapters/PasswordHashEncrypter.php
  54. 0 27
      vendor/96qbhy/simple-jwt/src/EncryptAdapters/SHA1Encrypter.php
  55. 0 16
      vendor/96qbhy/simple-jwt/src/Exceptions/InvalidTokenException.php
  56. 0 36
      vendor/96qbhy/simple-jwt/src/Exceptions/JWTException.php
  57. 0 16
      vendor/96qbhy/simple-jwt/src/Exceptions/SignatureException.php
  58. 0 16
      vendor/96qbhy/simple-jwt/src/Exceptions/TokenBlacklistException.php
  59. 0 16
      vendor/96qbhy/simple-jwt/src/Exceptions/TokenExpiredException.php
  60. 0 16
      vendor/96qbhy/simple-jwt/src/Exceptions/TokenNotActiveException.php
  61. 0 16
      vendor/96qbhy/simple-jwt/src/Exceptions/TokenProviderException.php
  62. 0 16
      vendor/96qbhy/simple-jwt/src/Exceptions/TokenRefreshExpiredException.php
  63. 0 61
      vendor/96qbhy/simple-jwt/src/Hyperf/ConfigProvider.php
  64. 0 19
      vendor/96qbhy/simple-jwt/src/Interfaces/Encoder.php
  65. 0 21
      vendor/96qbhy/simple-jwt/src/Interfaces/Encrypter.php
  66. 0 21
      vendor/96qbhy/simple-jwt/src/Interfaces/TokenProviderInterface.php
  67. 0 17
      vendor/96qbhy/simple-jwt/src/Interfaces/Tokenable.php
  68. 0 72
      vendor/96qbhy/simple-jwt/src/JWT.php
  69. 0 299
      vendor/96qbhy/simple-jwt/src/JWTManager.php
  70. 0 50
      vendor/96qbhy/simple-jwt/src/Laravel/ServiceProvider.php
  71. 0 92
      vendor/96qbhy/simple-jwt/src/Laravel/TokenProviderAble.php
  72. 0 70
      vendor/96qbhy/simple-jwt/src/Laravel/config/simple-jwt.php
  73. 0 20
      vendor/96qbhy/simple-jwt/tests/TestCase.php
  74. 0 144
      vendor/96qbhy/simple-jwt/tests/Unit/JwtTest.php
  75. 0 25
      vendor/autoload.php
  76. 0 119
      vendor/bin/carbon
  77. 0 119
      vendor/bin/co-phpunit
  78. 0 119
      vendor/bin/php-cs-fixer
  79. 0 119
      vendor/bin/php-parse
  80. 0 119
      vendor/bin/phpstan
  81. 0 119
      vendor/bin/phpstan.phar
  82. 0 122
      vendor/bin/phpunit
  83. 0 21
      vendor/carbonphp/carbon-doctrine-types/LICENSE
  84. 0 14
      vendor/carbonphp/carbon-doctrine-types/README.md
  85. 0 36
      vendor/carbonphp/carbon-doctrine-types/composer.json
  86. 0 16
      vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/CarbonDoctrineType.php
  87. 0 9
      vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/CarbonImmutableType.php
  88. 0 9
      vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/CarbonType.php
  89. 0 131
      vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/CarbonTypeConverter.php
  90. 0 30
      vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/DateTimeDefaultPrecision.php
  91. 0 32
      vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/DateTimeImmutableType.php
  92. 0 24
      vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/DateTimeType.php
  93. 0 2
      vendor/clue/ndjson-react/.github/FUNDING.yml
  94. 0 75
      vendor/clue/ndjson-react/CHANGELOG.md
  95. 0 21
      vendor/clue/ndjson-react/LICENSE
  96. 0 365
      vendor/clue/ndjson-react/README.md
  97. 0 31
      vendor/clue/ndjson-react/composer.json
  98. 0 166
      vendor/clue/ndjson-react/src/Decoder.php
  99. 0 144
      vendor/clue/ndjson-react/src/Encoder.php
  100. 0 579
      vendor/composer/ClassLoader.php

+ 17 - 0
.env

@@ -0,0 +1,17 @@
+APP_NAME=public_producer
+APP_ENV=dev
+
+DB_DRIVER=mysql
+DB_HOST=192.168.1.193
+DB_PORT=2333
+DB_DATABASE=hyperf
+DB_USERNAME=root
+DB_PASSWORD=root123
+DB_CHARSET=utf8mb4
+DB_COLLATION=utf8mb4_unicode_ci
+DB_PREFIX=
+
+REDIS_HOST=192.168.1.193
+REDIS_AUTH=123456
+REDIS_PORT=6379
+REDIS_DB=0

+ 25 - 3
README.en.md

@@ -285,7 +285,9 @@ class ChatService implements ChatServiceInterface
                 'talk_session.last_content',
                 'user.user_name',
                 'talk_session.id as session_id',
-                'talk_session.talk_type'
+                'talk_session.talk_type',
+                'user.id as user_id',
+                'talk_group.id as group_id'
             )
             ->limit($data['pageSize'])->offset(($data['page']-1)*$data['pageSize'])->orderBy("talk_session.updated_at","desc")->get();
         $count =   TalkSessionAssociation::where($where)
@@ -383,7 +385,7 @@ class ChatService implements ChatServiceInterface
     public function addTalkRecords(array $data): array
     {
         Db::beginTransaction();
-        try{
+        try{;
             //添加会话内容
             $talkRecordsData = [
                 'id'=>PublicData::uuid(),
@@ -392,7 +394,9 @@ class ChatService implements ChatServiceInterface
                 'session_id'=>$data['session_id']??'',
                 'talk_type'=>$data['talk_type']??0,
                 'content'=>$data['content']??'',
+                'receiver_id'=>$data['receiver_id']??''
             ];
+
             TalkRecords::insert($talkRecordsData);
             $fileData = [
                 'id'=>PublicData::uuid(),
@@ -406,6 +410,7 @@ class ChatService implements ChatServiceInterface
                 'size'=>$data['size']??0,
                 'path'=>$data['path']??'',
             ];
+            var_dump($fileData);
             TalkRecordsFile::insert($fileData);
             Db::commit();
         } catch(\Throwable $ex){
@@ -627,7 +632,24 @@ class ChatService implements ChatServiceInterface
      */
     public function getTalkGroupMember(array $data): array
     {
-        $result = TalkGroupMember::get();
+        $where = [
+            'group_id'=>$data['group_id']
+        ];
+        $result = TalkGroupMember::where($where)->get();
+        return Result::success($result);
+    }
+
+    /**
+     * 群组 - 全部群用户列表
+     * @param array $data
+     * @return array
+     */
+    public function getAllTalkGroupMember(array $data): array
+    {
+        $where = [
+            'group_id'=>$data['group_id']
+        ];
+        $result = TalkGroupMember::where($where)->get();
         return Result::success($result);
     }
     /**

+ 6 - 0
app/JsonRpc/ChatServiceInterface.php

@@ -189,6 +189,12 @@ interface ChatServiceInterface
      * @return array
      */
     public function getTalkGroupMember(array $data): array;
+    /**
+     * 群组 - 全部群用户列表
+     * @param array $data
+     * @return array
+     */
+    public function getAllTalkGroupMember(array $data): array;
     /**
      * 群组 - 创建群用户
      * @param array $data

+ 2 - 1
app/Model/Contact.php

@@ -44,9 +44,10 @@ class PublicData
 
     public static function uuid()
     {
+        var_dump("uuid==========");
         $container = ApplicationContext::getContainer();
         $generator = $container->get(IdGeneratorInterface::class);
-
+        var_dump("uuid==+++++++++++");
         return $generator->generate();
     }
 

+ 1 - 1
runtime/hyperf.pid

@@ -1 +1 @@
-7014
+342

+ 379 - 0
runtime/logs/hyperf.log

@@ -441,3 +441,382 @@
 [2024-07-25 02:33:04] sql.INFO: [9.9] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('674925523318611968', '1', '32', '672001943631089665', '1', '对对对') [] []
 [2024-07-25 02:33:53] sql.INFO: [15.56] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('674925726524256257', '1', '32', '672001943631089665', '1', '111') [] []
 [2024-07-25 02:33:53] sql.INFO: [30.96] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('674925727958708224', '674925726524256257', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-26 09:11:25] sql.INFO: [135.83] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-26 09:11:25] sql.INFO: [5.32] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-26 09:16:13] sql.INFO: [9] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-26 09:16:13] sql.INFO: [18.77] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-26 09:22:44] sql.INFO: [158.46] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-26 09:22:44] sql.INFO: [4.79] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-26 09:41:51] sql.INFO: [93.7] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-26 09:41:51] sql.INFO: [112.84] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-26 09:45:49] sql.INFO: [343.17] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('675396815419359232', '1', '32', '672001943631089665', '1', 'd') [] []
+[2024-07-26 09:45:49] sql.INFO: [24.48] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('675396817076109312', '675396815419359232', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-26 10:00:22] sql.INFO: [36.77] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-26 10:00:22] sql.INFO: [28.77] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-26 10:00:28] sql.INFO: [4.85] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('675400504724963329', '1', '32', '672001943631089665', '1', 'ddd') [] []
+[2024-07-26 10:00:28] sql.INFO: [4.31] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('675400504771100672', '675400504724963329', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-26 10:01:00] sql.INFO: [17.14] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-26 10:01:00] sql.INFO: [8.71] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-26 10:01:06] sql.INFO: [5.83] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('675400662267215873', '1', '32', '672001943631089665', '1', 'd') [] []
+[2024-07-26 10:01:06] sql.INFO: [11.87] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('675400662304964608', '675400662267215873', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 00:34:50] sql.INFO: [1088.44] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 00:34:51] sql.INFO: [16.87] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 00:35:02] sql.INFO: [337.77] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676345371579924480', '1', '32', '672001943631089665', '1', 'sss') [] []
+[2024-07-29 00:35:03] sql.INFO: [112.84] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676345373148594176', '676345371579924480', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 00:44:51] sql.INFO: [825.13] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 00:44:52] sql.INFO: [6.56] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 00:47:03] sql.INFO: [81.79] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 00:47:03] sql.INFO: [4.3] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 00:48:14] sql.INFO: [102.62] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 00:48:14] sql.INFO: [5.79] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 00:52:56] sql.INFO: [36.97] select * from `contact_apply` where (`friend_id` = '32') [] []
+[2024-07-29 00:53:25] sql.INFO: [3.73] select * from `contact_apply` where (`friend_id` = '32') [] []
+[2024-07-29 00:53:48] sql.INFO: [11.77] update `contact` set `status` = '2', `contact`.`updated_at` = '2024-07-29 00:53:48' where (`user_id` = '32' and `friend_id` = '65') [] []
+[2024-07-29 00:54:17] sql.INFO: [3.29] update `contact` set `status` = '2', `contact`.`updated_at` = '2024-07-29 00:54:17' where (`user_id` = '32' and `friend_id` = '32') [] []
+[2024-07-29 00:56:41] sql.INFO: [8.84] insert into `contact` (`user_id`, `friend_id`) values ('32', '65') [] []
+[2024-07-29 00:56:41] sql.INFO: [7.68] insert into `contact` (`user_id`, `friend_id`) values ('65', '32') [] []
+[2024-07-29 00:56:41] sql.INFO: [12.95] delete from `contact_apply` where (`friend_id` = '32' and `user_id` = '65') [] []
+[2024-07-29 00:56:41] sql.INFO: [16.68] insert into `talk_session` (`id`, `talk_type`) values ('676350818319876096', '1') [] []
+[2024-07-29 00:56:41] sql.INFO: [15.02] insert into `talk_session_association` (`id`, `session_id`, `to_user_id`, `user_id`) values ('676350818458288128', '676350818319876096', '65', '32'), ('676350818462482432', '676350818319876096', '32', '65') [] []
+[2024-07-29 00:57:11] sql.INFO: [82.14] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 00:57:11] sql.INFO: [9.32] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 01:00:05] sql.INFO: [139.48] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 01:00:05] sql.INFO: [24.6] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 01:01:57] sql.INFO: [135.72] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 01:01:57] sql.INFO: [58.02] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 01:03:42] sql.INFO: [459.97] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 01:03:42] sql.INFO: [10.34] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 01:06:25] sql.INFO: [107.31] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 01:06:25] sql.INFO: [12.13] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 01:09:18] sql.INFO: [79.88] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 01:09:18] sql.INFO: [218.94] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 01:09:22] sql.INFO: [27.42] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 01:09:22] sql.INFO: [19.56] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 01:10:00] sql.INFO: [20.73] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676354173280731137', '1', '32', '672001943631089665', '1', '11') [] []
+[2024-07-29 01:10:01] sql.INFO: [34.67] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676354173377200128', '676354173280731137', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 01:11:48] sql.INFO: [61.12] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 01:11:48] sql.INFO: [11.74] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 01:11:51] sql.INFO: [21] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 01:11:51] sql.INFO: [7.15] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 01:12:07] sql.INFO: [17.2] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676354702203437057', '1', '32', '676350818319876096', '1', '111') [] []
+[2024-07-29 01:12:07] sql.INFO: [2.34] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676354702287323136', '676354702203437057', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 01:12:25] sql.INFO: [5.15] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676354778061619201', '1', '65', '676350818319876096', '1', '111') [] []
+[2024-07-29 01:12:25] sql.INFO: [11.23] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676354778141310976', '676354778061619201', '65', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 01:20:38] sql.INFO: [109.38] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 01:20:39] sql.INFO: [85.8] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 01:21:22] sql.INFO: [15.5] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 01:21:22] sql.INFO: [4.09] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 01:25:12] sql.INFO: [20.03] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 01:25:12] sql.INFO: [6.1] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 01:28:43] sql.INFO: [194.83] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 01:28:43] sql.INFO: [9.25] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 01:29:10] sql.INFO: [10.28] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 01:29:10] sql.INFO: [76.3] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 01:35:00] sql.INFO: [60.63] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 01:35:01] sql.INFO: [8.13] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 01:38:12] sql.INFO: [13.66] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676361269451706368', '1', '32', '676350818319876096', '1', '111') [] []
+[2024-07-29 01:38:12] sql.INFO: [14.42] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676361269548175360', '676361269451706368', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 01:40:40] sql.INFO: [208.21] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 01:40:40] sql.INFO: [134.06] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 01:42:04] sql.INFO: [80.11] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 01:42:04] sql.INFO: [20.93] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 01:42:04] sql.INFO: [157.24] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 01:42:04] sql.INFO: [9.52] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 01:44:10] sql.INFO: [37.97] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 01:44:10] sql.INFO: [4.31] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 01:44:10] sql.INFO: [2.41] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 01:44:10] sql.INFO: [2.25] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 02:14:44] sql.INFO: [92.24] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 02:14:44] sql.INFO: [11.98] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 02:40:56] sql.INFO: [161.83] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 02:40:56] sql.INFO: [19.01] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 02:41:03] sql.INFO: [126.99] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 02:41:04] sql.INFO: [27.72] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 02:41:20] sql.INFO: [66.11] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676377154132402176', '1', '32', '676350818319876096', '1', '1111111111111111') [] []
+[2024-07-29 02:41:20] sql.INFO: [20.71] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676377154446974976', '676377154132402176', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 02:43:14] sql.INFO: [131.34] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 02:43:14] sql.INFO: [4.24] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 02:43:24] sql.INFO: [17.69] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 02:43:24] sql.INFO: [58.57] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 02:43:37] sql.INFO: [21.66] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676377729205035009', '1', '32', '676350818319876096', '1', '11') [] []
+[2024-07-29 02:43:37] sql.INFO: [15.6] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676377729301504000', '676377729205035009', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 02:46:43] sql.INFO: [151.29] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 02:46:43] sql.INFO: [5.65] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 02:46:44] sql.INFO: [12.44] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 02:46:44] sql.INFO: [2.1] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 02:47:16] sql.INFO: [30.54] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676378647065550849', '1', '32', '676350818319876096', '1', '1111') [] []
+[2024-07-29 02:47:16] sql.INFO: [27.07] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676378647224934400', '676378647065550849', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 05:30:24] sql.INFO: [136.3] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 05:30:24] sql.INFO: [5.41] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 05:31:23] sql.INFO: [555.1] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 05:31:23] sql.INFO: [2.38] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 05:31:36] sql.INFO: [4.12] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676420003959959553', '1', '32', '676350818319876096', '1', '1111') [] []
+[2024-07-29 05:31:36] sql.INFO: [5] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676420004048039936', '676420003959959553', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 05:37:55] sql.INFO: [45.57] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 05:37:55] sql.INFO: [14.77] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 05:38:02] sql.INFO: [7.09] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676421623682723840', '1', '32', '676350818319876096', '1', '111') [] []
+[2024-07-29 05:38:02] sql.INFO: [10.72] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676421623720472576', '676421623682723840', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 05:40:01] sql.INFO: [160.32] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 05:40:01] sql.INFO: [12.83] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 05:40:08] sql.INFO: [167.69] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676422149921075200', '1', '32', '676350818319876096', '1', '1') [] []
+[2024-07-29 05:40:08] sql.INFO: [29.13] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676422150642495488', '676422149921075200', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 05:41:42] sql.INFO: [7.03] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676422545473302528', '1', '32', '676350818319876096', '1', '发发发') [] []
+[2024-07-29 05:41:42] sql.INFO: [7.55] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676422545506856960', '676422545473302528', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 05:42:15] sql.INFO: [92.96] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 05:42:15] sql.INFO: [6.82] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 05:42:16] sql.INFO: [38.35] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 05:42:16] sql.INFO: [3.51] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 05:42:23] sql.INFO: [15.34] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676422717368463360', '1', '32', '676350818319876096', '1', '对对对') [] []
+[2024-07-29 05:42:23] sql.INFO: [10.51] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676422717443960832', '676422717368463360', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 05:42:27] sql.INFO: [6.71] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676422736393826304', '1', '32', '676350818319876096', '1', '顶顶顶顶') [] []
+[2024-07-29 05:42:27] sql.INFO: [6.66] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676422736427380736', '676422736393826304', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 05:45:46] sql.INFO: [29.94] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 05:45:46] sql.INFO: [9.97] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 05:45:53] sql.INFO: [4.72] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676423601292865536', '1', '32', '676350818319876096', '1', '111') [] []
+[2024-07-29 05:45:53] sql.INFO: [9.56] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676423601322225664', '676423601292865536', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 05:49:47] sql.INFO: [177.19] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 05:49:47] sql.INFO: [5.89] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 05:49:53] sql.INFO: [9.7] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676424604901732352', '1', '32', '676350818319876096', '1', '对对对') [] []
+[2024-07-29 05:49:53] sql.INFO: [12.18] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676424604947869696', '676424604901732352', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 05:52:22] sql.INFO: [44.1] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 05:52:22] sql.INFO: [9.15] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 05:52:22] sql.INFO: [72.28] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 05:52:22] sql.INFO: [4.84] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 05:52:30] sql.INFO: [111.91] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 05:52:30] sql.INFO: [13.78] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 05:52:39] sql.INFO: [16.95] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676425302896832512', '1', '32', '676350818319876096', '1', '发发发') [] []
+[2024-07-29 05:52:39] sql.INFO: [6.2] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676425302989107200', '676425302896832512', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 05:58:03] sql.INFO: [48.72] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 05:58:03] sql.INFO: [5.1] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 05:58:09] sql.INFO: [10.53] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676426686153125888', '1', '65', '676350818319876096', '1', '111') [] []
+[2024-07-29 05:58:09] sql.INFO: [8.37] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676426686203457536', '676426686153125888', '65', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 05:59:14] sql.INFO: [56.44] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 05:59:14] sql.INFO: [18.23] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 05:59:21] sql.INFO: [5.24] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 05:59:21] sql.INFO: [16] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 05:59:32] sql.INFO: [2.89] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 05:59:32] sql.INFO: [41.97] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 05:59:34] sql.INFO: [217.53] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 05:59:34] sql.INFO: [127.64] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 06:00:17] sql.INFO: [3.43] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:00:17] sql.INFO: [3.62] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 06:00:24] sql.INFO: [46.65] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:00:24] sql.INFO: [3.94] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 06:00:31] sql.INFO: [5.18] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676427282293747712', '1', '65', '676350818319876096', '1', '1111') [] []
+[2024-07-29 06:00:31] sql.INFO: [16.37] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676427282331496448', '676427282293747712', '65', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 06:00:35] sql.INFO: [102.69] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676427297263218688', '1', '65', '676350818319876096', '1', '222') [] []
+[2024-07-29 06:00:35] sql.INFO: [12.22] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676427297753952256', '676427297263218688', '65', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 06:06:13] sql.INFO: [6.17] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676428718578626560', '1', '65', '676350818319876096', '1', '2222') [] []
+[2024-07-29 06:06:14] sql.INFO: [24.53] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676428718704455680', '676428718578626560', '65', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 06:06:30] sql.INFO: [82.78] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:06:30] sql.INFO: [41.61] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 06:06:39] sql.INFO: [9.18] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:06:39] sql.INFO: [5.61] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 06:08:51] sql.INFO: [77.53] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:08:51] sql.INFO: [6.81] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 06:09:01] sql.INFO: [56.19] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:09:01] sql.INFO: [4.44] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 06:09:43] sql.INFO: [7.72] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:09:44] sql.INFO: [91.67] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 06:09:54] sql.INFO: [24.24] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676429642168561664', '1', '65', '676350818319876096', '1', '2222222222222') [] []
+[2024-07-29 06:09:54] sql.INFO: [12.46] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676429642273419264', '676429642168561664', '65', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 06:10:03] sql.INFO: [4.95] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676429680294785024', '1', '65', '676350818319876096', '1', '3333333333333333') [] []
+[2024-07-29 06:10:03] sql.INFO: [5.74] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676429680328339456', '676429680294785024', '65', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 06:10:55] sql.INFO: [181.39] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:10:55] sql.INFO: [44.13] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 06:11:01] sql.INFO: [8.99] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:11:01] sql.INFO: [13.08] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 06:11:07] sql.INFO: [28.84] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:11:07] sql.INFO: [29.87] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 06:11:18] sql.INFO: [110.97] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:11:18] sql.INFO: [1.82] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 06:12:21] sql.INFO: [33.25] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:12:21] sql.INFO: [5.18] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 06:12:50] sql.INFO: [8.7] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:12:50] sql.INFO: [7.8] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 06:13:11] sql.INFO: [7.21] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:13:11] sql.INFO: [193.06] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 06:13:30] sql.INFO: [11.6] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:13:30] sql.INFO: [57.28] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 06:14:27] sql.INFO: [3.2] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:14:27] sql.INFO: [25.48] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 06:14:38] sql.INFO: [12.67] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:14:38] sql.INFO: [27.77] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 06:20:48] sql.INFO: [174.38] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:20:48] sql.INFO: [18.62] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 06:21:02] sql.INFO: [56.12] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:21:02] sql.INFO: [50.28] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 06:22:20] sql.INFO: [41.61] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:22:20] sql.INFO: [6.55] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 06:25:16] sql.INFO: [266.26] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:25:16] sql.INFO: [2.94] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 06:25:27] sql.INFO: [15.69] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:25:27] sql.INFO: [3.95] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 06:25:32] sql.INFO: [8.08] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:25:33] sql.INFO: [32.11] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 06:26:14] sql.INFO: [5.46] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:26:14] sql.INFO: [7.76] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 06:28:55] sql.INFO: [217.02] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:28:55] sql.INFO: [11.82] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 06:29:24] sql.INFO: [14.24] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:29:24] sql.INFO: [6.58] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 06:29:26] sql.INFO: [40.62] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:29:26] sql.INFO: [8.02] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 06:29:46] sql.INFO: [14.7] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:29:46] sql.INFO: [17.69] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 06:29:52] sql.INFO: [68.1] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:29:52] sql.INFO: [12.28] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 06:33:20] sql.INFO: [121.72] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:33:20] sql.INFO: [8.37] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 06:34:07] sql.INFO: [182.14] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676435736878149632', '1', '65', '676350818319876096', '1', 'hhhhhhh') [] []
+[2024-07-29 06:34:07] sql.INFO: [19.67] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676435737729593344', '676435736878149632', '65', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 06:34:32] sql.INFO: [446.44] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 06:34:32] sql.INFO: [4.68] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 06:34:38] sql.INFO: [51.26] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`) values ('676435868046618624', '1', '32', '676350818319876096', '1', 'hhhhhhhhhhhh') [] []
+[2024-07-29 06:34:38] sql.INFO: [3.62] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676435868289888256', '676435868046618624', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 07:51:47] sql.INFO: [185.23] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 07:51:47] sql.INFO: [10.06] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 07:54:39] sql.INFO: [203.62] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 07:54:39] sql.INFO: [4.58] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 07:54:51] sql.INFO: [13.4] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 07:54:51] sql.INFO: [22.15] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 07:54:51] sql.INFO: [45.07] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 07:54:51] sql.INFO: [3.79] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 07:54:51] sql.INFO: [3.99] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 07:54:51] sql.INFO: [1.88] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 07:54:52] sql.INFO: [31.87] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 07:54:53] sql.INFO: [4.93] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 07:54:53] sql.INFO: [3.03] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 07:54:53] sql.INFO: [14] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 07:55:34] sql.INFO: [15.56] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 07:55:34] sql.INFO: [4.87] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 07:55:34] sql.INFO: [4.55] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 07:55:34] sql.INFO: [11.62] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 07:55:35] sql.INFO: [4.14] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 07:55:35] sql.INFO: [7.13] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 07:55:43] sql.INFO: [3.55] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 07:55:43] sql.INFO: [3.42] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 07:55:44] sql.INFO: [5.8] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 07:55:44] sql.INFO: [5.85] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 07:55:44] sql.INFO: [4.36] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 07:55:44] sql.INFO: [11.92] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 07:56:31] sql.INFO: [7.94] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 07:56:31] sql.INFO: [10.08] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 07:57:12] sql.INFO: [14.85] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676456644749590529', '1', '32', '676350818319876096', '1', '1111', '') [] []
+[2024-07-29 07:57:12] sql.INFO: [8.78] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676456644942528512', '676456644749590529', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 07:58:25] sql.INFO: [155.71] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 07:58:25] sql.INFO: [6.6] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 08:00:39] sql.INFO: [29.39] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 08:00:39] sql.INFO: [2.46] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 08:00:39] sql.INFO: [11.37] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 08:00:39] sql.INFO: [5] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 08:00:39] sql.INFO: [4.16] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 08:00:39] sql.INFO: [2.64] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 08:01:19] sql.INFO: [12.76] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 08:01:19] sql.INFO: [6.11] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 08:01:24] sql.INFO: [22.23] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676457704524382208', '1', '32', '676350818319876096', '1', '呃呃呃呃呃', '65') [] []
+[2024-07-29 08:01:24] sql.INFO: [46.64] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676457704629239808', '676457704524382208', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 08:02:49] sql.INFO: [186.82] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 08:02:49] sql.INFO: [11.15] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 08:02:59] sql.INFO: [12.03] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676458102744186880', '1', '32', '676350818319876096', '1', '333', '65') [] []
+[2024-07-29 08:02:59] sql.INFO: [33.4] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676458102802907136', '676458102744186880', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 08:03:19] sql.INFO: [7.15] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676458186089201664', '1', '32', '671998759474872320', '2', '热热热', '671998759009304577') [] []
+[2024-07-29 08:03:19] sql.INFO: [8.4] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676458186152116224', '676458186089201664', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 10:37:18] sql.INFO: [99.39] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 10:37:18] sql.INFO: [4.28] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 10:38:54] sql.INFO: [28.33] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 10:38:54] sql.INFO: [13.31] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 10:39:15] sql.INFO: [2.45] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 10:39:15] sql.INFO: [2.28] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 10:39:19] sql.INFO: [2.4] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 10:39:19] sql.INFO: [2] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 10:39:31] sql.INFO: [2.85] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 10:39:31] sql.INFO: [8.41] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 10:39:40] sql.INFO: [52.35] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676497532766949377', '1', '65', '676350818319876096', '1', '1111', '32') [] []
+[2024-07-29 10:39:40] sql.INFO: [72.56] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676497533102493696', '676497532766949377', '65', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 10:39:48] sql.INFO: [20.68] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676497567718084608', '1', '65', '676350818319876096', '1', 'fff', '32') [] []
+[2024-07-29 10:39:48] sql.INFO: [5.18] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676497567810359296', '676497567718084608', '65', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 10:39:55] sql.INFO: [3.6] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676497596100939776', '1', '32', '676350818319876096', '1', 'ggg', '65') [] []
+[2024-07-29 10:39:55] sql.INFO: [2.37] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676497596126105600', '676497596100939776', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 10:40:28] sql.INFO: [4.51] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676497733061742592', '1', '32', '676350818319876096', '1', 'ff', '65') [] []
+[2024-07-29 10:40:28] sql.INFO: [9.69] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676497733086908416', '676497733061742592', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 10:43:23] sql.INFO: [3.94] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676498468058992640', '1', '65', '676350818319876096', '1', 'fff', '32') [] []
+[2024-07-29 10:43:23] sql.INFO: [12.8] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676498468084158464', '676498468058992640', '65', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 10:43:58] sql.INFO: [14.75] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676498614721220608', '1', '65', '676350818319876096', '1', '22', '32') [] []
+[2024-07-29 10:43:58] sql.INFO: [3.21] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676498614796718080', '676498614721220608', '65', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 10:46:08] sql.INFO: [946.63] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 10:46:08] sql.INFO: [2389.51] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 10:46:08] sql.INFO: [9.54] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 10:46:08] sql.INFO: [6.91] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 10:46:35] sql.INFO: [3.76] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676499271834439680', '1', '32', '676350818319876096', '1', 'dd', '65') [] []
+[2024-07-29 10:46:35] sql.INFO: [21.51] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676499271876382720', '676499271834439680', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 10:47:00] sql.INFO: [6.9] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676499377157607424', '1', '65', '676350818319876096', '1', 'huifu ', '32') [] []
+[2024-07-29 10:47:00] sql.INFO: [3.29] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676499377195356160', '676499377157607424', '65', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 10:47:25] sql.INFO: [5.13] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676499481155375104', '1', '32', '676350818319876096', '1', '一起催牛牛', '65') [] []
+[2024-07-29 10:47:25] sql.INFO: [3.53] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676499481180540928', '676499481155375104', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 10:52:13] sql.INFO: [9.37] insert into `talk_group` (`id`, `creator_id`, `group_name`) values ('676500692877217792', '32', '群名称22') [] []
+[2024-07-29 10:52:13] sql.INFO: [10.31] insert into `talk_group_member` (`group_id`, `id`, `leader`, `user_id`) values ('676500692877217792', '676500692944326656', '0', '1'), ('676500692877217792', '676500692948520960', '0', '2'), ('676500692877217792', '676500692948520961', '0', '3'), ('676500692877217792', '676500692948520962', '0', '4'), ('676500692877217792', '676500692948520963', '0', '5'), ('676500692877217792', '676500692948520964', '0', '6'), ('676500692877217792', '676500692948520965', '0', '7'), ('676500692877217792', '676500692948520966', '0', '8'), ('676500692877217792', '676500692948520967', '0', '9'), ('676500692877217792', '676500692948520968', '0', '11'), ('676500692877217792', '676500692948520969', '0', '22'), ('676500692877217792', '676500692948520970', '0', '33'), ('676500692877217792', '676500692948520971', '0', '44'), ('676500692877217792', '676500692948520972', '0', '55'), ('676500692877217792', '676500692948520973', '0', '66'), ('676500692877217792', '676500692948520974', '0', '65'), ('676500692877217792', '676500692948520975', '2', '32') [] []
+[2024-07-29 10:52:14] sql.INFO: [6.73] insert into `talk_session` (`id`, `talk_type`) values ('676500693015629824', '2') [] []
+[2024-07-29 10:52:14] sql.INFO: [12.45] insert into `talk_session_association` (`id`, `session_id`, `to_user_id`, `user_id`) values ('676500693057572864', '676500693015629824', '676500692877217792', '1'), ('676500693057572865', '676500693015629824', '676500692877217792', '2'), ('676500693057572866', '676500693015629824', '676500692877217792', '3'), ('676500693057572867', '676500693015629824', '676500692877217792', '4'), ('676500693057572868', '676500693015629824', '676500692877217792', '5'), ('676500693057572869', '676500693015629824', '676500692877217792', '6'), ('676500693061767168', '676500693015629824', '676500692877217792', '7'), ('676500693061767169', '676500693015629824', '676500692877217792', '8'), ('676500693061767170', '676500693015629824', '676500692877217792', '9'), ('676500693061767171', '676500693015629824', '676500692877217792', '11'), ('676500693061767172', '676500693015629824', '676500692877217792', '22'), ('676500693061767173', '676500693015629824', '676500692877217792', '33'), ('676500693061767174', '676500693015629824', '676500692877217792', '44'), ('676500693061767175', '676500693015629824', '676500692877217792', '55'), ('676500693061767176', '676500693015629824', '676500692877217792', '66'), ('676500693065961472', '676500693015629824', '676500692877217792', '65'), ('676500693070155776', '676500693015629824', '676500692877217792', '32') [] []
+[2024-07-29 10:52:29] sql.INFO: [4.13] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 10:52:29] sql.INFO: [18.13] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 10:52:44] sql.INFO: [6.06] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 10:52:44] sql.INFO: [26.3] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 10:52:55] sql.INFO: [25.45] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 10:52:55] sql.INFO: [6.21] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 10:53:03] sql.INFO: [8.51] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 10:53:03] sql.INFO: [27.32] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 10:53:28] sql.INFO: [2.24] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 10:53:28] sql.INFO: [3.84] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 10:53:35] sql.INFO: [4.18] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676501035824488449', '1', '65', '676500693015629824', '2', '111', '676500692877217792') [] []
+[2024-07-29 10:53:35] sql.INFO: [3.22] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676501035887403008', '676501035824488449', '65', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 10:55:18] sql.INFO: [80.85] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 10:55:18] sql.INFO: [6.53] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 10:55:21] sql.INFO: [4.64] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 10:55:21] sql.INFO: [3.66] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 10:55:36] sql.INFO: [2.44] select * from `talk_group_member` where (`group_id` = '676500692877217792') [] []
+[2024-07-29 10:55:36] sql.INFO: [4.49] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676501542911647744', '1', '32', '676500693015629824', '2', 'www', '676500692877217792') [] []
+[2024-07-29 10:55:36] sql.INFO: [2.29] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676501542932619264', '676501542911647744', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 10:56:45] sql.INFO: [117.21] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 10:56:45] sql.INFO: [33.96] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 10:56:51] sql.INFO: [4.92] select * from `talk_group_member` where (`group_id` = '676500692877217792') [] []
+[2024-07-29 10:56:51] sql.INFO: [10.85] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676501856683335680', '1', '32', '676500693015629824', '2', '滚滚滚', '676500692877217792') [] []
+[2024-07-29 10:56:51] sql.INFO: [2.41] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676501856729473024', '676501856683335680', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 10:57:47] sql.INFO: [31.12] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 10:57:47] sql.INFO: [29.72] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-29 10:57:53] sql.INFO: [4.94] select * from `talk_group_member` where (`group_id` = '676500692877217792') [] []
+[2024-07-29 10:57:53] sql.INFO: [9.11] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676502118659563520', '1', '32', '676500693015629824', '2', '发发发', '676500692877217792') [] []
+[2024-07-29 10:57:53] sql.INFO: [4.47] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676502118701506560', '676502118659563520', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 10:57:55] sql.INFO: [3.18] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-29 10:57:55] sql.INFO: [4.51] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-29 10:58:08] sql.INFO: [1.87] select * from `talk_group_member` where (`group_id` = '676500692877217792') [] []
+[2024-07-29 10:58:08] sql.INFO: [10.45] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676502179372113920', '1', '65', '676500693015629824', '2', '测试', '676500692877217792') [] []
+[2024-07-29 10:58:08] sql.INFO: [6.05] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676502179426639872', '676502179372113920', '65', '', '0', '', '', '', '0', '') [] []
+[2024-07-29 10:58:21] sql.INFO: [7.54] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676502233768038400', '1', '32', '676500693015629824', '2', 'nice', '676500692877217792') [] []
+[2024-07-29 10:58:21] sql.INFO: [4.64] select * from `talk_group_member` where (`group_id` = '676500692877217792') [] []
+[2024-07-29 10:58:21] sql.INFO: [3.58] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676502233822564352', '676502233768038400', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-30 09:33:38] sql.INFO: [188.62] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-30 09:33:38] sql.INFO: [11.33] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-30 09:34:36] sql.INFO: [35.98] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-30 09:34:36] sql.INFO: [4.32] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-30 09:35:12] sql.INFO: [3.86] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-30 09:35:12] sql.INFO: [10.33] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-30 09:35:15] sql.INFO: [10.9] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-30 09:35:15] sql.INFO: [11.93] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '32') [] []
+[2024-07-30 09:35:34] sql.INFO: [57.27] select * from `talk_group_member` where (`group_id` = '676500692877217792') [] []
+[2024-07-30 09:35:35] sql.INFO: [47.66] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676843791709155328', '1', '65', '676500693015629824', '2', '111', '676500692877217792') [] []
+[2024-07-30 09:35:35] sql.INFO: [17.62] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676843792032116736', '676843791709155328', '65', '', '0', '', '', '', '0', '') [] []
+[2024-07-30 09:35:41] sql.INFO: [3.15] select * from `talk_group_member` where (`group_id` = '676500692877217792') [] []
+[2024-07-30 09:35:41] sql.INFO: [15.91] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676843820503056385', '1', '65', '676500693015629824', '2', 'jjjj', '676500692877217792') [] []
+[2024-07-30 09:35:42] sql.INFO: [8.41] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676843820779880448', '676843820503056385', '65', '', '0', '', '', '', '0', '') [] []
+[2024-07-30 09:35:53] sql.INFO: [59.55] select * from `talk_group_member` where (`group_id` = '676500692877217792') [] []
+[2024-07-30 09:35:53] sql.INFO: [47.04] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676843870411075584', '1', '32', '676500693015629824', '2', 'jjjj', '676500692877217792') [] []
+[2024-07-30 09:35:53] sql.INFO: [19.51] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676843870805340160', '676843870411075584', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-30 09:36:18] sql.INFO: [9.9] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676843972332662784', '1', '32', '676350818319876096', '1', 'dddd', '65') [] []
+[2024-07-30 09:36:18] sql.INFO: [11.69] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676843972382994432', '676843972332662784', '32', '', '0', '', '', '', '0', '') [] []
+[2024-07-30 09:36:25] sql.INFO: [11.31] select `talk_session`.`talk_type`, `talk_group`.`group_name`, `talk_group`.`avatar` as `group_avatar`, `user`.`avatar` as `user_avatar`, `user`.`nickname`, `talk_session`.`last_content`, `user`.`user_name`, `talk_session`.`id` as `session_id`, `talk_session`.`talk_type`, `user`.`id` as `user_id`, `talk_group`.`id` as `group_id` from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') order by `talk_session`.`updated_at` desc limit 10 offset 0 [] []
+[2024-07-30 09:36:26] sql.INFO: [60.69] select count(*) as aggregate from `talk_session_association` left join `talk_session` on `talk_session`.`id` = `talk_session_association`.`session_id` left join `user` on `user`.`id` = `talk_session_association`.`to_user_id` left join `talk_group` on `talk_group`.`id` = `talk_session_association`.`to_user_id` where (`talk_session_association`.`status` = '1' and `talk_session_association`.`user_id` = '65') [] []
+[2024-07-30 09:36:30] sql.INFO: [4.91] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676844024488833024', '1', '65', '676350818319876096', '1', 'ffff', '32') [] []
+[2024-07-30 09:36:30] sql.INFO: [4.43] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676844024513998848', '676844024488833024', '65', '', '0', '', '', '', '0', '') [] []
+[2024-07-30 09:36:40] sql.INFO: [8.69] insert into `talk_records` (`id`, `msg_type`, `user_id`, `session_id`, `talk_type`, `content`, `receiver_id`) values ('676844067660804096', '1', '32', '676350818319876096', '1', 'bbbbb', '65') [] []
+[2024-07-30 09:36:40] sql.INFO: [9.22] insert into `talk_records_file` (`id`, `record_id`, `user_id`, `source`, `type`, `drive`, `original_name`, `suffix`, `size`, `path`) values ('676844067727912960', '676844067660804096', '32', '', '0', '', '', '', '0', '') [] []

+ 0 - 1
vendor/96qbhy/hyperf-auth/.gitattributes

@@ -1 +0,0 @@
-/tests export-ignore

+ 0 - 9
vendor/96qbhy/hyperf-auth/.gitignore

@@ -1,9 +0,0 @@
-/vendor/
-composer.lock
-*.cache
-*.log
-/hooks
-.idea
-runtime
-config
-.env*

+ 0 - 87
vendor/96qbhy/hyperf-auth/.php_cs

@@ -1,87 +0,0 @@
-<?php
-
-$header = <<<'EOF'
-This file is part of qbhy/hyperf-auth.
-
-@link     https://github.com/qbhy/hyperf-auth
-@document https://github.com/qbhy/hyperf-auth/blob/master/README.md
-@contact  qbhy0715@qq.com
-@license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
-EOF;
-
-return PhpCsFixer\Config::create()
-    ->setRiskyAllowed(true)
-    ->setRules([
-        '@PSR2' => true,
-        '@Symfony' => true,
-        '@DoctrineAnnotation' => true,
-        '@PhpCsFixer' => true,
-        'header_comment' => [
-            'commentType' => 'PHPDoc',
-            'header' => $header,
-            'separate' => 'none',
-            'location' => 'after_declare_strict',
-        ],
-        'array_syntax' => [
-            'syntax' => 'short'
-        ],
-        'list_syntax' => [
-            'syntax' => 'short'
-        ],
-        'concat_space' => [
-            'spacing' => 'one'
-        ],
-        'blank_line_before_statement' => [
-            'statements' => [
-                'declare',
-            ],
-        ],
-        'general_phpdoc_annotation_remove' => [
-            'annotations' => [
-                'author'
-            ],
-        ],
-        'ordered_imports' => [
-            'imports_order' => [
-                'class', 'function', 'const',
-            ],
-            'sort_algorithm' => 'alpha',
-        ],
-        'single_line_comment_style' => [
-            'comment_types' => [
-            ],
-        ],
-        'yoda_style' => [
-            'always_move_variable' => false,
-            'equal' => false,
-            'identical' => false,
-        ],
-        'phpdoc_align' => [
-            'align' => 'left',
-        ],
-        'multiline_whitespace_before_semicolons' => [
-            'strategy' => 'no_multi_line',
-        ],
-        'class_attributes_separation' => true,
-        'combine_consecutive_unsets' => true,
-        'declare_strict_types' => true,
-        'linebreak_after_opening_tag' => true,
-        'lowercase_constants' => true,
-        'lowercase_static_reference' => true,
-        'no_useless_else' => true,
-        'no_unused_imports' => true,
-        'not_operator_with_successor_space' => true,
-        'not_operator_with_space' => false,
-        'ordered_class_elements' => true,
-        'php_unit_strict' => false,
-        'phpdoc_separation' => false,
-        'single_quote' => true,
-        'standardize_not_equals' => true,
-        'multiline_comment_opening_closing' => true,
-    ])
-    ->setFinder(
-        PhpCsFixer\Finder::create()
-            ->exclude('vendor')
-            ->in(__DIR__)
-    )
-    ->setUsingCache(false);

+ 0 - 6
vendor/96qbhy/hyperf-auth/.phpstorm.meta.php

@@ -1,6 +0,0 @@
-<?php
-
-namespace PHPSTORM_META {
-    // Reflect
-    override(\Psr\Container\ContainerInterface::get(0), map('@'));
-}

+ 0 - 40
vendor/96qbhy/hyperf-auth/.travis.yml

@@ -1,40 +0,0 @@
-language: php
-
-sudo: required
-
-matrix:
-  include:
-    - php: 7.2
-      env: SW_VERSION="4.4.7"
-    - php: 7.3
-      env: SW_VERSION="4.4.7"
-    - php: master
-      env: SW_VERSION="4.4.7"
-
-  allow_failures:
-    - php: master
-
-services:
-  - mysql
-  - redis-server
-  - docker
-
-before_install:
-  - export PHP_MAJOR="$(`phpenv which php` -r 'echo phpversion();' | cut -d '.' -f 1)"
-  - export PHP_MINOR="$(`phpenv which php` -r 'echo phpversion();' | cut -d '.' -f 2)"
-  - echo $PHP_MAJOR
-  - echo $PHP_MINOR
-
-install:
-  - cd $TRAVIS_BUILD_DIR
-  - bash ./tests/swoole.install.sh
-  - phpenv config-rm xdebug.ini || echo "xdebug not available"
-  - phpenv config-add ./tests/ci.ini
-
-before_script:
-  - cd $TRAVIS_BUILD_DIR
-  - composer config -g process-timeout 900 && composer update
-
-script:
-  - composer analyse
-  - composer test

+ 0 - 21
vendor/96qbhy/hyperf-auth/LICENSE

@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2020 桥边红药
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.

+ 0 - 292
vendor/96qbhy/hyperf-auth/README.md

@@ -1,292 +0,0 @@
-# qbhy/hyperf-auth
-
-hyperf 的 auth 组件,目前支持 jwt、session、sso 驱动。用户可以自行扩展。  
-本组件参考了 laravel 的 auth 组件设计,使用体验大体和 laravel 的 auth 差不多。
-
-[![Latest Stable Version](https://poser.pugx.org/96qbhy/hyperf-auth/v/stable)](https://packagist.org/packages/96qbhy/hyperf-auth)
-[![Total Downloads](https://poser.pugx.org/96qbhy/hyperf-auth/downloads)](https://packagist.org/packages/96qbhy/hyperf-auth)
-[![Latest Unstable Version](https://poser.pugx.org/96qbhy/hyperf-auth/v/unstable)](https://packagist.org/packages/96qbhy/hyperf-auth)
-[![License](https://poser.pugx.org/96qbhy/hyperf-auth/license)](https://packagist.org/packages/96qbhy/hyperf-auth)
-[![Monthly Downloads](https://poser.pugx.org/96qbhy/hyperf-auth/d/monthly)](https://packagist.org/packages/96qbhy/hyperf-auth)
-[![Daily Downloads](https://poser.pugx.org/96qbhy/hyperf-auth/d/daily)](https://packagist.org/packages/96qbhy/hyperf-auth)
-
-## 支持的验证方式
-
-* session
-* jwt
-* sso (单点登录,继承自jwt,需要 hyperf/redis,支持多客户端)
-
-> 任何问题请加QQ群提问:873213948
-
-## 安装 - install
-
-```bash
-$ composer require 96qbhy/hyperf-auth
-```
-
-> hyperf 1.1 请使用 ^v1.0 版本
-
-## 配置 - configuration
-
-使用 `Qbhy\HyperfAuth\AuthExceptionHandler` ,此步骤可选,开发者可以自行捕捉 `AuthException`  和 `JWTException` 进行处理
-
-```php
-<?php
-// config/autoload/exceptions.php
-return [
-    'handler' => [
-        'http' => [
-            \Qbhy\HyperfAuth\AuthExceptionHandler::class,
-        ],    
-    ],
-];
-```
-
-发布配置 vendor:publish
-```bash
-php bin/hyperf.php vendor:publish 96qbhy/hyperf-auth
-```
-
-生成 `.env` 配置项 
-```bash
-php bin/hyperf.php gen:auth-env
-```
-
-修改 `config/autoload/auth.php`
-> 如不需要自定义 guard、model 和 user provider,则可以不修改
-
-```php
-<?php
-
-use Doctrine\Common\Cache\FilesystemCache;
-use Qbhy\SimpleJwt\Encoders\Base64UrlSafeEncoder;
-use Qbhy\SimpleJwt\EncryptAdapters\PasswordHashEncrypter;
-
-return [
-    'default' => [
-        'guard'=> 'jwt',
-        'provider'=> 'users',
-    ] ,
-    'guards' => [ // 开发者可以在这里添加自己的 guard ,guard Qbhy\HyperfAuth\AuthGuard 接口
-        'sso'=> [
-            // 支持的设备,env配置时用英文逗号隔开
-            'clients' => explode(',', env('AUTH_SSO_CLIENTS', 'pc')),
-
-            // hyperf/redis 实例
-            'redis' => function () {
-                return make(\Hyperf\Redis\Redis::class);
-            },
-
-            // 自定义 redis key,必须包含 {uid},{uid} 会被替换成用户ID
-            'redis_key' => 'u:token:{uid}',
-
-            'driver' => Qbhy\HyperfAuth\Guard\SsoGuard::class,
-            // ...$jwtConfig, // 其他配置和 jwt guard的配置一样
-        ],
-        'jwt' => [
-            'driver' => Qbhy\HyperfAuth\Guard\JwtGuard::class,
-            'provider' => 'users',
-
-            // 以下是 simple-jwt 所需的参数,具体配置文档可以看 config/autoload/auth.php
-            'secret' =>env('JWT_SECRET', 'qbhy/hyperf-auth'),
-            'ttl' => 60 * 60, // 单位秒
-            'default' => PasswordHashEncrypter::class,
-            'encoder' => new Base64UrlSafeEncoder(),
-//            'cache' => new FilesystemCache(sys_get_temp_dir()), // 如果需要分布式部署,请选择 redis 或者其他支持分布式的缓存驱动
-            'cache' => function() {
-                return make(Qbhy\HyperfAuth\HyperfRedisCache::class);
-            }, 
-        ],
-        'session' => [
-            'driver' => Qbhy\HyperfAuth\Guard\SessionGuard::class,
-            'provider' => 'users',
-        ],
-    ],
-    'providers' => [
-        'users' => [
-            'driver' => \Qbhy\HyperfAuth\Provider\EloquentProvider::class, // user provider 需要实现 Qbhy\HyperfAuth\UserProvider 接口
-            'model' => App\Model\User::class, //  需要实现 Qbhy\HyperfAuth\Authenticatable 接口
-        ],
-    ],
-];
-```
-
-## 使用 - usage
-
-> 以下是伪代码,仅供参考。Auth 注解可以用于类或者方法。
-
-```php
-<?php
-declare(strict_types=1);
-
-namespace App\Controller;
-
-use Hyperf\Di\Annotation\Inject;
-use Hyperf\HttpServer\Annotation\Controller;
-use Hyperf\HttpServer\Annotation\GetMapping;
-use Qbhy\HyperfAuth\Annotation\Auth;
-use Qbhy\HyperfAuth\AuthManager;
-
-/**
-* @Controller
-* Class IndexController
-*/
-class IndexController extends AbstractController
-{
-  /**
-   * @Inject
-   * @var AuthManager
-   */
-  protected $auth;
-
-  /**
-   * @GetMapping(path="/login")
-   * @return array
-   */
-  public function login()
-  {
-      /** @var User $user */
-      $user = User::query()->firstOrCreate(['name' => 'test', 'avatar' => 'avatar']);
-      return [
-          'status' => $this->auth->guard('session')->login($user),
-      ];
-  }
-  
-  /**
-   * @GetMapping(path="/sso/login")
-   * @return array
-   */
-  public function ssoLogin()
-  {
-      /** @var User $user */
-      $user = User::query()->firstOrCreate(['name' => 'test', 'avatar' => 'avatar']);
-      return [
-          'token' => $this->auth->guard('sso')->login($user, [],  'pc'), // sso 方法支持第二个参数,传定义好的客户端
-      ];
-  }
-
-  /**
-   * @Auth("session")
-   * @GetMapping(path="/logout")
-   */
-  public function logout()
-  {
-      $this->auth->guard('session')->logout();
-      return 'logout ok';
-  }
-
-  /**
-   * 使用 Auth 注解可以保证该方法必须通过某个 guard 的授权,支持同时传多个 guard,不传参数使用默认 guard
-   * @Auth("session")
-   * @GetMapping(path="/user")
-   * @return string
-   */
-  public function user()
-  {
-      $user = $this->auth->guard('session')->user();
-      return 'hello '.$user->name;
-  }
-}
-```
-
-除了上面的 Auth 注解用法,还支持中间件用法
-
-```php
-<?php
-
-declare(strict_types=1);
-
-namespace App\Controller;
-
-use Hyperf\HttpServer\Annotation\Middleware;
-use Qbhy\HyperfAuth\AuthMiddleware; 
-use Hyperf\Di\Annotation\Inject;
-use Hyperf\HttpServer\Annotation\GetMapping;
-use Qbhy\HyperfAuth\AuthManager;
-
-/**
-* @Middleware(AuthMiddleware::class)
-* Class IndexController
-*/
-class IndexController extends AbstractController
-{
-  /**
-   * @Inject
-   * @var AuthManager
-   */
-  protected $auth;
-  
-  /**
-   * @GetMapping(path="/user")
-   * @return string
-   */
-  public function user()
-  {
-      $user = $this->auth->guard()->user();
-      return 'hello '.$user->name;
-  }
-}
-```
-
-由于 hyperf 还不支持中间件传参,所以 `Qbhy\HyperfAuth\AuthMiddleware` 中间件只支持默认guard校验  
-但是开发者可以继承该中间自行扩展。或者直接使用 Auth 注解进行自定义 guard 校验,与中间件的效果是一致的。
-
-```php
-<?php
-
-declare(strict_types=1);
-
-use Qbhy\HyperfAuth\AuthMiddleware; 
-
-class SessionAuthMiddleware extends AuthMiddleware { 
-    protected $guards = ['session']; // 支持多个 guard
-
- }
-```
-
-## 更多用法 - API
-
-```php
-<?php
-
-$auth = auth(); // 控制器内也可以通过 @Inject 注入
-
-$user = new \HyperfTest\DemoUser(1);
-
-// 直接调用 AuthGuard 方法,这种情况下会获取 默认 guard 然后调用 guard 的对应方法
-$auth->login($user); // 默认使用 jwt 驱动,该方法将返回 token 字符串
-$auth->logout(); // 退出登录
-$auth->check(); // 检查是否登录
-$auth->id(); // 获取当前登录用户的id,无需查数据库
-$auth->guest(); // 是否游客/是否未登录
-$auth->user(); // 若登录返回当前登录用户,否则返回null
-
-/** @var \Qbhy\HyperfAuth\Guard\JwtGuard $jwtGuard */
-$jwtGuard = $auth->guard('jwt');
-$jwtGuard->user('your token or null'); // jwt 驱动支持手动传入 token,如不传或者传null则从 request 中解析
-$jwtGuard->check('your token or null');
-$jwtGuard->id('your token or null'); // 无需查数据库
-$jwtGuard->guest('your token or null');
-$jwtGuard->refresh('your token or null'); // 该方法返回新的 token 或者 null
-$jwtGuard->login($user, ['sub' => 'qbhy0715','iss' => 'hyperf-auth',]); // 自定义payload
-$jwtGuard->getPayload('your token or null'); // 获取自定义 payload
-
-$auth->guard()->login($user); // guard 方法不传参数或者传null都将使用默认值
-
-// 使用 session 驱动需要安装 hyperf/session 并启用 session
-$auth->guard('session')->login($user); // guard 方法不传参数或者传null都会获取默认值
-```
-
-> 注意事项:使用 jwt 驱动且令牌异常的情况下调用 user 方法,会抛出相应的异常,需要自行捕捉处理,不想抛异常,可以调用 check 进行判断。
-
-## 扩展 - extension
-
-由于本组件参考了 laravel auth 的设计,所以 guard 和 user provider 的扩展也和 laravel 类似。只需要实现对应接口即可。
-
-* guard ===> Qbhy\HyperfAuth\AuthGuard
-* user provider ===> Qbhy\HyperfAuth\UserProvider
-
-> 扩展教程请移步 [hyperf教程之hyperf-auth高级用法](https://mp.weixin.qq.com/s/jlbbN6zhWEVteimpi0mLjg)
-
-https://github.com/qbhy/hyperf-auth  
-qbhy0715@qq.com  

+ 0 - 84
vendor/96qbhy/hyperf-auth/composer.json

@@ -1,84 +0,0 @@
-{
-    "name": "96qbhy/hyperf-auth",
-    "description": "hyperf 的 auth 组件",
-    "type": "library",
-    "license": "MIT",
-    "keywords": [
-        "php",
-        "hyperf",
-        "hyperf-auth",
-        "jwt-auth"
-    ],
-    "autoload": {
-        "psr-4": {
-            "Qbhy\\HyperfAuth\\": "src/"
-        },
-        "files": [
-            "src/helper.php"
-        ]
-    },
-    "autoload-dev": {
-        "psr-4": {
-            "HyperfTest\\": "tests"
-        }
-    },
-    "require": {
-        "php": ">=8.1",
-        "96qbhy/simple-jwt": "^v1.5",
-        "hyperf/cache": "^3.1",
-        "hyperf/di": "^3.1",
-        "ext-json": "*",
-        "ext-redis": "*"
-    },
-    "suggest": {
-        "ext-redis": "*"
-    },
-    "require-dev": {
-        "brainmaestro/composer-git-hooks": "^2.8",
-        "friendsofphp/php-cs-fixer": "^2.14",
-        "hyperf/command": "^3.1",
-        "hyperf/config": "^3.1",
-        "hyperf/database": "^3.1",
-        "hyperf/event": "^3.1",
-        "hyperf/framework": "^3.1",
-        "hyperf/redis": "^3.1",
-        "hyperf/session": "^3.1",
-        "hyperf/testing": "^3.1",
-        "hyperf/utils": "^3.1",
-        "itsgoingd/clockwork": "^5.0",
-        "phpstan/phpstan": "^0.12",
-        "swoft/swoole-ide-helper": "dev-master",
-        "symfony/console": "^5.3",
-        "symfony/var-dumper": "^5.3"
-    },
-    "minimum-stability": "dev",
-    "config": {
-        "sort-packages": true
-    },
-    "scripts": {
-        "test": "phpunit -c phpunit.xml --colors=always",
-        "analyse": "phpstan analyse --memory-limit 300M -l 0 ./src",
-        "cs-fix": "php-cs-fixer fix $1",
-        "post-install-cmd": "cghooks add --ignore-lock",
-        "post-update-cmd": "cghooks update"
-    },
-    "extra": {
-        "hyperf": {
-            "config": "Qbhy\\HyperfAuth\\ConfigProvider"
-        },
-        "hooks": {
-            "pre-commit": [
-                "echo committing as $(git config user.name)",
-                "vendor/bin/php-cs-fixer fix .",
-                "git add .",
-                "composer test"
-            ]
-        }
-    },
-    "repositories": {
-        "packagist": {
-            "type": "composer",
-            "url": "https://mirrors.aliyun.com/composer/"
-        }
-    }
-}

+ 0 - 15
vendor/96qbhy/hyperf-auth/phpunit.xml

@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<phpunit bootstrap="tests/bootstrap.php"
-         backupGlobals="false"
-         backupStaticAttributes="false"
-         verbose="true"
-         colors="true"
-         convertErrorsToExceptions="true"
-         convertNoticesToExceptions="true"
-         convertWarningsToExceptions="true"
-         processIsolation="false"
-         stopOnFailure="false">
-    <testsuite name="Testsuite">
-        <directory>./tests/</directory>
-    </testsuite>
-</phpunit>

+ 0 - 183
vendor/96qbhy/hyperf-auth/publish/auth.php

@@ -1,183 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-use Qbhy\SimpleJwt\Encoders;
-use Qbhy\SimpleJwt\EncryptAdapters as Encrypter;
-use function Hyperf\Support\env;
-use function Hyperf\Support\make;
-
-return [
-    'default' => [
-        'guard' => 'jwt',
-        'provider' => 'users',
-    ],
-    'guards' => [
-        'sso' => [
-            // 支持的设备,env配置时用英文逗号隔开
-            'clients' => explode(',', env('AUTH_SSO_CLIENTS', 'pc')),
-
-            // hyperf/redis 实例
-            'redis' => function () {
-                return make(\Hyperf\Redis\Redis::class);
-            },
-
-            // 自定义 redis key,必须包含 {uid},{uid} 会被替换成用户ID
-            'redis_key' => 'u:token:{uid}',
-
-            'driver' => Qbhy\HyperfAuth\Guard\SsoGuard::class,
-            'provider' => 'users',
-
-            /*
-             * 以下是 simple-jwt 配置
-             * 必填
-             * jwt 服务端身份标识
-             */
-            'secret' => env('SSO_JWT_SECRET'),
-
-            /*
-             * 可选配置
-             * jwt 默认头部token使用的字段
-             */
-            'header_name' => env('JWT_HEADER_NAME', 'Authorization'),
-
-            /*
-             * 可选配置
-             * jwt 生命周期,单位秒,默认一天
-             */
-            'ttl' => (int) env('SIMPLE_JWT_TTL', 60 * 60 * 24),
-
-            /*
-             * 可选配置
-             * 允许过期多久以内的 token 进行刷新,单位秒,默认一周
-             */
-            'refresh_ttl' => (int) env('SIMPLE_JWT_REFRESH_TTL', 60 * 60 * 24 * 7),
-
-            /*
-             * 可选配置
-             * 默认使用的加密类
-             */
-            'default' => Encrypter\SHA1Encrypter::class,
-
-            /*
-             * 可选配置
-             * 加密类必须实现 Qbhy\SimpleJwt\Interfaces\Encrypter 接口
-             */
-            'drivers' => [
-                Encrypter\PasswordHashEncrypter::alg() => Encrypter\PasswordHashEncrypter::class,
-                Encrypter\CryptEncrypter::alg() => Encrypter\CryptEncrypter::class,
-                Encrypter\SHA1Encrypter::alg() => Encrypter\SHA1Encrypter::class,
-                Encrypter\Md5Encrypter::alg() => Encrypter\Md5Encrypter::class,
-            ],
-
-            /*
-             * 可选配置
-             * 编码类
-             */
-            'encoder' => new Encoders\Base64UrlSafeEncoder(),
-            //            'encoder' => new Encoders\Base64Encoder(),
-
-            /*
-             * 可选配置
-             * 缓存类
-             */
-            'cache' => new \Doctrine\Common\Cache\FilesystemCache(sys_get_temp_dir()),
-            // 如果需要分布式部署,请选择 redis 或者其他支持分布式的缓存驱动
-            //            'cache' => function () {
-            //                return make(\Qbhy\HyperfAuth\HyperfRedisCache::class);
-            //            },
-
-            /*
-             * 可选配置
-             * 缓存前缀
-             */
-            'prefix' => env('SIMPLE_JWT_PREFIX', 'default'),
-        ],
-        'jwt' => [
-            'driver' => Qbhy\HyperfAuth\Guard\JwtGuard::class,
-            'provider' => 'users',
-
-            /*
-             * 以下是 simple-jwt 配置
-             * 必填
-             * jwt 服务端身份标识
-             */
-            'secret' => env('SIMPLE_JWT_SECRET'),
-
-            /*
-             * 可选配置
-             * jwt 默认头部token使用的字段
-             */
-            'header_name' => env('JWT_HEADER_NAME', 'Authorization'),
-
-            /*
-             * 可选配置
-             * jwt 生命周期,单位秒,默认一天
-             */
-            'ttl' => (int) env('SIMPLE_JWT_TTL', 60 * 60 * 24),
-
-            /*
-             * 可选配置
-             * 允许过期多久以内的 token 进行刷新,单位秒,默认一周
-             */
-            'refresh_ttl' => (int) env('SIMPLE_JWT_REFRESH_TTL', 60 * 60 * 24 * 7),
-
-            /*
-             * 可选配置
-             * 默认使用的加密类
-             */
-            'default' => Encrypter\SHA1Encrypter::class,
-
-            /*
-             * 可选配置
-             * 加密类必须实现 Qbhy\SimpleJwt\Interfaces\Encrypter 接口
-             */
-            'drivers' => [
-                Encrypter\PasswordHashEncrypter::alg() => Encrypter\PasswordHashEncrypter::class,
-                Encrypter\CryptEncrypter::alg() => Encrypter\CryptEncrypter::class,
-                Encrypter\SHA1Encrypter::alg() => Encrypter\SHA1Encrypter::class,
-                Encrypter\Md5Encrypter::alg() => Encrypter\Md5Encrypter::class,
-            ],
-
-            /*
-             * 可选配置
-             * 编码类
-             */
-            'encoder' => new Encoders\Base64UrlSafeEncoder(),
-            //            'encoder' => new Encoders\Base64Encoder(),
-
-            /*
-             * 可选配置
-             * 缓存类
-             */
-            'cache' => new \Doctrine\Common\Cache\FilesystemCache(sys_get_temp_dir()),
-            // 如果需要分布式部署,请选择 redis 或者其他支持分布式的缓存驱动
-            //            'cache' => function () {
-            //                return make(\Qbhy\HyperfAuth\HyperfRedisCache::class);
-            //            },
-
-            /*
-             * 可选配置
-             * 缓存前缀
-             */
-            'prefix' => env('SIMPLE_JWT_PREFIX', 'default'),
-        ],
-        'session' => [
-            'driver' => Qbhy\HyperfAuth\Guard\SessionGuard::class,
-            'provider' => 'users',
-        ],
-    ],
-    'providers' => [
-        'users' => [
-            'driver' => \Qbhy\HyperfAuth\Provider\EloquentProvider::class,
-            'model' => App\Model\User::class, // 需要实现 Qbhy\HyperfAuth\Authenticatable 接口
-        ],
-    ],
-];

+ 0 - 23
vendor/96qbhy/hyperf-auth/src/Annotation/Auth.php

@@ -1,23 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-namespace Qbhy\HyperfAuth\Annotation;
-
-use Attribute;
-use Hyperf\Di\Annotation\AbstractAnnotation;
-
-#[Attribute(Attribute::TARGET_METHOD | Attribute::TARGET_CLASS)]
-class Auth extends AbstractAnnotation
-{
-    public function __construct(public ?string $value = null)
-    {
-    }
-}

+ 0 - 31
vendor/96qbhy/hyperf-auth/src/AuthAbility.php

@@ -1,31 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-namespace Qbhy\HyperfAuth;
-
-use Hyperf\Database\Model\Model;
-
-/**
- * Trait AuthAbility.
- * @mixin Authenticatable|Model
- */
-trait AuthAbility
-{
-    public function getId()
-    {
-        return $this->getKey();
-    }
-
-    public static function retrieveById($key): ?Authenticatable
-    {
-        return self::query()->find($key);
-    }
-}

+ 0 - 50
vendor/96qbhy/hyperf-auth/src/AuthAspect.php

@@ -1,50 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-namespace Qbhy\HyperfAuth;
-
-use Hyperf\Di\Annotation\Aspect;
-use Hyperf\Di\Annotation\Inject;
-use Hyperf\Di\Aop\AbstractAspect;
-use Hyperf\Di\Aop\ProceedingJoinPoint;
-use Qbhy\HyperfAuth\Annotation\Auth;
-use Qbhy\HyperfAuth\Exception\UnauthorizedException;
-
-#[Aspect]
-class AuthAspect extends AbstractAspect
-{
-    public array $annotations = [
-        Auth::class,
-    ];
-
-    #[Inject(AuthManager::class)]
-    protected AuthManager $auth;
-
-    public function process(ProceedingJoinPoint $proceedingJoinPoint)
-    {
-        $annotation = $proceedingJoinPoint->getAnnotationMetadata();
-
-        /** @var Auth $authAnnotation */
-        $authAnnotation = $annotation->class[Auth::class] ?? $annotation->method[Auth::class];
-
-        $guards = is_array($authAnnotation->value) ? $authAnnotation->value : [$authAnnotation->value];
-
-        foreach ($guards as $name) {
-            $guard = $this->auth->guard($name);
-
-            if (! $guard->user() instanceof Authenticatable) {
-                throw new UnauthorizedException("Without authorization from {$guard->getName()} guard", $guard);
-            }
-        }
-
-        return $proceedingJoinPoint->process();
-    }
-}

+ 0 - 42
vendor/96qbhy/hyperf-auth/src/AuthCommand.php

@@ -1,42 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-namespace Qbhy\HyperfAuth;
-
-use Hyperf\Command\Annotation\Command;
-use Hyperf\Command\Command as HyperfCommand;
-use function Hyperf\Support\env;
-
-#[Command]
-class AuthCommand extends HyperfCommand
-{
-    /**
-     * 执行的命令行.
-     */
-    protected ?string $name = 'gen:auth-env';
-
-    public function handle()
-    {
-        $this->gen('AUTH_SSO_CLIENTS', 'h5,weapp');
-        $this->gen('SSO_JWT_SECRET');
-        $this->gen('SIMPLE_JWT_SECRET');
-    }
-
-    public function gen($key, string $value = null)
-    {
-        if (empty(env($key))) {
-            file_put_contents(BASE_PATH . '/.env', sprintf(PHP_EOL . '%s=%s', $key, $value ?? str_random(16)), FILE_APPEND);
-            $this->info($key . ' 已生成!');
-        } else {
-            $this->info($key . ' 已存在!');
-        }
-    }
-}

+ 0 - 32
vendor/96qbhy/hyperf-auth/src/AuthExceptionHandler.php

@@ -1,32 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-namespace Qbhy\HyperfAuth;
-
-use Hyperf\ExceptionHandler\ExceptionHandler;
-use Hyperf\HttpMessage\Stream\SwooleStream;
-use Psr\Http\Message\ResponseInterface;
-use Qbhy\HyperfAuth\Exception\UnauthorizedException;
-use Throwable;
-
-class AuthExceptionHandler extends ExceptionHandler
-{
-    public function handle(Throwable $throwable, ResponseInterface $response)
-    {
-        $this->stopPropagation();
-        return $response->withStatus($throwable->getStatusCode())->withBody(new SwooleStream('Unauthorized.'));
-    }
-
-    public function isValid(Throwable $throwable): bool
-    {
-        return $throwable instanceof UnauthorizedException;
-    }
-}

+ 0 - 31
vendor/96qbhy/hyperf-auth/src/AuthGuard.php

@@ -1,31 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-namespace Qbhy\HyperfAuth;
-
-interface AuthGuard
-{
-    public function id();
-
-    public function login(Authenticatable $user);
-
-    public function user(): ?Authenticatable;
-
-    public function check(): bool;
-
-    public function guest(): bool;
-
-    public function logout();
-
-    public function getProvider(): UserProvider;
-
-    public function getName(): string;
-}

+ 0 - 114
vendor/96qbhy/hyperf-auth/src/AuthManager.php

@@ -1,114 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-namespace Qbhy\HyperfAuth;
-
-use Hyperf\Contract\ConfigInterface;
-use Qbhy\HyperfAuth\Exception\GuardException;
-use Qbhy\HyperfAuth\Exception\UserProviderException;
-use function Hyperf\Support\make;
-
-/**
- * Class AuthManager.
- * @method login(Authenticatable $user)
- * @method null|Authenticatable user($token = null)
- * @method bool check($token = null)
- * @method logout()
- * @method string getName()
- * @method bool guest()
- * @method getProvider()
- * @method id($token = null)
- * @mixin AuthGuard
- */
-class AuthManager
-{
-    protected string $defaultDriver = 'default';
-
-    protected array $guards = [];
-
-    protected array $providers = [];
-
-    protected array $config;
-
-    public function __construct(ConfigInterface $config)
-    {
-        $this->config = $config->get('auth');
-    }
-
-    public function __call($name, $arguments)
-    {
-        $guard = $this->guard();
-
-        if (method_exists($guard, $name)) {
-            return call_user_func_array([$guard, $name], $arguments);
-        }
-
-        throw new GuardException('Method not defined. method:' . $name);
-    }
-
-    /**
-     * @throws GuardException
-     * @throws UserProviderException
-     */
-    public function guard(?string $name = null): AuthGuard
-    {
-        $name = $name ?? $this->defaultGuard();
-
-        if (empty($this->config['guards'][$name])) {
-            throw new GuardException("Does not support this driver: {$name}");
-        }
-
-        $config = $this->config['guards'][$name];
-        $userProvider = $this->provider($config['provider'] ?? $this->defaultDriver);
-
-        return $this->guards[$name] ?? $this->guards[$name] = make(
-            $config['driver'],
-            compact('name', 'config', 'userProvider')
-        );
-    }
-
-    /**
-     * @throws UserProviderException
-     */
-    public function provider(?string $name = null): UserProvider
-    {
-        $name = $name ?? $this->defaultProvider();
-
-        if (empty($this->config['providers'][$name])) {
-            throw new UserProviderException("Does not support this provider: {$name}");
-        }
-
-        $config = $this->config['providers'][$name];
-
-        return $this->providers[$name] ?? $this->providers[$name] = make(
-            $config['driver'],
-            [
-                'config' => $config,
-                'name' => $name,
-            ]
-        );
-    }
-
-    public function defaultGuard(): string
-    {
-        return $this->config['default']['guard'] ?? $this->defaultDriver;
-    }
-
-    public function defaultProvider(): string
-    {
-        return $this->config['default']['provider'] ?? $this->defaultDriver;
-    }
-
-    public function getGuards(): array
-    {
-        return $this->guards;
-    }
-}

+ 0 - 43
vendor/96qbhy/hyperf-auth/src/AuthMiddleware.php

@@ -1,43 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-namespace Qbhy\HyperfAuth;
-
-use Hyperf\Di\Annotation\Inject;
-use Psr\Http\Message\ResponseInterface;
-use Psr\Http\Message\ServerRequestInterface;
-use Psr\Http\Server\MiddlewareInterface;
-use Psr\Http\Server\RequestHandlerInterface;
-use Qbhy\HyperfAuth\Exception\UnauthorizedException;
-
-/**
- * Class AuthMiddleware.
- */
-class AuthMiddleware implements MiddlewareInterface
-{
-    protected array $guards = [null];
-
-    #[Inject(AuthManager::class)]
-    protected AuthManager $auth;
-
-    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
-    {
-        foreach ($this->guards as $name) {
-            $guard = $this->auth->guard($name);
-
-            if (! $guard->user() instanceof Authenticatable) {
-                throw new UnauthorizedException("Without authorization from {$guard->getName()} guard", $guard);
-            }
-        }
-
-        return $handler->handle($request);
-    }
-}

+ 0 - 19
vendor/96qbhy/hyperf-auth/src/Authenticatable.php

@@ -1,19 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-namespace Qbhy\HyperfAuth;
-
-interface Authenticatable
-{
-    public function getId();
-
-    public static function retrieveById($key): ?Authenticatable;
-}

+ 0 - 44
vendor/96qbhy/hyperf-auth/src/ConfigProvider.php

@@ -1,44 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-namespace Qbhy\HyperfAuth;
-
-class ConfigProvider
-{
-    public function __invoke(): array
-    {
-        return [
-            'dependencies' => [
-            ],
-            'commands' => [
-            ],
-            'annotations' => [
-                'scan' => [
-                    'paths' => [
-                        __DIR__,
-                    ],
-                    'ignore_annotations' => [
-                        'mixin',
-                    ],
-                ],
-            ],
-            'publish' => [
-                [
-                    'id' => 'auth',
-                    'description' => 'auth 组件配置.', // 描述
-                    // 建议默认配置放在 publish 文件夹中,文件命名和组件名称相同
-                    'source' => __DIR__ . '/../publish/auth.php',  // 对应的配置文件路径
-                    'destination' => BASE_PATH . '/config/autoload/auth.php', // 复制为这个路径下的该文件
-                ],
-            ],
-        ];
-    }
-}

+ 0 - 40
vendor/96qbhy/hyperf-auth/src/Events/ForcedOfflineEvent.php

@@ -1,40 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-namespace Qbhy\HyperfAuth\Events;
-
-use Qbhy\HyperfAuth\Authenticatable;
-
-/**
- * 被迫下线事件
- * Class ForcedOfflineEvent.
- */
-class ForcedOfflineEvent
-{
-    /**
-     * 用户实例.
-     */
-    public Authenticatable $user;
-
-    /**
-     * 客户端标识.
-     */
-    public string $client;
-
-    /**
-     * ForcedOfflineEvent constructor.
-     */
-    public function __construct(Authenticatable $user, string $client)
-    {
-        $this->user = $user;
-        $this->client = $client;
-    }
-}

+ 0 - 16
vendor/96qbhy/hyperf-auth/src/Exception/AuthException.php

@@ -1,16 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-namespace Qbhy\HyperfAuth\Exception;
-
-abstract class AuthException extends \RuntimeException
-{
-}

+ 0 - 16
vendor/96qbhy/hyperf-auth/src/Exception/GuardException.php

@@ -1,16 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-namespace Qbhy\HyperfAuth\Exception;
-
-class GuardException extends AuthException
-{
-}

+ 0 - 39
vendor/96qbhy/hyperf-auth/src/Exception/UnauthorizedException.php

@@ -1,39 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-namespace Qbhy\HyperfAuth\Exception;
-
-use Qbhy\HyperfAuth\AuthGuard;
-use Throwable;
-
-class UnauthorizedException extends AuthException
-{
-    protected ?AuthGuard $guard;
-
-    protected int $statusCode = 401;
-
-    public function __construct(string $message, AuthGuard $guard = null, Throwable $previous = null)
-    {
-        parent::__construct($message, 401, $previous);
-        $this->guard = $guard;
-    }
-
-    public function getStatusCode(): int
-    {
-        return $this->statusCode;
-    }
-
-    public function setStatusCode(int $statusCode): static
-    {
-        $this->statusCode = $statusCode;
-        return $this;
-    }
-}

+ 0 - 16
vendor/96qbhy/hyperf-auth/src/Exception/UserProviderException.php

@@ -1,16 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-namespace Qbhy\HyperfAuth\Exception;
-
-class UserProviderException extends AuthException
-{
-}

+ 0 - 60
vendor/96qbhy/hyperf-auth/src/Guard/AbstractAuthGuard.php

@@ -1,60 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-namespace Qbhy\HyperfAuth\Guard;
-
-use Qbhy\HyperfAuth\Authenticatable;
-use Qbhy\HyperfAuth\AuthGuard;
-use Qbhy\HyperfAuth\UserProvider;
-
-abstract class AbstractAuthGuard implements AuthGuard
-{
-    protected array $config;
-
-    protected string $name;
-
-    protected UserProvider $userProvider;
-
-    /**
-     * AbstractAuthGuard constructor.
-     */
-    public function __construct(array $config, string $name, UserProvider $userProvider)
-    {
-        $this->config = $config;
-        $this->name = $name;
-        $this->userProvider = $userProvider;
-    }
-
-    public function getName(): string
-    {
-        return $this->name;
-    }
-
-    public function check(): bool
-    {
-        return $this->user() instanceof Authenticatable;
-    }
-
-    public function guest(): bool
-    {
-        return ! $this->check();
-    }
-
-    public function getProvider(): UserProvider
-    {
-        return $this->userProvider;
-    }
-
-    public function id()
-    {
-        return $this->user()->getId();
-    }
-}

+ 0 - 207
vendor/96qbhy/hyperf-auth/src/Guard/JwtGuard.php

@@ -1,207 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-namespace Qbhy\HyperfAuth\Guard;
-
-use Hyperf\Context\Context;
-use Hyperf\HttpServer\Contract\RequestInterface;
-use Hyperf\Stringable\Str;
-use Qbhy\HyperfAuth\Authenticatable;
-use Qbhy\HyperfAuth\Exception\AuthException;
-use Qbhy\HyperfAuth\Exception\UnauthorizedException;
-use Qbhy\HyperfAuth\UserProvider;
-use Qbhy\SimpleJwt\Exceptions\TokenExpiredException;
-use Qbhy\SimpleJwt\JWTManager;
-use function Hyperf\Support\make;
-
-class JwtGuard extends AbstractAuthGuard
-{
-    protected JWTManager $jwtManager;
-
-    protected RequestInterface $request;
-
-    protected mixed $headerName = 'Authorization';
-
-    /**
-     * JwtGuardAbstract constructor.
-     */
-    public function __construct(
-        array $config,
-        string $name,
-        UserProvider $userProvider,
-        RequestInterface $request
-    ) {
-        parent::__construct($config, $name, $userProvider);
-        $this->headerName = $config['header_name'] ?? 'Authorization';
-        $this->jwtManager = new JWTManager($config);
-        $this->request = $request;
-    }
-
-    public function parseToken()
-    {
-        $header = $this->request->header($this->headerName, '');
-        if (Str::startsWith($header, 'Bearer ')) {
-            return Str::substr($header, 7);
-        }
-
-        if ($this->request->has('token')) {
-            return $this->request->input('token');
-        }
-
-        return null;
-    }
-
-    public function login(Authenticatable $user, array $payload = [])
-    {
-        $token = $this->getJwtManager()->make(array_merge($payload, [
-            'uid' => $user->getId(),
-            's' => str_random(),
-        ]))->token();
-
-        Context::set($this->resultKey($token), $user);
-
-        return $token;
-    }
-
-    /**
-     * 获取用于存到 context 的 key.
-     *
-     * @param $token
-     * @return string
-     */
-    public function resultKey($token)
-    {
-        return $this->name . '.auth.result' . $this->getJti($token);
-    }
-
-    public function user(?string $token = null): ?Authenticatable
-    {
-        $token = $token ?? $this->parseToken();
-        if (Context::has($key = is_string($token) ? $this->resultKey($token) : '_nothing')) {
-            $result = Context::get($key);
-            if ($result instanceof UnauthorizedException) {
-                throw $result;
-            }
-            return $result ?: null;
-        }
-
-        try {
-            if ($token) {
-                $jwt = $this->getJwtManager()->parse($token);
-                $uid = $jwt->getPayload()['uid'] ?? null;
-                $user = $uid ? $this->userProvider->retrieveByCredentials($uid) : null;
-                Context::set($key, $user ?: 0);
-
-                return $user;
-            }
-
-            throw new UnauthorizedException('The token is required.', $this);
-        } catch (\Throwable $exception) {
-            $newException = $exception instanceof AuthException ? $exception : new UnauthorizedException(
-                $exception->getMessage(),
-                $this,
-                $exception
-            );
-            Context::set($key, $newException);
-            throw $newException;
-        }
-    }
-
-    public function check(?string $token = null): bool
-    {
-        try {
-            return $this->user($token) instanceof Authenticatable;
-        } catch (AuthException $exception) {
-            return false;
-        }
-    }
-
-    public function guest(?string $token = null): bool
-    {
-        return ! $this->check($token);
-    }
-
-    /**
-     * 刷新 token,旧 token 会失效.
-     *
-     * @throws \Qbhy\SimpleJwt\Exceptions\InvalidTokenException
-     * @throws \Qbhy\SimpleJwt\Exceptions\JWTException
-     * @throws \Qbhy\SimpleJwt\Exceptions\SignatureException
-     * @throws \Qbhy\SimpleJwt\Exceptions\TokenExpiredException
-     */
-    public function refresh(?string $token = null): ?string
-    {
-        $token = $token ?: $this->parseToken();
-
-        if ($token) {
-            Context::set($this->resultKey($token), null);
-
-            try {
-                $jwt = $this->getJwtManager()->parse($token);
-            } catch (TokenExpiredException $exception) {
-                $jwt = $exception->getJwt();
-            }
-
-            $this->getJwtManager()->addBlacklist($jwt);
-
-            return $this->getJwtManager()->refresh($jwt)->token();
-        }
-
-        return null;
-    }
-
-    public function logout($token = null)
-    {
-        if ($token = $token ?? $this->parseToken()) {
-            Context::set($this->resultKey($token), null);
-            $this->getJwtManager()->addBlacklist(
-                $this->getJwtManager()->parse($token)
-            );
-            return true;
-        }
-        return false;
-    }
-
-    public function getPayload($token = null): ?array
-    {
-        if ($token = $token ?? $this->parseToken()) {
-            return $this->getJwtManager()->justParse($token)->getPayload();
-        }
-        return null;
-    }
-
-    public function getJwtManager(): JWTManager
-    {
-        return $this->jwtManager;
-    }
-
-    public function id($token = null)
-    {
-        if ($token = $token ?? $this->parseToken()) {
-            return $this->getJwtManager()->parse($token)->getPayload()['uid'];
-        }
-        return null;
-    }
-
-    /**
-     * 获取 token 标识.
-     * 为了性能,直接 md5.
-     *
-     * @throws \Qbhy\SimpleJwt\Exceptions\SignatureException
-     * @throws \Qbhy\SimpleJwt\Exceptions\TokenExpiredException
-     * @throws \Qbhy\SimpleJwt\Exceptions\InvalidTokenException
-     * @return mixed|string
-     */
-    protected function getJti(string $token): string
-    {
-        return md5($token);
-    }
-}

+ 0 - 100
vendor/96qbhy/hyperf-auth/src/Guard/SessionGuard.php

@@ -1,100 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-namespace Qbhy\HyperfAuth\Guard;
-
-use Hyperf\Context\Context;
-use Hyperf\Contract\SessionInterface;
-use Qbhy\HyperfAuth\Authenticatable;
-use Qbhy\HyperfAuth\Exception\AuthException;
-use Qbhy\HyperfAuth\Exception\UnauthorizedException;
-use Qbhy\HyperfAuth\UserProvider;
-
-class SessionGuard extends AbstractAuthGuard
-{
-    protected SessionInterface $session;
-
-    /**
-     * JwtGuardAbstract constructor.
-     */
-    public function __construct(array $config, string $name, UserProvider $userProvider, SessionInterface $session)
-    {
-        parent::__construct($config, $name, $userProvider);
-        $this->session = $session;
-    }
-
-    public function login(Authenticatable $user)
-    {
-        $this->session->put($this->sessionKey(), $user->getId());
-
-        Context::set($this->resultKey(), $user);
-
-        return true;
-    }
-
-    public function resultKey()
-    {
-        return $this->name . 'auth.result:' . $this->session->getId();
-    }
-
-    public function user(): ?Authenticatable
-    {
-        if (Context::has($key = $this->resultKey())) {
-            $result = Context::get($key);
-            if ($result instanceof \Throwable) {
-                throw $result;
-            }
-            return $result ?: null;
-        }
-
-        try {
-            if ($credentials = $this->session->get($this->sessionKey())) {
-                $user = $this->userProvider->retrieveByCredentials($credentials);
-                Context::set($key, $user ?? 0);
-                return $user;
-            }
-            throw new UnauthorizedException('Unauthorized.', $this);
-        } catch (\Throwable $exception) {
-            $newException = $exception instanceof AuthException ? $exception : new UnauthorizedException(
-                $exception->getMessage(),
-                $this,
-                $exception
-            );
-            Context::set($key, $newException);
-            throw $newException;
-        }
-    }
-
-    public function id()
-    {
-        return $this->session->get($this->sessionKey());
-    }
-
-    public function check(): bool
-    {
-        try {
-            return $this->user() instanceof Authenticatable;
-        } catch (AuthException $exception) {
-            return false;
-        }
-    }
-
-    public function logout()
-    {
-        Context::set($this->resultKey(), null);
-        return (bool) $this->session->remove($this->sessionKey());
-    }
-
-    protected function sessionKey(): string
-    {
-        return 'auth_' . $this->name;
-    }
-}

+ 0 - 79
vendor/96qbhy/hyperf-auth/src/Guard/SsoGuard.php

@@ -1,79 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-namespace Qbhy\HyperfAuth\Guard;
-
-use Hyperf\Context\Context;
-use Hyperf\HttpServer\Contract\RequestInterface;
-use Hyperf\Redis\Redis;
-use Psr\EventDispatcher\EventDispatcherInterface;
-use Qbhy\HyperfAuth\Authenticatable;
-use Qbhy\HyperfAuth\Events\ForcedOfflineEvent;
-use Qbhy\HyperfAuth\UserProvider;
-use function Hyperf\Support\make;
-
-class SsoGuard extends JwtGuard
-{
-    /**
-     * @var Redis
-     */
-    protected mixed $redis;
-
-    /**
-     * @var EventDispatcherInterface
-     */
-    protected mixed $eventDispatcher;
-
-    public function __construct(array $config, string $name, UserProvider $userProvider, RequestInterface $request)
-    {
-        parent::__construct($config, $name, $userProvider, $request);
-        $this->eventDispatcher = make(EventDispatcherInterface::class);
-
-        // 初始化redis实例
-        $this->redis = is_callable($config['redis']) ? call_user_func_array($config['redis'], []) : make(Redis::class);
-    }
-
-    public function getClients(): array
-    {
-        return $this->config['clients'] ?? ['unknown'];
-    }
-
-    public function login(Authenticatable $user, array $payload = [], string $client = null)
-    {
-        $client = $client ?: $this->getClients()[0]; // 需要至少配置一个客户端
-        $token = parent::login($user, $payload);
-        $redisKey = str_replace('{uid}', (string) $user->getId(), $this->config['redis_key'] ?? 'u:token:{uid}');
-
-        if (! empty($previousToken = $this->redis->hGet($redisKey, $client)) && $previousToken != $token) {
-            // 如果存在上一个 token,就给他拉黑,也就是强制下线
-            Context::set($this->resultKey($previousToken), null);
-            $this->getJwtManager()->addBlacklist($this->getJwtManager()->justParse($previousToken));
-            $this->eventDispatcher->dispatch(new ForcedOfflineEvent($user, $client));
-        }
-
-        $this->redis->hSet($redisKey, $client, $token);
-
-        return $token;
-    }
-
-    public function refresh(?string $token = null, string $client = null): ?string
-    {
-        $token = parent::refresh($token);
-
-        if ($token) {
-            $client = $client ?: $this->getClients()[0]; // 需要至少配置一个客户端
-            $redisKey = str_replace('{uid}', (string) $this->id($token), $this->config['redis_key'] ?? 'u:token:{uid}');
-            $this->redis->hSet($redisKey, $client, $token);
-        }
-
-        return $token;
-    }
-}

+ 0 - 184
vendor/96qbhy/hyperf-auth/src/HyperfRedisCache.php

@@ -1,184 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-namespace Qbhy\HyperfAuth;
-
-use Doctrine\Common\Cache\Cache;
-use Doctrine\Common\Cache\RedisCache;
-use Hyperf\Redis\Redis;
-use Redis as RedisExt;
-
-/**
- * Class HyperfRedisCache.
- */
-class HyperfRedisCache extends RedisCache
-{
-    protected ?Redis $redis;
-
-    public function __construct(Redis $redis)
-    {
-        $this->redis = $redis;
-    }
-
-    /**
-     * Sets the redis instance to use.
-     *
-     * @param mixed $redis
-     */
-    public function setRedis($redis)
-    {
-//        $redis->setOption(RedisExt::OPT_SERIALIZER, $this->getSerializerValue());
-        $this->redis = $redis;
-    }
-
-    /**
-     * Gets the redis instance used by the cache.
-     */
-    public function getRedis(): ?Redis
-    {
-        return $this->redis;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function doFetch($id)
-    {
-        return $this->redis->get($id);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function doFetchMultiple(array $keys): array | bool
-    {
-        $fetchedItems = array_combine($keys, $this->redis->mget($keys));
-
-        // Redis mget returns false for keys that do not exist. So we need to filter those out unless it's the real data.
-        $keysToFilter = array_keys(array_filter($fetchedItems, static function ($item): bool {
-            return $item === false;
-        }));
-
-        if ($keysToFilter) {
-            $multi = $this->redis->multi(RedisExt::PIPELINE);
-            foreach ($keysToFilter as $key) {
-                $multi->exists($key);
-            }
-            $existItems = array_filter($multi->exec());
-            $missedItemKeys = array_diff_key($keysToFilter, $existItems);
-            $fetchedItems = array_diff_key($fetchedItems, array_fill_keys($missedItemKeys, true));
-        }
-
-        return $fetchedItems;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function doSaveMultiple(array $keysAndValues, $lifetime = 0): bool
-    {
-        if ($lifetime) {
-            // Keys have lifetime, use SETEX for each of them
-            $multi = $this->redis->multi(RedisExt::PIPELINE);
-            foreach ($keysAndValues as $key => $value) {
-                $multi->setex($key, $lifetime, $value);
-            }
-            $succeeded = array_filter($multi->exec());
-
-            return count($succeeded) == count($keysAndValues);
-        }
-
-        // No lifetime, use MSET
-        return (bool) $this->redis->mset($keysAndValues);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function doContains($id): bool
-    {
-        $exists = $this->redis->exists($id);
-
-        if (is_bool($exists)) {
-            return $exists;
-        }
-
-        return $exists > 0;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function doSave($id, $data, $lifeTime = 0): bool
-    {
-        if ($lifeTime > 0) {
-            return $this->redis->setex($id, $lifeTime, $data);
-        }
-
-        return $this->redis->set($id, $data);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function doDelete($id): bool
-    {
-        return $this->redis->del($id) >= 0;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function doDeleteMultiple(array $keys): bool
-    {
-        return $this->redis->del($keys) >= 0;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function doFlush(): bool
-    {
-        return $this->redis->flushDB();
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    protected function doGetStats(): ?array
-    {
-        $info = $this->redis->info();
-
-        return [
-            Cache::STATS_HITS => $info['keyspace_hits'],
-            Cache::STATS_MISSES => $info['keyspace_misses'],
-            Cache::STATS_UPTIME => $info['uptime_in_seconds'],
-            Cache::STATS_MEMORY_USAGE => $info['used_memory'],
-            Cache::STATS_MEMORY_AVAILABLE => false,
-        ];
-    }
-
-    /**
-     * Returns the serializer constant to use. If Redis is compiled with
-     * igbinary support, that is used. Otherwise the default PHP serializer is
-     * used.
-     *
-     * @return int One of the Redis::SERIALIZER_* constants
-     */
-    protected function getSerializerValue(): int
-    {
-        if (defined('Redis::SERIALIZER_IGBINARY') && extension_loaded('igbinary')) {
-            return RedisExt::SERIALIZER_IGBINARY;
-        }
-
-        return RedisExt::SERIALIZER_PHP;
-    }
-}

+ 0 - 30
vendor/96qbhy/hyperf-auth/src/Provider/AbstractUserProvider.php

@@ -1,30 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-namespace Qbhy\HyperfAuth\Provider;
-
-use Qbhy\HyperfAuth\UserProvider;
-
-abstract class AbstractUserProvider implements UserProvider
-{
-    protected array $config;
-
-    protected string $name;
-
-    /**
-     * AbstractUserProvider constructor.
-     */
-    public function __construct(array $config, string $name)
-    {
-        $this->config = $config;
-        $this->name = $name;
-    }
-}

+ 0 - 27
vendor/96qbhy/hyperf-auth/src/Provider/EloquentProvider.php

@@ -1,27 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-namespace Qbhy\HyperfAuth\Provider;
-
-use Qbhy\HyperfAuth\Authenticatable;
-
-class EloquentProvider extends AbstractUserProvider
-{
-    public function retrieveByCredentials($credentials): ?Authenticatable
-    {
-        return call_user_func_array([$this->config['model'], 'retrieveById'], [$credentials]);
-    }
-
-    public function validateCredentials(Authenticatable $user, $credentials): bool
-    {
-        return $user->getId() === $credentials;
-    }
-}

+ 0 - 29
vendor/96qbhy/hyperf-auth/src/UserProvider.php

@@ -1,29 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-namespace Qbhy\HyperfAuth;
-
-interface UserProvider
-{
-    /**
-     * Retrieve a user by the given credentials.
-     *
-     * @param $credentials
-     */
-    public function retrieveByCredentials($credentials): ?Authenticatable;
-
-    /**
-     * Validate a user against the given credentials.
-     *
-     * @param $credentials
-     */
-    public function validateCredentials(Authenticatable $user, $credentials): bool;
-}

+ 0 - 56
vendor/96qbhy/hyperf-auth/src/helper.php

@@ -1,56 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/hyperf-auth.
- *
- * @link     https://github.com/qbhy/hyperf-auth
- * @document https://github.com/qbhy/hyperf-auth/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/hyperf-auth/blob/master/LICENSE
- */
-use Hyperf\Context\ApplicationContext;
-use Qbhy\HyperfAuth\AuthManager;
-
-if (! function_exists('auth')) {
-    /**
-     * 建议视图中使用该函数,其他地方请使用注入.
-     * @throws \Qbhy\HyperfAuth\Exception\UserProviderException
-     * @throws \Qbhy\HyperfAuth\Exception\GuardException
-     * @return AuthManager|mixed|\Qbhy\HyperfAuth\AuthGuard
-     */
-    function auth(?string $guard = null): mixed
-    {
-        $auth = ApplicationContext::getContainer()->get(AuthManager::class);
-
-        if (is_null($guard)) {
-            return $auth;
-        }
-
-        return $auth->guard($guard);
-    }
-}
-
-if (! function_exists('str_random')) {
-    function str_random($num = 6): string
-    {
-        $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
-        $randomString = '';
-        for ($i = 0; $i < $num; ++$i) {
-            $index = rand(0, 61);
-            $randomString .= $characters[$index];
-        }
-        return $randomString;
-    }
-}
-
-if (! function_exists('dev_clock')) {
-    function dev_clock(string $title, callable $handler)
-    {
-        $start = microtime(true);
-        $result = $handler();
-        $end = microtime(true);
-        dump($title . ' 用时:' . (($end - $start) * 1000) . 'ms');
-        return $result;
-    }
-}

+ 0 - 6
vendor/96qbhy/simple-jwt/.gitignore

@@ -1,6 +0,0 @@
-/vendor/
-.idea/
-composer.lock
-.phpunit.result.cache
-cghooks.lock
-

+ 0 - 89
vendor/96qbhy/simple-jwt/.php_cs

@@ -1,89 +0,0 @@
-<?php
-
-$header = <<<'EOF'
-This file is part of qbhy/simple-jwt.
-
-@link     https://github.com/qbhy/simple-jwt
-@document https://github.com/qbhy/simple-jwt/blob/master/README.md
-@contact  qbhy0715@qq.com
-@license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
-EOF;
-
-return PhpCsFixer\Config::create()
-    ->setRiskyAllowed(true)
-    ->setRules([
-        '@PSR2' => true,
-        '@Symfony' => true,
-        '@DoctrineAnnotation' => true,
-        '@PhpCsFixer' => true,
-        'header_comment' => [
-            'commentType' => 'PHPDoc',
-            'header' => $header,
-            'separate' => 'none',
-            'location' => 'after_declare_strict',
-        ],
-        'array_syntax' => [
-            'syntax' => 'short'
-        ],
-        'list_syntax' => [
-            'syntax' => 'short'
-        ],
-        'concat_space' => [
-            'spacing' => 'one'
-        ],
-        'blank_line_before_statement' => [
-            'statements' => [
-                'declare',
-            ],
-        ],
-        'general_phpdoc_annotation_remove' => [
-            'annotations' => [
-                'author'
-            ],
-        ],
-        'ordered_imports' => [
-            'imports_order' => [
-                'class', 'function', 'const',
-            ],
-            'sort_algorithm' => 'alpha',
-        ],
-        'single_line_comment_style' => [
-            'comment_types' => [
-            ],
-        ],
-        'yoda_style' => [
-            'always_move_variable' => false,
-            'equal' => false,
-            'identical' => false,
-        ],
-        'phpdoc_align' => [
-            'align' => 'left',
-        ],
-        'multiline_whitespace_before_semicolons' => [
-            'strategy' => 'no_multi_line',
-        ],
-        'class_attributes_separation' => true,
-        'combine_consecutive_unsets' => true,
-        'declare_strict_types' => true,
-        'linebreak_after_opening_tag' => true,
-        'lowercase_constants' => true,
-        'lowercase_static_reference' => true,
-        'no_useless_else' => true,
-        'no_unused_imports' => true,
-        'not_operator_with_successor_space' => true,
-        'not_operator_with_space' => false,
-        'ordered_class_elements' => true,
-        'php_unit_strict' => false,
-        'phpdoc_separation' => false,
-        'single_quote' => true,
-        'standardize_not_equals' => true,
-        'multiline_comment_opening_closing' => true,
-    ])
-    ->setFinder(
-        PhpCsFixer\Finder::create()
-            ->exclude('public')
-            ->exclude('runtime')
-            ->exclude('vendor')
-            ->in(__DIR__)
-    )
-    ->setUsingCache(false);

+ 0 - 21
vendor/96qbhy/simple-jwt/LICENSE

@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2020 qbhy
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.

+ 0 - 78
vendor/96qbhy/simple-jwt/README.md

@@ -1,78 +0,0 @@
-# simple-jwt
-
-超简单的 jwt 实现。支持 Laravel、Hyperf 以及支持 composer 的其他框架
-
-## 如何安装 ?
-
-```bash
-composer require 96qbhy/simple-jwt
-```
-
-## 如何使用 ?
-
-```php
-require 'vendor/autoload.php';
-
-use Qbhy\SimpleJwt\JWTManager;
-use Qbhy\SimpleJwt\JWT;
-use Qbhy\SimpleJwt\Encoders;
-use Qbhy\SimpleJwt\EncryptAdapters;
-use Qbhy\SimpleJwt\Exceptions;
-
-$secret = '96qbhy/simple-jwt';
-
-$headers = ['ver' => 0.1,];
-
-$payload = [
-    'user_id' => 'qbhy@gmail.com',
-    'tester'  => 'qbhy',
-];
-
-// 可以使用自己实现的 encrypter 进行签名和校验,请继承自 AbstractEncrypter 抽象类
-$encrypter = new EncryptAdapters\Md5Encrypter($secret);
-
-// 可以使用自己实现的 encoder 进行编码,请实现 Encoder 接口
-$encoder = new Encoders\Base64Encoder();
-$cache = function(JWTManager $JWTManager){
-return new \Doctrine\Common\Cache\FilesystemCache(sys_get_temp_dir());
-};
-
-// 实例化 jwt manager
-$jwtManager = new JWTManager(compact('secret', 'encode','cache'));
-
-// 设置 token 有效时间,单位 秒
-$jwtManager->setTtl(60);
-// 设置 token 过期后多久时间内允许刷新,单位 秒
-$jwtManager->setRefreshTtl(120);
-
-// 通过 jwt manager 实例化 jwt ,标准 jwt
-$jwt0 = $jwtManager->make($payload, $headers);
-
-// 生成 token,当然你也可以使用链式调用,例如:  $jwtManager->make($payload, $headers)->token()
-$token = $jwt0->token();
-print_r($token);
-
-try {
-// 通过 token 得到 jwt 对象
-    $jwt1 = $jwtManager->parse($token);
-    
-    // 单纯解析,只判断签名是否正确,不判断时效性和黑名单 
-//    $jwt1 = $jwtManager->justParse($token);
-} catch (Exceptions\TokenExpiredException $tokenExpiredException) {
-    // 如果已经过期了,也可以尝试刷新此 jwt ,第二个参数如果为 true 将忽略 refresh ttl 检查
-    $jwt1 = $jwtManager->refresh($tokenExpiredException->getJwt(), true);
-}
-
-// 得到 payload
-$jwt1->getPayload();
-
-// 得到 headers
-$jwt1->getHeaders();
-
-print_r($jwt1);
-
-// 自己实例化 jwt ,完全纯净的 jwt ,无多余 payload
-$jwt2 = new JWT($jwtManager, $headers, $payload);
-```
-
-96qbhy@gmail.com  

+ 0 - 57
vendor/96qbhy/simple-jwt/composer.json

@@ -1,57 +0,0 @@
-{
-    "name": "96qbhy/simple-jwt",
-    "description": "简单的 jwt 实现",
-    "authors": [
-        {
-            "name": "96qbhy",
-            "email": "96qbhy@gmail.com"
-        }
-    ],
-    "autoload": {
-        "psr-4": {
-            "Qbhy\\SimpleJwt\\": "src/"
-        }
-    },
-    "autoload-dev": {
-        "psr-4": {
-            "Qbhy\\SimpleJwt\\Tests\\": "tests/"
-        }
-    },
-    "require": {
-        "php": ">=8.1",
-        "ext-json": ">=1.0",
-        "doctrine/cache": "^1.10"
-
-    },
-    "license": "Apache-2.0",
-    "require-dev": {
-        "phpunit/phpunit": "^10.0.0",
-        "friendsofphp/php-cs-fixer": "^3.0",
-        "brainmaestro/composer-git-hooks": "^2.8",
-        "hyperf/context": "~3.1.0",
-        "hyperf/config": "^3.1"
-    },
-    "extra": {
-        "hooks": {
-            "pre-commit": [
-                "echo committing as $(git config user.name)",
-                "vendor/bin/php-cs-fixer fix .",
-                "git add .",
-                "composer test"
-            ]
-        },
-        "hyperf": {
-            "config": "Qbhy\\SimpleJwt\\Hyperf\\ConfigProvider"
-        },
-        "laravel": {
-            "providers": [
-                "Qbhy\\SimpleJwt\\Laravel\\ServiceProvider"
-            ]
-        }
-    },
-    "scripts": {
-        "test": "vendor/bin/phpunit",
-        "post-install-cmd": "cghooks add --ignore-lock",
-        "post-update-cmd": "cghooks update"
-    }
-}

+ 0 - 18
vendor/96qbhy/simple-jwt/phpunit.xml

@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
-         backupGlobals="false"
-         backupStaticAttributes="false"
-         bootstrap="vendor/autoload.php"
-         colors="true"
-         convertErrorsToExceptions="true"
-         convertNoticesToExceptions="true"
-         convertWarningsToExceptions="true"
-         processIsolation="false"
-         stopOnFailure="false">
-    <testsuites>
-        <testsuite name="Unit">
-            <directory suffix="Test.php">./tests/Unit</directory>
-        </testsuite>
-    </testsuites>
-</phpunit>

+ 0 - 50
vendor/96qbhy/simple-jwt/src/AbstractEncrypter.php

@@ -1,50 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt;
-
-use Qbhy\SimpleJwt\Interfaces\Encrypter;
-
-abstract class AbstractEncrypter implements Encrypter
-{
-    /** @var string */
-    protected $secret;
-
-    public function __construct($secret)
-    {
-        $this->secret = $secret;
-    }
-
-    public function getSecret(): string
-    {
-        return $this->secret;
-    }
-
-    public function check(string $signatureString, string $signature): bool
-    {
-        return $this->signature($signatureString) === $signature;
-    }
-
-    /**
-     * Get the number of bytes in cryptographic strings.
-     *
-     * @param string $str
-     *
-     * @return int
-     */
-    public static function safeStrlen($str)
-    {
-        if (\function_exists('mb_strlen')) {
-            return \mb_strlen($str, '8bit');
-        }
-        return \strlen($str);
-    }
-}

+ 0 - 27
vendor/96qbhy/simple-jwt/src/Encoders/Base64Encoder.php

@@ -1,27 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\Encoders;
-
-use Qbhy\SimpleJwt\Interfaces\Encoder;
-
-class Base64Encoder implements Encoder
-{
-    public function encode(string $string): string
-    {
-        return base64_encode($string);
-    }
-
-    public function decode(string $string): string
-    {
-        return base64_decode($string);
-    }
-}

+ 0 - 27
vendor/96qbhy/simple-jwt/src/Encoders/Base64UrlSafeEncoder.php

@@ -1,27 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\Encoders;
-
-use Qbhy\SimpleJwt\Interfaces\Encoder;
-
-class Base64UrlSafeEncoder implements Encoder
-{
-    public function encode(string $string): string
-    {
-        return rtrim(strtr(base64_encode($string), '+/', '-_'), '=');
-    }
-
-    public function decode(string $string): string
-    {
-        return base64_decode(strtr($string, '-_', '+/'));
-    }
-}

+ 0 - 27
vendor/96qbhy/simple-jwt/src/EncryptAdapters/CryptEncrypter.php

@@ -1,27 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\EncryptAdapters;
-
-use Qbhy\SimpleJwt\AbstractEncrypter;
-
-class CryptEncrypter extends AbstractEncrypter
-{
-    public function signature(string $signatureString): string
-    {
-        return crypt($signatureString, $this->getSecret());
-    }
-
-    public static function alg(): string
-    {
-        return 'php-crypt';
-    }
-}

+ 0 - 44
vendor/96qbhy/simple-jwt/src/EncryptAdapters/HS256Encrypter.php

@@ -1,44 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\EncryptAdapters;
-
-use Qbhy\SimpleJwt\AbstractEncrypter;
-
-class HS256Encrypter extends AbstractEncrypter
-{
-    public function signature(string $signatureString): string
-    {
-        return \hash_hmac('SHA256', $signatureString, $this->getSecret(), true);
-    }
-
-    public function check(string $signatureString, string $signature): bool
-    {
-        $hash = \hash_hmac('SHA256', $signatureString, $this->getSecret(), true);
-        if (\function_exists('hash_equals')) {
-            return \hash_equals($signature, $hash);
-        }
-        $len = \min(static::safeStrlen($signature), static::safeStrlen($hash));
-
-        $status = 0;
-        for ($i = 0; $i < $len; ++$i) {
-            $status |= (\ord($signature[$i]) ^ \ord($hash[$i]));
-        }
-        $status |= (static::safeStrlen($signature) ^ static::safeStrlen($hash));
-
-        return $status === 0;
-    }
-
-    public static function alg(): string
-    {
-        return 'HS256';
-    }
-}

+ 0 - 27
vendor/96qbhy/simple-jwt/src/EncryptAdapters/Md5Encrypter.php

@@ -1,27 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\EncryptAdapters;
-
-use Qbhy\SimpleJwt\AbstractEncrypter;
-
-class Md5Encrypter extends AbstractEncrypter
-{
-    public function signature(string $signatureString): string
-    {
-        return hash('md5', $signatureString . $this->getSecret());
-    }
-
-    public static function alg(): string
-    {
-        return 'md5';
-    }
-}

+ 0 - 32
vendor/96qbhy/simple-jwt/src/EncryptAdapters/PasswordHashEncrypter.php

@@ -1,32 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\EncryptAdapters;
-
-use Qbhy\SimpleJwt\AbstractEncrypter;
-
-class PasswordHashEncrypter extends AbstractEncrypter
-{
-    public function signature(string $signatureString): string
-    {
-        return password_hash(md5($signatureString . $this->getSecret()), PASSWORD_BCRYPT);
-    }
-
-    public function check(string $signatureString, string $signature): bool
-    {
-        return password_verify(md5($signatureString . $this->getSecret()), $signature);
-    }
-
-    public static function alg(): string
-    {
-        return 'bcrypt';
-    }
-}

+ 0 - 27
vendor/96qbhy/simple-jwt/src/EncryptAdapters/SHA1Encrypter.php

@@ -1,27 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\EncryptAdapters;
-
-use Qbhy\SimpleJwt\AbstractEncrypter;
-
-class SHA1Encrypter extends AbstractEncrypter
-{
-    public function signature(string $signatureString): string
-    {
-        return hash('sha1', $signatureString . $this->getSecret());
-    }
-
-    public static function alg(): string
-    {
-        return 'sha1';
-    }
-}

+ 0 - 16
vendor/96qbhy/simple-jwt/src/Exceptions/InvalidTokenException.php

@@ -1,16 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\Exceptions;
-
-class InvalidTokenException extends JWTException
-{
-}

+ 0 - 36
vendor/96qbhy/simple-jwt/src/Exceptions/JWTException.php

@@ -1,36 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\Exceptions;
-
-use Exception;
-use Qbhy\SimpleJwt\JWT;
-
-class JWTException extends Exception
-{
-    /** @var JWT */
-    protected $jwt;
-
-    /**
-     * @return static
-     */
-    public function setJwt(JWT $jwt)
-    {
-        $this->jwt = $jwt;
-
-        return $this;
-    }
-
-    public function getJwt(): JWT
-    {
-        return $this->jwt;
-    }
-}

+ 0 - 16
vendor/96qbhy/simple-jwt/src/Exceptions/SignatureException.php

@@ -1,16 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\Exceptions;
-
-class SignatureException extends JWTException
-{
-}

+ 0 - 16
vendor/96qbhy/simple-jwt/src/Exceptions/TokenBlacklistException.php

@@ -1,16 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\Exceptions;
-
-class TokenBlacklistException extends JWTException
-{
-}

+ 0 - 16
vendor/96qbhy/simple-jwt/src/Exceptions/TokenExpiredException.php

@@ -1,16 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\Exceptions;
-
-class TokenExpiredException extends JWTException
-{
-}

+ 0 - 16
vendor/96qbhy/simple-jwt/src/Exceptions/TokenNotActiveException.php

@@ -1,16 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\Exceptions;
-
-class TokenNotActiveException extends JWTException
-{
-}

+ 0 - 16
vendor/96qbhy/simple-jwt/src/Exceptions/TokenProviderException.php

@@ -1,16 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\Exceptions;
-
-class TokenProviderException extends JWTException
-{
-}

+ 0 - 16
vendor/96qbhy/simple-jwt/src/Exceptions/TokenRefreshExpiredException.php

@@ -1,16 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\Exceptions;
-
-class TokenRefreshExpiredException extends JWTException
-{
-}

+ 0 - 61
vendor/96qbhy/simple-jwt/src/Hyperf/ConfigProvider.php

@@ -1,61 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\Hyperf;
-
-use Hyperf\Contract\ConfigInterface;
-use Hyperf\Contract\ContainerInterface;
-use Hyperf\Context\ApplicationContext;
-use Qbhy\SimpleJwt\JWTManager;
-
-class ConfigProvider
-{
-    public function __invoke(): array
-    {
-        if (ApplicationContext::hasContainer()) {
-            /** @var ContainerInterface $container */
-            $container = ApplicationContext::getContainer();
-            $container->define(JWTManager::class, function () use ($container) {
-                return new JWTManager(
-                    $container->get(ConfigInterface::class)->get('simple-jwt', ['secret' => \Hyperf\Support\env('SIMPLE_JWT_SECRET')])
-                );
-            });
-        }
-
-        return [
-            // 合并到  config/autoload/dependencies.php 文件
-            'dependencies' => [],
-            // 合并到  config/autoload/annotations.php 文件
-            'annotations' => [
-                'scan' => [
-                    'paths' => [
-                        __DIR__,
-                    ],
-                ],
-            ],
-            // 默认 Command 的定义,合并到 Hyperf\Contract\ConfigInterface 内,换个方式理解也就是与 config/autoload/commands.php 对应
-            'commands' => [],
-            // 与 commands 类似
-            'listeners' => [],
-            // 组件默认配置文件,即执行命令后会把 source 的对应的文件复制为 destination 对应的的文件
-            'publish' => [
-                [
-                    'id' => 'simple-jwt',
-                    'description' => 'simple jwt 配置文件。', // 描述
-                    // 建议默认配置放在 publish 文件夹中,文件命名和组件名称相同
-                    'source' => __DIR__ . '/../Laravel/config/simple-jwt.php',  // 对应的配置文件路径
-                    'destination' => BASE_PATH . '/config/autoload/simple-jwt.php', // 复制为这个路径下的该文件
-                ],
-            ],
-            // 亦可继续定义其它配置,最终都会合并到与 ConfigInterface 对应的配置储存器中
-        ];
-    }
-}

+ 0 - 19
vendor/96qbhy/simple-jwt/src/Interfaces/Encoder.php

@@ -1,19 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\Interfaces;
-
-interface Encoder
-{
-    public function encode(string $string): string;
-
-    public function decode(string $string): string;
-}

+ 0 - 21
vendor/96qbhy/simple-jwt/src/Interfaces/Encrypter.php

@@ -1,21 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\Interfaces;
-
-interface Encrypter
-{
-    public function signature(string $signatureString): string;
-
-    public function check(string $signatureString, string $signature): bool;
-
-    public static function alg(): string;
-}

+ 0 - 21
vendor/96qbhy/simple-jwt/src/Interfaces/TokenProviderInterface.php

@@ -1,21 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\Interfaces;
-
-interface TokenProviderInterface
-{
-    public static function fromToken(string $token);
-
-    public function getToken();
-
-    public function buildPayload(): array;
-}

+ 0 - 17
vendor/96qbhy/simple-jwt/src/Interfaces/Tokenable.php

@@ -1,17 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\Interfaces;
-
-interface Tokenable
-{
-    public function token(): string;
-}

+ 0 - 72
vendor/96qbhy/simple-jwt/src/JWT.php

@@ -1,72 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt;
-
-/**
- * User: qbhy
- * Date: 2018/5/28
- * Time: 下午12:06.
- */
-class JWT
-{
-    /** @var array */
-    protected $headers = [
-        'typ' => 'jwt',
-    ];
-
-    /** @var array */
-    protected $payload = [];
-
-    /**
-     * @var JWTManager
-     */
-    protected $manager;
-
-    /**
-     * JWT constructor.
-     */
-    public function __construct(JWTManager $manager, array $headers, array $payload)
-    {
-        $this->manager = $manager;
-        $this->headers = array_merge($this->headers, $headers);
-        $this->payload = $payload;
-    }
-
-    public function token(): string
-    {
-        $signatureString = $this->generateSignatureString();
-
-        $signature = $this->manager->getEncoder()->encode(
-            $this->manager->getEncrypter()->signature($signatureString)
-        );
-
-        return "{$signatureString}.{$signature}";
-    }
-
-    public function generateSignatureString(): string
-    {
-        $headersString = $this->manager->getEncoder()->encode(json_encode($this->headers));
-        $payloadString = $this->manager->getEncoder()->encode(json_encode($this->payload));
-
-        return "{$headersString}.{$payloadString}";
-    }
-
-    public function getHeaders(): array
-    {
-        return $this->headers;
-    }
-
-    public function getPayload(): array
-    {
-        return $this->payload;
-    }
-}

+ 0 - 299
vendor/96qbhy/simple-jwt/src/JWTManager.php

@@ -1,299 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt;
-
-use Doctrine\Common\Cache\Cache;
-use Doctrine\Common\Cache\FilesystemCache;
-use Qbhy\SimpleJwt\Encoders\Base64UrlSafeEncoder;
-use Qbhy\SimpleJwt\EncryptAdapters\PasswordHashEncrypter;
-use Qbhy\SimpleJwt\Exceptions\InvalidTokenException;
-use Qbhy\SimpleJwt\Exceptions\SignatureException;
-use Qbhy\SimpleJwt\Exceptions\TokenBlacklistException;
-use Qbhy\SimpleJwt\Exceptions\TokenExpiredException;
-use Qbhy\SimpleJwt\Exceptions\TokenNotActiveException;
-use Qbhy\SimpleJwt\Exceptions\TokenRefreshExpiredException;
-use Qbhy\SimpleJwt\Interfaces\Encoder;
-use Qbhy\SimpleJwt\Interfaces\Encrypter;
-
-class JWTManager
-{
-    protected $ttl;
-
-    /** @var int token 过期多久后可以被刷新,单位分钟 minutes */
-    protected $refreshTtl;
-
-    /** @var AbstractEncrypter */
-    protected $encrypter;
-
-    /** @var Encoder */
-    protected $encoder;
-
-    /** @var Cache */
-    protected $cache;
-
-    /**
-     * @var array
-     */
-    protected $drivers;
-
-    /**
-     * @var string
-     */
-    protected $secret;
-
-    /**
-     * @var string
-     */
-    protected $prefix;
-
-    /**
-     * JWTManager constructor.
-     */
-    public function __construct(array $config)
-    {
-        $this->verifyConfig($config);
-
-        $this->secret = $config['secret'];
-        $this->drivers = $config['drivers'] ?? [];
-        $this->prefix = $config['prefix'] ?? 'default';
-
-        $this->resolveEncrypter($config['default'] ?? PasswordHashEncrypter::class);
-
-        $this->encoder = $config['encoder'] ?? new Base64UrlSafeEncoder();
-        $this->cache = $config['cache'] ?? new FilesystemCache(sys_get_temp_dir());
-        $this->ttl = $config['ttl'] ?? 60 * 60;
-        $this->refreshTtl = $config['refresh_ttl'] ?? 60 * 60 * 24 * 7; // 单位秒,默认一周内可以刷新
-    }
-
-    public function getTtl(): int
-    {
-        return $this->ttl;
-    }
-
-    public function getCache(): Cache
-    {
-        if ($this->cache instanceof Cache) {
-            return $this->cache;
-        }
-
-        return $this->cache = is_callable($this->cache) ? call_user_func_array($this->cache, [$this]) : new FilesystemCache(sys_get_temp_dir());
-    }
-
-    /**
-     * 单位:分钟
-     * @return $this
-     */
-    public function setTtl(int $ttl): JWTManager
-    {
-        $this->ttl = $ttl;
-
-        return $this;
-    }
-
-    public function getRefreshTtl(): int
-    {
-        return $this->refreshTtl;
-    }
-
-    /**
-     * 单位:分钟
-     * @return $this
-     */
-    public function setRefreshTtl(int $ttl): JWTManager
-    {
-        $this->refreshTtl = $ttl;
-
-        return $this;
-    }
-
-    public function getEncrypter(): Encrypter
-    {
-        return $this->encrypter;
-    }
-
-    public function getEncoder(): Encoder
-    {
-        return $this->encoder;
-    }
-
-    /**
-     * 创建一个 jwt.
-     */
-    public function make(array $payload, array $headers = []): JWT
-    {
-        $payload = array_merge($this->initPayload(), $payload);
-
-        $jti = hash('md5', base64_encode(json_encode([$payload, $headers])) . $this->getEncrypter()->getSecret());
-
-        $payload['jti'] = $jti;
-
-        return new JWT($this, $headers, $payload);
-    }
-
-    /**
-     * 一些基础参数.
-     */
-    public function initPayload(): array
-    {
-        $timestamp = time();
-
-        return [
-            'sub' => '1',
-            'iss' => 'http://' . ($_SERVER['SERVER_NAME'] ?? '') . ':' . ($_SERVER['SERVER_PORT'] ?? '') . ($_SERVER['REQUEST_URI'] ?? ''),
-            'exp' => $timestamp + $this->getTtl(),
-            'iat' => $timestamp,
-            'nbf' => $timestamp,
-        ];
-    }
-
-    /**
-     * 解析一个jwt.
-     * @throws Exceptions\InvalidTokenException
-     * @throws Exceptions\SignatureException
-     * @throws Exceptions\TokenExpiredException
-     */
-    public function parse(string $token): JWT
-    {
-        $jwt = $this->justParse($token);
-        $timestamp = time();
-        $payload = $jwt->getPayload();
-
-        if ($this->hasBlacklist($jwt)) {
-            throw (new TokenBlacklistException('The token is already on the blacklist'))->setJwt($jwt);
-        }
-
-        if (isset($payload['exp']) && $payload['exp'] <= $timestamp) {
-            throw (new TokenExpiredException('Token expired'))->setJwt($jwt);
-        }
-
-        if (isset($payload['nbf']) && $payload['nbf'] > $timestamp) {
-            throw (new TokenNotActiveException('Token not active'))->setJwt($jwt);
-        }
-
-        return $jwt;
-    }
-
-    /**
-     * 单纯的解析一个jwt.
-     * @throws Exceptions\InvalidTokenException
-     * @throws Exceptions\SignatureException
-     * @throws Exceptions\TokenExpiredException
-     */
-    public function justParse(string $token): JWT
-    {
-        $encoder = $this->getEncoder();
-        $encrypter = $this->getEncrypter();
-        $arr = explode('.', $token);
-
-        if (count($arr) !== 3) {
-            throw new InvalidTokenException('Invalid token');
-        }
-
-        $headers = @json_decode($encoder->decode($arr[0]), true);
-        $payload = @json_decode($encoder->decode($arr[1]), true);
-
-        $signatureString = "{$arr[0]}.{$arr[1]}";
-
-        if (! is_array($headers) || ! is_array($payload)) {
-            throw new InvalidTokenException('Invalid token');
-        }
-
-        if ($encrypter->check($signatureString, $encoder->decode($arr[2]))) {
-            return new JWT($this, $headers, $payload);
-        }
-
-        throw new SignatureException('Invalid signature');
-    }
-
-    public function addBlacklist($jwt)
-    {
-        $now = time();
-        $this->getCache()->save(
-            $this->blacklistKey($jwt),
-            $now,
-            ($jwt instanceof JWT ? ($jwt->getPayload()['iat'] || $now) : $now) + $this->getRefreshTtl() // 存到该 token 超过 refresh 即可
-        );
-    }
-
-    public function removeBlacklist($jwt)
-    {
-        return $this->getCache()->delete($this->blacklistKey($jwt));
-    }
-
-    public function hasBlacklist($jwt)
-    {
-        return $this->getCache()->contains($this->blacklistKey($jwt));
-    }
-
-    /**
-     * @throws Exceptions\JWTException
-     * @return JWT
-     */
-    public function refresh(JWT $jwt, bool $force = false)
-    {
-        $payload = $jwt->getPayload();
-
-        if (! $force && isset($payload['iat'])) {
-            $refreshExp = $payload['iat'] + $this->getRefreshTtl();
-
-            if ($refreshExp <= time()) {
-                throw (new TokenRefreshExpiredException('token expired, refresh is not supported'))->setJwt($jwt);
-            }
-        }
-
-        unset($payload['exp'], $payload['iat'], $payload['nbf']);
-
-        return $this->make($payload, $jwt->getHeaders());
-    }
-
-    public function useEncrypter(string $encrypter): JWTManager
-    {
-        $this->resolveEncrypter($encrypter);
-        return $this;
-    }
-
-    /**
-     * @param JWT|string $jwt
-     * @return string
-     */
-    protected function blacklistKey($jwt)
-    {
-        $jti = $jwt instanceof JWT ? ($jwt->getPayload()['jti'] ?? md5($jwt->token())) : md5($jwt);
-
-        return "jwt:blacklist:{$this->prefix}:{$jti}";
-    }
-
-    protected function verifyConfig(array $config)
-    {
-        if (! isset($config['secret'])) {
-            throw new \InvalidArgumentException('Secret is required.');
-        }
-    }
-
-    protected function resolveEncrypter($encrypter)
-    {
-        if ($encrypter instanceof Encrypter) {
-            $this->encrypter = $encrypter;
-            return;
-        }
-        if (class_exists($encrypter)) {
-            $this->encrypter = new $encrypter($this->secret);
-            return;
-        }
-        if (isset($this->drivers[$encrypter])) {
-            $encrypter = $this->drivers[$encrypter];
-            $this->encrypter = new $encrypter($this->secret);
-        } else {
-            $this->encrypter = new PasswordHashEncrypter($this->secret);
-        }
-    }
-}

+ 0 - 50
vendor/96qbhy/simple-jwt/src/Laravel/ServiceProvider.php

@@ -1,50 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\Laravel;
-
-use Illuminate\Foundation\Application as LaravelApplication;
-use Illuminate\Support\ServiceProvider as LaravelServiceProvider;
-use Laravel\Lumen\Application as LumenApplication;
-use Qbhy\SimpleJwt\JWTManager;
-
-class ServiceProvider extends LaravelServiceProvider
-{
-    public function boot()
-    {
-        // Base64UrlSafeEncoder
-    }
-
-    public function register()
-    {
-        $this->setupConfig();
-
-        $this->app->singleton(JWTManager::class, function () {
-            return new JWTManager(config('simple-jwt'));
-        });
-    }
-
-    /**
-     * Setup the config.
-     */
-    protected function setupConfig()
-    {
-        $configSource = realpath(__DIR__ . '/config/simple-jwt.php');
-        if ($this->app instanceof LaravelApplication && $this->app->runningInConsole()) {
-            $this->publishes([
-                $configSource => base_path('config/simple-jwt.php'),
-            ]);
-        } elseif ($this->app instanceof LumenApplication) {
-            $this->app->configure('simple-jwt');
-        }
-        $this->mergeConfigFrom($configSource, 'simple-jwt');
-    }
-}

+ 0 - 92
vendor/96qbhy/simple-jwt/src/Laravel/TokenProviderAble.php

@@ -1,92 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\Laravel;
-
-use Illuminate\Database\Eloquent\Model;
-use Qbhy\SimpleJwt\Exceptions\TokenProviderException;
-use Qbhy\SimpleJwt\JWT;
-use Qbhy\SimpleJwt\JWTManager;
-
-/**
- * Trait TokenProviderAble.
- *
- * @mixin \Qbhy\SimpleJwt\Interfaces\TokenProviderInterface
- * @mixin \Illuminate\Database\Eloquent\Model
- */
-trait TokenProviderAble
-{
-    /**
-     * @throws TokenProviderException
-     * @throws \Qbhy\SimpleJwt\Exceptions\InvalidTokenException
-     * @throws \Qbhy\SimpleJwt\Exceptions\SignatureException
-     * @throws \Qbhy\SimpleJwt\Exceptions\TokenExpiredException
-     * @return Model|TokenProviderAble
-     */
-    public static function fromToken(string $token)
-    {
-        /** @var JWT $jwt */
-        $jwt = static::jwtManager()->parse($token);
-
-        static::checkJwt($jwt);
-
-        return static::fromPayload($jwt->getPayload());
-    }
-
-    /**
-     * @return string
-     */
-    public function getToken()
-    {
-        $jwtManager = static::jwtManager();
-
-        return $jwtManager->make($this->buildPayload(), static::matchHeaders())->token();
-    }
-
-    /**
-     * @return \Illuminate\Database\Eloquent\Model|static
-     */
-    abstract public static function fromPayload(array $payload);
-
-    /**
-     * @throws TokenProviderException
-     */
-    protected static function checkJwt(JWT $jwt)
-    {
-        $headers = $jwt->getHeaders();
-        foreach (static::matchHeaders() as $key => $header) {
-            if (! isset($headers[$key]) || $headers[$key] !== $header) {
-                throw new TokenProviderException('header invalid');
-            }
-        }
-
-        $payload = $jwt->getPayload();
-
-        $needPayloadsCount = count($needPayloads = static::needPayloads());
-        $intersectCount = count(array_intersect($needPayloads, array_keys($payload)));
-
-        if ($needPayloadsCount !== $intersectCount) {
-            throw new TokenProviderException('payload invalid');
-        }
-    }
-
-    /**
-     * @return JWTManager
-     */
-    protected static function jwtManager()
-    {
-        return app(JWTManager::class);
-    }
-
-    abstract protected static function matchHeaders();
-
-    abstract protected static function needPayloads();
-}

+ 0 - 70
vendor/96qbhy/simple-jwt/src/Laravel/config/simple-jwt.php

@@ -1,70 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-use Qbhy\SimpleJwt\Encoders;
-use Qbhy\SimpleJwt\EncryptAdapters as Encrypter;
-
-return [
-    /*
-     * 必填
-     * jwt 服务端身份标识
-     */
-    'secret' => env('SIMPLE_JWT_SECRET'),
-
-    /*
-     * 可选配置
-     * jwt 生命周期,单位秒,默认一天
-     */
-    'ttl' => env('SIMPLE_JWT_TTL', 60 * 60 * 24),
-
-    /*
-     * 可选配置
-     * 允许过期多久以内的 token 进行刷新,默认一周
-     */
-    'refresh_ttl' => env('SIMPLE_JWT_REFRESH_TTL', 60 * 60 * 24 * 7),
-
-    /*
-     * 可选配置
-     * 默认使用的加密类
-     */
-    'default' => Encrypter\PasswordHashEncrypter::class,
-
-    /*
-     * 可选配置
-     * 加密类必须实现 Qbhy\SimpleJwt\Interfaces\Encrypter 接口
-     */
-    'drivers' => [
-        Encrypter\PasswordHashEncrypter::alg() => Encrypter\PasswordHashEncrypter::class,
-        Encrypter\CryptEncrypter::alg() => Encrypter\CryptEncrypter::class,
-        Encrypter\SHA1Encrypter::alg() => Encrypter\SHA1Encrypter::class,
-        Encrypter\Md5Encrypter::alg() => Encrypter\Md5Encrypter::class,
-        Encrypter\HS256Encrypter::alg() => Encrypter\HS256Encrypter::class,
-    ],
-
-    /*
-     * 可选配置
-     * 编码类
-     */
-    'encoder' => new Encoders\Base64UrlSafeEncoder(),
-
-    /*
-     * 可选配置
-     * 缓存类,用于黑名单
-     */
-    'cache' => new \Doctrine\Common\Cache\FilesystemCache(sys_get_temp_dir()),
-    //    'encoder'     => Encoders\Base64Encoder::class,
-
-    /*
-     * 可选配置
-     * 缓存前缀
-     */
-    'prefix' => env('JWT_CACHE_PREFIX', 'default'),
-];

+ 0 - 20
vendor/96qbhy/simple-jwt/tests/TestCase.php

@@ -1,20 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\Tests;
-
-/**
- * @internal
- * @coversNothing
- */
-class TestCase extends \PHPUnit\Framework\TestCase
-{
-}

+ 0 - 144
vendor/96qbhy/simple-jwt/tests/Unit/JwtTest.php

@@ -1,144 +0,0 @@
-<?php
-
-declare(strict_types=1);
-/**
- * This file is part of qbhy/simple-jwt.
- *
- * @link     https://github.com/qbhy/simple-jwt
- * @document https://github.com/qbhy/simple-jwt/blob/master/README.md
- * @contact  qbhy0715@qq.com
- * @license  https://github.com/qbhy/simple-jwt/blob/master/LICENSE
- */
-namespace Qbhy\SimpleJwt\Tests\Unit;
-
-use Qbhy\SimpleJwt\Encoders\Base64UrlSafeEncoder;
-use Qbhy\SimpleJwt\EncryptAdapters\CryptEncrypter;
-use Qbhy\SimpleJwt\EncryptAdapters\HS256Encrypter;
-use Qbhy\SimpleJwt\EncryptAdapters\Md5Encrypter;
-use Qbhy\SimpleJwt\EncryptAdapters\PasswordHashEncrypter;
-use Qbhy\SimpleJwt\EncryptAdapters\SHA1Encrypter;
-use Qbhy\SimpleJwt\Exceptions\TokenBlacklistException;
-use Qbhy\SimpleJwt\JWT;
-use Qbhy\SimpleJwt\JWTManager;
-use Qbhy\SimpleJwt\Tests\TestCase;
-
-/**
- * @internal
- * @coversNothing
- */
-class JwtTest extends TestCase
-{
-    /**
-     * 测试默认 加密器.
-     */
-    public function testJwtManager()
-    {
-        $manager = $this->manager();
-        $this->assertTrue($this->check($manager));
-        $this->assertTrue($this->check($manager->useEncrypter(Md5Encrypter::alg())));
-        $this->assertTrue($this->check($manager->useEncrypter(Md5Encrypter::class)));
-        $this->assertTrue($this->check($this->manager(null, new Base64UrlSafeEncoder())));
-    }
-
-    /**
-     * 测试默认 md5 加密器.
-     */
-    public function testMd5JwtManager()
-    {
-        $secret = 'qbhy/simple-jwt';
-        $this->assertTrue($this->check($this->manager(Md5Encrypter::class)));
-        $this->assertTrue($this->check($this->manager(Md5Encrypter::class, new Base64UrlSafeEncoder())));
-    }
-
-    /**
-     * 测试默认 md5 加密器.
-     */
-    public function testHS256JwtManager()
-    {
-        $jwtManager = new JWTManager([
-            'secret' => 'secret',
-            'default' => new HS256Encrypter('qwewe1232323dfsdfhadlibfjfh90'),
-            'encode' => new Base64UrlSafeEncoder(),
-            'cache' => function (JWTManager $JWTManager) {
-                return new \Doctrine\Common\Cache\FilesystemCache(sys_get_temp_dir());
-            },
-        ]);
-        // 群友提供
-        $token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBpZCI6MSwiY29tcGFueUlkIjp7IkludDY0IjoxLCJWYWxpZCI6dHJ1ZX0sImV4cCI6MTYyOTg4NDg5NywiaWF0IjoxNjI3MjkyODk3LCJzdGFmZk5hbWUiOnsiU3RyaW5nIjoi5bCP5piOIiwiVmFsaWQiOnRydWV9LCJzdGFmZmlkIjp7IkludDY0IjoxLCJWYWxpZCI6dHJ1ZX0sInVzZXJJZCI6MSwidXNlck5hbWUiOiJ1c2VyMDEifQ.Pz8kWBdtDMOcJs9HXmzvlPgY53aZVyg50vBRELG7G9M';
-        $jwt = $jwtManager->justParse($token);
-        $this->assertTrue($jwt instanceof JWT);
-
-        $this->assertTrue($this->check($this->manager(HS256Encrypter::class)));
-        $this->assertTrue($this->check($this->manager(HS256Encrypter::class, new Base64UrlSafeEncoder())));
-    }
-
-    /**
-     * 测试默认 crypt 加密器.
-     */
-    public function testCryptJwtManager()
-    {
-        $this->assertTrue($this->check($this->manager(CryptEncrypter::class)));
-        $this->assertTrue($this->check($this->manager(CryptEncrypter::class, new Base64UrlSafeEncoder())));
-    }
-
-    /**
-     * 测试默认 crypt 加密器.
-     */
-    public function testPasswordJwtManager()
-    {
-        $this->assertTrue($this->check($this->manager(PasswordHashEncrypter::class)));
-        $this->assertTrue($this->check($this->manager(PasswordHashEncrypter::class, new Base64UrlSafeEncoder())));
-    }
-
-    /**
-     * 测试默认 crypt 加密器.
-     */
-    public function testSHA1JwtManager()
-    {
-        $this->assertTrue($this->check($this->manager(SHA1Encrypter::class)));
-        $this->assertTrue($this->check($this->manager(SHA1Encrypter::class, new Base64UrlSafeEncoder())));
-    }
-
-    /**
-     * 测试默认黑名单功能.
-     */
-    public function testJwtManagerBlacklist()
-    {
-        $secret = 'qbhy/simple-jwt';
-        $jwtManager = new JWTManager(compact('secret'));
-
-        $jwt = $jwtManager->make(['test' => 'test']);
-
-        $jwtManager->addBlacklist($jwt);
-        try {
-            $jwtManager->parse($jwt->token());
-            $this->assertTrue(false, 'jwt 黑名单测试出错');
-        } catch (\Throwable $exception) {
-            $this->assertTrue($exception instanceof TokenBlacklistException, $exception->getMessage());
-        }
-    }
-
-    protected function check(JWTManager $manager)
-    {
-        $jwt = $manager->make(['user_id' => 1], ['header' => 'test']);
-
-        $token = $jwt->token();
-
-        $manager->addBlacklist($jwt);
-        $manager->removeBlacklist($jwt);
-
-        return $manager->parse($token) instanceof JWT && $manager->justParse($token) instanceof JWT;
-    }
-
-    protected function manager($driver = null, $encoder = null)
-    {
-        return new JWTManager([
-            'secret' => 'secret',
-            'default' => $driver,
-            'encode' => $encoder,
-            'cache' => function (JWTManager $JWTManager) {
-                return new \Doctrine\Common\Cache\FilesystemCache(sys_get_temp_dir());
-            },
-        ]);
-    }
-}

+ 0 - 25
vendor/autoload.php

@@ -1,25 +0,0 @@
-<?php
-
-// autoload.php @generated by Composer
-
-if (PHP_VERSION_ID < 50600) {
-    if (!headers_sent()) {
-        header('HTTP/1.1 500 Internal Server Error');
-    }
-    $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
-    if (!ini_get('display_errors')) {
-        if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
-            fwrite(STDERR, $err);
-        } elseif (!headers_sent()) {
-            echo $err;
-        }
-    }
-    trigger_error(
-        $err,
-        E_USER_ERROR
-    );
-}
-
-require_once __DIR__ . '/composer/autoload_real.php';
-
-return ComposerAutoloaderInit88f2a4d4a4e81dc7d415bcdf39930654::getLoader();

+ 0 - 119
vendor/bin/carbon

@@ -1,119 +0,0 @@
-#!/usr/bin/env php
-<?php
-
-/**
- * Proxy PHP file generated by Composer
- *
- * This file includes the referenced bin path (../nesbot/carbon/bin/carbon)
- * using a stream wrapper to prevent the shebang from being output on PHP<8
- *
- * @generated
- */
-
-namespace Composer;
-
-$GLOBALS['_composer_bin_dir'] = __DIR__;
-$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
-
-if (PHP_VERSION_ID < 80000) {
-    if (!class_exists('Composer\BinProxyWrapper')) {
-        /**
-         * @internal
-         */
-        final class BinProxyWrapper
-        {
-            private $handle;
-            private $position;
-            private $realpath;
-
-            public function stream_open($path, $mode, $options, &$opened_path)
-            {
-                // get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
-                $opened_path = substr($path, 17);
-                $this->realpath = realpath($opened_path) ?: $opened_path;
-                $opened_path = $this->realpath;
-                $this->handle = fopen($this->realpath, $mode);
-                $this->position = 0;
-
-                return (bool) $this->handle;
-            }
-
-            public function stream_read($count)
-            {
-                $data = fread($this->handle, $count);
-
-                if ($this->position === 0) {
-                    $data = preg_replace('{^#!.*\r?\n}', '', $data);
-                }
-
-                $this->position += strlen($data);
-
-                return $data;
-            }
-
-            public function stream_cast($castAs)
-            {
-                return $this->handle;
-            }
-
-            public function stream_close()
-            {
-                fclose($this->handle);
-            }
-
-            public function stream_lock($operation)
-            {
-                return $operation ? flock($this->handle, $operation) : true;
-            }
-
-            public function stream_seek($offset, $whence)
-            {
-                if (0 === fseek($this->handle, $offset, $whence)) {
-                    $this->position = ftell($this->handle);
-                    return true;
-                }
-
-                return false;
-            }
-
-            public function stream_tell()
-            {
-                return $this->position;
-            }
-
-            public function stream_eof()
-            {
-                return feof($this->handle);
-            }
-
-            public function stream_stat()
-            {
-                return array();
-            }
-
-            public function stream_set_option($option, $arg1, $arg2)
-            {
-                return true;
-            }
-
-            public function url_stat($path, $flags)
-            {
-                $path = substr($path, 17);
-                if (file_exists($path)) {
-                    return stat($path);
-                }
-
-                return false;
-            }
-        }
-    }
-
-    if (
-        (function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true))
-        || (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper'))
-    ) {
-        return include("phpvfscomposer://" . __DIR__ . '/..'.'/nesbot/carbon/bin/carbon');
-    }
-}
-
-return include __DIR__ . '/..'.'/nesbot/carbon/bin/carbon';

+ 0 - 119
vendor/bin/co-phpunit

@@ -1,119 +0,0 @@
-#!/usr/bin/env php
-<?php
-
-/**
- * Proxy PHP file generated by Composer
- *
- * This file includes the referenced bin path (../hyperf/testing/co-phpunit)
- * using a stream wrapper to prevent the shebang from being output on PHP<8
- *
- * @generated
- */
-
-namespace Composer;
-
-$GLOBALS['_composer_bin_dir'] = __DIR__;
-$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
-
-if (PHP_VERSION_ID < 80000) {
-    if (!class_exists('Composer\BinProxyWrapper')) {
-        /**
-         * @internal
-         */
-        final class BinProxyWrapper
-        {
-            private $handle;
-            private $position;
-            private $realpath;
-
-            public function stream_open($path, $mode, $options, &$opened_path)
-            {
-                // get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
-                $opened_path = substr($path, 17);
-                $this->realpath = realpath($opened_path) ?: $opened_path;
-                $opened_path = $this->realpath;
-                $this->handle = fopen($this->realpath, $mode);
-                $this->position = 0;
-
-                return (bool) $this->handle;
-            }
-
-            public function stream_read($count)
-            {
-                $data = fread($this->handle, $count);
-
-                if ($this->position === 0) {
-                    $data = preg_replace('{^#!.*\r?\n}', '', $data);
-                }
-
-                $this->position += strlen($data);
-
-                return $data;
-            }
-
-            public function stream_cast($castAs)
-            {
-                return $this->handle;
-            }
-
-            public function stream_close()
-            {
-                fclose($this->handle);
-            }
-
-            public function stream_lock($operation)
-            {
-                return $operation ? flock($this->handle, $operation) : true;
-            }
-
-            public function stream_seek($offset, $whence)
-            {
-                if (0 === fseek($this->handle, $offset, $whence)) {
-                    $this->position = ftell($this->handle);
-                    return true;
-                }
-
-                return false;
-            }
-
-            public function stream_tell()
-            {
-                return $this->position;
-            }
-
-            public function stream_eof()
-            {
-                return feof($this->handle);
-            }
-
-            public function stream_stat()
-            {
-                return array();
-            }
-
-            public function stream_set_option($option, $arg1, $arg2)
-            {
-                return true;
-            }
-
-            public function url_stat($path, $flags)
-            {
-                $path = substr($path, 17);
-                if (file_exists($path)) {
-                    return stat($path);
-                }
-
-                return false;
-            }
-        }
-    }
-
-    if (
-        (function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true))
-        || (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper'))
-    ) {
-        return include("phpvfscomposer://" . __DIR__ . '/..'.'/hyperf/testing/co-phpunit');
-    }
-}
-
-return include __DIR__ . '/..'.'/hyperf/testing/co-phpunit';

+ 0 - 119
vendor/bin/php-cs-fixer

@@ -1,119 +0,0 @@
-#!/usr/bin/env php
-<?php
-
-/**
- * Proxy PHP file generated by Composer
- *
- * This file includes the referenced bin path (../friendsofphp/php-cs-fixer/php-cs-fixer)
- * using a stream wrapper to prevent the shebang from being output on PHP<8
- *
- * @generated
- */
-
-namespace Composer;
-
-$GLOBALS['_composer_bin_dir'] = __DIR__;
-$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
-
-if (PHP_VERSION_ID < 80000) {
-    if (!class_exists('Composer\BinProxyWrapper')) {
-        /**
-         * @internal
-         */
-        final class BinProxyWrapper
-        {
-            private $handle;
-            private $position;
-            private $realpath;
-
-            public function stream_open($path, $mode, $options, &$opened_path)
-            {
-                // get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
-                $opened_path = substr($path, 17);
-                $this->realpath = realpath($opened_path) ?: $opened_path;
-                $opened_path = $this->realpath;
-                $this->handle = fopen($this->realpath, $mode);
-                $this->position = 0;
-
-                return (bool) $this->handle;
-            }
-
-            public function stream_read($count)
-            {
-                $data = fread($this->handle, $count);
-
-                if ($this->position === 0) {
-                    $data = preg_replace('{^#!.*\r?\n}', '', $data);
-                }
-
-                $this->position += strlen($data);
-
-                return $data;
-            }
-
-            public function stream_cast($castAs)
-            {
-                return $this->handle;
-            }
-
-            public function stream_close()
-            {
-                fclose($this->handle);
-            }
-
-            public function stream_lock($operation)
-            {
-                return $operation ? flock($this->handle, $operation) : true;
-            }
-
-            public function stream_seek($offset, $whence)
-            {
-                if (0 === fseek($this->handle, $offset, $whence)) {
-                    $this->position = ftell($this->handle);
-                    return true;
-                }
-
-                return false;
-            }
-
-            public function stream_tell()
-            {
-                return $this->position;
-            }
-
-            public function stream_eof()
-            {
-                return feof($this->handle);
-            }
-
-            public function stream_stat()
-            {
-                return array();
-            }
-
-            public function stream_set_option($option, $arg1, $arg2)
-            {
-                return true;
-            }
-
-            public function url_stat($path, $flags)
-            {
-                $path = substr($path, 17);
-                if (file_exists($path)) {
-                    return stat($path);
-                }
-
-                return false;
-            }
-        }
-    }
-
-    if (
-        (function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true))
-        || (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper'))
-    ) {
-        return include("phpvfscomposer://" . __DIR__ . '/..'.'/friendsofphp/php-cs-fixer/php-cs-fixer');
-    }
-}
-
-return include __DIR__ . '/..'.'/friendsofphp/php-cs-fixer/php-cs-fixer';

+ 0 - 119
vendor/bin/php-parse

@@ -1,119 +0,0 @@
-#!/usr/bin/env php
-<?php
-
-/**
- * Proxy PHP file generated by Composer
- *
- * This file includes the referenced bin path (../nikic/php-parser/bin/php-parse)
- * using a stream wrapper to prevent the shebang from being output on PHP<8
- *
- * @generated
- */
-
-namespace Composer;
-
-$GLOBALS['_composer_bin_dir'] = __DIR__;
-$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
-
-if (PHP_VERSION_ID < 80000) {
-    if (!class_exists('Composer\BinProxyWrapper')) {
-        /**
-         * @internal
-         */
-        final class BinProxyWrapper
-        {
-            private $handle;
-            private $position;
-            private $realpath;
-
-            public function stream_open($path, $mode, $options, &$opened_path)
-            {
-                // get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
-                $opened_path = substr($path, 17);
-                $this->realpath = realpath($opened_path) ?: $opened_path;
-                $opened_path = $this->realpath;
-                $this->handle = fopen($this->realpath, $mode);
-                $this->position = 0;
-
-                return (bool) $this->handle;
-            }
-
-            public function stream_read($count)
-            {
-                $data = fread($this->handle, $count);
-
-                if ($this->position === 0) {
-                    $data = preg_replace('{^#!.*\r?\n}', '', $data);
-                }
-
-                $this->position += strlen($data);
-
-                return $data;
-            }
-
-            public function stream_cast($castAs)
-            {
-                return $this->handle;
-            }
-
-            public function stream_close()
-            {
-                fclose($this->handle);
-            }
-
-            public function stream_lock($operation)
-            {
-                return $operation ? flock($this->handle, $operation) : true;
-            }
-
-            public function stream_seek($offset, $whence)
-            {
-                if (0 === fseek($this->handle, $offset, $whence)) {
-                    $this->position = ftell($this->handle);
-                    return true;
-                }
-
-                return false;
-            }
-
-            public function stream_tell()
-            {
-                return $this->position;
-            }
-
-            public function stream_eof()
-            {
-                return feof($this->handle);
-            }
-
-            public function stream_stat()
-            {
-                return array();
-            }
-
-            public function stream_set_option($option, $arg1, $arg2)
-            {
-                return true;
-            }
-
-            public function url_stat($path, $flags)
-            {
-                $path = substr($path, 17);
-                if (file_exists($path)) {
-                    return stat($path);
-                }
-
-                return false;
-            }
-        }
-    }
-
-    if (
-        (function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true))
-        || (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper'))
-    ) {
-        return include("phpvfscomposer://" . __DIR__ . '/..'.'/nikic/php-parser/bin/php-parse');
-    }
-}
-
-return include __DIR__ . '/..'.'/nikic/php-parser/bin/php-parse';

+ 0 - 119
vendor/bin/phpstan

@@ -1,119 +0,0 @@
-#!/usr/bin/env php
-<?php
-
-/**
- * Proxy PHP file generated by Composer
- *
- * This file includes the referenced bin path (../phpstan/phpstan/phpstan)
- * using a stream wrapper to prevent the shebang from being output on PHP<8
- *
- * @generated
- */
-
-namespace Composer;
-
-$GLOBALS['_composer_bin_dir'] = __DIR__;
-$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
-
-if (PHP_VERSION_ID < 80000) {
-    if (!class_exists('Composer\BinProxyWrapper')) {
-        /**
-         * @internal
-         */
-        final class BinProxyWrapper
-        {
-            private $handle;
-            private $position;
-            private $realpath;
-
-            public function stream_open($path, $mode, $options, &$opened_path)
-            {
-                // get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
-                $opened_path = substr($path, 17);
-                $this->realpath = realpath($opened_path) ?: $opened_path;
-                $opened_path = $this->realpath;
-                $this->handle = fopen($this->realpath, $mode);
-                $this->position = 0;
-
-                return (bool) $this->handle;
-            }
-
-            public function stream_read($count)
-            {
-                $data = fread($this->handle, $count);
-
-                if ($this->position === 0) {
-                    $data = preg_replace('{^#!.*\r?\n}', '', $data);
-                }
-
-                $this->position += strlen($data);
-
-                return $data;
-            }
-
-            public function stream_cast($castAs)
-            {
-                return $this->handle;
-            }
-
-            public function stream_close()
-            {
-                fclose($this->handle);
-            }
-
-            public function stream_lock($operation)
-            {
-                return $operation ? flock($this->handle, $operation) : true;
-            }
-
-            public function stream_seek($offset, $whence)
-            {
-                if (0 === fseek($this->handle, $offset, $whence)) {
-                    $this->position = ftell($this->handle);
-                    return true;
-                }
-
-                return false;
-            }
-
-            public function stream_tell()
-            {
-                return $this->position;
-            }
-
-            public function stream_eof()
-            {
-                return feof($this->handle);
-            }
-
-            public function stream_stat()
-            {
-                return array();
-            }
-
-            public function stream_set_option($option, $arg1, $arg2)
-            {
-                return true;
-            }
-
-            public function url_stat($path, $flags)
-            {
-                $path = substr($path, 17);
-                if (file_exists($path)) {
-                    return stat($path);
-                }
-
-                return false;
-            }
-        }
-    }
-
-    if (
-        (function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true))
-        || (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper'))
-    ) {
-        return include("phpvfscomposer://" . __DIR__ . '/..'.'/phpstan/phpstan/phpstan');
-    }
-}
-
-return include __DIR__ . '/..'.'/phpstan/phpstan/phpstan';

+ 0 - 119
vendor/bin/phpstan.phar

@@ -1,119 +0,0 @@
-#!/usr/bin/env php
-<?php
-
-/**
- * Proxy PHP file generated by Composer
- *
- * This file includes the referenced bin path (../phpstan/phpstan/phpstan.phar)
- * using a stream wrapper to prevent the shebang from being output on PHP<8
- *
- * @generated
- */
-
-namespace Composer;
-
-$GLOBALS['_composer_bin_dir'] = __DIR__;
-$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
-
-if (PHP_VERSION_ID < 80000) {
-    if (!class_exists('Composer\BinProxyWrapper')) {
-        /**
-         * @internal
-         */
-        final class BinProxyWrapper
-        {
-            private $handle;
-            private $position;
-            private $realpath;
-
-            public function stream_open($path, $mode, $options, &$opened_path)
-            {
-                // get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
-                $opened_path = substr($path, 17);
-                $this->realpath = realpath($opened_path) ?: $opened_path;
-                $opened_path = $this->realpath;
-                $this->handle = fopen($this->realpath, $mode);
-                $this->position = 0;
-
-                return (bool) $this->handle;
-            }
-
-            public function stream_read($count)
-            {
-                $data = fread($this->handle, $count);
-
-                if ($this->position === 0) {
-                    $data = preg_replace('{^#!.*\r?\n}', '', $data);
-                }
-
-                $this->position += strlen($data);
-
-                return $data;
-            }
-
-            public function stream_cast($castAs)
-            {
-                return $this->handle;
-            }
-
-            public function stream_close()
-            {
-                fclose($this->handle);
-            }
-
-            public function stream_lock($operation)
-            {
-                return $operation ? flock($this->handle, $operation) : true;
-            }
-
-            public function stream_seek($offset, $whence)
-            {
-                if (0 === fseek($this->handle, $offset, $whence)) {
-                    $this->position = ftell($this->handle);
-                    return true;
-                }
-
-                return false;
-            }
-
-            public function stream_tell()
-            {
-                return $this->position;
-            }
-
-            public function stream_eof()
-            {
-                return feof($this->handle);
-            }
-
-            public function stream_stat()
-            {
-                return array();
-            }
-
-            public function stream_set_option($option, $arg1, $arg2)
-            {
-                return true;
-            }
-
-            public function url_stat($path, $flags)
-            {
-                $path = substr($path, 17);
-                if (file_exists($path)) {
-                    return stat($path);
-                }
-
-                return false;
-            }
-        }
-    }
-
-    if (
-        (function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true))
-        || (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper'))
-    ) {
-        return include("phpvfscomposer://" . __DIR__ . '/..'.'/phpstan/phpstan/phpstan.phar');
-    }
-}
-
-return include __DIR__ . '/..'.'/phpstan/phpstan/phpstan.phar';

+ 0 - 122
vendor/bin/phpunit

@@ -1,122 +0,0 @@
-#!/usr/bin/env php
-<?php
-
-/**
- * Proxy PHP file generated by Composer
- *
- * This file includes the referenced bin path (../phpunit/phpunit/phpunit)
- * using a stream wrapper to prevent the shebang from being output on PHP<8
- *
- * @generated
- */
-
-namespace Composer;
-
-$GLOBALS['_composer_bin_dir'] = __DIR__;
-$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
-$GLOBALS['__PHPUNIT_ISOLATION_EXCLUDE_LIST'] = $GLOBALS['__PHPUNIT_ISOLATION_BLACKLIST'] = array(realpath(__DIR__ . '/..'.'/phpunit/phpunit/phpunit'));
-
-if (PHP_VERSION_ID < 80000) {
-    if (!class_exists('Composer\BinProxyWrapper')) {
-        /**
-         * @internal
-         */
-        final class BinProxyWrapper
-        {
-            private $handle;
-            private $position;
-            private $realpath;
-
-            public function stream_open($path, $mode, $options, &$opened_path)
-            {
-                // get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
-                $opened_path = substr($path, 17);
-                $this->realpath = realpath($opened_path) ?: $opened_path;
-                $opened_path = 'phpvfscomposer://'.$this->realpath;
-                $this->handle = fopen($this->realpath, $mode);
-                $this->position = 0;
-
-                return (bool) $this->handle;
-            }
-
-            public function stream_read($count)
-            {
-                $data = fread($this->handle, $count);
-
-                if ($this->position === 0) {
-                    $data = preg_replace('{^#!.*\r?\n}', '', $data);
-                }
-                $data = str_replace('__DIR__', var_export(dirname($this->realpath), true), $data);
-                $data = str_replace('__FILE__', var_export($this->realpath, true), $data);
-
-                $this->position += strlen($data);
-
-                return $data;
-            }
-
-            public function stream_cast($castAs)
-            {
-                return $this->handle;
-            }
-
-            public function stream_close()
-            {
-                fclose($this->handle);
-            }
-
-            public function stream_lock($operation)
-            {
-                return $operation ? flock($this->handle, $operation) : true;
-            }
-
-            public function stream_seek($offset, $whence)
-            {
-                if (0 === fseek($this->handle, $offset, $whence)) {
-                    $this->position = ftell($this->handle);
-                    return true;
-                }
-
-                return false;
-            }
-
-            public function stream_tell()
-            {
-                return $this->position;
-            }
-
-            public function stream_eof()
-            {
-                return feof($this->handle);
-            }
-
-            public function stream_stat()
-            {
-                return array();
-            }
-
-            public function stream_set_option($option, $arg1, $arg2)
-            {
-                return true;
-            }
-
-            public function url_stat($path, $flags)
-            {
-                $path = substr($path, 17);
-                if (file_exists($path)) {
-                    return stat($path);
-                }
-
-                return false;
-            }
-        }
-    }
-
-    if (
-        (function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true))
-        || (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper'))
-    ) {
-        return include("phpvfscomposer://" . __DIR__ . '/..'.'/phpunit/phpunit/phpunit');
-    }
-}
-
-return include __DIR__ . '/..'.'/phpunit/phpunit/phpunit';

+ 0 - 21
vendor/carbonphp/carbon-doctrine-types/LICENSE

@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2023 Carbon
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.

+ 0 - 14
vendor/carbonphp/carbon-doctrine-types/README.md

@@ -1,14 +0,0 @@
-# carbonphp/carbon-doctrine-types
-
-Types to use Carbon in Doctrine
-
-## Documentation
-
-[Check how to use in the official Carbon documentation](https://carbon.nesbot.com/symfony/)
-
-This package is an externalization of [src/Carbon/Doctrine](https://github.com/briannesbitt/Carbon/tree/2.71.0/src/Carbon/Doctrine)
-from `nestbot/carbon` package.
-
-Externalization allows to better deal with different versions of dbal. With
-version 4.0 of dbal, it no longer sustainable to be compatible with all version
-using a single code.

+ 0 - 36
vendor/carbonphp/carbon-doctrine-types/composer.json

@@ -1,36 +0,0 @@
-{
-    "name": "carbonphp/carbon-doctrine-types",
-    "description": "Types to use Carbon in Doctrine",
-    "type": "library",
-    "keywords": [
-        "date",
-        "time",
-        "DateTime",
-        "Carbon",
-        "Doctrine"
-    ],
-    "require": {
-        "php": "^8.1"
-    },
-    "require-dev": {
-        "doctrine/dbal": "^4.0.0",
-        "nesbot/carbon": "^2.71.0 || ^3.0.0",
-        "phpunit/phpunit": "^10.3"
-    },
-    "conflict": {
-        "doctrine/dbal": "<4.0.0 || >=5.0.0"
-    },
-    "license": "MIT",
-    "autoload": {
-        "psr-4": {
-            "Carbon\\Doctrine\\": "src/Carbon/Doctrine/"
-        }
-    },
-    "authors": [
-        {
-            "name": "KyleKatarn",
-            "email": "kylekatarnls@gmail.com"
-        }
-    ],
-    "minimum-stability": "dev"
-}

+ 0 - 16
vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/CarbonDoctrineType.php

@@ -1,16 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace Carbon\Doctrine;
-
-use Doctrine\DBAL\Platforms\AbstractPlatform;
-
-interface CarbonDoctrineType
-{
-    public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform);
-
-    public function convertToPHPValue(mixed $value, AbstractPlatform $platform);
-
-    public function convertToDatabaseValue($value, AbstractPlatform $platform);
-}

+ 0 - 9
vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/CarbonImmutableType.php

@@ -1,9 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace Carbon\Doctrine;
-
-class CarbonImmutableType extends DateTimeImmutableType implements CarbonDoctrineType
-{
-}

+ 0 - 9
vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/CarbonType.php

@@ -1,9 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace Carbon\Doctrine;
-
-class CarbonType extends DateTimeType implements CarbonDoctrineType
-{
-}

+ 0 - 131
vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/CarbonTypeConverter.php

@@ -1,131 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace Carbon\Doctrine;
-
-use Carbon\Carbon;
-use Carbon\CarbonInterface;
-use DateTimeInterface;
-use Doctrine\DBAL\Platforms\AbstractPlatform;
-use Doctrine\DBAL\Platforms\DB2Platform;
-use Doctrine\DBAL\Platforms\OraclePlatform;
-use Doctrine\DBAL\Platforms\SQLitePlatform;
-use Doctrine\DBAL\Platforms\SQLServerPlatform;
-use Doctrine\DBAL\Types\Exception\InvalidType;
-use Doctrine\DBAL\Types\Exception\ValueNotConvertible;
-use Exception;
-
-/**
- * @template T of CarbonInterface
- */
-trait CarbonTypeConverter
-{
-    /**
-     * This property differentiates types installed by carbonphp/carbon-doctrine-types
-     * from the ones embedded previously in nesbot/carbon source directly.
-     *
-     * @readonly
-     */
-    public bool $external = true;
-
-    /**
-     * @return class-string<T>
-     */
-    protected function getCarbonClassName(): string
-    {
-        return Carbon::class;
-    }
-
-    public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform): string
-    {
-        $precision = min(
-            $fieldDeclaration['precision'] ?? DateTimeDefaultPrecision::get(),
-            $this->getMaximumPrecision($platform),
-        );
-
-        $type = parent::getSQLDeclaration($fieldDeclaration, $platform);
-
-        if (!$precision) {
-            return $type;
-        }
-
-        if (str_contains($type, '(')) {
-            return preg_replace('/\(\d+\)/', "($precision)", $type);
-        }
-
-        [$before, $after] = explode(' ', "$type ");
-
-        return trim("$before($precision) $after");
-    }
-
-    /**
-     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
-     */
-    public function convertToDatabaseValue($value, AbstractPlatform $platform): ?string
-    {
-        if ($value === null) {
-            return $value;
-        }
-
-        if ($value instanceof DateTimeInterface) {
-            return $value->format('Y-m-d H:i:s.u');
-        }
-
-        throw InvalidType::new(
-            $value,
-            static::class,
-            ['null', 'DateTime', 'Carbon']
-        );
-    }
-
-    private function doConvertToPHPValue(mixed $value)
-    {
-        $class = $this->getCarbonClassName();
-
-        if ($value === null || is_a($value, $class)) {
-            return $value;
-        }
-
-        if ($value instanceof DateTimeInterface) {
-            return $class::instance($value);
-        }
-
-        $date = null;
-        $error = null;
-
-        try {
-            $date = $class::parse($value);
-        } catch (Exception $exception) {
-            $error = $exception;
-        }
-
-        if (!$date) {
-            throw ValueNotConvertible::new(
-                $value,
-                static::class,
-                'Y-m-d H:i:s.u or any format supported by '.$class.'::parse()',
-                $error
-            );
-        }
-
-        return $date;
-    }
-
-    private function getMaximumPrecision(AbstractPlatform $platform): int
-    {
-        if ($platform instanceof DB2Platform) {
-            return 12;
-        }
-
-        if ($platform instanceof OraclePlatform) {
-            return 9;
-        }
-
-        if ($platform instanceof SQLServerPlatform || $platform instanceof SQLitePlatform) {
-            return 3;
-        }
-
-        return 6;
-    }
-}

+ 0 - 30
vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/DateTimeDefaultPrecision.php

@@ -1,30 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace Carbon\Doctrine;
-
-class DateTimeDefaultPrecision
-{
-    private static $precision = 6;
-
-    /**
-     * Change the default Doctrine datetime and datetime_immutable precision.
-     *
-     * @param int $precision
-     */
-    public static function set(int $precision): void
-    {
-        self::$precision = $precision;
-    }
-
-    /**
-     * Get the default Doctrine datetime and datetime_immutable precision.
-     *
-     * @return int
-     */
-    public static function get(): int
-    {
-        return self::$precision;
-    }
-}

+ 0 - 32
vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/DateTimeImmutableType.php

@@ -1,32 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace Carbon\Doctrine;
-
-use Carbon\CarbonImmutable;
-use DateTimeImmutable;
-use Doctrine\DBAL\Platforms\AbstractPlatform;
-use Doctrine\DBAL\Types\VarDateTimeImmutableType;
-
-class DateTimeImmutableType extends VarDateTimeImmutableType implements CarbonDoctrineType
-{
-    /** @use CarbonTypeConverter<CarbonImmutable> */
-    use CarbonTypeConverter;
-
-    /**
-     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
-     */
-    public function convertToPHPValue(mixed $value, AbstractPlatform $platform): ?CarbonImmutable
-    {
-        return $this->doConvertToPHPValue($value);
-    }
-
-    /**
-     * @return class-string<CarbonImmutable>
-     */
-    protected function getCarbonClassName(): string
-    {
-        return CarbonImmutable::class;
-    }
-}

+ 0 - 24
vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/DateTimeType.php

@@ -1,24 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-namespace Carbon\Doctrine;
-
-use Carbon\Carbon;
-use DateTime;
-use Doctrine\DBAL\Platforms\AbstractPlatform;
-use Doctrine\DBAL\Types\VarDateTimeType;
-
-class DateTimeType extends VarDateTimeType implements CarbonDoctrineType
-{
-    /** @use CarbonTypeConverter<Carbon> */
-    use CarbonTypeConverter;
-
-    /**
-     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
-     */
-    public function convertToPHPValue(mixed $value, AbstractPlatform $platform): ?Carbon
-    {
-        return $this->doConvertToPHPValue($value);
-    }
-}

+ 0 - 2
vendor/clue/ndjson-react/.github/FUNDING.yml

@@ -1,2 +0,0 @@
-github: clue
-custom: https://clue.engineering/support

+ 0 - 75
vendor/clue/ndjson-react/CHANGELOG.md

@@ -1,75 +0,0 @@
-# Changelog
-
-## 1.3.0 (2022-12-23)
-
-*   Feature: Add support for PHP 8.1 and PHP 8.2.
-    (#31 by @clue and #30 by @SimonFring)
-
-*   Feature: Check type of incoming `data` before trying to decode NDJSON.
-    (#29 by @SimonFrings)
-
-*   Improve documentation and examples and update to new [default loop](https://reactphp.org/event-loop/#loop).
-    (#26 by @clue, #27 by @SimonFrings and #25 by @PaulRotmann)
-
-*   Improve test suite, report failed assertions and ensure 100% code coverage.
-    (#32 and #33 by @clue and #28 by @SimonFrings)
-
-## 1.2.0 (2020-12-09)
-
-*   Improve test suite and add `.gitattributes` to exclude dev files from exports.
-    Add PHP 8 support, update to PHPUnit 9 and simplify test setup.
-    (#18 by @clue and #19, #22 and #23 by @SimonFrings)
-
-## 1.1.0 (2020-02-04)
-
-*   Feature: Improve error reporting and add parsing error message to Exception and
-    ignore `JSON_THROW_ON_ERROR` option (available as of PHP 7.3).
-    (#14 by @clue)
-
-*   Feature: Add bechmarking script and import all global function references.
-    (#16 by @clue)
-
-*   Improve documentation and add NDJSON format description and
-    add support / sponsorship info.
-    (#12 and #17 by @clue)
-
-*   Improve test suite to run tests on PHP 7.4 and simplify test matrix and
-    apply minor code style adjustments to make phpstan happy.
-    (#13 and #15 by @clue)
-
-## 1.0.0 (2018-05-17)
-
-*   First stable release, now following SemVer
-
-*   Improve documentation and usage examples
-
-> Contains no other changes, so it's actually fully compatible with the v0.1.2 release.
-
-## 0.1.2 (2018-05-11)
-
-*   Feature: Limit buffer size to 64 KiB by default.
-    (#10 by @clue)
-
-*   Feature: Forward compatiblity with EventLoop v0.5 and upcoming v1.0.
-    (#8 by @clue)
-
-*   Fix: Return bool `false` if encoding fails due to invalid value to pause source.
-    (#9 by @clue)
-
-*   Improve test suite by supporting PHPUnit v6 and test against legacy PHP 5.3 through PHP 7.2.
-    (#7 by @clue)
-
-*   Update project homepage.
-    (#11 by @clue)
-
-## 0.1.1 (2017-05-22)
-
-*   Feature: Forward compatibility with Stream v0.7, v0.6, v0.5 and upcoming v1.0 (while keeping BC)
-    (#6 by @thklein)
-
-*   Improved test suite by adding PHPUnit to `require-dev`
-    (#5 by @thklein)
-
-## 0.1.0 (2016-11-24)
-
-*   First tagged release

+ 0 - 21
vendor/clue/ndjson-react/LICENSE

@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2016 Christian Lück
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is furnished
-to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.

+ 0 - 365
vendor/clue/ndjson-react/README.md

@@ -1,365 +0,0 @@
-# clue/reactphp-ndjson
-
-[![CI status](https://github.com/clue/reactphp-ndjson/actions/workflows/ci.yml/badge.svg)](https://github.com/clue/reactphp-ndjson/actions)
-[![installs on Packagist](https://img.shields.io/packagist/dt/clue/ndjson-react?color=blue&label=installs%20on%20Packagist)](https://packagist.org/packages/clue/ndjson-react)
-[![code coverage](https://img.shields.io/badge/code%20coverage-100%25-success)](#tests)
-
-Streaming newline-delimited JSON ([NDJSON](http://ndjson.org/)) parser and encoder for [ReactPHP](https://reactphp.org/).
-
-[NDJSON](http://ndjson.org/) can be used to store multiple JSON records in a
-file to store any kind of (uniform) structured data, such as a list of user
-objects or log entries. It uses a simple newline character between each
-individual record and as such can be both used for efficient persistence and
-simple append-style operations. This also allows it to be used in a streaming
-context, such as a simple inter-process communication (IPC) protocol or for a
-remote procedure call (RPC) mechanism. This library provides a simple
-streaming API to process very large NDJSON files with thousands or even millions
-of rows efficiently without having to load the whole file into memory at once.
-
-* **Standard interfaces** -
-  Allows easy integration with existing higher-level components by implementing
-  ReactPHP's standard streaming interfaces.
-* **Lightweight, SOLID design** -
-  Provides a thin abstraction that is [*just good enough*](https://en.wikipedia.org/wiki/Principle_of_good_enough)
-  and does not get in your way.
-  Builds on top of well-tested components and well-established concepts instead of reinventing the wheel.
-* **Good test coverage** -
-  Comes with an [automated tests suite](#tests) and is regularly tested in the *real world*.
-
-**Table of contents**
-
-* [Support us](#support-us)
-* [NDJSON format](#ndjson-format)
-* [Usage](#usage)
-    * [Decoder](#decoder)
-    * [Encoder](#encoder)
-* [Install](#install)
-* [Tests](#tests)
-* [License](#license)
-* [More](#more)
-
-## Support us
-
-We invest a lot of time developing, maintaining, and updating our awesome
-open-source projects. You can help us sustain this high-quality of our work by
-[becoming a sponsor on GitHub](https://github.com/sponsors/clue). Sponsors get
-numerous benefits in return, see our [sponsoring page](https://github.com/sponsors/clue)
-for details.
-
-Let's take these projects to the next level together! 🚀
-
-## NDJSON format
-
-NDJSON ("Newline-Delimited JSON" or sometimes referred to as "JSON lines") is a
-very simple text-based format for storing a large number of records, such as a
-list of user records or log entries.
-
-```JSON
-{"name":"Alice","age":30,"comment":"Yes, I like cheese"}
-{"name":"Bob","age":50,"comment":"Hello\nWorld!"}
-```
-
-If you understand JSON and you're now looking at this newline-delimited JSON for
-the first time, you should already know everything you need to know to
-understand NDJSON: As the name implies, this format essentially consists of
-individual lines where each individual line is any valid JSON text and each line
-is delimited with a newline character.
-
-This example uses a list of user objects where each user has some arbitrary
-properties. This can easily be adjusted for many different use cases, such as
-storing for example products instead of users, assigning additional properties
-or having a significantly larger number of records. You can edit NDJSON files in
-any text editor or use them in a streaming context where individual records
-should be processed. Unlike normal JSON files, adding a new log entry to this
-NDJSON file does not require modification of this file's structure (note there's
-no "outer array" to be modified). This makes it a perfect fit for a streaming
-context, for line-oriented CLI tools (such as `grep` and others) or for a logging
-context where you want to append records at a later time. Additionally, this
-also allows it to be used in a streaming context, such as a simple inter-process
-communication (IPC) protocol or for a remote procedure call (RPC) mechanism.
-
-The newline character at the end of each line allows for some really simple
-*framing* (detecting individual records). While each individual line is valid
-JSON, the complete file as a whole is technically no longer valid JSON, because
-it contains multiple JSON texts. This implies that for example calling PHP's
-`json_decode()` on this complete input would fail because it would try to parse
-multiple records at once. Likewise, using "pretty printing" JSON
-(`JSON_PRETTY_PRINT`) is not allowed because each JSON text is limited to exactly
-one line. On the other hand, values containing newline characters (such as the
-`comment` property in the above example) do not cause issues because each newline
-within a JSON string will be represented by a `\n` instead.
-
-One common alternative to NDJSON would be Comma-Separated Values (CSV).
-If you want to process CSV files, you may want to take a look at the related
-project [clue/reactphp-csv](https://github.com/clue/reactphp-csv) instead:
-
-```
-name,age,comment
-Alice,30,"Yes, I like cheese"
-Bob,50,"Hello
-World!"
-```
-
-CSV may look slightly simpler, but this simplicity comes at a price. CSV is
-limited to untyped, two-dimensional data, so there's no standard way of storing
-any nested structures or to differentiate a boolean value from a string or
-integer. Field names are sometimes used, sometimes they're not
-(application-dependant). Inconsistent handling for fields that contain
-separators such as `,` or spaces or line breaks (see the `comment` field above)
-introduce additional complexity and its text encoding is usually undefined,
-Unicode (or UTF-8) is unlikely to be supported and CSV files often use ISO
-8859-1 encoding or some variant (again application-dependant).
-
-While NDJSON helps avoiding many of CSV's shortcomings, it is still a
-(relatively) young format while CSV files have been used in production systems
-for decades. This means that if you want to interface with an existing system,
-you may have to rely on the format that's already supported. If you're building
-a new system, using NDJSON is an excellent choice as it provides a flexible way
-to process individual records using a common text-based format that can include
-any kind of structured data.
-
-## Usage
-
-### Decoder
-
-The `Decoder` (parser) class can be used to make sure you only get back
-complete, valid JSON elements when reading from a stream.
-It wraps a given
-[`ReadableStreamInterface`](https://github.com/reactphp/stream#readablestreaminterface)
-and exposes its data through the same interface, but emits the JSON elements
-as parsed values instead of just chunks of strings:
-
-```
-{"name":"test","active":true}
-{"name":"hello w\u00f6rld","active":true}
-```
-
-```php
-$stdin = new React\Stream\ReadableResourceStream(STDIN);
-
-$ndjson = new Clue\React\NDJson\Decoder($stdin);
-
-$ndjson->on('data', function ($data) {
-    // $data is a parsed element from the JSON stream
-    // line 1: $data = (object)array('name' => 'test', 'active' => true);
-    // line 2: $data = (object)array('name' => 'hello wörld', 'active' => true);
-    var_dump($data);
-});
-```
-
-ReactPHP's streams emit chunks of data strings and make no assumption about their lengths.
-These chunks do not necessarily represent complete JSON elements, as an
-element may be broken up into multiple chunks.
-This class reassembles these elements by buffering incomplete ones.
-
-The `Decoder` supports the same optional parameters as the underlying
-[`json_decode()`](https://www.php.net/manual/en/function.json-decode.php) function.
-This means that, by default, JSON objects will be emitted as a `stdClass`.
-This behavior can be controlled through the optional constructor parameters:
-
-```php
-$ndjson = new Clue\React\NDJson\Decoder($stdin, true);
-
-$ndjson->on('data', function ($data) {
-    // JSON objects will be emitted as assoc arrays now
-});
-```
-
-Additionally, the `Decoder` limits the maximum buffer size (maximum line
-length) to avoid buffer overflows due to malformed user input. Usually, there
-should be no need to change this value, unless you know you're dealing with some
-unreasonably long lines. It accepts an additional argument if you want to change
-this from the default of 64 KiB:
-
-```php
-$ndjson = new Clue\React\NDJson\Decoder($stdin, false, 512, 0, 64 * 1024);
-```
-
-If the underlying stream emits an `error` event or the plain stream contains
-any data that does not represent a valid NDJson stream,
-it will emit an `error` event and then `close` the input stream:
-
-```php
-$ndjson->on('error', function (Exception $error) {
-    // an error occured, stream will close next
-});
-```
-
-If the underlying stream emits an `end` event, it will flush any incomplete
-data from the buffer, thus either possibly emitting a final `data` event
-followed by an `end` event on success or an `error` event for
-incomplete/invalid JSON data as above:
-
-```php
-$ndjson->on('end', function () {
-    // stream successfully ended, stream will close next
-});
-```
-
-If either the underlying stream or the `Decoder` is closed, it will forward
-the `close` event:
-
-```php
-$ndjson->on('close', function () {
-    // stream closed
-    // possibly after an "end" event or due to an "error" event
-});
-```
-
-The `close(): void` method can be used to explicitly close the `Decoder` and
-its underlying stream:
-
-```php
-$ndjson->close();
-```
-
-The `pipe(WritableStreamInterface $dest, array $options = array(): WritableStreamInterface`
-method can be used to forward all data to the given destination stream.
-Please note that the `Decoder` emits decoded/parsed data events, while many
-(most?) writable streams expect only data chunks:
-
-```php
-$ndjson->pipe($logger);
-```
-
-For more details, see ReactPHP's
-[`ReadableStreamInterface`](https://github.com/reactphp/stream#readablestreaminterface).
-
-### Encoder
-
-The `Encoder` (serializer) class can be used to make sure anything you write to
-a stream ends up as valid JSON elements in the resulting NDJSON stream.
-It wraps a given
-[`WritableStreamInterface`](https://github.com/reactphp/stream#writablestreaminterface)
-and accepts its data through the same interface, but handles any data as complete
-JSON elements instead of just chunks of strings:
-
-```php
-$stdout = new React\Stream\WritableResourceStream(STDOUT);
-
-$ndjson = new Clue\React\NDJson\Encoder($stdout);
-
-$ndjson->write(array('name' => 'test', 'active' => true));
-$ndjson->write(array('name' => 'hello wörld', 'active' => true));
-```
-```
-{"name":"test","active":true}
-{"name":"hello w\u00f6rld","active":true}
-```
-
-The `Encoder` supports the same parameters as the underlying
-[`json_encode()`](https://www.php.net/manual/en/function.json-encode.php) function.
-This means that, by default, Unicode characters will be escaped in the output.
-This behavior can be controlled through the optional constructor parameters:
-
-```php
-$ndjson = new Clue\React\NDJson\Encoder($stdout, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
-
-$ndjson->write('hello wörld');
-```
-```
-"hello wörld"
-```
-
-Note that trying to pass the `JSON_PRETTY_PRINT` option will yield an
-`InvalidArgumentException` because it is not compatible with NDJSON.
-
-If the underlying stream emits an `error` event or the given data contains
-any data that can not be represented as a valid NDJSON stream,
-it will emit an `error` event and then `close` the input stream:
-
-```php
-$ndjson->on('error', function (Exception $error) {
-    // an error occured, stream will close next
-});
-```
-
-If either the underlying stream or the `Encoder` is closed, it will forward
-the `close` event:
-
-```php
-$ndjson->on('close', function () {
-    // stream closed
-    // possibly after an "end" event or due to an "error" event
-});
-```
-
-The `end(mixed $data = null): void` method can be used to optionally emit
-any final data and then soft-close the `Encoder` and its underlying stream:
-
-```php
-$ndjson->end();
-```
-
-The `close(): void` method can be used to explicitly close the `Encoder` and
-its underlying stream:
-
-```php
-$ndjson->close();
-```
-
-For more details, see ReactPHP's
-[`WritableStreamInterface`](https://github.com/reactphp/stream#writablestreaminterface).
-
-## Install
-
-The recommended way to install this library is [through Composer](https://getcomposer.org/).
-[New to Composer?](https://getcomposer.org/doc/00-intro.md)
-
-This project follows [SemVer](https://semver.org/).
-This will install the latest supported version:
-
-```bash
-composer require clue/ndjson-react:^1.3
-```
-
-See also the [CHANGELOG](CHANGELOG.md) for details about version upgrades.
-
-This project aims to run on any platform and thus does not require any PHP
-extensions and supports running on legacy PHP 5.3 through current PHP 8+ and
-HHVM.
-It's *highly recommended to use the latest supported PHP version* for this project.
-
-## Tests
-
-To run the test suite, you first need to clone this repo and then install all
-dependencies [through Composer](https://getcomposer.org/):
-
-```bash
-composer install
-```
-
-To run the test suite, go to the project root and run:
-
-```bash
-vendor/bin/phpunit
-```
-
-## License
-
-This project is released under the permissive [MIT license](LICENSE).
-
-> Did you know that I offer custom development services and issuing invoices for
-  sponsorships of releases and for contributions? Contact me (@clue) for details.
-
-## More
-
-* If you want to learn more about processing streams of data, refer to the documentation of
-  the underlying [react/stream](https://github.com/reactphp/stream) component.
-
-* If you want to process compressed NDJSON files (`.ndjson.gz` file extension),
-  you may want to use [clue/reactphp-zlib](https://github.com/clue/reactphp-zlib)
-  on the compressed input stream before passing the decompressed stream to the NDJSON decoder.
-
-* If you want to create compressed NDJSON files (`.ndjson.gz` file extension),
-  you may want to use [clue/reactphp-zlib](https://github.com/clue/reactphp-zlib)
-  on the resulting NDJSON encoder output stream before passing the compressed
-  stream to the file output stream.
-
-* If you want to concurrently process the records from your NDJSON stream,
-  you may want to use [clue/reactphp-flux](https://github.com/clue/reactphp-flux)
-  to concurrently process many (but not too many) records at once.
-
-* If you want to process structured data in the more common text-based format,
-  you may want to use [clue/reactphp-csv](https://github.com/clue/reactphp-csv)
-  to process Comma-Separated-Values (CSV) files (`.csv` file extension).

+ 0 - 31
vendor/clue/ndjson-react/composer.json

@@ -1,31 +0,0 @@
-{
-    "name": "clue/ndjson-react",
-    "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.",
-    "keywords": ["NDJSON", "newline", "JSON", "jsonlines", "streaming", "ReactPHP"],
-    "homepage": "https://github.com/clue/reactphp-ndjson",
-    "license": "MIT",
-    "authors": [
-        {
-            "name": "Christian Lück",
-            "email": "christian@clue.engineering"
-        }
-    ],
-    "require": {
-        "php": ">=5.3",
-        "react/stream": "^1.2"
-    },
-    "require-dev": {
-        "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35",
-        "react/event-loop": "^1.2"
-    },
-    "autoload": {
-        "psr-4": {
-            "Clue\\React\\NDJson\\": "src/"
-        }
-    },
-    "autoload-dev": {
-        "psr-4": {
-            "Clue\\Tests\\React\\NDJson\\": "tests/"
-        }
-    }
-}

+ 0 - 166
vendor/clue/ndjson-react/src/Decoder.php

@@ -1,166 +0,0 @@
-<?php
-
-namespace Clue\React\NDJson;
-
-use Evenement\EventEmitter;
-use React\Stream\ReadableStreamInterface;
-use React\Stream\Util;
-use React\Stream\WritableStreamInterface;
-
-/**
- * The Decoder / Parser reads from a plain stream and emits data objects for each JSON element
- */
-class Decoder extends EventEmitter implements ReadableStreamInterface
-{
-    private $input;
-    private $assoc;
-    private $depth;
-    private $options;
-    /** @var int */
-    private $maxlength;
-
-    private $buffer = '';
-    private $closed = false;
-
-    /**
-     * @param ReadableStreamInterface $input
-     * @param bool $assoc
-     * @param int $depth
-     * @param int $options (requires PHP 5.4+)
-     * @param int $maxlength
-     * @throws \BadMethodCallException
-     */
-    public function __construct(ReadableStreamInterface $input, $assoc = false, $depth = 512, $options = 0, $maxlength = 65536)
-    {
-        // @codeCoverageIgnoreStart
-        if ($options !== 0 && \PHP_VERSION < 5.4) {
-            throw new \BadMethodCallException('Options parameter is only supported on PHP 5.4+');
-        }
-        if (\defined('JSON_THROW_ON_ERROR')) {
-            $options = $options & ~\JSON_THROW_ON_ERROR;
-        }
-        // @codeCoverageIgnoreEnd
-
-        $this->input = $input;
-
-        if (!$input->isReadable()) {
-            $this->close();
-            return;
-        }
-
-        $this->assoc = $assoc;
-        $this->depth = $depth;
-        $this->options = $options;
-        $this->maxlength = $maxlength;
-
-        $this->input->on('data', array($this, 'handleData'));
-        $this->input->on('end', array($this, 'handleEnd'));
-        $this->input->on('error', array($this, 'handleError'));
-        $this->input->on('close', array($this, 'close'));
-    }
-
-    public function isReadable()
-    {
-        return !$this->closed;
-    }
-
-    public function close()
-    {
-        if ($this->closed) {
-            return;
-        }
-
-        $this->closed = true;
-        $this->buffer = '';
-
-        $this->input->close();
-
-        $this->emit('close');
-        $this->removeAllListeners();
-    }
-
-    public function pause()
-    {
-        $this->input->pause();
-    }
-
-    public function resume()
-    {
-        $this->input->resume();
-    }
-
-    public function pipe(WritableStreamInterface $dest, array $options = array())
-    {
-        Util::pipe($this, $dest, $options);
-
-        return $dest;
-    }
-
-    /** @internal */
-    public function handleData($data)
-    {
-        if (!\is_string($data)) {
-            $this->handleError(new \UnexpectedValueException('Expected stream to emit string, but got ' . \gettype($data)));
-            return;
-        }
-
-        $this->buffer .= $data;
-
-        // keep parsing while a newline has been found
-        while (($newline = \strpos($this->buffer, "\n")) !== false && $newline <= $this->maxlength) {
-            // read data up until newline and remove from buffer
-            $data = (string)\substr($this->buffer, 0, $newline);
-            $this->buffer = (string)\substr($this->buffer, $newline + 1);
-
-            // decode data with options given in ctor
-            // @codeCoverageIgnoreStart
-            if ($this->options === 0) {
-                $data = \json_decode($data, $this->assoc, $this->depth);
-            } else {
-                assert(\PHP_VERSION_ID >= 50400);
-                $data = \json_decode($data, $this->assoc, $this->depth, $this->options);
-            }
-            // @codeCoverageIgnoreEnd
-
-            // abort stream if decoding failed
-            if ($data === null && \json_last_error() !== \JSON_ERROR_NONE) {
-                // @codeCoverageIgnoreStart
-                if (\PHP_VERSION_ID > 50500) {
-                    $errstr = \json_last_error_msg();
-                } elseif (\json_last_error() === \JSON_ERROR_SYNTAX) {
-                    $errstr = 'Syntax error';
-                } else {
-                    $errstr = 'Unknown error';
-                }
-                // @codeCoverageIgnoreEnd
-                return $this->handleError(new \RuntimeException('Unable to decode JSON: ' . $errstr, \json_last_error()));
-            }
-
-            $this->emit('data', array($data));
-        }
-
-        if (isset($this->buffer[$this->maxlength])) {
-            $this->handleError(new \OverflowException('Buffer size exceeded'));
-        }
-    }
-
-    /** @internal */
-    public function handleEnd()
-    {
-        if ($this->buffer !== '') {
-            $this->handleData("\n");
-        }
-
-        if (!$this->closed) {
-            $this->emit('end');
-            $this->close();
-        }
-    }
-
-    /** @internal */
-    public function handleError(\Exception $error)
-    {
-        $this->emit('error', array($error));
-        $this->close();
-    }
-}

+ 0 - 144
vendor/clue/ndjson-react/src/Encoder.php

@@ -1,144 +0,0 @@
-<?php
-
-namespace Clue\React\NDJson;
-
-use Evenement\EventEmitter;
-use React\Stream\WritableStreamInterface;
-
-/**
- * The Encoder / Serializer can be used to write any value, encode it as a JSON text and forward it to an output stream
- */
-class Encoder extends EventEmitter implements WritableStreamInterface
-{
-    private $output;
-    private $options;
-    private $depth;
-
-    private $closed = false;
-
-    /**
-     * @param WritableStreamInterface $output
-     * @param int $options
-     * @param int $depth (requires PHP 5.5+)
-     * @throws \InvalidArgumentException
-     * @throws \BadMethodCallException
-     */
-    public function __construct(WritableStreamInterface $output, $options = 0, $depth = 512)
-    {
-        // @codeCoverageIgnoreStart
-        if (\defined('JSON_PRETTY_PRINT') && $options & \JSON_PRETTY_PRINT) {
-            throw new \InvalidArgumentException('Pretty printing not available for NDJSON');
-        }
-        if ($depth !== 512 && \PHP_VERSION < 5.5) {
-            throw new \BadMethodCallException('Depth parameter is only supported on PHP 5.5+');
-        }
-        if (\defined('JSON_THROW_ON_ERROR')) {
-            $options = $options & ~\JSON_THROW_ON_ERROR;
-        }
-        // @codeCoverageIgnoreEnd
-
-        $this->output = $output;
-
-        if (!$output->isWritable()) {
-            $this->close();
-            return;
-        }
-
-        $this->options = $options;
-        $this->depth = $depth;
-
-        $this->output->on('drain', array($this, 'handleDrain'));
-        $this->output->on('error', array($this, 'handleError'));
-        $this->output->on('close', array($this, 'close'));
-    }
-
-    public function write($data)
-    {
-        if ($this->closed) {
-            return false;
-        }
-
-        // we have to handle PHP warnings for legacy PHP < 5.5
-        // certain values (such as INF etc.) emit a warning, but still encode successfully
-        // @codeCoverageIgnoreStart
-        if (\PHP_VERSION_ID < 50500) {
-            $errstr = null;
-            \set_error_handler(function ($_, $error) use (&$errstr) {
-                $errstr = $error;
-            });
-
-            // encode data with options given in ctor (depth not supported)
-            $data = \json_encode($data, $this->options);
-
-            // always check error code and match missing error messages
-            \restore_error_handler();
-            $errno = \json_last_error();
-            if (\defined('JSON_ERROR_UTF8') && $errno === \JSON_ERROR_UTF8) {
-                // const JSON_ERROR_UTF8 added in PHP 5.3.3, but no error message assigned in legacy PHP < 5.5
-                // this overrides PHP 5.3.14 only: https://3v4l.org/IGP8Z#v5314
-                $errstr = 'Malformed UTF-8 characters, possibly incorrectly encoded';
-            } elseif ($errno !== \JSON_ERROR_NONE && $errstr === null) {
-                // error number present, but no error message applicable
-                $errstr = 'Unknown error';
-            }
-
-            // abort stream if encoding fails
-            if ($errno !== \JSON_ERROR_NONE || $errstr !== null) {
-                $this->handleError(new \RuntimeException('Unable to encode JSON: ' . $errstr, $errno));
-                return false;
-            }
-        } else {
-            // encode data with options given in ctor
-            $data = \json_encode($data, $this->options, $this->depth);
-
-            // abort stream if encoding fails
-            if ($data === false && \json_last_error() !== \JSON_ERROR_NONE) {
-                $this->handleError(new \RuntimeException('Unable to encode JSON: ' . \json_last_error_msg(), \json_last_error()));
-                return false;
-            }
-        }
-        // @codeCoverageIgnoreEnd
-
-        return $this->output->write($data . "\n");
-    }
-
-    public function end($data = null)
-    {
-        if ($data !== null) {
-            $this->write($data);
-        }
-
-        $this->output->end();
-    }
-
-    public function isWritable()
-    {
-        return !$this->closed;
-    }
-
-    public function close()
-    {
-        if ($this->closed) {
-            return;
-        }
-
-        $this->closed = true;
-        $this->output->close();
-
-        $this->emit('close');
-        $this->removeAllListeners();
-    }
-
-    /** @internal */
-    public function handleDrain()
-    {
-        $this->emit('drain');
-    }
-
-    /** @internal */
-    public function handleError(\Exception $error)
-    {
-        $this->emit('error', array($error));
-        $this->close();
-    }
-}

+ 0 - 579
vendor/composer/ClassLoader.php

@@ -1,579 +0,0 @@
-<?php
-
-/*
- * This file is part of Composer.
- *
- * (c) Nils Adermann <naderman@naderman.de>
- *     Jordi Boggiano <j.boggiano@seld.be>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Composer\Autoload;
-
-/**
- * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
- *
- *     $loader = new \Composer\Autoload\ClassLoader();
- *
- *     // register classes with namespaces
- *     $loader->add('Symfony\Component', __DIR__.'/component');
- *     $loader->add('Symfony',           __DIR__.'/framework');
- *
- *     // activate the autoloader
- *     $loader->register();
- *
- *     // to enable searching the include path (eg. for PEAR packages)
- *     $loader->setUseIncludePath(true);
- *
- * In this example, if you try to use a class in the Symfony\Component
- * namespace or one of its children (Symfony\Component\Console for instance),
- * the autoloader will first look for the class under the component/
- * directory, and it will then fallback to the framework/ directory if not
- * found before giving up.
- *
- * This class is loosely based on the Symfony UniversalClassLoader.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- * @author Jordi Boggiano <j.boggiano@seld.be>
- * @see    https://www.php-fig.org/psr/psr-0/
- * @see    https://www.php-fig.org/psr/psr-4/
- */
-class ClassLoader
-{
-    /** @var \Closure(string):void */
-    private static $includeFile;
-
-    /** @var string|null */
-    private $vendorDir;
-
-    // PSR-4
-    /**
-     * @var array<string, array<string, int>>
-     */
-    private $prefixLengthsPsr4 = array();
-    /**
-     * @var array<string, list<string>>
-     */
-    private $prefixDirsPsr4 = array();
-    /**
-     * @var list<string>
-     */
-    private $fallbackDirsPsr4 = array();
-
-    // PSR-0
-    /**
-     * List of PSR-0 prefixes
-     *
-     * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2')))
-     *
-     * @var array<string, array<string, list<string>>>
-     */
-    private $prefixesPsr0 = array();
-    /**
-     * @var list<string>
-     */
-    private $fallbackDirsPsr0 = array();
-
-    /** @var bool */
-    private $useIncludePath = false;
-
-    /**
-     * @var array<string, string>
-     */
-    private $classMap = array();
-
-    /** @var bool */
-    private $classMapAuthoritative = false;
-
-    /**
-     * @var array<string, bool>
-     */
-    private $missingClasses = array();
-
-    /** @var string|null */
-    private $apcuPrefix;
-
-    /**
-     * @var array<string, self>
-     */
-    private static $registeredLoaders = array();
-
-    /**
-     * @param string|null $vendorDir
-     */
-    public function __construct($vendorDir = null)
-    {
-        $this->vendorDir = $vendorDir;
-        self::initializeIncludeClosure();
-    }
-
-    /**
-     * @return array<string, list<string>>
-     */
-    public function getPrefixes()
-    {
-        if (!empty($this->prefixesPsr0)) {
-            return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
-        }
-
-        return array();
-    }
-
-    /**
-     * @return array<string, list<string>>
-     */
-    public function getPrefixesPsr4()
-    {
-        return $this->prefixDirsPsr4;
-    }
-
-    /**
-     * @return list<string>
-     */
-    public function getFallbackDirs()
-    {
-        return $this->fallbackDirsPsr0;
-    }
-
-    /**
-     * @return list<string>
-     */
-    public function getFallbackDirsPsr4()
-    {
-        return $this->fallbackDirsPsr4;
-    }
-
-    /**
-     * @return array<string, string> Array of classname => path
-     */
-    public function getClassMap()
-    {
-        return $this->classMap;
-    }
-
-    /**
-     * @param array<string, string> $classMap Class to filename map
-     *
-     * @return void
-     */
-    public function addClassMap(array $classMap)
-    {
-        if ($this->classMap) {
-            $this->classMap = array_merge($this->classMap, $classMap);
-        } else {
-            $this->classMap = $classMap;
-        }
-    }
-
-    /**
-     * Registers a set of PSR-0 directories for a given prefix, either
-     * appending or prepending to the ones previously set for this prefix.
-     *
-     * @param string              $prefix  The prefix
-     * @param list<string>|string $paths   The PSR-0 root directories
-     * @param bool                $prepend Whether to prepend the directories
-     *
-     * @return void
-     */
-    public function add($prefix, $paths, $prepend = false)
-    {
-        $paths = (array) $paths;
-        if (!$prefix) {
-            if ($prepend) {
-                $this->fallbackDirsPsr0 = array_merge(
-                    $paths,
-                    $this->fallbackDirsPsr0
-                );
-            } else {
-                $this->fallbackDirsPsr0 = array_merge(
-                    $this->fallbackDirsPsr0,
-                    $paths
-                );
-            }
-
-            return;
-        }
-
-        $first = $prefix[0];
-        if (!isset($this->prefixesPsr0[$first][$prefix])) {
-            $this->prefixesPsr0[$first][$prefix] = $paths;
-
-            return;
-        }
-        if ($prepend) {
-            $this->prefixesPsr0[$first][$prefix] = array_merge(
-                $paths,
-                $this->prefixesPsr0[$first][$prefix]
-            );
-        } else {
-            $this->prefixesPsr0[$first][$prefix] = array_merge(
-                $this->prefixesPsr0[$first][$prefix],
-                $paths
-            );
-        }
-    }
-
-    /**
-     * Registers a set of PSR-4 directories for a given namespace, either
-     * appending or prepending to the ones previously set for this namespace.
-     *
-     * @param string              $prefix  The prefix/namespace, with trailing '\\'
-     * @param list<string>|string $paths   The PSR-4 base directories
-     * @param bool                $prepend Whether to prepend the directories
-     *
-     * @throws \InvalidArgumentException
-     *
-     * @return void
-     */
-    public function addPsr4($prefix, $paths, $prepend = false)
-    {
-        $paths = (array) $paths;
-        if (!$prefix) {
-            // Register directories for the root namespace.
-            if ($prepend) {
-                $this->fallbackDirsPsr4 = array_merge(
-                    $paths,
-                    $this->fallbackDirsPsr4
-                );
-            } else {
-                $this->fallbackDirsPsr4 = array_merge(
-                    $this->fallbackDirsPsr4,
-                    $paths
-                );
-            }
-        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
-            // Register directories for a new namespace.
-            $length = strlen($prefix);
-            if ('\\' !== $prefix[$length - 1]) {
-                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
-            }
-            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
-            $this->prefixDirsPsr4[$prefix] = $paths;
-        } elseif ($prepend) {
-            // Prepend directories for an already registered namespace.
-            $this->prefixDirsPsr4[$prefix] = array_merge(
-                $paths,
-                $this->prefixDirsPsr4[$prefix]
-            );
-        } else {
-            // Append directories for an already registered namespace.
-            $this->prefixDirsPsr4[$prefix] = array_merge(
-                $this->prefixDirsPsr4[$prefix],
-                $paths
-            );
-        }
-    }
-
-    /**
-     * Registers a set of PSR-0 directories for a given prefix,
-     * replacing any others previously set for this prefix.
-     *
-     * @param string              $prefix The prefix
-     * @param list<string>|string $paths  The PSR-0 base directories
-     *
-     * @return void
-     */
-    public function set($prefix, $paths)
-    {
-        if (!$prefix) {
-            $this->fallbackDirsPsr0 = (array) $paths;
-        } else {
-            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
-        }
-    }
-
-    /**
-     * Registers a set of PSR-4 directories for a given namespace,
-     * replacing any others previously set for this namespace.
-     *
-     * @param string              $prefix The prefix/namespace, with trailing '\\'
-     * @param list<string>|string $paths  The PSR-4 base directories
-     *
-     * @throws \InvalidArgumentException
-     *
-     * @return void
-     */
-    public function setPsr4($prefix, $paths)
-    {
-        if (!$prefix) {
-            $this->fallbackDirsPsr4 = (array) $paths;
-        } else {
-            $length = strlen($prefix);
-            if ('\\' !== $prefix[$length - 1]) {
-                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
-            }
-            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
-            $this->prefixDirsPsr4[$prefix] = (array) $paths;
-        }
-    }
-
-    /**
-     * Turns on searching the include path for class files.
-     *
-     * @param bool $useIncludePath
-     *
-     * @return void
-     */
-    public function setUseIncludePath($useIncludePath)
-    {
-        $this->useIncludePath = $useIncludePath;
-    }
-
-    /**
-     * Can be used to check if the autoloader uses the include path to check
-     * for classes.
-     *
-     * @return bool
-     */
-    public function getUseIncludePath()
-    {
-        return $this->useIncludePath;
-    }
-
-    /**
-     * Turns off searching the prefix and fallback directories for classes
-     * that have not been registered with the class map.
-     *
-     * @param bool $classMapAuthoritative
-     *
-     * @return void
-     */
-    public function setClassMapAuthoritative($classMapAuthoritative)
-    {
-        $this->classMapAuthoritative = $classMapAuthoritative;
-    }
-
-    /**
-     * Should class lookup fail if not found in the current class map?
-     *
-     * @return bool
-     */
-    public function isClassMapAuthoritative()
-    {
-        return $this->classMapAuthoritative;
-    }
-
-    /**
-     * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
-     *
-     * @param string|null $apcuPrefix
-     *
-     * @return void
-     */
-    public function setApcuPrefix($apcuPrefix)
-    {
-        $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
-    }
-
-    /**
-     * The APCu prefix in use, or null if APCu caching is not enabled.
-     *
-     * @return string|null
-     */
-    public function getApcuPrefix()
-    {
-        return $this->apcuPrefix;
-    }
-
-    /**
-     * Registers this instance as an autoloader.
-     *
-     * @param bool $prepend Whether to prepend the autoloader or not
-     *
-     * @return void
-     */
-    public function register($prepend = false)
-    {
-        spl_autoload_register(array($this, 'loadClass'), true, $prepend);
-
-        if (null === $this->vendorDir) {
-            return;
-        }
-
-        if ($prepend) {
-            self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
-        } else {
-            unset(self::$registeredLoaders[$this->vendorDir]);
-            self::$registeredLoaders[$this->vendorDir] = $this;
-        }
-    }
-
-    /**
-     * Unregisters this instance as an autoloader.
-     *
-     * @return void
-     */
-    public function unregister()
-    {
-        spl_autoload_unregister(array($this, 'loadClass'));
-
-        if (null !== $this->vendorDir) {
-            unset(self::$registeredLoaders[$this->vendorDir]);
-        }
-    }
-
-    /**
-     * Loads the given class or interface.
-     *
-     * @param  string    $class The name of the class
-     * @return true|null True if loaded, null otherwise
-     */
-    public function loadClass($class)
-    {
-        if ($file = $this->findFile($class)) {
-            $includeFile = self::$includeFile;
-            $includeFile($file);
-
-            return true;
-        }
-
-        return null;
-    }
-
-    /**
-     * Finds the path to the file where the class is defined.
-     *
-     * @param string $class The name of the class
-     *
-     * @return string|false The path if found, false otherwise
-     */
-    public function findFile($class)
-    {
-        // class map lookup
-        if (isset($this->classMap[$class])) {
-            return $this->classMap[$class];
-        }
-        if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
-            return false;
-        }
-        if (null !== $this->apcuPrefix) {
-            $file = apcu_fetch($this->apcuPrefix.$class, $hit);
-            if ($hit) {
-                return $file;
-            }
-        }
-
-        $file = $this->findFileWithExtension($class, '.php');
-
-        // Search for Hack files if we are running on HHVM
-        if (false === $file && defined('HHVM_VERSION')) {
-            $file = $this->findFileWithExtension($class, '.hh');
-        }
-
-        if (null !== $this->apcuPrefix) {
-            apcu_add($this->apcuPrefix.$class, $file);
-        }
-
-        if (false === $file) {
-            // Remember that this class does not exist.
-            $this->missingClasses[$class] = true;
-        }
-
-        return $file;
-    }
-
-    /**
-     * Returns the currently registered loaders keyed by their corresponding vendor directories.
-     *
-     * @return array<string, self>
-     */
-    public static function getRegisteredLoaders()
-    {
-        return self::$registeredLoaders;
-    }
-
-    /**
-     * @param  string       $class
-     * @param  string       $ext
-     * @return string|false
-     */
-    private function findFileWithExtension($class, $ext)
-    {
-        // PSR-4 lookup
-        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
-
-        $first = $class[0];
-        if (isset($this->prefixLengthsPsr4[$first])) {
-            $subPath = $class;
-            while (false !== $lastPos = strrpos($subPath, '\\')) {
-                $subPath = substr($subPath, 0, $lastPos);
-                $search = $subPath . '\\';
-                if (isset($this->prefixDirsPsr4[$search])) {
-                    $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
-                    foreach ($this->prefixDirsPsr4[$search] as $dir) {
-                        if (file_exists($file = $dir . $pathEnd)) {
-                            return $file;
-                        }
-                    }
-                }
-            }
-        }
-
-        // PSR-4 fallback dirs
-        foreach ($this->fallbackDirsPsr4 as $dir) {
-            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
-                return $file;
-            }
-        }
-
-        // PSR-0 lookup
-        if (false !== $pos = strrpos($class, '\\')) {
-            // namespaced class name
-            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
-                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
-        } else {
-            // PEAR-like class name
-            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
-        }
-
-        if (isset($this->prefixesPsr0[$first])) {
-            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
-                if (0 === strpos($class, $prefix)) {
-                    foreach ($dirs as $dir) {
-                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
-                            return $file;
-                        }
-                    }
-                }
-            }
-        }
-
-        // PSR-0 fallback dirs
-        foreach ($this->fallbackDirsPsr0 as $dir) {
-            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
-                return $file;
-            }
-        }
-
-        // PSR-0 include paths.
-        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
-            return $file;
-        }
-
-        return false;
-    }
-
-    /**
-     * @return void
-     */
-    private static function initializeIncludeClosure()
-    {
-        if (self::$includeFile !== null) {
-            return;
-        }
-
-        /**
-         * Scope isolated include.
-         *
-         * Prevents access to $this/self from included files.
-         *
-         * @param  string $file
-         * @return void
-         */
-        self::$includeFile = \Closure::bind(static function($file) {
-            include $file;
-        }, null, null);
-    }
-}

Some files were not shown because too many files changed in this diff