Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e4e7443f81 | |||
| 5a8f309038 | |||
| 4dc75d7b56 | |||
| ca157ace77 | |||
| b734bdf849 | |||
| ae5548b27a | |||
| 20715e880f | |||
| 681cfc7cad | |||
| 5c83b8717c | |||
| 8d1b19bfa4 | |||
| d6aac48e7a | |||
| 1311cab36c | |||
| 9174f99971 | |||
| 4a544d5273 | |||
| a3a971d418 | |||
| 4dc1c09693 | |||
| b68611c31c | |||
| 6dcd23e5d7 |
@@ -0,0 +1,18 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_size = 4
|
||||
indent_style = space
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.{yml,yaml}]
|
||||
indent_size = 2
|
||||
|
||||
[compose.yaml]
|
||||
indent_size = 4
|
||||
@@ -0,0 +1,65 @@
|
||||
APP_NAME=Laravel
|
||||
APP_ENV=local
|
||||
APP_KEY=
|
||||
APP_DEBUG=true
|
||||
APP_URL=http://localhost
|
||||
|
||||
APP_LOCALE=en
|
||||
APP_FALLBACK_LOCALE=en
|
||||
APP_FAKER_LOCALE=en_US
|
||||
|
||||
APP_MAINTENANCE_DRIVER=file
|
||||
# APP_MAINTENANCE_STORE=database
|
||||
|
||||
# PHP_CLI_SERVER_WORKERS=4
|
||||
|
||||
BCRYPT_ROUNDS=12
|
||||
|
||||
LOG_CHANNEL=stack
|
||||
LOG_STACK=single
|
||||
LOG_DEPRECATIONS_CHANNEL=null
|
||||
LOG_LEVEL=debug
|
||||
|
||||
DB_CONNECTION=sqlite
|
||||
# DB_HOST=127.0.0.1
|
||||
# DB_PORT=3306
|
||||
# DB_DATABASE=laravel
|
||||
# DB_USERNAME=root
|
||||
# DB_PASSWORD=
|
||||
|
||||
SESSION_DRIVER=database
|
||||
SESSION_LIFETIME=120
|
||||
SESSION_ENCRYPT=false
|
||||
SESSION_PATH=/
|
||||
SESSION_DOMAIN=null
|
||||
|
||||
BROADCAST_CONNECTION=log
|
||||
FILESYSTEM_DISK=local
|
||||
QUEUE_CONNECTION=database
|
||||
|
||||
CACHE_STORE=database
|
||||
# CACHE_PREFIX=
|
||||
|
||||
MEMCACHED_HOST=127.0.0.1
|
||||
|
||||
REDIS_CLIENT=phpredis
|
||||
REDIS_HOST=127.0.0.1
|
||||
REDIS_PASSWORD=null
|
||||
REDIS_PORT=6379
|
||||
|
||||
MAIL_MAILER=log
|
||||
MAIL_SCHEME=null
|
||||
MAIL_HOST=127.0.0.1
|
||||
MAIL_PORT=2525
|
||||
MAIL_USERNAME=null
|
||||
MAIL_PASSWORD=null
|
||||
MAIL_FROM_ADDRESS="hello@example.com"
|
||||
MAIL_FROM_NAME="${APP_NAME}"
|
||||
|
||||
AWS_ACCESS_KEY_ID=
|
||||
AWS_SECRET_ACCESS_KEY=
|
||||
AWS_DEFAULT_REGION=us-east-1
|
||||
AWS_BUCKET=
|
||||
AWS_USE_PATH_STYLE_ENDPOINT=false
|
||||
|
||||
VITE_APP_NAME="${APP_NAME}"
|
||||
@@ -0,0 +1,11 @@
|
||||
* text=auto eol=lf
|
||||
|
||||
*.blade.php diff=html
|
||||
*.css diff=css
|
||||
*.html diff=html
|
||||
*.md diff=markdown
|
||||
*.php diff=php
|
||||
|
||||
/.github export-ignore
|
||||
CHANGELOG.md export-ignore
|
||||
.styleci.yml export-ignore
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
*.log
|
||||
.DS_Store
|
||||
.env
|
||||
.env.backup
|
||||
.env.production
|
||||
.phpactor.json
|
||||
.phpunit.result.cache
|
||||
/.fleet
|
||||
/.idea
|
||||
/.nova
|
||||
/.phpunit.cache
|
||||
/.vscode
|
||||
/.zed
|
||||
/auth.json
|
||||
/node_modules
|
||||
/public/build
|
||||
/public/hot
|
||||
/public/storage
|
||||
/storage/*.key
|
||||
/storage/pail
|
||||
/vendor
|
||||
Homestead.json
|
||||
Homestead.yaml
|
||||
Thumbs.db
|
||||
@@ -0,0 +1,59 @@
|
||||
<p align="center"><a href="https://laravel.com" target="_blank"><img src="https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg" width="400" alt="Laravel Logo"></a></p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/laravel/framework/actions"><img src="https://github.com/laravel/framework/workflows/tests/badge.svg" alt="Build Status"></a>
|
||||
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/dt/laravel/framework" alt="Total Downloads"></a>
|
||||
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/v/laravel/framework" alt="Latest Stable Version"></a>
|
||||
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/l/laravel/framework" alt="License"></a>
|
||||
</p>
|
||||
|
||||
## About Laravel
|
||||
|
||||
Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as:
|
||||
|
||||
- [Simple, fast routing engine](https://laravel.com/docs/routing).
|
||||
- [Powerful dependency injection container](https://laravel.com/docs/container).
|
||||
- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage.
|
||||
- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent).
|
||||
- Database agnostic [schema migrations](https://laravel.com/docs/migrations).
|
||||
- [Robust background job processing](https://laravel.com/docs/queues).
|
||||
- [Real-time event broadcasting](https://laravel.com/docs/broadcasting).
|
||||
|
||||
Laravel is accessible, powerful, and provides tools required for large, robust applications.
|
||||
|
||||
## Learning Laravel
|
||||
|
||||
Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. You can also check out [Laravel Learn](https://laravel.com/learn), where you will be guided through building a modern Laravel application.
|
||||
|
||||
If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library.
|
||||
|
||||
## Laravel Sponsors
|
||||
|
||||
We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the [Laravel Partners program](https://partners.laravel.com).
|
||||
|
||||
### Premium Partners
|
||||
|
||||
- **[Vehikl](https://vehikl.com)**
|
||||
- **[Tighten Co.](https://tighten.co)**
|
||||
- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)**
|
||||
- **[64 Robots](https://64robots.com)**
|
||||
- **[Curotec](https://www.curotec.com/services/technologies/laravel)**
|
||||
- **[DevSquad](https://devsquad.com/hire-laravel-developers)**
|
||||
- **[Redberry](https://redberry.international/laravel-development)**
|
||||
- **[Active Logic](https://activelogic.com)**
|
||||
|
||||
## Contributing
|
||||
|
||||
Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions).
|
||||
|
||||
## Code of Conduct
|
||||
|
||||
In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct).
|
||||
|
||||
## Security Vulnerabilities
|
||||
|
||||
If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed.
|
||||
|
||||
## License
|
||||
|
||||
The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).
|
||||
@@ -1,20 +0,0 @@
|
||||
-- custom.activity_log definition
|
||||
|
||||
CREATE TABLE `activity_log` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`log_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`description` text COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`subject_type` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`event` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`business_event` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'кастомное событие',
|
||||
`subject_id` bigint(20) unsigned DEFAULT NULL,
|
||||
`properties` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`properties`)),
|
||||
`batch_uuid` char(36) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`created_at` timestamp NULL DEFAULT NULL,
|
||||
`updated_at` timestamp NULL DEFAULT NULL,
|
||||
`causer_type` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`causer_id` bigint(20) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `subject` (`subject_type`,`subject_id`),
|
||||
KEY `activity_log_log_name_index` (`log_name`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=207 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
@@ -1,211 +0,0 @@
|
||||
INSERT INTO custom.activity_log (log_name,description,subject_type,event,business_event,subject_id,properties,batch_uuid,created_at,updated_at,causer_type,causer_id) VALUES
|
||||
('default','Look mum, I logged something',NULL,NULL,'',NULL,'[]',NULL,'2025-06-19 12:42:40','2025-06-19 12:42:40',NULL,NULL),
|
||||
('default','Look mum, I logged something',NULL,NULL,'',NULL,'{"key":"value"}',NULL,'2025-06-19 13:57:46','2025-06-19 13:57:46',NULL,NULL),
|
||||
('module1','Look mum, I logged something',NULL,NULL,'',NULL,'[]',NULL,'2025-06-19 14:07:08','2025-06-19 14:07:08',NULL,NULL),
|
||||
('default','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',5,'{"attributes":{"id":5,"emp_login":"dgavrilov","emp_phone":"9512348876","taxi_date":"2025-06-19","taxi_time":"15:15:00","taxi_address":"15:15","archive":0,"created_at":"2025-06-19T14:44:50.000000Z","updated_at":"2025-06-19T14:44:50.000000Z"}}',NULL,'2025-06-19 14:44:50','2025-06-19 14:44:50',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',9,'[]',NULL,'2025-06-19 15:03:15','2025-06-19 15:03:15',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',1,'[]',NULL,'2025-06-20 08:41:31','2025-06-20 08:41:31',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',1,'{"attributes":{"id":1,"emp_login":"dgavrilov","emp_phone":"89374370448","taxi_date":"2025-06-20","taxi_time":"15:15:00","taxi_address":"15:15","archive":0,"created_at":"2025-05-15T10:11:49.000000Z","updated_at":"2025-06-20T08:45:36.000000Z"},"old":{"id":1,"emp_login":"dgavrilov","emp_phone":"89374370448","taxi_date":"2025-06-21","taxi_time":"15:15:00","taxi_address":"15:15","archive":0,"created_at":"2025-05-15T10:11:49.000000Z","updated_at":"2025-06-20T08:41:31.000000Z"}}',NULL,'2025-06-20 08:45:36','2025-06-20 08:45:36',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',1,'{"attributes":{"taxi_date":"2025-06-21","updated_at":"2025-06-20T08:49:01.000000Z"},"old":{"taxi_date":"2025-06-20","updated_at":"2025-06-20T08:45:36.000000Z"}}',NULL,'2025-06-20 08:49:01','2025-06-20 08:49:01',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',1,'{"attributes":{"id":1,"emp_login":"dgavrilov","emp_phone":"89374370448","taxi_date":"2025-06-20","taxi_time":"15:15:00","taxi_address":"15:15","archive":0,"created_at":"2025-05-15T10:11:49.000000Z","updated_at":"2025-06-20T08:49:35.000000Z"},"old":{"id":1,"emp_login":"dgavrilov","emp_phone":"89374370448","taxi_date":"2025-06-21","taxi_time":"15:15:00","taxi_address":"15:15","archive":0,"created_at":"2025-05-15T10:11:49.000000Z","updated_at":"2025-06-20T08:49:01.000000Z"}}',NULL,'2025-06-20 08:49:35','2025-06-20 08:49:35',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',1,'{"attributes":{"taxi_date":"2025-06-21","updated_at":"2025-06-20T08:50:14.000000Z"},"old":{"taxi_date":"2025-06-20","updated_at":"2025-06-20T08:49:35.000000Z"}}',NULL,'2025-06-20 08:50:14','2025-06-20 08:50:14',NULL,NULL);
|
||||
INSERT INTO custom.activity_log (log_name,description,subject_type,event,business_event,subject_id,properties,batch_uuid,created_at,updated_at,causer_type,causer_id) VALUES
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',1,'{"attributes":{"taxi_date":"2025-06-20"},"old":{"taxi_date":"2025-06-21"}}',NULL,'2025-06-20 08:54:05','2025-06-20 08:54:05',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',1,'{"attributes":{"id":1,"emp_login":"dgavrilov","emp_phone":"89374370448","taxi_date":"2025-06-21","taxi_time":"15:15:00","taxi_address":"15:15","archive":0,"created_at":"2025-05-15T10:11:49.000000Z","updated_at":"2025-06-20T09:01:24.000000Z"},"old":{"id":1,"emp_login":"dgavrilov","emp_phone":"89374370448","taxi_date":"2025-06-20","taxi_time":"15:15:00","taxi_address":"15:15","archive":0,"created_at":"2025-05-15T10:11:49.000000Z","updated_at":"2025-06-20T08:54:05.000000Z"}}',NULL,'2025-06-20 09:01:24','2025-06-20 09:01:24',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',1,'{"attributes":{"taxi_date":"2025-06-21"},"old":{"taxi_date":"2025-06-20"}}',NULL,'2025-06-20 11:08:48','2025-06-20 11:08:48',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',1,'{"attributes":{"taxi_date":"2025-06-20"},"old":{"taxi_date":"2025-06-21"}}',NULL,'2025-06-20 14:06:57','2025-06-20 14:06:57',NULL,NULL),
|
||||
('default','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',1,'{"attributes":{"taxi_date":"2025-06-21"},"old":{"taxi_date":"2025-06-20"}}',NULL,'2025-06-20 14:23:37','2025-06-20 14:23:37',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',12,'{"attributes":{"id":12,"emp_login":"ymezentseva2","emp_phone":"9512348876","taxi_date":"2025-08-01","taxi_time":"15:15","taxi_address":"\\u0430\\u0434\\u0440\\u0435\\u0441","cancel_rqst":0}}',NULL,'2025-07-31 18:46:03','2025-07-31 18:46:03',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',1,'{"attributes":{"cancel_rqst":1},"old":{"cancel_rqst":0}}',NULL,'2025-07-31 18:46:29','2025-07-31 18:46:29',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',12,'{"attributes":{"cancel_rqst":1},"old":{"cancel_rqst":0}}',NULL,'2025-08-01 11:06:48','2025-08-01 11:06:48',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',20,'{"attributes":{"id":20,"emp_login":"ymezentseva2","emp_phone":"9512348876","taxi_date":"2025-08-02","taxi_time":"15:15","taxi_address":"\\u0430\\u0434\\u0440\\u0435\\u0441","cancel_rqst":0}}',NULL,'2025-08-01 12:12:57','2025-08-01 12:12:57',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',14,'{"attributes":{"cancel_rqst":1},"old":{"cancel_rqst":0}}',NULL,'2025-08-01 12:49:44','2025-08-01 12:49:44',NULL,NULL);
|
||||
INSERT INTO custom.activity_log (log_name,description,subject_type,event,business_event,subject_id,properties,batch_uuid,created_at,updated_at,causer_type,causer_id) VALUES
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',29,'{"attributes":{"id":29,"emp_login":"ymezentseva2","emp_phone":"9512348876","taxi_date":"2025-08-02","taxi_time":"15:15","taxi_address":"\\u0430\\u0434\\u0440\\u0435\\u0441","cancel_rqst":0}}',NULL,'2025-08-01 12:51:39','2025-08-01 12:51:39',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',33,'{"attributes":{"id":33,"emp_login":"ymezentseva2","emp_phone":"9512348876","taxi_date":"2025-08-02","taxi_time":"15:15","taxi_address":"\\u0430\\u0434\\u0440\\u0435\\u0441","cancel_rqst":0}}',NULL,'2025-08-01 15:57:11','2025-08-01 15:57:11',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',35,'{"attributes":{"id":35,"emp_login":"ymezentseva2","emp_phone":"9512348876","taxi_date":"2025-08-02","taxi_time":"15:15","taxi_address":"\\u0430\\u0434\\u0440\\u0435\\u0441","cancel_rqst":0},"user_login":"dgavrilov"}',NULL,'2025-08-01 16:47:54','2025-08-01 16:47:54',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',45,'{"attributes":{"id":45,"emp_login":"ymezentseva2","emp_phone":"9512348876","taxi_date":"2025-08-02","taxi_time":"15:15","taxi_address":"\\u0430\\u0434\\u0440\\u0435\\u0441","cancel_rqst":0}}',NULL,'2025-08-01 17:44:19','2025-08-01 17:44:19',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',55,'{"attributes":{"id":55,"emp_login":"ymezentseva2","emp_phone":"9512348876","taxi_date":"2025-08-02","taxi_time":"15:15","taxi_address":"\\u0430\\u0434\\u0440\\u0435\\u0441","cancel_rqst":0}}',NULL,'2025-08-01 19:13:22','2025-08-01 19:13:22',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',71,'{"attributes":{"id":71,"emp_login":"nrzhevskaya","emp_phone":"9611973699","taxi_date":"2025-08-01","taxi_time":"05:20","taxi_address":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u043f\\u0440-\\u0442 \\u041a\\u043b\\u044b\\u043a\\u043e\\u0432\\u0430 52, 3 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434","cancel_rqst":0}}',NULL,'2025-08-01 19:47:32','2025-08-01 19:47:32',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',72,'{"attributes":{"id":72,"emp_login":"nbabkina2","emp_phone":"9513144152","taxi_date":"2025-08-02","taxi_time":"05:20","taxi_address":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a,\\u00a0 \\u043f\\u0440-\\u0442 \\u0410. \\u0414\\u0435\\u0440\\u0438\\u0433\\u043b\\u0430\\u0437\\u043e\\u0432\\u0430, \\u0434. 93,\\u00a0 \\u043a\\u0432\\u00a0 185","cancel_rqst":0}}',NULL,'2025-08-01 20:06:14','2025-08-01 20:06:14',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',73,'{"attributes":{"id":73,"emp_login":"abarysheva","emp_phone":"9202677745","taxi_date":"2025-08-01","taxi_time":"05:20","taxi_address":"\\u041a\\u0443\\u0440\\u0441\\u043a\\u0430\\u044f \\u043e\\u0431\\u043b\\u0430\\u0441\\u0442\\u044c, \\u041a\\u0443\\u0440\\u0441\\u043a\\u0438\\u0439 \\u0440\\u0430\\u0439\\u043e\\u043d, \\u0441. \\u041e\\u0442\\u0440\\u0435\\u0448\\u043a\\u043e\\u0432\\u043e, \\u0434\\u043e\\u043c 69","cancel_rqst":0}}',NULL,'2025-08-01 20:07:49','2025-08-01 20:07:49',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',84,'{"attributes":{"id":84,"emp_login":"kelagina","emp_phone":"9207138479","taxi_date":"2025-08-01","taxi_time":"06:00","taxi_address":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a., \\u0443\\u043b. 2-\\u0430\\u044f \\u0424\\u0430\\u0442\\u0435\\u0436\\u0441\\u043a\\u0430\\u044f, \\u0434. 35","cancel_rqst":0}}',NULL,'2025-08-01 20:44:36','2025-08-01 20:44:36',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',85,'{"attributes":{"id":85,"emp_login":"tzakharova","emp_phone":"9045238279","taxi_date":"2025-08-02","taxi_time":"06:00","taxi_address":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u0412\\u0430\\u0442\\u0443\\u0442\\u0438\\u043d\\u0430 \\u0434.23, \\u043a\\u0432. 32","cancel_rqst":0}}',NULL,'2025-08-02 17:31:25','2025-08-02 17:31:25',NULL,NULL);
|
||||
INSERT INTO custom.activity_log (log_name,description,subject_type,event,business_event,subject_id,properties,batch_uuid,created_at,updated_at,causer_type,causer_id) VALUES
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',86,'{"attributes":{"id":86,"emp_login":"abychkova3","emp_phone":"9023460641","taxi_date":"2025-08-02","taxi_time":"06:00","taxi_address":"test","cancel_rqst":0}}',NULL,'2025-08-02 17:33:16','2025-08-02 17:33:16',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',87,'{"attributes":{"id":87,"emp_login":"amedvedeva10","emp_phone":"79508736255","taxi_date":"2025-08-02","taxi_time":"06:00","taxi_address":"test","cancel_rqst":0}}',NULL,'2025-08-02 17:34:06','2025-08-02 17:34:06',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',88,'{"attributes":{"id":88,"emp_login":"asamokhin","emp_phone":"79950858268","taxi_date":"2025-08-02","taxi_time":"06:00","taxi_address":"test","cancel_rqst":0}}',NULL,'2025-08-02 17:35:17','2025-08-02 17:35:17',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',94,'{"attributes":{"id":94,"emp_login":"abarysheva","emp_phone":"9202677745","taxi_date":"2025-08-02","taxi_time":"06:00","taxi_address":"\\u041a\\u0443\\u0440\\u0441\\u043a\\u0430\\u044f \\u043e\\u0431\\u043b\\u0430\\u0441\\u0442\\u044c, \\u041a\\u0443\\u0440\\u0441\\u043a\\u0438\\u0439 \\u0440\\u0430\\u0439\\u043e\\u043d, \\u0441. \\u041e\\u0442\\u0440\\u0435\\u0448\\u043a\\u043e\\u0432\\u043e, \\u0434\\u043e\\u043c 69","cancel_rqst":0}}',NULL,'2025-08-02 17:47:11','2025-08-02 17:47:11',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',95,'{"attributes":{"id":95,"emp_login":"ybukreeva","emp_phone":"9207032112","taxi_date":"2025-08-02","taxi_time":"06:00","taxi_address":"\\u041a\\u0443\\u0440\\u0441\\u043a\\u0430\\u044f \\u043e\\u0431\\u043b., \\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0421\\u0443\\u043c\\u0441\\u043a\\u0430\\u044f, \\u0434. 46, \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 3, \\u043a\\u0432. 50","cancel_rqst":0}}',NULL,'2025-08-02 17:50:29','2025-08-02 17:50:29',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',85,'{"attributes":{"cancel_rqst":1},"old":{"cancel_rqst":0}}',NULL,'2025-08-02 17:50:50','2025-08-02 17:50:50',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',96,'{"attributes":{"id":96,"emp_login":"tvavilova","emp_phone":"89624737723","taxi_date":"2025-08-02","taxi_time":"06:00","taxi_address":"\\u0423\\u043b. \\u041a\\u0443\\u043b\\u0438\\u0431\\u0438\\u043d\\u0430 \\u0434. 11 \\u043f. 2","cancel_rqst":0}}',NULL,'2025-08-02 17:55:28','2025-08-02 17:55:28',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',98,'{"attributes":{"id":98,"emp_login":"tvlasova","emp_phone":"9508720817","taxi_date":"2025-08-02","taxi_time":"06:00","taxi_address":"\\u041a\\u0443\\u0440\\u0441\\u043a\\u0430\\u044f \\u043e\\u0431\\u043b\\u0430\\u0441\\u0442\\u044c , \\u0433 \\u041a\\u0443\\u0440\\u0441\\u043a , \\u0443\\u043b \\u041c\\u0430\\u044f\\u043a\\u043e\\u0432\\u0441\\u043a\\u043e\\u0433\\u043e \\u0434 109 \\u043a\\u0432 4","cancel_rqst":0}}',NULL,'2025-08-02 17:57:49','2025-08-02 17:57:49',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',86,'{"attributes":{"cancel_rqst":1},"old":{"cancel_rqst":0}}',NULL,'2025-08-02 17:59:21','2025-08-02 17:59:21',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',99,'{"attributes":{"id":99,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-08-02","taxi_time":"06:00","taxi_address":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"user_login":"dgavrilov"}',NULL,'2025-08-02 18:02:14','2025-08-02 18:02:14',NULL,NULL);
|
||||
INSERT INTO custom.activity_log (log_name,description,subject_type,event,business_event,subject_id,properties,batch_uuid,created_at,updated_at,causer_type,causer_id) VALUES
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',100,'{"attributes":{"id":100,"emp_login":"nrzhevskaya","emp_phone":"9611973699","taxi_date":"2025-08-02","taxi_time":"06:00","taxi_address":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u043f\\u0440-\\u0442 \\u041a\\u043b\\u044b\\u043a\\u043e\\u0432\\u0430 52, 3 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434","cancel_rqst":0},"activity_log__user_login":"dgavrilov"}',NULL,'2025-08-02 18:19:56','2025-08-02 18:19:56',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',95,'{"attributes":{"cancel_rqst":1},"old":{"cancel_rqst":0},"Custom__user_login":"dgavrilov"}',NULL,'2025-08-02 18:20:36','2025-08-02 18:20:36',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',98,'{"attributes":{"cancel_rqst":1},"old":{"cancel_rqst":0},"Custom__user_login":"dgavrilov","Custom__test":"test"}',NULL,'2025-08-02 18:21:42','2025-08-02 18:21:42',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',99,'{"attributes":{"cancel_rqst":1},"old":{"cancel_rqst":0},"custom_prop":{"Custom__user_login":"dgavrilov"}}',NULL,'2025-08-02 18:24:30','2025-08-02 18:24:30',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',101,'{"attributes":{"id":101,"emp_login":"tgrudkina","emp_phone":"9374230056","taxi_date":"2025-08-03","taxi_time":"06:00","taxi_address":"\\u041b\\u0430\\u0434\\u043e\\u0436\\u0441\\u043a\\u0430\\u044f, 53,\\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 2","cancel_rqst":0},"custom_props":{"custom__user_login":"dgavrilov"}}',NULL,'2025-08-03 16:04:15','2025-08-03 16:04:15',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',101,'{"attributes":{"cancel_rqst":1},"old":{"cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":null}}',NULL,'2025-08-03 16:05:45','2025-08-03 16:05:45',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',101,'{"attributes":{"cancel_rqst":1},"old":{"cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":null}}',NULL,'2025-08-10 17:30:01','2025-08-10 17:30:01',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',101,'{"attributes":{"cancel_rqst":1},"old":{"cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-10 17:38:08','2025-08-10 17:38:08',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',101,'{"attributes":{"cancel_rqst":1},"old":{"cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-10 17:40:07','2025-08-10 17:40:07',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',101,'{"attributes":{"cancel_rqst":1},"old":{"cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-10 17:45:35','2025-08-10 17:45:35',NULL,NULL);
|
||||
INSERT INTO custom.activity_log (log_name,description,subject_type,event,business_event,subject_id,properties,batch_uuid,created_at,updated_at,causer_type,causer_id) VALUES
|
||||
('default','Look mum, I logged something',NULL,NULL,'',NULL,'[]',NULL,'2025-08-10 17:47:54','2025-08-10 17:47:54',NULL,NULL),
|
||||
('default','Look mum, I logged something',NULL,NULL,'',NULL,'[]',NULL,'2025-08-10 18:12:19','2025-08-10 18:12:19',NULL,NULL),
|
||||
('Shedule','Look mum, I logged something',NULL,'clear_old_Sanctum_tokens','',NULL,'[]',NULL,'2025-08-10 18:12:40','2025-08-10 18:12:40',NULL,NULL),
|
||||
('Shedule','Look mum, I logged something',NULL,'clear_old_Sanctum_tokens','',NULL,'[]',NULL,'2025-08-10 18:27:55','2025-08-10 18:27:55',NULL,NULL),
|
||||
('Shedule','Look mum, I logged something',NULL,'clear_old_Sanctum_tokens','',NULL,'[]',NULL,'2025-08-10 18:35:39','2025-08-10 18:35:39',NULL,NULL),
|
||||
('Shedule','Look mum, I logged something',NULL,'clear_old_Sanctum_tokens','',NULL,'[]',NULL,'2025-08-10 18:36:27','2025-08-10 18:36:27',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',101,'{"attributes":{"cancel_rqst":1},"old":{"cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-10 18:42:33','2025-08-10 18:42:33',NULL,NULL),
|
||||
('Shedule','Look mum, I logged something',NULL,'clear_old_Sanctum_tokens','',NULL,'[]',NULL,'2025-08-11 09:42:50','2025-08-11 09:42:50',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',105,'{"attributes":{"cancel_rqst":1},"old":{"cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-11 09:43:52','2025-08-11 09:43:52',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',102,'{"attributes":{"emp_phone":"9102113631"},"old":{"emp_phone":"9102113630"},"custom_props":{"custom__test":"test","custom__user_login":null}}',NULL,'2025-08-11 16:07:19','2025-08-11 16:07:19',NULL,NULL);
|
||||
INSERT INTO custom.activity_log (log_name,description,subject_type,event,business_event,subject_id,properties,batch_uuid,created_at,updated_at,causer_type,causer_id) VALUES
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',102,'{"attributes":{"emp_phone":"9102113632"},"old":{"emp_phone":"9102113631"},"custom_props":{"custom__test":"test","custom__user_login":null}}',NULL,'2025-08-11 16:08:03','2025-08-11 16:08:03',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',102,'{"attributes":{"cancel_rqst":1},"old":{"cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-11 16:08:32','2025-08-11 16:08:32',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',103,'{"attributes":{"emp_phone":"9045238278"},"old":{"emp_phone":"9045238279"},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilo"}}',NULL,'2025-08-11 16:39:52','2025-08-11 16:39:52',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',103,'{"attributes":{"cancel_rqst":1},"old":{"cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-11 16:40:44','2025-08-11 16:40:44',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',103,'{"attributes":{"emp_phone":"9045238277"},"old":{"emp_phone":"9045238278"},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilo"}}',NULL,'2025-08-11 16:41:13','2025-08-11 16:41:13',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',103,'{"attributes":{"emp_phone":"9045238277"},"old":{"emp_phone":"9045238278"},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-11 17:02:54','2025-08-11 17:02:54',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',103,'{"attributes":{"cancel_rqst":1},"old":{"cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-11 17:03:30','2025-08-11 17:03:30',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',104,'{"attributes":{"emp_phone":"9191705200"},"old":{"emp_phone":"9191705201"},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-11 17:08:34','2025-08-11 17:08:34',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',104,'{"attributes":{"cancel_rqst":1},"old":{"cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-13 17:56:54','2025-08-13 17:56:54',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',104,'{"attributes":{"cancel_rqst":1},"old":{"cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-17 15:45:23','2025-08-17 15:45:23',NULL,NULL);
|
||||
INSERT INTO custom.activity_log (log_name,description,subject_type,event,business_event,subject_id,properties,batch_uuid,created_at,updated_at,causer_type,causer_id) VALUES
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',104,'{"attributes":{"cancel_rqst":1},"old":{"cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-17 15:46:50','2025-08-17 15:46:50',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',104,'{"attributes":{"cancel_rqst":1},"old":{"cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-17 15:48:44','2025-08-17 15:48:44',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',106,'{"attributes":{"id":106,"emp_login":"tgrudkina","emp_phone":"9374230056","taxi_date":"2025-08-18","taxi_time":"05:20","taxi_address":"\\u041b\\u0430\\u0434\\u043e\\u0436\\u0441\\u043a\\u0430\\u044f, 53,\\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 2","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-17 16:04:33','2025-08-17 16:04:33',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',107,'{"attributes":{"id":107,"emp_login":"lshchetinina","emp_phone":"89875140821","taxi_date":"2025-08-17","taxi_time":"05:20","taxi_address":"testodsq \\u0430\\u0434\\u0440\\u0435\\u0441","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-17 16:05:07','2025-08-17 16:05:07',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',106,'{"attributes":{"emp_phone":"9374230057"},"old":{"emp_phone":"9374230056"},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-17 16:39:13','2025-08-17 16:39:13',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',106,'{"attributes":{"emp_phone":"9374230058"},"old":{"emp_phone":"9374230057"},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-17 16:45:59','2025-08-17 16:45:59',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',106,'{"attributes":{"emp_phone":"9374230055"},"old":{"emp_phone":"9374230058"},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-17 16:53:18','2025-08-17 16:53:18',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',106,'{"attributes":{"emp_phone":"9374230054"},"old":{"emp_phone":"9374230055"},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-17 16:57:47','2025-08-17 16:57:47',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',106,'{"attributes":{"emp_phone":"9374230053"},"old":{"emp_phone":"9374230054"},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-17 16:58:04','2025-08-17 16:58:04',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',106,'{"attributes":{"emp_phone":"9374230052"},"old":{"emp_phone":"9374230053"},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-17 17:06:15','2025-08-17 17:06:15',NULL,NULL);
|
||||
INSERT INTO custom.activity_log (log_name,description,subject_type,event,business_event,subject_id,properties,batch_uuid,created_at,updated_at,causer_type,causer_id) VALUES
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',108,'{"attributes":{"id":108,"emp_login":"nsubbotina2","emp_phone":"9513112628","taxi_date":"2025-08-17","taxi_time":"05:10","taxi_address":"test","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-17 17:35:38','2025-08-17 17:35:38',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',109,'{"attributes":{"id":109,"emp_login":"ogalushka","emp_phone":"9611968330","taxi_date":"2025-08-26","taxi_time":"01:15","taxi_address":"\\u041a\\u0443\\u0440\\u0441\\u043a\\u0430\\u044f \\u043e\\u0431\\u043b\\u0430\\u0441\\u0442\\u044c, \\u041a\\u0443\\u0440\\u0441\\u043a\\u0438\\u0439 \\u0440\\u0430\\u0439\\u043e\\u043d, \\u0434\\u0435\\u0440\\u0435\\u0432\\u043d\\u044f \\u0412\\u0435\\u0440\\u0445\\u043d\\u044f\\u044f \\u041c\\u0435\\u0434\\u0432\\u0435\\u0434\\u0438\\u0446\\u0430 \\u0443\\u043b. \\u0421\\u043e\\u0432\\u0435\\u0442\\u0441\\u043a\\u0430\\u044f, \\u0434\\u043e\\u043c 151","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-26 11:04:47','2025-08-26 11:04:47',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',109,'{"attributes":{"emp_phone":"9611968331"},"old":{"emp_phone":"9611968330"},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-26 11:05:30','2025-08-26 11:05:30',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',110,'{"attributes":{"id":110,"emp_login":"lalferova","emp_phone":"9308549910","taxi_date":"2025-08-26","taxi_time":"23:15","taxi_address":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 23 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-08-26 12:55:54','2025-08-26 12:55:54',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',111,'{"attributes":{"id":111,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-09-22","taxi_time":"23:15","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-09-22 10:10:18','2025-09-22 10:10:18',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',112,'{"attributes":{"id":112,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-09-24","taxi_time":"23:15","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-09-24 15:11:26','2025-09-24 15:11:26',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',113,'{"attributes":{"id":113,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-09-25","taxi_time":"23:15","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-09-25 13:08:55','2025-09-25 13:08:55',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',114,'{"attributes":{"id":114,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-09-25","taxi_time":"23:15","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-09-25 13:10:28','2025-09-25 13:10:28',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',115,'{"attributes":{"id":115,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-09-25","taxi_time":"23:15","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-09-25 13:11:56','2025-09-25 13:11:56',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',116,'{"attributes":{"id":116,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-09-25","taxi_time":"23:15","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-09-25 14:17:24','2025-09-25 14:17:24',NULL,NULL);
|
||||
INSERT INTO custom.activity_log (log_name,description,subject_type,event,business_event,subject_id,properties,batch_uuid,created_at,updated_at,causer_type,causer_id) VALUES
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',117,'{"attributes":{"id":117,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-09-25","taxi_time":"23:15","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-09-25 14:41:26','2025-09-25 14:41:26',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',118,'{"attributes":{"id":118,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-09-25","taxi_time":"23:15","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-09-25 14:42:28','2025-09-25 14:42:28',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',119,'{"attributes":{"id":119,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-09-25","taxi_time":"23:15","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-09-25 14:54:44','2025-09-25 14:54:44',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',120,'{"attributes":{"id":120,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-09-25","taxi_time":"23:15","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-09-25 14:59:54','2025-09-25 14:59:54',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',121,'{"attributes":{"id":121,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-09-25","taxi_time":"23:15","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-09-25 15:30:25','2025-09-25 15:30:25',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',122,'{"attributes":{"id":122,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-09-25","taxi_time":"23:15","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-09-25 15:31:32','2025-09-25 15:31:32',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',123,'{"attributes":{"id":123,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-09-25","taxi_time":"23:15","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-09-25 15:33:40','2025-09-25 15:33:40',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',124,'{"attributes":{"id":124,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-10-21","taxi_time":"05:10","taxi_address_from":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-10-20 11:59:21','2025-10-20 11:59:21',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',124,'{"attributes":{"taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 166"},"old":{"taxi_address_from":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430"},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-10-21 17:30:19','2025-10-21 17:30:19',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',125,'{"attributes":{"id":125,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-10-23","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-10-23 16:22:49','2025-10-23 16:22:49',NULL,NULL);
|
||||
INSERT INTO custom.activity_log (log_name,description,subject_type,event,business_event,subject_id,properties,batch_uuid,created_at,updated_at,causer_type,causer_id) VALUES
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',126,'{"attributes":{"id":126,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-10-24","taxi_time":"05:10","taxi_address_from":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-10-23 16:49:07','2025-10-23 16:49:07',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',126,'{"attributes":{"taxi_time":"23:15","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164"},"old":{"taxi_time":"05:10","taxi_address_from":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430"},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-10-23 17:00:18','2025-10-23 17:00:18',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',126,'{"attributes":{"taxi_time":"05:10","taxi_address_from":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430"},"old":{"taxi_time":"23:15","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164"},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-10-23 17:00:46','2025-10-23 17:00:46',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',127,'{"attributes":{"id":127,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-10-25","taxi_time":"23:15","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-10-24 08:25:06','2025-10-24 08:25:06',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',127,'{"attributes":{"emp_phone":"9308549910","taxi_time":"04:20","taxi_address_from":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430"},"old":{"emp_phone":"9308549909","taxi_time":"23:15","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164"},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-10-24 08:35:56','2025-10-24 08:35:56',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',126,'{"attributes":{"cancel_rqst":1},"old":{"cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-10-24 08:48:25','2025-10-24 08:48:25',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',128,'{"attributes":{"id":128,"emp_login":"nrzhevskaya","emp_phone":"9611973699","taxi_date":"2025-10-25","taxi_time":"23:15","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u043f\\u0440-\\u0442 \\u041a\\u043b\\u044b\\u043a\\u043e\\u0432\\u0430 52, 3 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-10-24 09:13:47','2025-10-24 09:13:47',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',129,'{"attributes":{"id":129,"emp_login":"nbabkina2","emp_phone":"9513144152","taxi_date":"2025-10-25","taxi_time":"06:00","taxi_address_from":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a,\\u00a0 \\u043f\\u0440-\\u0442 \\u0410. \\u0414\\u0435\\u0440\\u0438\\u0433\\u043b\\u0430\\u0437\\u043e\\u0432\\u0430, \\u0434. 93,\\u00a0 \\u043a\\u0432\\u00a0 185","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-10-24 10:12:26','2025-10-24 10:12:26',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',124,'{"attributes":{"taxi_date":"2025-10-24"},"old":{"taxi_date":"2025-10-25"},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-10-24 12:34:42','2025-10-24 12:34:42',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',124,'{"attributes":{"taxi_date":"2025-10-25"},"old":{"taxi_date":"2025-10-24"},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-10-24 12:35:25','2025-10-24 12:35:25',NULL,NULL);
|
||||
INSERT INTO custom.activity_log (log_name,description,subject_type,event,business_event,subject_id,properties,batch_uuid,created_at,updated_at,causer_type,causer_id) VALUES
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',129,'{"attributes":{"emp_phone":"9513144153"},"old":{"emp_phone":"9513144152"},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-10-24 15:38:09','2025-10-24 15:38:09',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',124,'{"attributes":{"taxi_date":"2025-10-24"},"old":{"taxi_date":"2025-10-25"},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-10-24 15:57:37','2025-10-24 15:57:37',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',124,'{"attributes":{"taxi_date":"2025-10-25"},"old":{"taxi_date":"2025-10-24"},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-10-24 17:02:24','2025-10-24 17:02:24',NULL,NULL),
|
||||
('Taxi','updated','Modules\\Taxi\\App\\Models\\TaxiMain','updated','',124,'{"attributes":{"taxi_date":"2025-10-24"},"old":{"taxi_date":"2025-10-25"},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-10-24 17:04:30','2025-10-24 17:04:30',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',130,'{"attributes":{"id":130,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-10-31","taxi_time":"00:15","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-10-31 11:34:19','2025-10-31 11:34:19',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',131,'{"attributes":{"id":131,"emp_login":"nrzhevskaya","emp_phone":"9611973699","taxi_date":"2025-11-09","taxi_time":"05:20","taxi_address_from":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u043f\\u0440-\\u0442 \\u041a\\u043b\\u044b\\u043a\\u043e\\u0432\\u0430 52, 3 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-08 18:24:43','2025-11-08 18:24:43',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',132,'{"attributes":{"id":132,"emp_login":"abarysheva","emp_phone":"9202677745","taxi_date":"2025-11-09","taxi_time":"05:20","taxi_address_from":"\\u041a\\u0443\\u0440\\u0441\\u043a\\u0430\\u044f \\u043e\\u0431\\u043b\\u0430\\u0441\\u0442\\u044c, \\u041a\\u0443\\u0440\\u0441\\u043a\\u0438\\u0439 \\u0440\\u0430\\u0439\\u043e\\u043d, \\u0441. \\u041e\\u0442\\u0440\\u0435\\u0448\\u043a\\u043e\\u0432\\u043e, \\u0434\\u043e\\u043c 69","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-08 18:33:45','2025-11-08 18:33:45',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',133,'{"attributes":{"id":133,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-09","taxi_time":"06:00","taxi_address_from":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-08 18:34:44','2025-11-08 18:34:44',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',134,'{"attributes":{"id":134,"emp_login":"nbabkina2","emp_phone":"9513144152","taxi_date":"2025-11-09","taxi_time":"06:00","taxi_address_from":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a,\\u00a0 \\u043f\\u0440-\\u0442 \\u0410. \\u0414\\u0435\\u0440\\u0438\\u0433\\u043b\\u0430\\u0437\\u043e\\u0432\\u0430, \\u0434. 93,\\u00a0 \\u043a\\u0432\\u00a0 185","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-08 18:35:28','2025-11-08 18:35:28',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',135,'{"attributes":{"id":135,"emp_login":"ybukreeva","emp_phone":"9207032112","taxi_date":"2025-11-09","taxi_time":"06:00","taxi_address_from":"\\u041a\\u0443\\u0440\\u0441\\u043a\\u0430\\u044f \\u043e\\u0431\\u043b., \\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0421\\u0443\\u043c\\u0441\\u043a\\u0430\\u044f, \\u0434. 46, \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 3, \\u043a\\u0432. 50","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-08 18:38:32','2025-11-08 18:38:32',NULL,NULL);
|
||||
INSERT INTO custom.activity_log (log_name,description,subject_type,event,business_event,subject_id,properties,batch_uuid,created_at,updated_at,causer_type,causer_id) VALUES
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',136,'{"attributes":{"id":136,"emp_login":"elukina","emp_phone":"79051588139","taxi_date":"2025-11-09","taxi_time":"06:00","taxi_address_from":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u0425\\u0443\\u0442\\u043e\\u0440\\u0441\\u043a\\u0430\\u044f, \\u0434. 12 \\u0410, \\u043a\\u0432. 82","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-08 18:40:30','2025-11-08 18:40:30',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',137,'{"attributes":{"id":137,"emp_login":"lshchetinina","emp_phone":"89875140821","taxi_date":"2025-11-09","taxi_time":"06:00","taxi_address_from":"test","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041f\\u0435\\u043d\\u0437\\u044b","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-08 18:43:54','2025-11-08 18:43:54',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',138,'{"attributes":{"id":138,"emp_login":"lshchetinina","emp_phone":"89875140821","taxi_date":"2025-11-09","taxi_time":"06:00","taxi_address_from":"test","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041f\\u0435\\u043d\\u0437\\u044b","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-08 18:45:19','2025-11-08 18:45:19',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',139,'{"attributes":{"id":139,"emp_login":"lshchetinina","emp_phone":"89875140821","taxi_date":"2025-11-09","taxi_time":"06:00","taxi_address_from":"test","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041f\\u0435\\u043d\\u0437\\u044b","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-08 18:47:19','2025-11-08 18:47:19',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',140,'{"attributes":{"id":140,"emp_login":"gshchankina","emp_phone":"9648654220","taxi_date":"2025-11-09","taxi_time":"06:00","taxi_address_from":"gf","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041f\\u0435\\u043d\\u0437\\u044b","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-08 18:49:05','2025-11-08 18:49:05',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',141,'{"attributes":{"id":141,"emp_login":"gshchankina","emp_phone":"9648654220","taxi_date":"2025-11-09","taxi_time":"06:00","taxi_address_from":"gf","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041f\\u0435\\u043d\\u0437\\u044b","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-08 18:53:30','2025-11-08 18:53:30',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',142,'{"attributes":{"id":142,"emp_login":"gshchankina","emp_phone":"9648654220","taxi_date":"2025-11-09","taxi_time":"06:00","taxi_address_from":"gf","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041f\\u0435\\u043d\\u0437\\u044b","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-08 18:54:43','2025-11-08 18:54:43',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',143,'{"attributes":{"id":143,"emp_login":"lanokhina","emp_phone":"9191793910","taxi_date":"2025-11-09","taxi_time":"05:00","taxi_address_from":"\\u041a\\u0443\\u0440\\u0447\\u0430\\u0442\\u043e\\u0432\\u0441\\u043a\\u0438\\u0439 \\u0440-\\u043d \\u0441.\\u0423\\u0441\\u043f\\u0435\\u043d\\u043a\\u0430 \\u0434.2,\\u043a\\u0432.1 (\\u0447\\u0430\\u0441\\u0442\\u043d\\u044b\\u0439 \\u0434\\u043e\\u043c)","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-08 18:56:17','2025-11-08 18:56:17',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',144,'{"attributes":{"id":144,"emp_login":"lanokhina","emp_phone":"9191793910","taxi_date":"2025-11-09","taxi_time":"05:00","taxi_address_from":"\\u041a\\u0443\\u0440\\u0447\\u0430\\u0442\\u043e\\u0432\\u0441\\u043a\\u0438\\u0439 \\u0440-\\u043d \\u0441.\\u0423\\u0441\\u043f\\u0435\\u043d\\u043a\\u0430 \\u0434.2,\\u043a\\u0432.1 (\\u0447\\u0430\\u0441\\u0442\\u043d\\u044b\\u0439 \\u0434\\u043e\\u043c)","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-08 19:20:50','2025-11-08 19:20:50',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',145,'{"attributes":{"id":145,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-08","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-08 19:23:50','2025-11-08 19:23:50',NULL,NULL);
|
||||
INSERT INTO custom.activity_log (log_name,description,subject_type,event,business_event,subject_id,properties,batch_uuid,created_at,updated_at,causer_type,causer_id) VALUES
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',146,'{"attributes":{"id":146,"emp_login":"osoldatenkova","emp_phone":"89023459514","taxi_date":"2025-11-09","taxi_time":"05:20","taxi_address_from":"test","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041f\\u0435\\u043d\\u0437\\u044b","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-08 19:27:26','2025-11-08 19:27:26',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',147,'{"attributes":{"id":147,"emp_login":"osoldatenkova","emp_phone":"89023459514","taxi_date":"2025-11-09","taxi_time":"05:20","taxi_address_from":"test","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041f\\u0435\\u043d\\u0437\\u044b","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-08 19:28:55','2025-11-08 19:28:55',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',148,'{"attributes":{"id":148,"emp_login":"tromakina","emp_phone":"9603165907","taxi_date":"2025-11-09","taxi_time":"05:10","taxi_address_from":"\\u0443\\u043b.\\u0413\\u0435\\u043d\\u0435\\u0440\\u0430\\u043b\\u0430 \\u0413\\u043b\\u0430\\u0437\\u0443\\u043d\\u043e\\u0432\\u0430, \\u0434. 5","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041f\\u0435\\u043d\\u0437\\u044b","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-08 19:32:38','2025-11-08 19:32:38',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',149,'{"attributes":{"id":149,"emp_login":"tromakina","emp_phone":"9603165907","taxi_date":"2025-11-09","taxi_time":"05:10","taxi_address_from":"\\u0443\\u043b.\\u0413\\u0435\\u043d\\u0435\\u0440\\u0430\\u043b\\u0430 \\u0413\\u043b\\u0430\\u0437\\u0443\\u043d\\u043e\\u0432\\u0430, \\u0434. 5","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041f\\u0435\\u043d\\u0437\\u044b","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-08 19:36:22','2025-11-08 19:36:22',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',150,'{"attributes":{"id":150,"emp_login":"aarkhipova6","emp_phone":"9374299849","taxi_date":"2025-11-09","taxi_time":"04:20","taxi_address_from":"\\u0443\\u043b. \\u0414\\u0437\\u0435\\u0440\\u0436\\u0438\\u043d\\u0441\\u043a\\u043e\\u0433\\u043e, \\u0434\\u043e\\u043c 21, 4 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041f\\u0435\\u043d\\u0437\\u044b","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-08 19:37:09','2025-11-08 19:37:09',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',151,'{"attributes":{"id":151,"emp_login":"abarysheva","emp_phone":"9202677745","taxi_date":"2025-11-09","taxi_time":"05:20","taxi_address_from":"\\u041a\\u0443\\u0440\\u0441\\u043a\\u0430\\u044f \\u043e\\u0431\\u043b\\u0430\\u0441\\u0442\\u044c, \\u041a\\u0443\\u0440\\u0441\\u043a\\u0438\\u0439 \\u0440\\u0430\\u0439\\u043e\\u043d, \\u0441. \\u041e\\u0442\\u0440\\u0435\\u0448\\u043a\\u043e\\u0432\\u043e, \\u0434\\u043e\\u043c 69","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-08 19:39:12','2025-11-08 19:39:12',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',152,'{"attributes":{"id":152,"emp_login":"abarysheva","emp_phone":"9202677745","taxi_date":"2025-11-09","taxi_time":"05:20","taxi_address_from":"\\u041a\\u0443\\u0440\\u0441\\u043a\\u0430\\u044f \\u043e\\u0431\\u043b\\u0430\\u0441\\u0442\\u044c, \\u041a\\u0443\\u0440\\u0441\\u043a\\u0438\\u0439 \\u0440\\u0430\\u0439\\u043e\\u043d, \\u0441. \\u041e\\u0442\\u0440\\u0435\\u0448\\u043a\\u043e\\u0432\\u043e, \\u0434\\u043e\\u043c 69","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-08 19:41:38','2025-11-08 19:41:38',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',153,'{"attributes":{"id":153,"emp_login":"ybukreeva","emp_phone":"9207032112","taxi_date":"2025-11-10","taxi_time":"05:00","taxi_address_from":"\\u041a\\u0443\\u0440\\u0441\\u043a\\u0430\\u044f \\u043e\\u0431\\u043b., \\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0421\\u0443\\u043c\\u0441\\u043a\\u0430\\u044f, \\u0434. 46, \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 3, \\u043a\\u0432. 50","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-09 11:21:23','2025-11-09 11:21:23',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',154,'{"attributes":{"id":154,"emp_login":"ybukreeva","emp_phone":"9207032112","taxi_date":"2025-11-10","taxi_time":"05:00","taxi_address_from":"\\u041a\\u0443\\u0440\\u0441\\u043a\\u0430\\u044f \\u043e\\u0431\\u043b., \\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0421\\u0443\\u043c\\u0441\\u043a\\u0430\\u044f, \\u0434. 46, \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 3, \\u043a\\u0432. 50","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-09 11:24:46','2025-11-09 11:24:46',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',155,'{"attributes":{"id":155,"emp_login":"ybukreeva","emp_phone":"9207032112","taxi_date":"2025-11-10","taxi_time":"05:20","taxi_address_from":"\\u041a\\u0443\\u0440\\u0441\\u043a\\u0430\\u044f \\u043e\\u0431\\u043b., \\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0421\\u0443\\u043c\\u0441\\u043a\\u0430\\u044f, \\u0434. 46, \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 3, \\u043a\\u0432. 50","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-09 11:26:36','2025-11-09 11:26:36',NULL,NULL);
|
||||
INSERT INTO custom.activity_log (log_name,description,subject_type,event,business_event,subject_id,properties,batch_uuid,created_at,updated_at,causer_type,causer_id) VALUES
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',156,'{"attributes":{"id":156,"emp_login":"ybukreeva","emp_phone":"9207032112","taxi_date":"2025-11-10","taxi_time":"05:20","taxi_address_from":"\\u041a\\u0443\\u0440\\u0441\\u043a\\u0430\\u044f \\u043e\\u0431\\u043b., \\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0421\\u0443\\u043c\\u0441\\u043a\\u0430\\u044f, \\u0434. 46, \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 3, \\u043a\\u0432. 50","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-09 11:27:52','2025-11-09 11:27:52',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',157,'{"attributes":{"id":157,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-09","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-09 11:32:00','2025-11-09 11:32:00',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',158,'{"attributes":{"id":158,"emp_login":"ybukreeva","emp_phone":"9207032112","taxi_date":"2025-11-10","taxi_time":"05:20","taxi_address_from":"\\u041a\\u0443\\u0440\\u0441\\u043a\\u0430\\u044f \\u043e\\u0431\\u043b., \\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0421\\u0443\\u043c\\u0441\\u043a\\u0430\\u044f, \\u0434. 46, \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 3, \\u043a\\u0432. 50","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-09 11:48:23','2025-11-09 11:48:23',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',159,'{"attributes":{"id":159,"emp_login":"ybukreeva","emp_phone":"9207032112","taxi_date":"2025-11-10","taxi_time":"05:20","taxi_address_from":"\\u041a\\u0443\\u0440\\u0441\\u043a\\u0430\\u044f \\u043e\\u0431\\u043b., \\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0421\\u0443\\u043c\\u0441\\u043a\\u0430\\u044f, \\u0434. 46, \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 3, \\u043a\\u0432. 50","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-09 11:49:01','2025-11-09 11:49:01',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',160,'{"attributes":{"id":160,"emp_login":"ybukreeva","emp_phone":"9207032112","taxi_date":"2025-11-10","taxi_time":"05:20","taxi_address_from":"\\u041a\\u0443\\u0440\\u0441\\u043a\\u0430\\u044f \\u043e\\u0431\\u043b., \\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0421\\u0443\\u043c\\u0441\\u043a\\u0430\\u044f, \\u0434. 46, \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 3, \\u043a\\u0432. 50","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-09 11:49:40','2025-11-09 11:49:40',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',161,'{"attributes":{"id":161,"emp_login":"ybukreeva","emp_phone":"9207032112","taxi_date":"2025-11-10","taxi_time":"05:20","taxi_address_from":"\\u041a\\u0443\\u0440\\u0441\\u043a\\u0430\\u044f \\u043e\\u0431\\u043b., \\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0421\\u0443\\u043c\\u0441\\u043a\\u0430\\u044f, \\u0434. 46, \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 3, \\u043a\\u0432. 50","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-09 11:50:28','2025-11-09 11:50:28',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',162,'{"attributes":{"id":162,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-09","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-09 11:51:37','2025-11-09 11:51:37',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',163,'{"attributes":{"id":163,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-09","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-09 11:52:54','2025-11-09 11:52:54',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',164,'{"attributes":{"id":164,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-09","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-09 11:53:16','2025-11-09 11:53:16',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',165,'{"attributes":{"id":165,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-09","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-09 11:53:58','2025-11-09 11:53:58',NULL,NULL);
|
||||
INSERT INTO custom.activity_log (log_name,description,subject_type,event,business_event,subject_id,properties,batch_uuid,created_at,updated_at,causer_type,causer_id) VALUES
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',166,'{"attributes":{"id":166,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-09","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-09 11:55:59','2025-11-09 11:55:59',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',167,'{"attributes":{"id":167,"emp_login":"ybukreeva","emp_phone":"9207032112","taxi_date":"2025-11-10","taxi_time":"05:20","taxi_address_from":"\\u041a\\u0443\\u0440\\u0441\\u043a\\u0430\\u044f \\u043e\\u0431\\u043b., \\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0421\\u0443\\u043c\\u0441\\u043a\\u0430\\u044f, \\u0434. 46, \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 3, \\u043a\\u0432. 50","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-09 11:57:03','2025-11-09 11:57:03',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',168,'{"attributes":{"id":168,"emp_login":"ybukreeva","emp_phone":"9207032112","taxi_date":"2025-11-10","taxi_time":"05:20","taxi_address_from":"\\u041a\\u0443\\u0440\\u0441\\u043a\\u0430\\u044f \\u043e\\u0431\\u043b., \\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0421\\u0443\\u043c\\u0441\\u043a\\u0430\\u044f, \\u0434. 46, \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 3, \\u043a\\u0432. 50","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-09 11:57:51','2025-11-09 11:57:51',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',169,'{"attributes":{"id":169,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-09","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-09 12:20:14','2025-11-09 12:20:14',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',170,'{"attributes":{"id":170,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-09","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-09 12:21:30','2025-11-09 12:21:30',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',171,'{"attributes":{"id":171,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-09","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-09 13:40:08','2025-11-09 13:40:08',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',172,'{"attributes":{"id":172,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-09","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-09 13:40:32','2025-11-09 13:40:32',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',173,'{"attributes":{"id":173,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-10","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-10 18:14:46','2025-11-10 18:14:46',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',174,'{"attributes":{"id":174,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-10","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-10 18:17:05','2025-11-10 18:17:05',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',175,'{"attributes":{"id":175,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-10","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-10 18:20:45','2025-11-10 18:20:45',NULL,NULL);
|
||||
INSERT INTO custom.activity_log (log_name,description,subject_type,event,business_event,subject_id,properties,batch_uuid,created_at,updated_at,causer_type,causer_id) VALUES
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',176,'{"attributes":{"id":176,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-10","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-10 18:27:54','2025-11-10 18:27:54',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',177,'{"attributes":{"id":177,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-10","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-10 18:29:12','2025-11-10 18:29:12',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',178,'{"attributes":{"id":178,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-10","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-10 18:31:04','2025-11-10 18:31:04',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',179,'{"attributes":{"id":179,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-11","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-11 09:48:14','2025-11-11 09:48:14',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',180,'{"attributes":{"id":180,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-11","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-11 09:49:13','2025-11-11 09:49:13',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',181,'{"attributes":{"id":181,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-11","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-11 09:49:35','2025-11-11 09:49:35',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',182,'{"attributes":{"id":182,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-11","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-11 09:52:01','2025-11-11 09:52:01',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',183,'{"attributes":{"id":183,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-11","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-11 09:53:05','2025-11-11 09:53:05',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',184,'{"attributes":{"id":184,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-11","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-11 09:54:13','2025-11-11 09:54:13',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',185,'{"attributes":{"id":185,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-11","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-11 09:56:17','2025-11-11 09:56:17',NULL,NULL);
|
||||
INSERT INTO custom.activity_log (log_name,description,subject_type,event,business_event,subject_id,properties,batch_uuid,created_at,updated_at,causer_type,causer_id) VALUES
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',186,'{"attributes":{"id":186,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-11","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-11 09:58:00','2025-11-11 09:58:00',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',187,'{"attributes":{"id":187,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-11","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-11 10:00:04','2025-11-11 10:00:04',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',188,'{"attributes":{"id":188,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-11","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-11 10:00:25','2025-11-11 10:00:25',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',189,'{"attributes":{"id":189,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-11","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-11 11:29:37','2025-11-11 11:29:37',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',190,'{"attributes":{"id":190,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-11","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-11 14:23:21','2025-11-11 14:23:21',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',191,'{"attributes":{"id":191,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-11","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-11 14:48:04','2025-11-11 14:48:04',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',192,'{"attributes":{"id":192,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-11","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-11 14:48:42','2025-11-11 14:48:42',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',193,'{"attributes":{"id":193,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-12","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-12 21:14:08','2025-11-12 21:14:08',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',194,'{"attributes":{"id":194,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-13","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-13 11:48:37','2025-11-13 11:48:37',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',195,'{"attributes":{"id":195,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-13","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-13 11:55:13','2025-11-13 11:55:13',NULL,NULL);
|
||||
INSERT INTO custom.activity_log (log_name,description,subject_type,event,business_event,subject_id,properties,batch_uuid,created_at,updated_at,causer_type,causer_id) VALUES
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',196,'{"attributes":{"id":196,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-13","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-13 11:58:23','2025-11-13 11:58:23',NULL,NULL),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','',197,'{"attributes":{"id":197,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2025-11-13","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"dgavrilov"}}',NULL,'2025-11-13 11:59:40','2025-11-13 11:59:40',NULL,NULL),
|
||||
('Taxi','{"action":"edit"}','Modules\\Taxi\\App\\Models\\TaxiMain','created','',213,'{"attributes":{"id":213,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2026-01-10","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"developer"}}',NULL,'2026-01-09 20:17:31','2026-01-09 20:17:31',NULL,NULL),
|
||||
('Taxi','{"action":"create"}','Modules\\Taxi\\App\\Models\\TaxiMain','created','',214,'{"attributes":{"id":214,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2026-01-10","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"developer"}}',NULL,'2026-01-09 20:20:55','2026-01-09 20:20:55',NULL,NULL),
|
||||
('Taxi','{"action":"create"}','Modules\\Taxi\\App\\Models\\TaxiMain','created','',215,'{"attributes":{"id":215,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2026-01-10","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"developer"}}',NULL,'2026-01-09 20:56:25','2026-01-09 20:56:25',NULL,NULL),
|
||||
('Taxi','{"action":"create"}','Modules\\Taxi\\App\\Models\\TaxiMain','created','',217,'{"attributes":{"id":217,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2026-01-10","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"developer"}}',NULL,'2026-01-09 21:08:41','2026-01-09 21:08:41',NULL,NULL),
|
||||
('Taxi','{"action":"create"}','Modules\\Taxi\\App\\Models\\TaxiMain','created','',218,'{"attributes":{"id":218,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2026-01-12","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"developer"}}',NULL,'2026-01-11 14:04:43','2026-01-11 14:04:43','App\\Models\\User',3),
|
||||
('Taxi','{"action":"create"}','Modules\\Taxi\\App\\Models\\TaxiMain','created','create_order',221,'{"attributes":{"id":221,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2026-01-12","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test","custom__user_login":"developer"}}',NULL,'2026-01-11 14:33:32','2026-01-11 14:33:32','App\\Models\\User',3),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','create',223,'{"attributes":{"id":222,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2026-01-12","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test"}}',NULL,'2026-01-11 14:53:51','2026-01-11 14:53:51','App\\Models\\User',3),
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','create',223,'{"attributes":{"id":223,"emp_login":"lalferova","emp_phone":"9308549909","taxi_date":"2026-01-12","taxi_time":"05:10","taxi_address_from":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","taxi_address_to":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u0443\\u043b. \\u041c\\u0435\\u043d\\u0434\\u0435\\u043b\\u0435\\u0435\\u0432\\u0430, \\u0434. 24 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434 5, \\u043a\\u0432 164","cancel_rqst":0},"custom_props":{"custom__test":"test"}}',NULL,'2026-01-11 15:10:45','2026-01-11 15:10:45','App\\Models\\User',2);
|
||||
INSERT INTO custom.activity_log (log_name,description,subject_type,event,business_event,subject_id,properties,batch_uuid,created_at,updated_at,causer_type,causer_id) VALUES
|
||||
('Taxi','created','Modules\\Taxi\\App\\Models\\TaxiMain','created','create',224,'{"attributes":{"id":224,"emp_login":"nrzhevskaya","emp_phone":"9611973699","taxi_date":"2026-01-17","taxi_time":"05:10","taxi_address_from":"\\u0433. \\u041a\\u0443\\u0440\\u0441\\u043a, \\u043f\\u0440-\\u0442 \\u041a\\u043b\\u044b\\u043a\\u043e\\u0432\\u0430 52, 3 \\u043f\\u043e\\u0434\\u044a\\u0435\\u0437\\u0434","taxi_address_to":"\\u0430\\u0434\\u0440\\u0435\\u0441 \\u041a\\u0443\\u0440\\u0441\\u043a\\u0430","cancel_rqst":0},"custom_props":{"custom__test":"test"}}',NULL,'2026-01-16 11:51:51','2026-01-16 11:51:51','App\\Models\\User',2);
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\Facades;
|
||||
|
||||
use Illuminate\Support\Facades\Facade;
|
||||
|
||||
/**
|
||||
* Фасад для доступа к user сервису без инъекции зависимостей
|
||||
*
|
||||
* @see \App\Services\UserService
|
||||
*/
|
||||
class UserContext extends Facade
|
||||
{
|
||||
protected static function getFacadeAccessor()
|
||||
{
|
||||
return \App\Services\UserService::class;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Services\AuthorizationService;
|
||||
use App\Facades\UserContext;
|
||||
|
||||
/**
|
||||
* Контроллер авторизации
|
||||
*/
|
||||
class AuthorizationController extends Controller
|
||||
{
|
||||
public function __construct(AuthorizationService $authorizationService)
|
||||
{
|
||||
}
|
||||
|
||||
public function getUserRole($moduleName)
|
||||
{
|
||||
$userPermissions = UserContext::getUserAppPermissions();
|
||||
//Проверяем есть ли у пользователя в принципе доступ к приложению
|
||||
if (array_key_exists($moduleName, $userPermissions) !== false) {
|
||||
return response()->json(['userRole' => $userPermissions[$moduleName]], 403);
|
||||
} else {
|
||||
return response()->json(['message' => 'Приложение недоступно'], 403);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
abstract class Controller
|
||||
{
|
||||
//
|
||||
}
|
||||
@@ -0,0 +1,246 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use LdapRecord\Models\ActiveDirectory\User as LdapUserInfo;
|
||||
use App\Models\User;
|
||||
use App\Facades\UserContext;
|
||||
use App\Services\AuthorizationService;
|
||||
use App\Services\ApiResponder;
|
||||
use App\Dto\ApiResponseDto;
|
||||
|
||||
class LoginController extends Controller
|
||||
{
|
||||
#Гаврилов
|
||||
//КОГДА ПЕРЕЙДЕМ НА ГРУППЫ, ПОМЕНЯТЬ НА АДМИНСКУЮ ГРУППУ? ИЛИ ОСТАВИТЬ РАССЫЛКУ?
|
||||
//ПЕРЕНЕСИ В .ENV И ВНИЗУ ПО КОДУ ГДЕ ОБРАЩАЕШЬСЯ К ЭТОМУ СВОЙСТВУ КЛАССА ПЕРЕПИШИ НА ПОЛУЧЕНИЕ СВОЙСТВА ИЗ ПЕРЕМЕННОЙ ОКРУЖЕНИЯ
|
||||
/**
|
||||
* @var string почтовая рассылка, куда входят админы
|
||||
*/
|
||||
private $adminGroup = '# Magic_admins';
|
||||
/**
|
||||
* @var array массив групп, которые не должны участвовать в авторизации пользователя и поэтому могут не храниться
|
||||
*/
|
||||
#Гаврилов
|
||||
//ИСПОЛЬЗУЙ МАССИВ НИЖЕ, ЧТОБЫ УДАЛЯТЬ ГРУППЫ И НЕ ХРАНИТЬ ИХ В ПРОФИЛЕ ПОЛЬЗОВАТЕЛЯ. ИЛИ ЗАБИТЬ ХЕР И ХРАНИТЬ ВСЕ? ТОГДА УДАЛИ МАССИВ НИЖЕ
|
||||
private $unnecessaryGroups = array(
|
||||
'MCO.',
|
||||
'ARSNOVA.',
|
||||
'CHATBOT.',
|
||||
'FOA_PROJECTS.',
|
||||
'MAXOPTRA.',
|
||||
'WEBSIGNER.',
|
||||
'ECM.',
|
||||
'BASIS.',
|
||||
'MCO_DOCUMENT.',
|
||||
'FACTOR.',
|
||||
'BIP.',
|
||||
'NKK.',
|
||||
'CHATS.',
|
||||
'IB_BSC.',
|
||||
'DASHAAI.',
|
||||
'VDI.',
|
||||
'CTX',
|
||||
'AP.AE.',
|
||||
'Way4',
|
||||
'sg.',
|
||||
'AD.TEDDY',
|
||||
'AP.APPV_',
|
||||
'AP.BI_',
|
||||
'AP.Citrix_',
|
||||
'AP.CSD_',
|
||||
'AP.EFK_',
|
||||
'AP.FlexiCapture_',
|
||||
'AP.HPSM.ACCESS.1',
|
||||
'AP.HPSM.ACCESS.3',
|
||||
'AP.HPSM.APPR_BR.Collection.',
|
||||
'AP.HPSM.APPR_BR.CS.',
|
||||
'AP.HPSM.ACCESS.CC',
|
||||
'AP.HPSM.ACCESS.123',
|
||||
'AP.HPSM.ACCESS.1.2',
|
||||
'AP.HPSM.APPR',
|
||||
'AP.OCP',
|
||||
'AP.IBS_',
|
||||
'AP.Intranet_',
|
||||
'AP.Intranet.',
|
||||
'AP.Jenkins_',
|
||||
'AP.Kibana.',
|
||||
'AP.LICA.',
|
||||
'AP.MailSteam.',
|
||||
'AP.MCO_',
|
||||
'AP.MDW.',
|
||||
'AP.POCHTA_',
|
||||
'AP.PREPROD',
|
||||
'AP.Prometheus',
|
||||
'AP.RDS_',
|
||||
'AP.SAS_',
|
||||
'AP.Seguranzza_',
|
||||
'AP.TEST.LICA.',
|
||||
'AP.Test.MCO_',
|
||||
'AP.TEST',
|
||||
'App_',
|
||||
'BTA_',
|
||||
'Calculations ',
|
||||
'Cards_',
|
||||
'CC.',
|
||||
'CCS_',
|
||||
'Citrix',
|
||||
'Collection_HR_',
|
||||
'Collection_All',
|
||||
'CS_',
|
||||
'CSD_',
|
||||
'DA_',
|
||||
'DB.',
|
||||
'DB_',
|
||||
'Deny_',
|
||||
'Diasoft ',
|
||||
'Digital ',
|
||||
'DOR_',
|
||||
'ECM_',
|
||||
'FS.',
|
||||
'FW.',
|
||||
'INFO_',
|
||||
'MDC.',
|
||||
'NRM_Collection',
|
||||
'PFA.',
|
||||
'RenTest_',
|
||||
'ReportingGroup ',
|
||||
'RS.',
|
||||
'SG.',
|
||||
'SP.',
|
||||
'SRV',
|
||||
'SRVFI09_',
|
||||
'SSO_',
|
||||
'test',
|
||||
'TR_',
|
||||
'WWW_',
|
||||
'MailStream',
|
||||
'SRVTST',
|
||||
);
|
||||
|
||||
|
||||
public function __construct(private AuthorizationService $authorizationService, private ApiResponder $apiResponder) {}
|
||||
|
||||
#Гаврилов
|
||||
//ПЕРЕИМЕНУЙ КОНТРОЛЛЕР НА AUTHcoNTROLLER
|
||||
|
||||
/**
|
||||
* Метод завершения пользовательской сессии
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function logout()
|
||||
{
|
||||
//Удаляем все sanctum токены пользователя. Удаление всех токенов приведет к выходу пользователя со всех устройств, где он был залогинен в Magic
|
||||
User::where('login', UserContext::getUserLogin())->first()->tokens()->delete();
|
||||
session()->invalidate();
|
||||
#Гаврилов
|
||||
//ВЫЗОВ СКРИПТА НА СТАРОМ МЭДЖИКЕ ДЛЯ УДАЛЕНИЯ КУК АУТЕНТИФИКАЦИИ (ЛОГИН И ГРУППЫ)
|
||||
return redirect('/login');
|
||||
}
|
||||
|
||||
|
||||
#Гаврилов
|
||||
//РАЗНЕСИ ЛОГИКУ МЕЖДУ МЕТОДАМИ, А ТО ПОКА ВСЯ ЛОГИКА В ОДНОМ МЕТОД LDAPCHECK
|
||||
public function ldapCheckUser(Request $request)
|
||||
{
|
||||
if ($request->_auth_login) {
|
||||
if (Auth::attempt([
|
||||
'samaccountname' => $request->_auth_login,
|
||||
'password' => $request->_auth_password,
|
||||
])) {
|
||||
|
||||
$userGroups = $this->getUserGroups($request->_auth_login);
|
||||
session()->put('_auth_login', $request->_auth_login);
|
||||
session()->put('_auth_groups', $userGroups);
|
||||
//Если пользователь зашел впервые - записываем его логин в таблицу users. Она нужна для корректного взаимодействия с пакетом Sanctum
|
||||
$user = User::firstOrCreate(
|
||||
['login' => $request->_auth_login],
|
||||
);
|
||||
//Удаляем все предыдущие sanctum токены пользователя
|
||||
User::where('login', $request->_auth_login)->first()->tokens()->delete();
|
||||
//Определяем на какую страницу нужно бросить пользователя после успешной аутентификации. По умолчанию кидаем в меню
|
||||
$redirectUrl = session()->has('_auth_prev_page') ? session()->get('_auth_prev_page') : ('/menu');
|
||||
$isAdminFlag = in_array($this->adminGroup, $userGroups);
|
||||
//Кладем в сессию информацию о том является ли пользователь админом
|
||||
session()->put('is_admin', $isAdminFlag);
|
||||
//Устанавливаем в пользовательский сервис параметры пользователя
|
||||
UserContext::setUserLogin($request->_auth_login);
|
||||
UserContext::setUserADGroups($userGroups);
|
||||
UserContext::setUserEmails($userGroups);
|
||||
UserContext::setIsAdminFlag($isAdminFlag);
|
||||
$userPermissions = $this->authorizationService->getUserAppPermissions();
|
||||
UserContext::setUserAppPermissions($userPermissions);
|
||||
//Генерим Sanctum токен, чтобы поместить его в куки при редиректе
|
||||
$token = $user->createToken('sanctum-token', [
|
||||
'permissions' => $userPermissions
|
||||
//Устанавливаем время жизни sanctum токена синхронно с временем жизни сессии из конфига
|
||||
], now()->addHours(config('app.session_life_time') / 60))->plainTextToken;
|
||||
return redirect($redirectUrl)
|
||||
->withCookie('sanctum_token', $token, 60 * 24, '/', null, true, true);
|
||||
} else {
|
||||
#Гаврилов
|
||||
//СООБЩЕНИЕ ОБ ОШИБКЕ ПРИ НЕУДАЧНОЙ АУТЕНТИФИКАЦИИ
|
||||
return redirect('/login');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Метод фонового обновления санктум токена при получении 401 ошибки в ответе api ендпоинта
|
||||
*
|
||||
* @param Request $request
|
||||
* @return void
|
||||
*/
|
||||
public function silentRefreshUserSanctumToken(Request $request)
|
||||
{
|
||||
//Если сессия истекла - возвращаем 401 ошибку и редирект на /login в axios
|
||||
if (!Auth::check()) {
|
||||
$this->apiResponder->setDto(new ApiResponseDto(null, ['token_refresh' => false]));
|
||||
return response()->json($this->apiResponder->error(), 401);
|
||||
}
|
||||
$token = $request->cookie('sanctum_token');
|
||||
$accessToken = \Laravel\Sanctum\PersonalAccessToken::findToken($token);
|
||||
//Если токен "протух" - продлеваем его на час
|
||||
if (now()->diffInMinutes($accessToken->expires_at, false) < 1) {
|
||||
$accessToken->update(
|
||||
[
|
||||
'expires_at' => now()->addHours(1)
|
||||
]
|
||||
);
|
||||
$this->apiResponder->setDto(new ApiResponseDto(null, ['token_refresh' => true]));
|
||||
return response()->json($this->apiResponder->success());
|
||||
} else {
|
||||
//Если токен еще "свежий" - значит причина 401 ошибки в чем-то другом. Не обновляем токен, просто возвращаем 401 ошибку и редирект на /login в axios
|
||||
$this->apiResponder->setDto(new ApiResponseDto(null, ['token_refresh' => false]));
|
||||
return response()->json($this->apiResponder->error(), 401);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Метод получает группы пользователя из ldap
|
||||
*
|
||||
* @param string $userLogin логин пользователя, чьи группы получаем
|
||||
* @return array
|
||||
*/
|
||||
public function getUserGroups($userLogin)
|
||||
{
|
||||
$userGroups = [];
|
||||
$ldapUser = LdapUserInfo::findBy('samaccountname', $userLogin);
|
||||
$ldapUser->memberOf;
|
||||
if (isset($ldapUser->memberOf)) {
|
||||
foreach ($ldapUser->memberOf as $ldapGroupInfo) {
|
||||
$CN_group = substr($ldapGroupInfo, 0, stripos($ldapGroupInfo, ","));
|
||||
$groupName = str_replace(array('CN=', '\\'), array('', ''), $CN_group);
|
||||
$clearGroupName = trim($groupName);
|
||||
if ($clearGroupName && $clearGroupName == str_replace($this->unnecessaryGroups, '', $clearGroupName)) {
|
||||
$userGroups[] = $clearGroupName;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $userGroups;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Auth\Middleware\Authenticate as Middleware;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class Authenticate extends Middleware
|
||||
{
|
||||
|
||||
/**
|
||||
* Get the path the user should be redirected to when they are not authenticated.
|
||||
*/
|
||||
protected function redirectTo(Request $request): ?string
|
||||
{
|
||||
return $request->expectsJson() ? null : route('login');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use App\Facades\UserContext;
|
||||
use App\Models\User;
|
||||
use Laravel\Sanctum\PersonalAccessToken;
|
||||
|
||||
/**
|
||||
* Глобальный посредник аутентификации на платформе Magic для всех роутов платформы
|
||||
*/
|
||||
class AuthenticateMagic
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
|
||||
*/
|
||||
public function handle(Request $request, Closure $next): Response
|
||||
{
|
||||
|
||||
//TODO ПРОВЕРИТЬ
|
||||
//Если сессия не стартовала возможно пользователь сразу обращается к api ендпоинту (ПРОВЕРИТЬ)
|
||||
if (session()->isStarted()) {
|
||||
if (session()->has('_auth_login')) {
|
||||
//гаврилов. получение токена
|
||||
// $token = $request->user();
|
||||
// $userId = User::where('login', $token->getAttributes()['samaccountname'][0])->get()->toArray()[0]['id'];
|
||||
// $tokenExpires = PersonalAccessToken::where('tokenable_id', $userId)->get()->toArray()[0]['expires_at'];
|
||||
// echo '<pre>'; var_dump(new \DateTime($tokenExpires)); echo'</pre>';
|
||||
// echo '<pre>'; var_dump(PersonalAccessToken::where('tokenable_id', $userId)->get()->toArray()[0]['expires_at']); echo'</pre>';
|
||||
//Если токен истекает менее через 60 минут, продлеваем его на 2 часа. Ситуации, что сессия протухла, а токен продолжает жить не может случиться, так как апи запросы с фронта отправляют куку аутентификации, которая проверяется при $this->authenticate. Если она протухла, возвратится 401 ошибку.
|
||||
// if ($token->expires_at->diffInMinutes(now()) < 60) {
|
||||
// $token->update(
|
||||
// [
|
||||
// 'expires_at' => now()->addHours(2)
|
||||
// ]
|
||||
// );
|
||||
// }
|
||||
|
||||
//Через фасад устанавливаем все значения аутентифицированного пользователя, чтобы через этот же фасад можно было и любого места в приложении их получить.
|
||||
UserContext::setUserLogin(session()->get('_auth_login'));
|
||||
$userGroups = session()->get('_auth_groups');
|
||||
UserContext::setUserADGroups($userGroups);
|
||||
UserContext::setUserEmails($userGroups);
|
||||
UserContext::setIsAdminFlag(session()->get('is_admin'));
|
||||
//На этапе посредника мы не проводим повторное определение ролей пользователя, это было сделано в LoginController в процессе авторизации после успешной аутентификации. Здесь мы уже берем его доступы из таблицы с токенами
|
||||
$user = User::where('login', UserContext::getUserLogin())->first();
|
||||
UserContext::setUserId($user->id);
|
||||
UserContext::setUserAppPermissions($user->tokens()->latest()->first()->abilities['permissions']);
|
||||
#Гаврилов
|
||||
return $next($request);
|
||||
} else {
|
||||
//Получаем адрес предыдущей страницы, на которую хотел попасть пользователь, чтобы направить его после успешной аутентификации на этот адрес
|
||||
$prevPageUrl = explode('/', $_SERVER['REDIRECT_URL']);
|
||||
//Удаляем из URL редиректа пустые сегменты и сегмент с названием приложения (оно подставляется при редиректе само)
|
||||
unset($prevPageUrl[0], $prevPageUrl[1]);
|
||||
//Кладем в сессию адрес страницы. только если это не страница выхода, иначе после аутентификации пользователя сразу выбросит
|
||||
session()->put('_auth_prev_page', implode('/', $prevPageUrl) == 'logout' ? '/menu' : implode('/', $prevPageUrl));
|
||||
return redirect('/login');
|
||||
//редирект на страницу login с сообщением об ошибке
|
||||
}
|
||||
} else {
|
||||
return redirect('/login');
|
||||
//redirect на страницу login после которой точно сессия застартует, так как это webроут, а не api
|
||||
}
|
||||
// return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Кастомный посредник для обработки неудачной аутентификации Sanctum при обращении к api ендпоинтам. Стандартный посредник аутентификации пытается редиректить на роут login, чего быть не должно при работе с api
|
||||
* @author dgavrilov
|
||||
*/
|
||||
|
||||
namespace app\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Auth\Middleware\Authenticate as BaseAuthenticate;
|
||||
use Illuminate\Auth\AuthenticationException;
|
||||
use App\Facades\UserContext;
|
||||
|
||||
class AuthenticateMagicApi extends BaseAuthenticate
|
||||
{
|
||||
public function handle($request, Closure $next, ...$guards)
|
||||
{
|
||||
// if ($request->is('api/silent_token_refresh')) {
|
||||
// return $next($request);
|
||||
// }
|
||||
//Если пользователь в рамках сессии обращается к api ендпоинтам из приложения, он не всегда может установить заголовок с sanctum токеном (например, переходя по ссылкке <a href='.../api/delItem/id'>). В этом случае, проверяем куки и устанавливаем заголовок оттуда, так как при аутентификации пользовательский логин кладется в куки. Это позволяет нам не устанвливать заголовк в каждом fetch запросе на фронте
|
||||
if ($request->is('api/*') && ($token = $request->cookie('sanctum_token'))) {
|
||||
$request->headers->set("Authorization", "Bearer $token");
|
||||
}
|
||||
//Переопределяем поведение в случае возникновения ошибки при стандартной аутентификации. Стандартное поведение перебрасывает на страницу login, мы же возвращаем 401 ошибку, так как понимаем, что пользователь обратился по api
|
||||
//DGAVRILOV. ПОВЕДЕНИЕ, ОПИСАННОЕ ВЫШЕ, ПРИВОДИТ К ОШИБКЕ. ЕСЛИ ПОЛЬЗОВАТЕЛЬ ОТПРАВИЛ API ЗАПРОС С ФРОНТА И ЕГО СЕССИЯ ПРОТУХЛА, ВОЗВРАЩАЕТСЯ 401 ОШИБКА ВО ВКЛАДКЕ NETWORK, НО ПОЛЬЗОВАТЕЛЯ НЕ ПЕРЕБРАСЫВАЕТ НА СТРАНИЦУ /LOGIN. ЕСЛИ ПОПРАВИТЬ ПОСРЕДНИК WEB АУТЕНТИФИКАЦИИ, ТО ЭТОЙ ПРОБЛЕМЫ НЕ БУДЕТ? БУДЕТ ПЕРЕБРАСЫВАТЬ НА СТРАНИЦУ LOGIN СО СТРАНИЦЫ, ОТКУДА СОВЕРЩАЛСЯ ВЫЗО API ЕНДПОИНТА? СКОРЕЕ ВСЕГО НЕТ, НУЖНО БУДЕТ ПРИ ВЫЗОВЕ API КАК-ТО ПЕРЕХВАТЫВАТЬ 401 ОШИБКУ И ОТПРАВЛЯТЬ НА СТРАНИЦУ /LOGIN
|
||||
try {
|
||||
//Стандартная аутентификация по санктум токену (проверяется срок жизни)
|
||||
$this->authenticate($request, $guards);
|
||||
//$token = $request->user()->currentAccessToken();
|
||||
//Если токен истекает менее через 60 минут, продлеваем его на 2 часа. Ситуации, что сессия протухла, а токен продолжает жить не может случиться, так как апи запросы с фронта отправляют куку аутентификации, которая проверяется при $this->authenticate. Если она протухла, возвратится 401 ошибку.
|
||||
// if ($token->expires_at->diffInMinutes(now()) < 60) {
|
||||
// $token->update(
|
||||
// [
|
||||
// 'expires_at' => now()->addHours(2)
|
||||
// ]
|
||||
// );
|
||||
// }
|
||||
//После успешной аутентификации Sanctum обогащаем UserService параметрами пользователя (логин, роли приложения)
|
||||
#Гаврилов
|
||||
//ПОКА НЕ ДОБАВЛЯЮ ГРУППЫ AD B EMAILS, ТАК КАК В WEB КОНТУРЕ ОНИ ОПРЕДЕЛЯЮТСЯ ПРИ AD АУТЕНТИФИКАЦИИ И ПОЛУЧЕННЫЕ ЗНАЧЕНИЯ СКЛАДЫВАЮТСЯ В SESSION. В API КОНТУРЕ ДОСТУПА К СЕССИИ НЕТ - ПРОВОДИТЬ AD АУТЕНТИФИКАЦИЮ НЕ ПОЛУЧИТС БЕЗ ПАРОЛЯ ПОЛЬЗОВАТЕЛЯ, КОТОРЫЙ НИГДЕ НЕ ХРАНИТСЯ. ПОЭТОМУ, ЕСЛИ ПОНАДОБИТСЯ ДОСТАВАТЬ В API КОНТУРЕ ГРУППЫ ПОЛЬЗОВАТЕЛЯ, ПРИ AD АУТЕНТИФИКАЦИИ ПОНАДОБИТСЯ КЛАСТЬ AD ГРУППЫ ПОЛЬЗОВАТЕЛЯ И ЕГО EMAILS В ПОЛЕ ABILITIES ТАБЛИЦЫ PERSONAL ACCESS TOKENS ПО АНАЛОГИИ С PERISSIONS
|
||||
#Гаврилов
|
||||
//НУЖНО ЛИ ОБОГАЩАТЬ USERcoNTEXT НИЖЕ, ЕСЛИ ПРИ WEB АУТЕНТИФИКАЦИИ КОНТЕКСТ УЖЕ ДОЛЖЕН БЫЛ БЫТЬ ОБОГАЩЕН. вЕРОЯТНО, ЭТО НУЖНО ДЛЯ ОБРАБОТКИ ЧИСТО API ЗАПРОСОВ (БЕЗ ВХОДА В СИСТЕМУ), НО НАДО ПРОВЕРИТЬ
|
||||
UserContext::setUserLogin($request->user()->login);
|
||||
UserContext::setUserAppPermissions($request->user()->currentAccessToken()->abilities['permissions']);
|
||||
} catch (AuthenticationException $auth) {
|
||||
if ($request->is('api/*')) {
|
||||
return response()->json([
|
||||
#Гаврилов
|
||||
//СКОРРЕКТИРУЙ ИНФОРМАЦИЮ О ВОЗВРАЩАЕМОЙ ОШИБКЕ?
|
||||
'error' => 'Unauthenticated',
|
||||
'message' => 'Invalid or missing authentication token'
|
||||
], 401);
|
||||
}
|
||||
|
||||
throw $auth;
|
||||
}
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use App\Facades\UserContext;
|
||||
|
||||
//ЭТОТ ПОСРЕДНИК ПРИМЕНЯЕТСЯ В WEB РОУТАХ И В API ЕНДПОИНТАХ ПОКА ТОЛЬКО ПРИЛОЖЕНИЯ ТАКСИ, НО ПО ЛОГИКЕ, ЕГО НУЖНО ИСПОЛЬЗОВАТЬ ВО ВСЕХ БУДУЩИХ МОДУЛЯХ. С ЕГО ПОМОЩЬЮ ПРОВЕРЯЕТСЯ КАЖДЫЙ ЗАПРОС К МОДУЛЮ - ВООБЩЕ ЕСТЬ ДОСТУП У ПОЛЬЗОВАТЕЛЯ ИЛИ НЕТ
|
||||
//В KERNEL У ЭТОГО ПОСРЕДНИКА ПРОПИСАН АЛИАС, КОТОРЫЙ УКАЗЫВАЕТСЯ УЖЕ В MODULE/ROUTES/WEB.PHP И API.PHP
|
||||
|
||||
/**
|
||||
* Посредник проверки доступа пользователя к приложению
|
||||
*/
|
||||
class CheckUserAppAccess
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
|
||||
*/
|
||||
public function handle(Request $request, Closure $next): Response
|
||||
{
|
||||
$moduleName = explode('/', $request->route()->getPrefix());
|
||||
$moduleName = end($moduleName) ?? null;
|
||||
if ($moduleName) {
|
||||
if (array_key_exists($moduleName, UserContext::getUserAppPermissions()) !== false) {
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
//Если ошибка при обращении к api ендпоинту
|
||||
if ($request->expectsJson()) {
|
||||
return response()->json(['message' => "Ошибка! Приложение недоступно"], 403);
|
||||
//Если ошибка при обращении к web роуту
|
||||
} else {
|
||||
#Гаврилов
|
||||
//ЕСЛИ ВЫЗЫВАЕТСЯ WEB РОУТ НЕ С ФРОНТА, ТО ПРОИСХОДИТ РЕДИРЕКТ БЕЗ УКАЗАНИЯ ТЕКСТА ОШИБКИ. нАПРИМЕР, ПРИ РЕДИРЕКТЕ НИЖЕ НА СТРАНИЦУ МЕНЮ, ПОЛЬЗОВАТЕЛЬ НЕ УВИДИТ НИКАКОГО ОПОВЕЩЕНИЯ ОБ ОШИБКЕ
|
||||
//ЭТУ ПРОБЛЕМУ Я ИСПРАВЛЯЛ, ЧЕРЕЗ ГЕНЕРАЦИЮ НОТИФИКАЦИЙ НА БЭКЕ И ДОБАВЛЕНИЯ ИХ В ОПРЕДЕЛЕННУЮ ОЧЕРЕДЬ REDIS, КОТОРУЮ ЧИТАЕТ КАЖДАЯ СТРАНИЦА ПРИ ПЕРВИЧНОМ РЕНДЕРИНГЕ. НАДО ПОСМОТРЕТЬ ГДЕ Я УЖЕ ТАКОЕ РЕАЛИЗОВЫВАЛ
|
||||
return redirect('/menu');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use App\Models\User;
|
||||
use App\Facades\UserContext;
|
||||
|
||||
/**
|
||||
* Посредник проверки доступа пользовательской роли к роуту или ендпоинту
|
||||
*/
|
||||
class CheckUserPermission
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
|
||||
*/
|
||||
public function handle(Request $request, Closure $next, string $requirement): Response
|
||||
{
|
||||
//Роли, которым доступен функционал
|
||||
$accessRoles = explode(';', $requirement);
|
||||
$userPermissions = UserContext::getUserAppPermissions();
|
||||
//Всем роутам модуля добавляем префикс, поэтому можем ориентироваться на него, чтобы получить имя модуля, откуда пришел запрос
|
||||
$moduleName = explode('/', $request->route()->getPrefix());
|
||||
$moduleName = end($moduleName) ?? null;
|
||||
|
||||
if ($moduleName) {
|
||||
if (array_key_exists($moduleName, UserContext::getUserAppPermissions()) !== false) {
|
||||
if (in_array($userPermissions[$moduleName], $accessRoles)) {
|
||||
return $next($request);
|
||||
}
|
||||
// else {
|
||||
// return redirect('/menu');
|
||||
// #Гаврилов
|
||||
// //РЕДИРЕКТ НА СТРАНИЦУ 403
|
||||
// }
|
||||
}
|
||||
// else {
|
||||
// return redirect('/menu');
|
||||
// #Гаврилов
|
||||
// //РЕДИРЕКТ НА СТРАНИЦУ 403
|
||||
// //redirect();
|
||||
// }
|
||||
}
|
||||
// else {
|
||||
// return redirect('/menu');
|
||||
// #Гаврилов
|
||||
// //КУДА РЕДИРЕКТИТЬ или что возвращать, если имя модуля не определено?
|
||||
// }
|
||||
|
||||
//Если ошибка при обращении к api ендпоинту
|
||||
if ($request->expectsJson()) {
|
||||
return response()->json(['message' => "Ошибка! Функционал недоступен для вашей роли"], 403);
|
||||
//Если ошибка при обращении к web роуту
|
||||
} else {
|
||||
#Гаврилов
|
||||
//ЕСЛИ ВЫЗЫВАЕТСЯ WEB РОУТ НЕ С ФРОНТА, ТО ПРОИСХОДИТ РЕДИРЕКТ БЕЗ УКАЗАНИЯ ТЕКСТА ОШИБКИ. нАПРИМЕР, ПРИ РЕДИРЕКТЕ НИЖЕ НА СТРАНИЦУ МЕНЮ, ПОЛЬЗОВАТЕЛЬ НЕ УВИДИТ НИКАКОГО ОПОВЕЩЕНИЯ ОБ ОШИБКЕ.
|
||||
//ЭТУ ПРОБЛЕМУ Я ИСПРАВЛЯЛ, ЧЕРЕЗ ГЕНЕРАЦИЮ НОТИФИКАЦИЙ НА БЭКЕ И ДОБАВЛЕНИЯ ИХ В ОПРЕДЕЛЕННУЮ ОЧЕРЕДЬ REDIS, КОТОРУЮ ЧИТАЕТ КАЖДАЯ СТРАНИЦА ПРИ ПЕРВИЧНОМ РЕНДЕРИНГЕ. НАДО ПОСМОТРЕТЬ ГДЕ Я УЖЕ ТАКОЕ РЕАЛИЗОВЫВАЛ
|
||||
return redirect('/menu');
|
||||
}
|
||||
#Гаврилов
|
||||
//РЕДИРЕКТ НА СТРАНИЦУ 403
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
|
||||
|
||||
class VerifyCsrfToken extends Middleware
|
||||
{
|
||||
/**
|
||||
* The URIs that should be excluded from CSRF verification.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
protected $except = [
|
||||
//
|
||||
'/access/*',
|
||||
'/access',
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
// use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||
use Illuminate\Notifications\Notifiable;
|
||||
use Laravel\Sanctum\HasApiTokens;
|
||||
|
||||
class User extends Authenticatable
|
||||
{
|
||||
use HasApiTokens, HasFactory, Notifiable;
|
||||
|
||||
/**
|
||||
* The attributes that are mass assignable.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
// protected $fillable = [
|
||||
// 'name',
|
||||
// 'email',
|
||||
// 'password',
|
||||
// ];
|
||||
protected $fillable = [
|
||||
'login',
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* The attributes that should be hidden for serialization.
|
||||
*
|
||||
* @var array<int, string>
|
||||
*/
|
||||
// protected $hidden = [
|
||||
// 'password',
|
||||
// 'remember_token',
|
||||
// ];
|
||||
protected $hidden = [];
|
||||
|
||||
/**
|
||||
* The attributes that should be cast.
|
||||
*
|
||||
* @var array<string, string>
|
||||
*/
|
||||
protected $casts = [
|
||||
'email_verified_at' => 'datetime',
|
||||
'password' => 'hashed',
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
|
||||
class AppServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register any application services.
|
||||
*/
|
||||
public function register(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Bootstrap any application services.
|
||||
*/
|
||||
public function boot(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use App\Services\AuthorizationService;
|
||||
|
||||
/**
|
||||
* Провайдер для регистрации сервиса авторизации
|
||||
*/
|
||||
class AuthorizationServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register services.
|
||||
*/
|
||||
public function register(): void
|
||||
{
|
||||
$this->app->bind(AuthorizationService::class, function($app) {
|
||||
return new AuthorizationService();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Bootstrap services.
|
||||
*/
|
||||
public function boot(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Providers;
|
||||
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use App\Services\UserService;
|
||||
|
||||
/**
|
||||
* Провайдер для регистрации сервиса работы с данными юзера (установка логина, групп, подмена значений в случае работы на тестовой среде)
|
||||
*/
|
||||
class UserServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Register services.
|
||||
*/
|
||||
public function register(): void
|
||||
{
|
||||
$this->app->singleton(UserService::class, function($app){
|
||||
return new UserService;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Bootstrap services.
|
||||
*/
|
||||
public function boot(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use App\Models\MagicApps;
|
||||
use App\Facades\UserContext;
|
||||
|
||||
class AuthorizationService
|
||||
{
|
||||
private $appWithRoles;
|
||||
|
||||
|
||||
/**
|
||||
* Получаем приложения вместе с ролями
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getUserAppPermissions(): array
|
||||
{
|
||||
$this->appWithRoles = MagicApps::with('appRoles')->get()->toArray();
|
||||
//Итоговый массив с доступами пользователя к приложению и ролью
|
||||
$userAppAccess = [];
|
||||
foreach ($this->appWithRoles as $appData) {
|
||||
//Определяем по какому массиву проверять доступ к приложению - почтовые рассылки или группы AD
|
||||
if (empty($appData['access_groups_email'])) {
|
||||
$appAccess = explode(';', $appData['access_groups_ad']);
|
||||
$userAccessGroups = UserContext::getUserADGroups();
|
||||
} else {
|
||||
$appAccess = explode(';', $appData['access_groups_email']);
|
||||
$userAccessGroups = UserContext::getUserEmails();
|
||||
}
|
||||
//Если пересечения групп доступа приложения и групп доступа пользователя отсутствуют, считаем, что доступа нет
|
||||
if (empty(array_intersect($appAccess, $userAccessGroups))) {
|
||||
continue;
|
||||
}
|
||||
//Если ролевая модель отсутствует для приложения как таковая, прописывам значение null
|
||||
if (empty($appData['app_roles'])) {
|
||||
$userAppAccess[$appData['app_name']] = null;
|
||||
} else {
|
||||
//Если ролевая модель существует, ставим значение false, которое будет заменено ролью пользователя. Сохранение false на выходе, в свою очередь, сигнализирует, что роль пользователя не определилась
|
||||
$userAppAccess[$appData['app_name']] = false;
|
||||
foreach ($appData['app_roles'] as $roleData) {
|
||||
if($this->checkRoleAccess($appData['role_driver'], explode(';', $roleData['role_access']))) {
|
||||
$userAppAccess[$appData['app_name']] = $roleData['app_role'];
|
||||
//Все роли идут по приоритету важности, поэтому останавливаемся на самой важной и возвращаем ее, остальные роли не перебираем. Я пока не уверен как лучше организовать отображение функционала ролей в приложениях: весь нужный функционал "класть" в одну роль и отображать строго тот функционал, который относится к роли. Или распределять функционал между ролями и, если пользователь входит в несколько ролей, отображать весь функционал всех ролей, куда он может входить. В случае последнего варианта, нужно будет хранить все доступные роли пользователя, а не только самую важную по приортету.
|
||||
//Также пока непонятно, реализовывать ли возможность переключаться между ролями на продакшн среде. Если реализовывать, так же придется хранить все роли, куда входит пользователь. Но в этом случае есть риски запутаться в логировании, например, если пользователь под ролью админ переключится на пользователя юзер и совершит от него действие
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $userAppAccess;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Возвращаем результат проверки доступности роли
|
||||
*
|
||||
* @param string $roleAccessDriver название драйвера доступа роли
|
||||
* @param array $roleData массив с перечисленными рассылками/логинами/группами, которым доступна роль
|
||||
* @return bool
|
||||
*/
|
||||
public function checkRoleAccess(string $roleAccessDriver, array $roleData): bool
|
||||
{
|
||||
switch ($roleAccessDriver) {
|
||||
case 'login':
|
||||
return in_array(UserContext::getUserLogin(), $roleData);
|
||||
break;
|
||||
case 'email':
|
||||
return !empty(array_intersect(UserContext::getUserEmails(), $roleData));
|
||||
break;
|
||||
case 'ADgroup':
|
||||
return !empty(array_intersect(UserContext::getUserADGroups(), $roleData));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//УДАЛИТЬ
|
||||
// public function getUserAppRoles(array $userGroups)
|
||||
// {
|
||||
// $userEmails = session()->get('_auth_groups');
|
||||
// $userLogin = session()->get('_auth_login');
|
||||
// $magicApps = $this->getAppRoles();
|
||||
// }
|
||||
|
||||
}
|
||||
@@ -0,0 +1,198 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use Exception;
|
||||
|
||||
/**
|
||||
* Сервис работы с данными юзера (установка/получение логина, групп, подмена значений в случае работы на тестовой среде)
|
||||
*/
|
||||
class UserService
|
||||
{
|
||||
/**
|
||||
* @var string пользовательский логин
|
||||
*/
|
||||
public string $userLogin;
|
||||
/**
|
||||
* @var array пользовательские группы AD
|
||||
*/
|
||||
public array $userADGroups;
|
||||
/**
|
||||
* @var array почтовые рассылки куда входит пользователь
|
||||
*/
|
||||
public array $userEmails;
|
||||
/**
|
||||
* @var boolean является ли пользователь админом приложения Magic
|
||||
*/
|
||||
public bool $isAdmin;
|
||||
/**
|
||||
* @var array доступы пользователя к приложениям
|
||||
*/
|
||||
public array $userAppPermissions;
|
||||
/**
|
||||
* @var int идентификатор пользователя из таблицы users
|
||||
*/
|
||||
public int $userId;
|
||||
|
||||
/**
|
||||
* Установка пользовательского логина
|
||||
*
|
||||
* @param string $login логин для подмены превоначального значения, взятого из сессии
|
||||
* @return void
|
||||
*/
|
||||
public function setUserLogin(string $login): void
|
||||
{
|
||||
$this->userLogin = $login;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Установка пользовательского логина
|
||||
*
|
||||
* @param array $appRoles доступы пользователя к приложениям Magic
|
||||
* @return void
|
||||
*/
|
||||
public function setUserAppPermissions(array $appRoles): void
|
||||
{
|
||||
$this->userAppPermissions = $appRoles;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Установка пользовательского идентификатора из таблицы users
|
||||
*
|
||||
* @param int $userId идентификатор пользователя
|
||||
* @return void
|
||||
*/
|
||||
public function setUserId(int $userId): void
|
||||
{
|
||||
$this->userId = $userId;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Установка групп AD пользователя
|
||||
*
|
||||
* @param array $userGroups все группы из AD где состоит пользователь (emails, AD и т.д.)
|
||||
* @return void
|
||||
*/
|
||||
public function setUserADGroups(array $userGroups): void
|
||||
{
|
||||
$this->userADGroups = array_filter($userGroups, function($el){return substr($el, 0, 1) !== '#';});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Установка почтовых рассылок куда входит пользователь
|
||||
*
|
||||
* @param array $userGroups все групы пользователя AD, в которых он состоит (почтовые ящики, AD и т.д.)
|
||||
* @return void
|
||||
*/
|
||||
public function setUserEmails(array $userGroups): void
|
||||
{
|
||||
$this->userEmails = array_filter($userGroups, function($el){return substr($el, 0, 1) === '#';});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Устанавливаем флаг является ли пользователь админом приложения Magic
|
||||
*
|
||||
* @param boolean $flag
|
||||
* @return void
|
||||
*/
|
||||
public function setIsAdminFlag(bool $flag): void
|
||||
{
|
||||
$this->isAdmin = $flag;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Добавление группы AD в массив групп пользователя
|
||||
*
|
||||
* @param string $group группа для добавления в массив установленных при аутентификации групп AD пользователя
|
||||
* @return void
|
||||
*/
|
||||
public function addUserADGroup(string $group): void
|
||||
{
|
||||
$this->userADGroups[] = $group;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Добавление email в массив емейлов пользователя
|
||||
*
|
||||
* @param string $email почтовая рассылка для добавления в массив установленных при аутентификации почтовых ящиков пользователя
|
||||
* @return void
|
||||
*/
|
||||
public function addUserEmail(string $email): void
|
||||
{
|
||||
$this->userEmails[] = $email;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Возвращаем доступы пользователя к приложениям Magic
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getUserAppPermissions(): array
|
||||
{
|
||||
return $this->userAppPermissions;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получаем пользовательский логин
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getUserLogin(): string
|
||||
{
|
||||
return $this->userLogin;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получаем пользовательский логин
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getUserId(): int
|
||||
{
|
||||
return $this->userId;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получаем пользовательский логин
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getUserADGroups(): array
|
||||
{
|
||||
return $this->userADGroups;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получаем email рассылки куда он входит
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getUserEmails(): array
|
||||
{
|
||||
return $this->userEmails;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Получаем значение флага является ли пользователь админом приложения Magic
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function getIsAdminFlag(): bool
|
||||
{
|
||||
return $this->isAdmin;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
-- custom.app_roles definition
|
||||
|
||||
CREATE TABLE `app_roles` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`app_id` bigint(20) unsigned NOT NULL COMMENT 'id приложения (связь с таблицей magic_apps)',
|
||||
`app_role` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Роль в приложении',
|
||||
`app_title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Название роли на русском',
|
||||
`role_priority` smallint(6) NOT NULL COMMENT 'Приоритет роли',
|
||||
`role_access` text COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Кому доступна роль (зависит от драйвера в magic_apps)',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `app_roles_app_id_foreign` (`app_id`),
|
||||
CONSTRAINT `app_roles_app_id_foreign` FOREIGN KEY (`app_id`) REFERENCES `magic_apps` (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Ролевая модель приложений';
|
||||
@@ -1,3 +0,0 @@
|
||||
INSERT INTO custom.app_roles (app_id,app_role,app_title,role_priority,role_access) VALUES
|
||||
(4,'admin','Администратор',1,'# Magic_admins'),
|
||||
(4,'user','Пользователь',2,'# Test');
|
||||
@@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
use Illuminate\Foundation\Application;
|
||||
use Symfony\Component\Console\Input\ArgvInput;
|
||||
|
||||
define('LARAVEL_START', microtime(true));
|
||||
|
||||
// Register the Composer autoloader...
|
||||
require __DIR__.'/vendor/autoload.php';
|
||||
|
||||
// Bootstrap Laravel and handle the command...
|
||||
/** @var Application $app */
|
||||
$app = require_once __DIR__.'/bootstrap/app.php';
|
||||
|
||||
$status = $app->handleCommand(new ArgvInput);
|
||||
|
||||
exit($status);
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Foundation\Application;
|
||||
use Illuminate\Foundation\Configuration\Exceptions;
|
||||
use Illuminate\Foundation\Configuration\Middleware;
|
||||
|
||||
return Application::configure(basePath: dirname(__DIR__))
|
||||
->withRouting(
|
||||
web: __DIR__.'/../routes/web.php',
|
||||
commands: __DIR__.'/../routes/console.php',
|
||||
health: '/up',
|
||||
)
|
||||
->withMiddleware(function (Middleware $middleware): void {
|
||||
//
|
||||
})
|
||||
->withExceptions(function (Exceptions $exceptions): void {
|
||||
//
|
||||
})->create();
|
||||
@@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
App\Providers\AppServiceProvider::class,
|
||||
];
|
||||
@@ -0,0 +1,86 @@
|
||||
{
|
||||
"$schema": "https://getcomposer.org/schema.json",
|
||||
"name": "laravel/laravel",
|
||||
"type": "project",
|
||||
"description": "The skeleton application for the Laravel framework.",
|
||||
"keywords": ["laravel", "framework"],
|
||||
"license": "MIT",
|
||||
"require": {
|
||||
"php": "^8.2",
|
||||
"laravel/framework": "^12.0",
|
||||
"laravel/tinker": "^2.10.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"fakerphp/faker": "^1.23",
|
||||
"laravel/pail": "^1.2.2",
|
||||
"laravel/pint": "^1.24",
|
||||
"laravel/sail": "^1.41",
|
||||
"mockery/mockery": "^1.6",
|
||||
"nunomaduro/collision": "^8.6",
|
||||
"phpunit/phpunit": "^11.5.3"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"App\\": "app/",
|
||||
"Database\\Factories\\": "database/factories/",
|
||||
"Database\\Seeders\\": "database/seeders/"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"Tests\\": "tests/"
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
"setup": [
|
||||
"composer install",
|
||||
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\"",
|
||||
"@php artisan key:generate",
|
||||
"@php artisan migrate --force",
|
||||
"npm install",
|
||||
"npm run build"
|
||||
],
|
||||
"dev": [
|
||||
"Composer\\Config::disableProcessTimeout",
|
||||
"npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1 --timeout=0\" \"php artisan pail --timeout=0\" \"npm run dev\" --names=server,queue,logs,vite --kill-others"
|
||||
],
|
||||
"test": [
|
||||
"@php artisan config:clear --ansi",
|
||||
"@php artisan test"
|
||||
],
|
||||
"post-autoload-dump": [
|
||||
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
|
||||
"@php artisan package:discover --ansi"
|
||||
],
|
||||
"post-update-cmd": [
|
||||
"@php artisan vendor:publish --tag=laravel-assets --ansi --force"
|
||||
],
|
||||
"post-root-package-install": [
|
||||
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
|
||||
],
|
||||
"post-create-project-cmd": [
|
||||
"@php artisan key:generate --ansi",
|
||||
"@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"",
|
||||
"@php artisan migrate --graceful --ansi"
|
||||
],
|
||||
"pre-package-uninstall": [
|
||||
"Illuminate\\Foundation\\ComposerScripts::prePackageUninstall"
|
||||
]
|
||||
},
|
||||
"extra": {
|
||||
"laravel": {
|
||||
"dont-discover": []
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"optimize-autoloader": true,
|
||||
"preferred-install": "dist",
|
||||
"sort-packages": true,
|
||||
"allow-plugins": {
|
||||
"pestphp/pest-plugin": true,
|
||||
"php-http/discovery": true
|
||||
}
|
||||
},
|
||||
"minimum-stability": "stable",
|
||||
"prefer-stable": true
|
||||
}
|
||||
Generated
+8387
File diff suppressed because it is too large
Load Diff
+126
@@ -0,0 +1,126 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Name
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This value is the name of your application, which will be used when the
|
||||
| framework needs to place the application's name in a notification or
|
||||
| other UI elements where an application name needs to be displayed.
|
||||
|
|
||||
*/
|
||||
|
||||
'name' => env('APP_NAME', 'Laravel'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Environment
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This value determines the "environment" your application is currently
|
||||
| running in. This may determine how you prefer to configure various
|
||||
| services the application utilizes. Set this in your ".env" file.
|
||||
|
|
||||
*/
|
||||
|
||||
'env' => env('APP_ENV', 'production'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Debug Mode
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When your application is in debug mode, detailed error messages with
|
||||
| stack traces will be shown on every error that occurs within your
|
||||
| application. If disabled, a simple generic error page is shown.
|
||||
|
|
||||
*/
|
||||
|
||||
'debug' => (bool) env('APP_DEBUG', false),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application URL
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This URL is used by the console to properly generate URLs when using
|
||||
| the Artisan command line tool. You should set this to the root of
|
||||
| the application so that it's available within Artisan commands.
|
||||
|
|
||||
*/
|
||||
|
||||
'url' => env('APP_URL', 'http://localhost'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Timezone
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify the default timezone for your application, which
|
||||
| will be used by the PHP date and date-time functions. The timezone
|
||||
| is set to "UTC" by default as it is suitable for most use cases.
|
||||
|
|
||||
*/
|
||||
|
||||
'timezone' => 'UTC',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Locale Configuration
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The application locale determines the default locale that will be used
|
||||
| by Laravel's translation / localization methods. This option can be
|
||||
| set to any locale for which you plan to have translation strings.
|
||||
|
|
||||
*/
|
||||
|
||||
'locale' => env('APP_LOCALE', 'en'),
|
||||
|
||||
'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'),
|
||||
|
||||
'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Encryption Key
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This key is utilized by Laravel's encryption services and should be set
|
||||
| to a random, 32 character string to ensure that all encrypted values
|
||||
| are secure. You should do this prior to deploying the application.
|
||||
|
|
||||
*/
|
||||
|
||||
'cipher' => 'AES-256-CBC',
|
||||
|
||||
'key' => env('APP_KEY'),
|
||||
|
||||
'previous_keys' => [
|
||||
...array_filter(
|
||||
explode(',', (string) env('APP_PREVIOUS_KEYS', ''))
|
||||
),
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Maintenance Mode Driver
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| These configuration options determine the driver used to determine and
|
||||
| manage Laravel's "maintenance mode" status. The "cache" driver will
|
||||
| allow maintenance mode to be controlled across multiple machines.
|
||||
|
|
||||
| Supported drivers: "file", "cache"
|
||||
|
|
||||
*/
|
||||
|
||||
'maintenance' => [
|
||||
'driver' => env('APP_MAINTENANCE_DRIVER', 'file'),
|
||||
'store' => env('APP_MAINTENANCE_STORE', 'database'),
|
||||
],
|
||||
|
||||
];
|
||||
+124
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Defaults
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option controls the default authentication "guard" and password
|
||||
| reset options for your application. You may change these defaults
|
||||
| as required, but they're a perfect start for most applications.
|
||||
|
|
||||
*/
|
||||
|
||||
'defaults' => [
|
||||
'guard' => 'web',
|
||||
'passwords' => 'users',
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Authentication Guards
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Next, you may define every authentication guard for your application.
|
||||
| Of course, a great default configuration has been defined for you
|
||||
| here which uses session storage and the Eloquent user provider.
|
||||
|
|
||||
| All authentication drivers have a user provider. This defines how the
|
||||
| users are actually retrieved out of your database or other storage
|
||||
| mechanisms used by this application to persist your user's data.
|
||||
|
|
||||
| Supported: "session"
|
||||
|
|
||||
*/
|
||||
|
||||
'guards' => [
|
||||
'web' => [
|
||||
'driver' => 'session',
|
||||
'provider' => 'ldap',
|
||||
],
|
||||
// guard для аутентификации при запросе ендпоинтов API, а также для нормального логирования информации события обращения к API ендпоинтам
|
||||
'sanctum' => [
|
||||
'driver' => 'sanctum',
|
||||
'provider' => 'users',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| User Providers
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| All authentication drivers have a user provider. This defines how the
|
||||
| users are actually retrieved out of your database or other storage
|
||||
| mechanisms used by this application to persist your user's data.
|
||||
|
|
||||
| If you have multiple user tables or models you may configure multiple
|
||||
| sources which represent each model / table. These sources may then
|
||||
| be assigned to any extra authentication guards you have defined.
|
||||
|
|
||||
| Supported: "database", "eloquent"
|
||||
|
|
||||
*/
|
||||
|
||||
'providers' => [
|
||||
'ldap' => [
|
||||
'driver' => 'ldap',
|
||||
'model' => LdapRecord\Models\ActiveDirectory\User::class,
|
||||
],
|
||||
//Провайдер для записи в БД минимальных данных пользователя: логина и его id. Нужен для корректной работы Sanctum
|
||||
'users' => [
|
||||
'driver' => 'eloquent',
|
||||
'model' => App\Models\User::class,
|
||||
],
|
||||
// 'users' => [
|
||||
// 'driver' => 'database',
|
||||
// 'table' => 'users',
|
||||
// ],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Resetting Passwords
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| You may specify multiple password reset configurations if you have more
|
||||
| than one user table or model in the application and you want to have
|
||||
| separate password reset settings based on the specific user types.
|
||||
|
|
||||
| The expiry time is the number of minutes that each reset token will be
|
||||
| considered valid. This security feature keeps tokens short-lived so
|
||||
| they have less time to be guessed. You may change this as needed.
|
||||
|
|
||||
| The throttle setting is the number of seconds a user must wait before
|
||||
| generating more password reset tokens. This prevents the user from
|
||||
| quickly generating a very large amount of password reset tokens.
|
||||
|
|
||||
*/
|
||||
|
||||
'passwords' => [
|
||||
'users' => [
|
||||
'provider' => 'users',
|
||||
'table' => 'password_reset_tokens',
|
||||
'expire' => 60,
|
||||
'throttle' => 60,
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Confirmation Timeout
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may define the amount of seconds before a password confirmation
|
||||
| times out and the user is prompted to re-enter their password via the
|
||||
| confirmation screen. By default, the timeout lasts for three hours.
|
||||
|
|
||||
*/
|
||||
|
||||
'password_timeout' => 10800,
|
||||
|
||||
];
|
||||
@@ -0,0 +1,117 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Cache Store
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option controls the default cache store that will be used by the
|
||||
| framework. This connection is utilized if another isn't explicitly
|
||||
| specified when running a cache operation inside the application.
|
||||
|
|
||||
*/
|
||||
|
||||
'default' => env('CACHE_STORE', 'database'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Cache Stores
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may define all of the cache "stores" for your application as
|
||||
| well as their drivers. You may even define multiple stores for the
|
||||
| same cache driver to group types of items stored in your caches.
|
||||
|
|
||||
| Supported drivers: "array", "database", "file", "memcached",
|
||||
| "redis", "dynamodb", "octane",
|
||||
| "failover", "null"
|
||||
|
|
||||
*/
|
||||
|
||||
'stores' => [
|
||||
|
||||
'array' => [
|
||||
'driver' => 'array',
|
||||
'serialize' => false,
|
||||
],
|
||||
|
||||
'database' => [
|
||||
'driver' => 'database',
|
||||
'connection' => env('DB_CACHE_CONNECTION'),
|
||||
'table' => env('DB_CACHE_TABLE', 'cache'),
|
||||
'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'),
|
||||
'lock_table' => env('DB_CACHE_LOCK_TABLE'),
|
||||
],
|
||||
|
||||
'file' => [
|
||||
'driver' => 'file',
|
||||
'path' => storage_path('framework/cache/data'),
|
||||
'lock_path' => storage_path('framework/cache/data'),
|
||||
],
|
||||
|
||||
'memcached' => [
|
||||
'driver' => 'memcached',
|
||||
'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
|
||||
'sasl' => [
|
||||
env('MEMCACHED_USERNAME'),
|
||||
env('MEMCACHED_PASSWORD'),
|
||||
],
|
||||
'options' => [
|
||||
// Memcached::OPT_CONNECT_TIMEOUT => 2000,
|
||||
],
|
||||
'servers' => [
|
||||
[
|
||||
'host' => env('MEMCACHED_HOST', '127.0.0.1'),
|
||||
'port' => env('MEMCACHED_PORT', 11211),
|
||||
'weight' => 100,
|
||||
],
|
||||
],
|
||||
],
|
||||
|
||||
'redis' => [
|
||||
'driver' => 'redis',
|
||||
'connection' => env('REDIS_CACHE_CONNECTION', 'cache'),
|
||||
'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'),
|
||||
],
|
||||
|
||||
'dynamodb' => [
|
||||
'driver' => 'dynamodb',
|
||||
'key' => env('AWS_ACCESS_KEY_ID'),
|
||||
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
||||
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
||||
'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),
|
||||
'endpoint' => env('DYNAMODB_ENDPOINT'),
|
||||
],
|
||||
|
||||
'octane' => [
|
||||
'driver' => 'octane',
|
||||
],
|
||||
|
||||
'failover' => [
|
||||
'driver' => 'failover',
|
||||
'stores' => [
|
||||
'database',
|
||||
'array',
|
||||
],
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Cache Key Prefix
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When utilizing the APC, database, memcached, Redis, and DynamoDB cache
|
||||
| stores, there might be other applications using the same cache. For
|
||||
| that reason, you may prefix every cache key to avoid collisions.
|
||||
|
|
||||
*/
|
||||
|
||||
'prefix' => env('CACHE_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-cache-'),
|
||||
|
||||
];
|
||||
@@ -0,0 +1,183 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Database Connection Name
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify which of the database connections below you wish
|
||||
| to use as your default connection for database operations. This is
|
||||
| the connection which will be utilized unless another connection
|
||||
| is explicitly specified when you execute a query / statement.
|
||||
|
|
||||
*/
|
||||
|
||||
'default' => env('DB_CONNECTION', 'sqlite'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Database Connections
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Below are all of the database connections defined for your application.
|
||||
| An example configuration is provided for each database system which
|
||||
| is supported by Laravel. You're free to add / remove connections.
|
||||
|
|
||||
*/
|
||||
|
||||
'connections' => [
|
||||
|
||||
'sqlite' => [
|
||||
'driver' => 'sqlite',
|
||||
'url' => env('DB_URL'),
|
||||
'database' => env('DB_DATABASE', database_path('database.sqlite')),
|
||||
'prefix' => '',
|
||||
'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
|
||||
'busy_timeout' => null,
|
||||
'journal_mode' => null,
|
||||
'synchronous' => null,
|
||||
'transaction_mode' => 'DEFERRED',
|
||||
],
|
||||
|
||||
'mysql' => [
|
||||
'driver' => 'mysql',
|
||||
'url' => env('DB_URL'),
|
||||
'host' => env('DB_HOST', '127.0.0.1'),
|
||||
'port' => env('DB_PORT', '3306'),
|
||||
'database' => env('DB_DATABASE', 'laravel'),
|
||||
'username' => env('DB_USERNAME', 'root'),
|
||||
'password' => env('DB_PASSWORD', ''),
|
||||
'unix_socket' => env('DB_SOCKET', ''),
|
||||
'charset' => env('DB_CHARSET', 'utf8mb4'),
|
||||
'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
|
||||
'prefix' => '',
|
||||
'prefix_indexes' => true,
|
||||
'strict' => true,
|
||||
'engine' => null,
|
||||
'options' => extension_loaded('pdo_mysql') ? array_filter([
|
||||
(PHP_VERSION_ID >= 80500 ? \Pdo\Mysql::ATTR_SSL_CA : \PDO::MYSQL_ATTR_SSL_CA) => env('MYSQL_ATTR_SSL_CA'),
|
||||
]) : [],
|
||||
],
|
||||
|
||||
'mariadb' => [
|
||||
'driver' => 'mariadb',
|
||||
'url' => env('DB_URL'),
|
||||
'host' => env('DB_HOST', '127.0.0.1'),
|
||||
'port' => env('DB_PORT', '3306'),
|
||||
'database' => env('DB_DATABASE', 'laravel'),
|
||||
'username' => env('DB_USERNAME', 'root'),
|
||||
'password' => env('DB_PASSWORD', ''),
|
||||
'unix_socket' => env('DB_SOCKET', ''),
|
||||
'charset' => env('DB_CHARSET', 'utf8mb4'),
|
||||
'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
|
||||
'prefix' => '',
|
||||
'prefix_indexes' => true,
|
||||
'strict' => true,
|
||||
'engine' => null,
|
||||
'options' => extension_loaded('pdo_mysql') ? array_filter([
|
||||
(PHP_VERSION_ID >= 80500 ? \Pdo\Mysql::ATTR_SSL_CA : \PDO::MYSQL_ATTR_SSL_CA) => env('MYSQL_ATTR_SSL_CA'),
|
||||
]) : [],
|
||||
],
|
||||
|
||||
'pgsql' => [
|
||||
'driver' => 'pgsql',
|
||||
'url' => env('DB_URL'),
|
||||
'host' => env('DB_HOST', '127.0.0.1'),
|
||||
'port' => env('DB_PORT', '5432'),
|
||||
'database' => env('DB_DATABASE', 'laravel'),
|
||||
'username' => env('DB_USERNAME', 'root'),
|
||||
'password' => env('DB_PASSWORD', ''),
|
||||
'charset' => env('DB_CHARSET', 'utf8'),
|
||||
'prefix' => '',
|
||||
'prefix_indexes' => true,
|
||||
'search_path' => 'public',
|
||||
'sslmode' => env('DB_SSLMODE', 'prefer'),
|
||||
],
|
||||
|
||||
'sqlsrv' => [
|
||||
'driver' => 'sqlsrv',
|
||||
'url' => env('DB_URL'),
|
||||
'host' => env('DB_HOST', 'localhost'),
|
||||
'port' => env('DB_PORT', '1433'),
|
||||
'database' => env('DB_DATABASE', 'laravel'),
|
||||
'username' => env('DB_USERNAME', 'root'),
|
||||
'password' => env('DB_PASSWORD', ''),
|
||||
'charset' => env('DB_CHARSET', 'utf8'),
|
||||
'prefix' => '',
|
||||
'prefix_indexes' => true,
|
||||
// 'encrypt' => env('DB_ENCRYPT', 'yes'),
|
||||
// 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'),
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Migration Repository Table
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This table keeps track of all the migrations that have already run for
|
||||
| your application. Using this information, we can determine which of
|
||||
| the migrations on disk haven't actually been run on the database.
|
||||
|
|
||||
*/
|
||||
|
||||
'migrations' => [
|
||||
'table' => 'migrations',
|
||||
'update_date_on_publish' => true,
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Redis Databases
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Redis is an open source, fast, and advanced key-value store that also
|
||||
| provides a richer body of commands than a typical key-value system
|
||||
| such as Memcached. You may define your connection settings here.
|
||||
|
|
||||
*/
|
||||
|
||||
'redis' => [
|
||||
|
||||
'client' => env('REDIS_CLIENT', 'phpredis'),
|
||||
|
||||
'options' => [
|
||||
'cluster' => env('REDIS_CLUSTER', 'redis'),
|
||||
'prefix' => env('REDIS_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-database-'),
|
||||
'persistent' => env('REDIS_PERSISTENT', false),
|
||||
],
|
||||
|
||||
'default' => [
|
||||
'url' => env('REDIS_URL'),
|
||||
'host' => env('REDIS_HOST', '127.0.0.1'),
|
||||
'username' => env('REDIS_USERNAME'),
|
||||
'password' => env('REDIS_PASSWORD'),
|
||||
'port' => env('REDIS_PORT', '6379'),
|
||||
'database' => env('REDIS_DB', '0'),
|
||||
'max_retries' => env('REDIS_MAX_RETRIES', 3),
|
||||
'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),
|
||||
'backoff_base' => env('REDIS_BACKOFF_BASE', 100),
|
||||
'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),
|
||||
],
|
||||
|
||||
'cache' => [
|
||||
'url' => env('REDIS_URL'),
|
||||
'host' => env('REDIS_HOST', '127.0.0.1'),
|
||||
'username' => env('REDIS_USERNAME'),
|
||||
'password' => env('REDIS_PASSWORD'),
|
||||
'port' => env('REDIS_PORT', '6379'),
|
||||
'database' => env('REDIS_CACHE_DB', '1'),
|
||||
'max_retries' => env('REDIS_MAX_RETRIES', 3),
|
||||
'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'),
|
||||
'backoff_base' => env('REDIS_BACKOFF_BASE', 100),
|
||||
'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000),
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
];
|
||||
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Filesystem Disk
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify the default filesystem disk that should be used
|
||||
| by the framework. The "local" disk, as well as a variety of cloud
|
||||
| based disks are available to your application for file storage.
|
||||
|
|
||||
*/
|
||||
|
||||
'default' => env('FILESYSTEM_DISK', 'local'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Filesystem Disks
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Below you may configure as many filesystem disks as necessary, and you
|
||||
| may even configure multiple disks for the same driver. Examples for
|
||||
| most supported storage drivers are configured here for reference.
|
||||
|
|
||||
| Supported drivers: "local", "ftp", "sftp", "s3"
|
||||
|
|
||||
*/
|
||||
|
||||
'disks' => [
|
||||
|
||||
'local' => [
|
||||
'driver' => 'local',
|
||||
'root' => storage_path('app/private'),
|
||||
'serve' => true,
|
||||
'throw' => false,
|
||||
'report' => false,
|
||||
],
|
||||
|
||||
'public' => [
|
||||
'driver' => 'local',
|
||||
'root' => storage_path('app/public'),
|
||||
'url' => rtrim(env('APP_URL', 'http://localhost'), '/').'/storage',
|
||||
'visibility' => 'public',
|
||||
'throw' => false,
|
||||
'report' => false,
|
||||
],
|
||||
|
||||
's3' => [
|
||||
'driver' => 's3',
|
||||
'key' => env('AWS_ACCESS_KEY_ID'),
|
||||
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
||||
'region' => env('AWS_DEFAULT_REGION'),
|
||||
'bucket' => env('AWS_BUCKET'),
|
||||
'url' => env('AWS_URL'),
|
||||
'endpoint' => env('AWS_ENDPOINT'),
|
||||
'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
|
||||
'throw' => false,
|
||||
'report' => false,
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Symbolic Links
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may configure the symbolic links that will be created when the
|
||||
| `storage:link` Artisan command is executed. The array keys should be
|
||||
| the locations of the links and the values should be their targets.
|
||||
|
|
||||
*/
|
||||
|
||||
'links' => [
|
||||
public_path('storage') => storage_path('app/public'),
|
||||
],
|
||||
|
||||
];
|
||||
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default LDAP Connection Name
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify which of the LDAP connections below you wish
|
||||
| to use as your default connection for all LDAP operations. Of
|
||||
| course you may add as many connections you'd like below.
|
||||
|
|
||||
*/
|
||||
|
||||
'default' => env('LDAP_CONNECTION', 'default'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| LDAP Connections
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Below you may configure each LDAP connection your application requires
|
||||
| access to. Be sure to include a valid base DN - otherwise you may
|
||||
| not receive any results when performing LDAP search operations.
|
||||
|
|
||||
*/
|
||||
|
||||
'connections' => [
|
||||
|
||||
'default' => [
|
||||
'hosts' => [env('LDAP_HOST', '127.0.0.1')],
|
||||
'username' => env('LDAP_USERNAME', 'cn=user,dc=local,dc=com'),
|
||||
'password' => env('LDAP_PASSWORD', 'secret'),
|
||||
'port' => env('LDAP_PORT', 389),
|
||||
'base_dn' => env('LDAP_BASE_DN', 'dc=local,dc=com'),
|
||||
'timeout' => env('LDAP_TIMEOUT', 5),
|
||||
'use_ssl' => env('LDAP_SSL', false),
|
||||
'use_tls' => env('LDAP_TLS', false),
|
||||
'use_sasl' => env('LDAP_SASL', false),
|
||||
'sasl_options' => [
|
||||
// 'mech' => 'GSSAPI',
|
||||
],
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| LDAP Logging
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When LDAP logging is enabled, all LDAP search and authentication
|
||||
| operations are logged using the default application logging
|
||||
| driver. This can assist in debugging issues and more.
|
||||
|
|
||||
*/
|
||||
|
||||
'logging' => [
|
||||
'enabled' => env('LDAP_LOGGING', true),
|
||||
'channel' => env('LOG_CHANNEL', 'stack'),
|
||||
'level' => env('LOG_LEVEL', 'info'),
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| LDAP Cache
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| LDAP caching enables the ability of caching search results using the
|
||||
| query builder. This is great for running expensive operations that
|
||||
| may take many seconds to complete, such as a pagination request.
|
||||
|
|
||||
*/
|
||||
|
||||
'cache' => [
|
||||
'enabled' => env('LDAP_CACHE', false),
|
||||
'driver' => env('CACHE_DRIVER', 'file'),
|
||||
],
|
||||
|
||||
];
|
||||
@@ -0,0 +1,132 @@
|
||||
<?php
|
||||
|
||||
use Monolog\Handler\NullHandler;
|
||||
use Monolog\Handler\StreamHandler;
|
||||
use Monolog\Handler\SyslogUdpHandler;
|
||||
use Monolog\Processor\PsrLogMessageProcessor;
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Log Channel
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option defines the default log channel that is utilized to write
|
||||
| messages to your logs. The value provided here should match one of
|
||||
| the channels present in the list of "channels" configured below.
|
||||
|
|
||||
*/
|
||||
|
||||
'default' => env('LOG_CHANNEL', 'stack'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Deprecations Log Channel
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option controls the log channel that should be used to log warnings
|
||||
| regarding deprecated PHP and library features. This allows you to get
|
||||
| your application ready for upcoming major versions of dependencies.
|
||||
|
|
||||
*/
|
||||
|
||||
'deprecations' => [
|
||||
'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),
|
||||
'trace' => env('LOG_DEPRECATIONS_TRACE', false),
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Log Channels
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may configure the log channels for your application. Laravel
|
||||
| utilizes the Monolog PHP logging library, which includes a variety
|
||||
| of powerful log handlers and formatters that you're free to use.
|
||||
|
|
||||
| Available drivers: "single", "daily", "slack", "syslog",
|
||||
| "errorlog", "monolog", "custom", "stack"
|
||||
|
|
||||
*/
|
||||
|
||||
'channels' => [
|
||||
|
||||
'stack' => [
|
||||
'driver' => 'stack',
|
||||
'channels' => explode(',', (string) env('LOG_STACK', 'single')),
|
||||
'ignore_exceptions' => false,
|
||||
],
|
||||
|
||||
'single' => [
|
||||
'driver' => 'single',
|
||||
'path' => storage_path('logs/laravel.log'),
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'replace_placeholders' => true,
|
||||
],
|
||||
|
||||
'daily' => [
|
||||
'driver' => 'daily',
|
||||
'path' => storage_path('logs/laravel.log'),
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'days' => env('LOG_DAILY_DAYS', 14),
|
||||
'replace_placeholders' => true,
|
||||
],
|
||||
|
||||
'slack' => [
|
||||
'driver' => 'slack',
|
||||
'url' => env('LOG_SLACK_WEBHOOK_URL'),
|
||||
'username' => env('LOG_SLACK_USERNAME', 'Laravel Log'),
|
||||
'emoji' => env('LOG_SLACK_EMOJI', ':boom:'),
|
||||
'level' => env('LOG_LEVEL', 'critical'),
|
||||
'replace_placeholders' => true,
|
||||
],
|
||||
|
||||
'papertrail' => [
|
||||
'driver' => 'monolog',
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class),
|
||||
'handler_with' => [
|
||||
'host' => env('PAPERTRAIL_URL'),
|
||||
'port' => env('PAPERTRAIL_PORT'),
|
||||
'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'),
|
||||
],
|
||||
'processors' => [PsrLogMessageProcessor::class],
|
||||
],
|
||||
|
||||
'stderr' => [
|
||||
'driver' => 'monolog',
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'handler' => StreamHandler::class,
|
||||
'handler_with' => [
|
||||
'stream' => 'php://stderr',
|
||||
],
|
||||
'formatter' => env('LOG_STDERR_FORMATTER'),
|
||||
'processors' => [PsrLogMessageProcessor::class],
|
||||
],
|
||||
|
||||
'syslog' => [
|
||||
'driver' => 'syslog',
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER),
|
||||
'replace_placeholders' => true,
|
||||
],
|
||||
|
||||
'errorlog' => [
|
||||
'driver' => 'errorlog',
|
||||
'level' => env('LOG_LEVEL', 'debug'),
|
||||
'replace_placeholders' => true,
|
||||
],
|
||||
|
||||
'null' => [
|
||||
'driver' => 'monolog',
|
||||
'handler' => NullHandler::class,
|
||||
],
|
||||
|
||||
'emergency' => [
|
||||
'path' => storage_path('logs/laravel.log'),
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
];
|
||||
+118
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Mailer
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option controls the default mailer that is used to send all email
|
||||
| messages unless another mailer is explicitly specified when sending
|
||||
| the message. All additional mailers can be configured within the
|
||||
| "mailers" array. Examples of each type of mailer are provided.
|
||||
|
|
||||
*/
|
||||
|
||||
'default' => env('MAIL_MAILER', 'log'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Mailer Configurations
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may configure all of the mailers used by your application plus
|
||||
| their respective settings. Several examples have been configured for
|
||||
| you and you are free to add your own as your application requires.
|
||||
|
|
||||
| Laravel supports a variety of mail "transport" drivers that can be used
|
||||
| when delivering an email. You may specify which one you're using for
|
||||
| your mailers below. You may also add additional mailers if needed.
|
||||
|
|
||||
| Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2",
|
||||
| "postmark", "resend", "log", "array",
|
||||
| "failover", "roundrobin"
|
||||
|
|
||||
*/
|
||||
|
||||
'mailers' => [
|
||||
|
||||
'smtp' => [
|
||||
'transport' => 'smtp',
|
||||
'scheme' => env('MAIL_SCHEME'),
|
||||
'url' => env('MAIL_URL'),
|
||||
'host' => env('MAIL_HOST', '127.0.0.1'),
|
||||
'port' => env('MAIL_PORT', 2525),
|
||||
'username' => env('MAIL_USERNAME'),
|
||||
'password' => env('MAIL_PASSWORD'),
|
||||
'timeout' => null,
|
||||
'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)),
|
||||
],
|
||||
|
||||
'ses' => [
|
||||
'transport' => 'ses',
|
||||
],
|
||||
|
||||
'postmark' => [
|
||||
'transport' => 'postmark',
|
||||
// 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'),
|
||||
// 'client' => [
|
||||
// 'timeout' => 5,
|
||||
// ],
|
||||
],
|
||||
|
||||
'resend' => [
|
||||
'transport' => 'resend',
|
||||
],
|
||||
|
||||
'sendmail' => [
|
||||
'transport' => 'sendmail',
|
||||
'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'),
|
||||
],
|
||||
|
||||
'log' => [
|
||||
'transport' => 'log',
|
||||
'channel' => env('MAIL_LOG_CHANNEL'),
|
||||
],
|
||||
|
||||
'array' => [
|
||||
'transport' => 'array',
|
||||
],
|
||||
|
||||
'failover' => [
|
||||
'transport' => 'failover',
|
||||
'mailers' => [
|
||||
'smtp',
|
||||
'log',
|
||||
],
|
||||
'retry_after' => 60,
|
||||
],
|
||||
|
||||
'roundrobin' => [
|
||||
'transport' => 'roundrobin',
|
||||
'mailers' => [
|
||||
'ses',
|
||||
'postmark',
|
||||
],
|
||||
'retry_after' => 60,
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Global "From" Address
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| You may wish for all emails sent by your application to be sent from
|
||||
| the same address. Here you may specify a name and address that is
|
||||
| used globally for all emails that are sent by your application.
|
||||
|
|
||||
*/
|
||||
|
||||
'from' => [
|
||||
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
|
||||
'name' => env('MAIL_FROM_NAME', 'Example'),
|
||||
],
|
||||
|
||||
];
|
||||
@@ -0,0 +1,129 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Queue Connection Name
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Laravel's queue supports a variety of backends via a single, unified
|
||||
| API, giving you convenient access to each backend using identical
|
||||
| syntax for each. The default queue connection is defined below.
|
||||
|
|
||||
*/
|
||||
|
||||
'default' => env('QUEUE_CONNECTION', 'database'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Queue Connections
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may configure the connection options for every queue backend
|
||||
| used by your application. An example configuration is provided for
|
||||
| each backend supported by Laravel. You're also free to add more.
|
||||
|
|
||||
| Drivers: "sync", "database", "beanstalkd", "sqs", "redis",
|
||||
| "deferred", "background", "failover", "null"
|
||||
|
|
||||
*/
|
||||
|
||||
'connections' => [
|
||||
|
||||
'sync' => [
|
||||
'driver' => 'sync',
|
||||
],
|
||||
|
||||
'database' => [
|
||||
'driver' => 'database',
|
||||
'connection' => env('DB_QUEUE_CONNECTION'),
|
||||
'table' => env('DB_QUEUE_TABLE', 'jobs'),
|
||||
'queue' => env('DB_QUEUE', 'default'),
|
||||
'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90),
|
||||
'after_commit' => false,
|
||||
],
|
||||
|
||||
'beanstalkd' => [
|
||||
'driver' => 'beanstalkd',
|
||||
'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'),
|
||||
'queue' => env('BEANSTALKD_QUEUE', 'default'),
|
||||
'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90),
|
||||
'block_for' => 0,
|
||||
'after_commit' => false,
|
||||
],
|
||||
|
||||
'sqs' => [
|
||||
'driver' => 'sqs',
|
||||
'key' => env('AWS_ACCESS_KEY_ID'),
|
||||
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
||||
'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
|
||||
'queue' => env('SQS_QUEUE', 'default'),
|
||||
'suffix' => env('SQS_SUFFIX'),
|
||||
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
||||
'after_commit' => false,
|
||||
],
|
||||
|
||||
'redis' => [
|
||||
'driver' => 'redis',
|
||||
'connection' => env('REDIS_QUEUE_CONNECTION', 'default'),
|
||||
'queue' => env('REDIS_QUEUE', 'default'),
|
||||
'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90),
|
||||
'block_for' => null,
|
||||
'after_commit' => false,
|
||||
],
|
||||
|
||||
'deferred' => [
|
||||
'driver' => 'deferred',
|
||||
],
|
||||
|
||||
'background' => [
|
||||
'driver' => 'background',
|
||||
],
|
||||
|
||||
'failover' => [
|
||||
'driver' => 'failover',
|
||||
'connections' => [
|
||||
'database',
|
||||
'deferred',
|
||||
],
|
||||
],
|
||||
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Job Batching
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The following options configure the database and table that store job
|
||||
| batching information. These options can be updated to any database
|
||||
| connection and table which has been defined by your application.
|
||||
|
|
||||
*/
|
||||
|
||||
'batching' => [
|
||||
'database' => env('DB_CONNECTION', 'sqlite'),
|
||||
'table' => 'job_batches',
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Failed Queue Jobs
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| These options configure the behavior of failed queue job logging so you
|
||||
| can control how and where failed jobs are stored. Laravel ships with
|
||||
| support for storing failed jobs in a simple file or in a database.
|
||||
|
|
||||
| Supported drivers: "database-uuids", "dynamodb", "file", "null"
|
||||
|
|
||||
*/
|
||||
|
||||
'failed' => [
|
||||
'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),
|
||||
'database' => env('DB_CONNECTION', 'sqlite'),
|
||||
'table' => 'failed_jobs',
|
||||
],
|
||||
|
||||
];
|
||||
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
use Laravel\Sanctum\Sanctum;
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Stateful Domains
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Requests from the following domains / hosts will receive stateful API
|
||||
| authentication cookies. Typically, these should include your local
|
||||
| and production domains which access your API via a frontend SPA.
|
||||
|
|
||||
*/
|
||||
|
||||
#Гаврилов
|
||||
//ЗДЕСЬ НУЖНО БУДЕТ ПЕРЕЧИСЛИТЬ ДОМЕНЫ (МЭДЖИКА например) ПЕРЕД ВЫНОСОМ В ПРОД
|
||||
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
|
||||
'%s%s',
|
||||
'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
|
||||
Sanctum::currentApplicationUrlWithPort()
|
||||
))),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Sanctum Guards
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This array contains the authentication guards that will be checked when
|
||||
| Sanctum is trying to authenticate a request. If none of these guards
|
||||
| are able to authenticate the request, Sanctum will use the bearer
|
||||
| token that's present on an incoming request for authentication.
|
||||
|
|
||||
*/
|
||||
|
||||
'guard' => ['web'],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Expiration Minutes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This value controls the number of minutes until an issued token will be
|
||||
| considered expired. This will override any values set in the token's
|
||||
| "expires_at" attribute, but first-party sessions are not affected.
|
||||
|
|
||||
*/
|
||||
|
||||
'expiration' => null,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Token Prefix
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Sanctum can prefix new tokens in order to take advantage of numerous
|
||||
| security scanning initiatives maintained by open source platforms
|
||||
| that notify developers if they commit tokens into repositories.
|
||||
|
|
||||
| See: https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning
|
||||
|
|
||||
*/
|
||||
|
||||
'token_prefix' => env('SANCTUM_TOKEN_PREFIX', ''),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Sanctum Middleware
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When authenticating your first-party SPA with Sanctum you may need to
|
||||
| customize some of the middleware Sanctum uses while processing the
|
||||
| request. You may change the middleware listed below as required.
|
||||
|
|
||||
*/
|
||||
|
||||
'middleware' => [
|
||||
'authenticate_session' => Laravel\Sanctum\Http\Middleware\AuthenticateSession::class,
|
||||
'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class,
|
||||
'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class,
|
||||
],
|
||||
|
||||
];
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Third Party Services
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This file is for storing the credentials for third party services such
|
||||
| as Mailgun, Postmark, AWS and more. This file provides the de facto
|
||||
| location for this type of information, allowing packages to have
|
||||
| a conventional file to locate the various service credentials.
|
||||
|
|
||||
*/
|
||||
|
||||
'postmark' => [
|
||||
'key' => env('POSTMARK_API_KEY'),
|
||||
],
|
||||
|
||||
'resend' => [
|
||||
'key' => env('RESEND_API_KEY'),
|
||||
],
|
||||
|
||||
'ses' => [
|
||||
'key' => env('AWS_ACCESS_KEY_ID'),
|
||||
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
||||
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
||||
],
|
||||
|
||||
'slack' => [
|
||||
'notifications' => [
|
||||
'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'),
|
||||
'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'),
|
||||
],
|
||||
],
|
||||
|
||||
];
|
||||
@@ -0,0 +1,217 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Session Driver
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option determines the default session driver that is utilized for
|
||||
| incoming requests. Laravel supports a variety of storage options to
|
||||
| persist session data. Database storage is a great default choice.
|
||||
|
|
||||
| Supported: "file", "cookie", "database", "memcached",
|
||||
| "redis", "dynamodb", "array"
|
||||
|
|
||||
*/
|
||||
|
||||
'driver' => env('SESSION_DRIVER', 'database'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Lifetime
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify the number of minutes that you wish the session
|
||||
| to be allowed to remain idle before it expires. If you want them
|
||||
| to expire immediately when the browser is closed then you may
|
||||
| indicate that via the expire_on_close configuration option.
|
||||
|
|
||||
*/
|
||||
|
||||
'lifetime' => (int) env('SESSION_LIFETIME', 120),
|
||||
|
||||
'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Encryption
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option allows you to easily specify that all of your session data
|
||||
| should be encrypted before it's stored. All encryption is performed
|
||||
| automatically by Laravel and you may use the session like normal.
|
||||
|
|
||||
*/
|
||||
|
||||
'encrypt' => env('SESSION_ENCRYPT', false),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session File Location
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When utilizing the "file" session driver, the session files are placed
|
||||
| on disk. The default storage location is defined here; however, you
|
||||
| are free to provide another location where they should be stored.
|
||||
|
|
||||
*/
|
||||
|
||||
'files' => storage_path('framework/sessions'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Database Connection
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When using the "database" or "redis" session drivers, you may specify a
|
||||
| connection that should be used to manage these sessions. This should
|
||||
| correspond to a connection in your database configuration options.
|
||||
|
|
||||
*/
|
||||
|
||||
'connection' => env('SESSION_CONNECTION'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Database Table
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When using the "database" session driver, you may specify the table to
|
||||
| be used to store sessions. Of course, a sensible default is defined
|
||||
| for you; however, you're welcome to change this to another table.
|
||||
|
|
||||
*/
|
||||
|
||||
'table' => env('SESSION_TABLE', 'sessions'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Cache Store
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When using one of the framework's cache driven session backends, you may
|
||||
| define the cache store which should be used to store the session data
|
||||
| between requests. This must match one of your defined cache stores.
|
||||
|
|
||||
| Affects: "dynamodb", "memcached", "redis"
|
||||
|
|
||||
*/
|
||||
|
||||
'store' => env('SESSION_STORE'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Sweeping Lottery
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Some session drivers must manually sweep their storage location to get
|
||||
| rid of old sessions from storage. Here are the chances that it will
|
||||
| happen on a given request. By default, the odds are 2 out of 100.
|
||||
|
|
||||
*/
|
||||
|
||||
'lottery' => [2, 100],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Cookie Name
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may change the name of the session cookie that is created by
|
||||
| the framework. Typically, you should not need to change this value
|
||||
| since doing so does not grant a meaningful security improvement.
|
||||
|
|
||||
*/
|
||||
|
||||
'cookie' => env(
|
||||
'SESSION_COOKIE',
|
||||
Str::slug((string) env('APP_NAME', 'laravel')).'-session'
|
||||
),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Cookie Path
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The session cookie path determines the path for which the cookie will
|
||||
| be regarded as available. Typically, this will be the root path of
|
||||
| your application, but you're free to change this when necessary.
|
||||
|
|
||||
*/
|
||||
|
||||
'path' => env('SESSION_PATH', '/'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Session Cookie Domain
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This value determines the domain and subdomains the session cookie is
|
||||
| available to. By default, the cookie will be available to the root
|
||||
| domain without subdomains. Typically, this shouldn't be changed.
|
||||
|
|
||||
*/
|
||||
|
||||
'domain' => env('SESSION_DOMAIN'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| HTTPS Only Cookies
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| By setting this option to true, session cookies will only be sent back
|
||||
| to the server if the browser has a HTTPS connection. This will keep
|
||||
| the cookie from being sent to you when it can't be done securely.
|
||||
|
|
||||
*/
|
||||
|
||||
'secure' => env('SESSION_SECURE_COOKIE'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| HTTP Access Only
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Setting this value to true will prevent JavaScript from accessing the
|
||||
| value of the cookie and the cookie will only be accessible through
|
||||
| the HTTP protocol. It's unlikely you should disable this option.
|
||||
|
|
||||
*/
|
||||
|
||||
'http_only' => env('SESSION_HTTP_ONLY', true),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Same-Site Cookies
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option determines how your cookies behave when cross-site requests
|
||||
| take place, and can be used to mitigate CSRF attacks. By default, we
|
||||
| will set this value to "lax" to permit secure cross-site requests.
|
||||
|
|
||||
| See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value
|
||||
|
|
||||
| Supported: "lax", "strict", "none", null
|
||||
|
|
||||
*/
|
||||
|
||||
'same_site' => env('SESSION_SAME_SITE', 'lax'),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Partitioned Cookies
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Setting this value to true will tie the cookie to the top-level site for
|
||||
| a cross-site context. Partitioned cookies are accepted by the browser
|
||||
| when flagged "secure" and the Same-Site attribute is set to "none".
|
||||
|
|
||||
*/
|
||||
|
||||
'partitioned' => env('SESSION_PARTITIONED_COOKIE', false),
|
||||
|
||||
];
|
||||
@@ -0,0 +1 @@
|
||||
*.sqlite*
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Factories;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
/**
|
||||
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\User>
|
||||
*/
|
||||
class UserFactory extends Factory
|
||||
{
|
||||
/**
|
||||
* The current password being used by the factory.
|
||||
*/
|
||||
protected static ?string $password;
|
||||
|
||||
/**
|
||||
* Define the model's default state.
|
||||
*
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function definition(): array
|
||||
{
|
||||
return [
|
||||
'name' => fake()->name(),
|
||||
'email' => fake()->unique()->safeEmail(),
|
||||
'email_verified_at' => now(),
|
||||
'password' => static::$password ??= Hash::make('password'),
|
||||
'remember_token' => Str::random(10),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicate that the model's email address should be unverified.
|
||||
*/
|
||||
public function unverified(): static
|
||||
{
|
||||
return $this->state(fn (array $attributes) => [
|
||||
'email_verified_at' => null,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('users', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('name');
|
||||
$table->string('email')->unique();
|
||||
$table->timestamp('email_verified_at')->nullable();
|
||||
$table->string('password');
|
||||
$table->rememberToken();
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
Schema::create('password_reset_tokens', function (Blueprint $table) {
|
||||
$table->string('email')->primary();
|
||||
$table->string('token');
|
||||
$table->timestamp('created_at')->nullable();
|
||||
});
|
||||
|
||||
Schema::create('sessions', function (Blueprint $table) {
|
||||
$table->string('id')->primary();
|
||||
$table->foreignId('user_id')->nullable()->index();
|
||||
$table->string('ip_address', 45)->nullable();
|
||||
$table->text('user_agent')->nullable();
|
||||
$table->longText('payload');
|
||||
$table->integer('last_activity')->index();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('users');
|
||||
Schema::dropIfExists('password_reset_tokens');
|
||||
Schema::dropIfExists('sessions');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('cache', function (Blueprint $table) {
|
||||
$table->string('key')->primary();
|
||||
$table->mediumText('value');
|
||||
$table->integer('expiration')->index();
|
||||
});
|
||||
|
||||
Schema::create('cache_locks', function (Blueprint $table) {
|
||||
$table->string('key')->primary();
|
||||
$table->string('owner');
|
||||
$table->integer('expiration')->index();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('cache');
|
||||
Schema::dropIfExists('cache_locks');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('jobs', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('queue')->index();
|
||||
$table->longText('payload');
|
||||
$table->unsignedTinyInteger('attempts');
|
||||
$table->unsignedInteger('reserved_at')->nullable();
|
||||
$table->unsignedInteger('available_at');
|
||||
$table->unsignedInteger('created_at');
|
||||
});
|
||||
|
||||
Schema::create('job_batches', function (Blueprint $table) {
|
||||
$table->string('id')->primary();
|
||||
$table->string('name');
|
||||
$table->integer('total_jobs');
|
||||
$table->integer('pending_jobs');
|
||||
$table->integer('failed_jobs');
|
||||
$table->longText('failed_job_ids');
|
||||
$table->mediumText('options')->nullable();
|
||||
$table->integer('cancelled_at')->nullable();
|
||||
$table->integer('created_at');
|
||||
$table->integer('finished_at')->nullable();
|
||||
});
|
||||
|
||||
Schema::create('failed_jobs', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('uuid')->unique();
|
||||
$table->text('connection');
|
||||
$table->text('queue');
|
||||
$table->longText('payload');
|
||||
$table->longText('exception');
|
||||
$table->timestamp('failed_at')->useCurrent();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('jobs');
|
||||
Schema::dropIfExists('job_batches');
|
||||
Schema::dropIfExists('failed_jobs');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class DatabaseSeeder extends Seeder
|
||||
{
|
||||
use WithoutModelEvents;
|
||||
|
||||
/**
|
||||
* Seed the application's database.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
// User::factory(10)->create();
|
||||
|
||||
User::factory()->create([
|
||||
'name' => 'Test User',
|
||||
'email' => 'test@example.com',
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
-- custom.magic_apps definition
|
||||
|
||||
CREATE TABLE `magic_apps` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`app_name` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Имя приложения',
|
||||
`app_title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Название приложения на русском',
|
||||
`app_link` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`role_driver` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Драйвер определения ролей: по группам AD, по почтовым рассылкам, по логинам. NULL, если ролевая модель не предусмотрена',
|
||||
`access_groups_email` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Доступ к приложениям по почтовым рассылкам',
|
||||
`access_groups_ad` text COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'Доступ к приложениям по группам AD',
|
||||
`is_active` tinyint(4) NOT NULL DEFAULT 1 COMMENT 'Активно ли приложение',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
@@ -1,5 +0,0 @@
|
||||
INSERT INTO custom.magic_apps (app_name,app_title,app_link,role_driver,access_groups_email,access_groups_ad,is_active) VALUES
|
||||
('Test','','test.index',NULL,NULL,'CTXAL.CryptoPRO',1),
|
||||
('About','','about',NULL,NULL,'CTXAL.CryptoPRO',1),
|
||||
('Test create','','test.create',NULL,NULL,'CTXAL.CryptoPRO',1),
|
||||
('taxi','Реестр заказа такси','test','email','# Magic_admins',NULL,1);
|
||||
@@ -1,8 +0,0 @@
|
||||
-- custom.office_address definition
|
||||
|
||||
CREATE TABLE `office_address` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`place` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Площадка',
|
||||
`address` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Адрес',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Адреса офисов для подстановки в заказы такси';
|
||||
@@ -1,3 +0,0 @@
|
||||
INSERT INTO custom.office_address (place,address) VALUES
|
||||
('Курск','адрес Курска'),
|
||||
('Пенза','адрес Пензы');
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"$schema": "https://www.schemastore.org/package.json",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "vite build",
|
||||
"dev": "vite"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@tailwindcss/vite": "^4.0.0",
|
||||
"axios": "^1.11.0",
|
||||
"concurrently": "^9.0.1",
|
||||
"laravel-vite-plugin": "^2.0.0",
|
||||
"tailwindcss": "^4.0.0",
|
||||
"vite": "^7.0.7"
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
-- custom.personal_access_tokens definition
|
||||
|
||||
CREATE TABLE `personal_access_tokens` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`tokenable_type` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`tokenable_id` bigint(20) unsigned NOT NULL,
|
||||
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`token` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`abilities` text COLLATE utf8mb4_unicode_ci DEFAULT NULL,
|
||||
`last_used_at` timestamp NULL DEFAULT NULL,
|
||||
`expires_at` timestamp NULL DEFAULT NULL,
|
||||
`created_at` timestamp NULL DEFAULT NULL,
|
||||
`updated_at` timestamp NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `personal_access_tokens_token_unique` (`token`),
|
||||
KEY `personal_access_tokens_tokenable_type_tokenable_id_index` (`tokenable_type`,`tokenable_id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=216 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
@@ -1,3 +0,0 @@
|
||||
INSERT INTO custom.personal_access_tokens (tokenable_type,tokenable_id,name,token,abilities,last_used_at,expires_at,created_at,updated_at) VALUES
|
||||
('App\\Models\\User',3,'sanctum-token','6a6130b3b955c3d661ab4199d76c6a5f6b19e51eafa98927171d4990b09913a7','{"permissions":{"taxi":"admin"}}','2026-01-20 20:16:03','2030-11-20 15:43:39','2025-11-20 13:43:39','2026-01-20 20:16:03'),
|
||||
('App\\Models\\User',2,'sanctum-token','0b42d67eeff4b8011925839447e4c745af2b90a7838f140c7629ce682621e3c7','{"permissions":{"taxi":"admin"}}','2026-01-24 15:45:50','2026-01-24 17:24:01','2026-01-24 15:24:01','2026-01-24 15:45:50');
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
|
||||
bootstrap="vendor/autoload.php"
|
||||
colors="true"
|
||||
>
|
||||
<testsuites>
|
||||
<testsuite name="Unit">
|
||||
<directory>tests/Unit</directory>
|
||||
</testsuite>
|
||||
<testsuite name="Feature">
|
||||
<directory>tests/Feature</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
<source>
|
||||
<include>
|
||||
<directory>app</directory>
|
||||
</include>
|
||||
</source>
|
||||
<php>
|
||||
<env name="APP_ENV" value="testing"/>
|
||||
<env name="APP_MAINTENANCE_DRIVER" value="file"/>
|
||||
<env name="BCRYPT_ROUNDS" value="4"/>
|
||||
<env name="BROADCAST_CONNECTION" value="null"/>
|
||||
<env name="CACHE_STORE" value="array"/>
|
||||
<env name="DB_CONNECTION" value="sqlite"/>
|
||||
<env name="DB_DATABASE" value=":memory:"/>
|
||||
<env name="MAIL_MAILER" value="array"/>
|
||||
<env name="QUEUE_CONNECTION" value="sync"/>
|
||||
<env name="SESSION_DRIVER" value="array"/>
|
||||
<env name="PULSE_ENABLED" value="false"/>
|
||||
<env name="TELESCOPE_ENABLED" value="false"/>
|
||||
<env name="NIGHTWATCH_ENABLED" value="false"/>
|
||||
</php>
|
||||
</phpunit>
|
||||
@@ -0,0 +1,25 @@
|
||||
<IfModule mod_rewrite.c>
|
||||
<IfModule mod_negotiation.c>
|
||||
Options -MultiViews -Indexes
|
||||
</IfModule>
|
||||
|
||||
RewriteEngine On
|
||||
|
||||
# Handle Authorization Header
|
||||
RewriteCond %{HTTP:Authorization} .
|
||||
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
|
||||
|
||||
# Handle X-XSRF-Token Header
|
||||
RewriteCond %{HTTP:x-xsrf-token} .
|
||||
RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-Token}]
|
||||
|
||||
# Redirect Trailing Slashes If Not A Folder...
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteCond %{REQUEST_URI} (.+)/$
|
||||
RewriteRule ^ %1 [L,R=301]
|
||||
|
||||
# Send Requests To Front Controller...
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteRule ^ index.php [L]
|
||||
</IfModule>
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Foundation\Application;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
define('LARAVEL_START', microtime(true));
|
||||
|
||||
// Determine if the application is in maintenance mode...
|
||||
if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) {
|
||||
require $maintenance;
|
||||
}
|
||||
|
||||
// Register the Composer autoloader...
|
||||
require __DIR__.'/../vendor/autoload.php';
|
||||
|
||||
// Bootstrap Laravel and handle the request...
|
||||
/** @var Application $app */
|
||||
$app = require_once __DIR__.'/../bootstrap/app.php';
|
||||
|
||||
$app->handleRequest(Request::capture());
|
||||
@@ -0,0 +1,2 @@
|
||||
User-agent: *
|
||||
Disallow:
|
||||
@@ -0,0 +1,11 @@
|
||||
@import 'tailwindcss';
|
||||
|
||||
@source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php';
|
||||
@source '../../storage/framework/views/*.php';
|
||||
@source '../**/*.blade.php';
|
||||
@source '../**/*.js';
|
||||
|
||||
@theme {
|
||||
--font-sans: 'Instrument Sans', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji',
|
||||
'Segoe UI Symbol', 'Noto Color Emoji';
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
import './bootstrap';
|
||||
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
import axios from 'axios';
|
||||
window.axios = axios;
|
||||
|
||||
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
|
||||
@@ -0,0 +1,34 @@
|
||||
import React from "react";
|
||||
import { useEffect, useState } from "react";
|
||||
import { getCsrfToken } from './../services/getCsrfService';
|
||||
|
||||
function MagicLogin ()
|
||||
{
|
||||
//Состояние с введенным логином
|
||||
const [userLogin, setUserLogin] = useState<string>('');
|
||||
|
||||
return (
|
||||
<div id="login-container">
|
||||
<div id="login-container__magic-name">Magic</div>
|
||||
<div id="login-container__form">
|
||||
<form action="login" method="POST" autoComplete="on">
|
||||
<input
|
||||
type="hidden"
|
||||
name="_token"
|
||||
value={getCsrfToken()}
|
||||
/>
|
||||
<input name="_auth_login" type="text" onChange={ (e) => setUserLogin(e.target.value) } placeholder="Логин" required/>
|
||||
<input name="_auth_password" type="password" placeholder="Пароль" required/>
|
||||
<button type="submit" onClick={ () => {
|
||||
//При сабмите кладем логин в локалсторадж для того, чтобы при вызове api ендпоинтов передавать его в заголовках
|
||||
//гаврилов
|
||||
//ТОЧНО ЛИ ЭТО НУЖНО? МОЖЕТ, ЛУЧШЕ ВСЕ API ЕНДПОИНТЫ ПЕРЕПИСАТ ПОД ВЫЗОВ WEB РОУТОВ?
|
||||
localStorage.setItem('magic_auth_login', userLogin);
|
||||
} }>Вход</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default MagicLogin;
|
||||
@@ -0,0 +1,7 @@
|
||||
import { createRoot } from 'react-dom/client';
|
||||
import MagicLogin from './components/MagicLogin.tsx';
|
||||
import React from 'react';
|
||||
|
||||
const container = document.getElementById('root')!;
|
||||
const root = createRoot(container);
|
||||
root.render(<MagicLogin />);
|
||||
@@ -0,0 +1,20 @@
|
||||
/**
|
||||
* Сервис для полуения csrt токена для размещения в формах
|
||||
* @date 24.07.2025
|
||||
* @author dgavrilov
|
||||
*/
|
||||
|
||||
export const getCsrfToken = ():string => {
|
||||
const METATAG:HTMLElement|null = document.querySelector('meta[name="csrf-token"]');
|
||||
|
||||
if (!METATAG) {
|
||||
return '';
|
||||
}
|
||||
|
||||
const CSRFTOKEN:string|null = METATAG.getAttribute('content');
|
||||
if (!CSRFTOKEN) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return CSRFTOKEN;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Laravel + React</title>
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
||||
<!-- Без команды ниже корректно не обрабатывается React скрипт -->
|
||||
@viteReactRefresh
|
||||
<!-- файл со стилями resources/css/magicLogin.css не создан, так как не успел приступить к доделке меню -->
|
||||
@vite(['resources/css/magicLogin.css', 'resources/js/magicLogin.tsx'])
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use \App\Http\Controllers;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| API Routes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here is where you can register API routes for your application. These
|
||||
| routes are loaded by the RouteServiceProvider and all of them will
|
||||
| be assigned to the "api" middleware group. Make something great!
|
||||
|
|
||||
*/
|
||||
|
||||
#Гаврилов
|
||||
//РОУТ НИЖЕ НУЖЕН? НЕ ПОМНЮ ОТКУДА ОН ВЗЯЛСЯ. Пока оставляю, но надо разобраться для теста он или нужен на проде
|
||||
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
|
||||
return $request->user();
|
||||
});
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Получение пользовательской роли
|
||||
*/
|
||||
Route::get('user_role/{moduleName}', [Controllers\AuthorizationController::class, 'getUserRole'])->where('moduleName', '^[a-z0-9_]+$');
|
||||
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Foundation\Inspiring;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
|
||||
Artisan::command('inspire', function () {
|
||||
$this->comment(Inspiring::quote());
|
||||
})->purpose('Display an inspiring quote');
|
||||
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use \App\Http\Controllers;
|
||||
use App\Http\Middleware\AuthenticateMagic;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Web Routes
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here is where you can register web routes for your application. These
|
||||
| routes are loaded by the RouteServiceProvider and all of them will
|
||||
| be assigned to the "web" middleware group. Make something great!
|
||||
|
|
||||
*/
|
||||
|
||||
#Гаврилов
|
||||
//РЕДИРЕКТ НА СТРАНИЦУ ЛОГИН
|
||||
Route::get('/', function () {
|
||||
return view('welcome');
|
||||
});
|
||||
//Роут вызова вьюхи аутентификации (без посредника аутентификации)
|
||||
Route::get('/login', function () {
|
||||
return view('magic_login');
|
||||
})->withoutMiddleware([AuthenticateMagic::class])->name('magic_login');
|
||||
Route::get('/logout', ([Controllers\LoginController::class, 'logout']))->name('magic_logout');
|
||||
//Роут вызова процессе аутентификации (без посредника аутентификации)
|
||||
Route::post('login', [Controllers\LoginController::class, 'ldapCheckUser'])->withoutMiddleware([AuthenticateMagic::class]);
|
||||
|
||||
//ГАВРИЛОВ. добавить without middleware AuthMagicApi?
|
||||
//Фоновое обновление санктум токена, если api вернул 401 (санктум протух), а сессия еще "жива"
|
||||
Route::get('/silent_token_refresh', [Controllers\LoginController::class, 'silentRefreshUserSanctumToken'])->withoutMiddleware([AuthenticateMagic::class]);
|
||||
|
||||
// Route::get('/role', [\App\Http\Controllers\TestController::class, 'getRoles'])->name('get_role');
|
||||
//Route::get('/access', [\App\Http\Controllers\TestController::class, 'getAccess']);
|
||||
|
||||
// Route::controller(Controllers\TestController::class)->group(function ()
|
||||
// {
|
||||
// Route::get('/access/{id}', 'getAccess')->where(['id' => '[0-9]+'])->name('getAccessById');
|
||||
// //Route::get('/access/{id}', 'getAccess')->where(['id' => '[0-9]+']);
|
||||
// });
|
||||
|
||||
// Route::get('/testData/{int}/{char}', [Controllers\TestDataController::class, 'insertNewData'])->where(['int' => '[0-9]+', 'char' => '[a-z]+']);
|
||||
|
||||
// Route::get('/testParam/{id}', [\App\Http\Controllers\TestController::class, 'getParam'])->where(['id' => '[0-9]+']);
|
||||
// Route::get('/redirect', [Controllers\TestController::class, 'redirect']);
|
||||
// Route::post('/role', [\App\Http\Controllers\TestController::class, 'setRole']);
|
||||
// Route::post('/role_del', [\App\Http\Controllers\TestController::class, 'delRole']);
|
||||
|
||||
// Route::get('/test_table', [Controllers\TestFormController::class, 'getForm']);
|
||||
// Route::post('/test_table', [Controllers\TestFormController::class, 'setForm'])->name('test_set_form');
|
||||
|
||||
// Route::get('/access/{id?}', [Controllers\AccessListController::class, 'getAccess'])->where(['id' => '[0-9]+']);
|
||||
// Route::delete('/access/{id}', [Controllers\AccessListController::class, 'delAccess'])->where(['id' => '[0-9]+'])->name('del_lk_tm_access');
|
||||
// Route::post('/access', [Controllers\AccessListController::class, 'postAccess']);
|
||||
@@ -0,0 +1,4 @@
|
||||
*
|
||||
!private/
|
||||
!public/
|
||||
!.gitignore
|
||||
@@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
||||
@@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
||||
@@ -0,0 +1,9 @@
|
||||
compiled.php
|
||||
config.php
|
||||
down
|
||||
events.scanned.php
|
||||
maintenance.php
|
||||
routes.php
|
||||
routes.scanned.php
|
||||
schedule-*
|
||||
services.json
|
||||
@@ -0,0 +1,3 @@
|
||||
*
|
||||
!data/
|
||||
!.gitignore
|
||||
@@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
||||
@@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
||||
@@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
||||
@@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
||||
@@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
||||
@@ -1,15 +0,0 @@
|
||||
-- custom.taxi_main definition
|
||||
|
||||
CREATE TABLE `taxi_main` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`emp_login` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'логин сотрудника кто поедет',
|
||||
`emp_phone` varchar(15) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'телефон сотрудника',
|
||||
`taxi_date` date NOT NULL COMMENT 'дата заказа такси',
|
||||
`taxi_time` varchar(6) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`taxi_address_from` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`taxi_address_to` varchar(500) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`cancel_rqst` tinyint(1) NOT NULL DEFAULT 0,
|
||||
`created_at` timestamp NULL DEFAULT NULL,
|
||||
`updated_at` timestamp NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=225 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Заказ такси - таблица заказов';
|
||||
@@ -1,28 +0,0 @@
|
||||
INSERT INTO custom.taxi_main (emp_login,emp_phone,taxi_date,taxi_time,taxi_address_from,taxi_address_to,cancel_rqst,created_at,updated_at) VALUES
|
||||
('ymezentseva2','89374370448','2025-07-31','05:20','','15:15',0,'2025-05-15 10:11:49','2025-07-31 18:46:29'),
|
||||
('nbabkina2','9513144152','2025-08-02','06:00','','г. Курск, пр-т А. Дериглазова, д. 93, кв 185',0,'2025-08-02 17:46:45','2025-08-02 17:46:45'),
|
||||
('abarysheva','9202677745','2025-08-02','06:00','','Курская область, Курский район, с. Отрешково, дом 69',0,'2025-08-02 17:47:11','2025-08-02 17:47:11'),
|
||||
('ybukreeva','9207032112','2025-08-02','06:00','','Курская обл., г. Курск, Сумская, д. 46, подъезд 3, кв. 50',1,'2025-08-02 17:50:29','2025-08-02 18:20:36'),
|
||||
('tvavilova','89624737723','2025-08-02','06:00','','Ул. Кулибина д. 11 п. 2',0,'2025-08-02 17:55:28','2025-08-02 17:55:28'),
|
||||
('svenyukova','89807986606','2025-08-02','06:00','','пос. Юбилейный, ул. Российская, д. 21',0,'2025-08-02 17:56:58','2025-08-02 17:56:58'),
|
||||
('tvlasova','9508720817','2025-08-02','06:00','','Курская область , г Курск , ул Маяковского д 109 кв 4',1,'2025-08-02 17:57:49','2025-08-02 18:21:42'),
|
||||
('lalferova','9308549909','2025-08-02','06:00','','г. Курск, ул. Менделеева, д. 24 подъезд 5, кв 164',1,'2025-08-02 18:02:14','2025-08-02 18:24:30'),
|
||||
('nrzhevskaya','9611973699','2025-08-02','06:00','','г. Курск, пр-т Клыкова 52, 3 подъезд',0,'2025-08-02 18:19:56','2025-08-02 18:19:56'),
|
||||
('tgrudkina','9374230056','2025-08-10','06:00','','Ладожская, 53,подъезд 2',1,'2025-08-03 16:04:15','2025-08-10 18:42:33');
|
||||
INSERT INTO custom.taxi_main (emp_login,emp_phone,taxi_date,taxi_time,taxi_address_from,taxi_address_to,cancel_rqst,created_at,updated_at) VALUES
|
||||
('ekuzmina3','9102113632','2025-08-11','05:20','','г. Курск, ул. 2-я Рабочая, д. 5, под.1',1,'2025-08-11 09:21:45','2025-08-11 16:08:32'),
|
||||
('tzakharova','9045238277','2025-08-11','06:00','','г. Курск, ул. Ватутина д.23, кв. 32',1,'2025-08-11 09:25:50','2025-08-11 17:03:30'),
|
||||
('opopugaeva','9191705200','2025-08-17','06:00','','еуые',1,'2025-08-11 09:36:16','2025-08-17 15:48:44'),
|
||||
('elasturina','9246548758','2025-08-11','06:00','','ул. Ладожская д 151 , 1 подъезд',1,'2025-08-11 09:37:39','2025-08-11 09:43:52'),
|
||||
('tgrudkina','9374230052','2025-08-18','05:20','','Ладожская, 53,подъезд 2',0,'2025-08-17 16:04:33','2025-08-17 17:06:15'),
|
||||
('lshchetinina','89875140821','2025-08-19','05:20','','testodsq адрес',0,'2025-08-17 16:05:07','2025-08-17 16:05:07'),
|
||||
('nsubbotina2','9513112628','2025-08-17','05:10','','test',0,'2025-08-17 17:35:38','2025-08-17 17:35:38'),
|
||||
('ogalushka','9611968331','2025-08-21','01:15','','Курская область, Курский район, деревня Верхняя Медведица ул. Советская, дом 151',0,'2025-08-26 11:04:46','2025-08-26 11:05:30'),
|
||||
('lalferova','9308549910','2025-08-26','23:15','','г. Курск, ул. Менделеева, д. 23 подъезд 5, кв 164',0,'2025-08-26 12:55:53','2025-08-26 12:55:53'),
|
||||
('lalferova','9308549909','2026-01-06','05:10','адрес Курска','г. Курск, ул. Менделеева, д. 24 подъезд 5, кв 164',0,'2025-11-13 11:59:40','2025-11-13 11:59:40');
|
||||
INSERT INTO custom.taxi_main (emp_login,emp_phone,taxi_date,taxi_time,taxi_address_from,taxi_address_to,cancel_rqst,created_at,updated_at) VALUES
|
||||
('lalferova','9308549909','2026-01-09','05:10','адрес Курска','г. Курск, ул. Менделеева, д. 24 подъезд 5, кв 164',0,'2026-01-08 19:35:23','2026-01-08 19:35:23'),
|
||||
('abarysheva','9202677745','2026-01-10','06:00','Курская область, Курский район, с. Отрешково, дом 69','адрес Курска',0,'2026-01-09 19:40:23','2026-01-09 19:40:23'),
|
||||
('lalferova','9308549909','2026-01-10','05:10','адрес Курска','г. Курск, ул. Менделеева, д. 24 подъезд 5, кв 164',0,'2026-01-09 21:08:41','2026-01-09 21:08:41'),
|
||||
('lalferova','9308549909','2026-01-24','05:10','адрес Курска','г. Курск, ул. Менделеева, д. 24 подъезд 5, кв 164',0,'2026-01-11 15:10:45','2026-01-11 15:10:45'),
|
||||
('nrzhevskaya','9611973699','2026-01-24','05:10','г. Курск, пр-т Клыкова 52, 3 подъезд','адрес Курска',0,'2026-01-16 11:51:51','2026-01-16 11:51:51');
|
||||
@@ -1,11 +0,0 @@
|
||||
-- custom.taxi_time_periods definition
|
||||
|
||||
CREATE TABLE `taxi_time_periods` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`time_period` varchar(5) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Временнoй промежуток',
|
||||
`is_morning_time` tinyint(1) DEFAULT NULL,
|
||||
`archive` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Актуальность',
|
||||
`created_at` timestamp NULL DEFAULT NULL,
|
||||
`updated_at` timestamp NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Временные промежутки для заказа такси';
|
||||
@@ -1,10 +0,0 @@
|
||||
INSERT INTO custom.taxi_time_periods (time_period,is_morning_time,archive,created_at,updated_at) VALUES
|
||||
('06:00',1,0,NULL,NULL),
|
||||
('05:20',1,0,NULL,NULL),
|
||||
('05:10',1,0,NULL,NULL),
|
||||
('05:00',1,0,NULL,NULL),
|
||||
('04:20',1,0,NULL,NULL),
|
||||
('01:15',0,0,NULL,NULL),
|
||||
('00:15',0,0,NULL,NULL),
|
||||
('23:15',0,0,NULL,NULL),
|
||||
('23:05',0,0,NULL,NULL);
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature;
|
||||
|
||||
// use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Tests\TestCase;
|
||||
|
||||
class ExampleTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* A basic test example.
|
||||
*/
|
||||
public function test_the_application_returns_a_successful_response(): void
|
||||
{
|
||||
$response = $this->get('/');
|
||||
|
||||
$response->assertStatus(200);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace Tests;
|
||||
|
||||
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
|
||||
|
||||
abstract class TestCase extends BaseTestCase
|
||||
{
|
||||
//
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Unit;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class ExampleTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* A basic test example.
|
||||
*/
|
||||
public function test_that_true_is_true(): void
|
||||
{
|
||||
$this->assertTrue(true);
|
||||
}
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
-- custom.user_fav_app definition
|
||||
|
||||
CREATE TABLE `user_fav_app` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`created_at` timestamp NULL DEFAULT NULL,
|
||||
`updated_at` timestamp NULL DEFAULT NULL,
|
||||
`user_login` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
`fav_apps` text COLLATE utf8mb4_unicode_ci NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Избранные приложения пользователя из меню Magic';
|
||||
@@ -1,2 +0,0 @@
|
||||
INSERT INTO custom.user_fav_app (created_at,updated_at,user_login,fav_apps) VALUES
|
||||
('2025-03-28 18:16:10','2025-11-14 10:35:04','dgavrilov','reestr_send_app;dadata;amlpor;accext;prlog;anketa;pilotIVI;limcut;nsr;minjust;mcocardreporting;taxi');
|
||||
@@ -0,0 +1,18 @@
|
||||
import { defineConfig } from 'vite';
|
||||
import laravel from 'laravel-vite-plugin';
|
||||
import tailwindcss from '@tailwindcss/vite';
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [
|
||||
laravel({
|
||||
input: ['resources/css/app.css', 'resources/js/app.js'],
|
||||
refresh: true,
|
||||
}),
|
||||
tailwindcss(),
|
||||
],
|
||||
server: {
|
||||
watch: {
|
||||
ignored: ['**/storage/framework/views/**'],
|
||||
},
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user