From 299ab41b7d6614abbbdba77c0917709694585c54 Mon Sep 17 00:00:00 2001 From: Ilya Rogozhin Date: Tue, 9 Jun 2026 16:21:25 +0200 Subject: [PATCH] Tables migration, seeders, db dump, README.md --- clubs_and_players_dump.sql | 98 ++++++++++++ main-repo/README.md | 31 +++- main-repo/app/Models/Club.php | 13 ++ main-repo/app/Models/Player.php | 13 ++ main-repo/database/factories/ClubFactory.php | 78 +++++++++ .../database/factories/PlayerFactory.php | 151 ++++++++++++++++++ .../2026_06_09_130217_club_table.php | 32 ++++ .../2026_06_09_130223_player_table.php | 39 +++++ main-repo/database/seeders/ClubSeeder.php | 20 +++ main-repo/database/seeders/PlayerSeeder.php | 20 +++ 10 files changed, 494 insertions(+), 1 deletion(-) create mode 100644 clubs_and_players_dump.sql create mode 100644 main-repo/app/Models/Club.php create mode 100644 main-repo/app/Models/Player.php create mode 100644 main-repo/database/factories/ClubFactory.php create mode 100644 main-repo/database/factories/PlayerFactory.php create mode 100644 main-repo/database/migrations/2026_06_09_130217_club_table.php create mode 100644 main-repo/database/migrations/2026_06_09_130223_player_table.php create mode 100644 main-repo/database/seeders/ClubSeeder.php create mode 100644 main-repo/database/seeders/PlayerSeeder.php diff --git a/clubs_and_players_dump.sql b/clubs_and_players_dump.sql new file mode 100644 index 0000000..85203fb --- /dev/null +++ b/clubs_and_players_dump.sql @@ -0,0 +1,98 @@ +-- MySQL dump 10.13 Distrib 9.7.0, for Linux (x86_64) +-- +-- Host: localhost Database: test_fhr +-- ------------------------------------------------------ +-- Server version 9.7.0 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!50503 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; +SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN; +SET @@SESSION.SQL_LOG_BIN= 0; + +-- +-- GTID state at the beginning of the backup +-- + +SET @@GLOBAL.GTID_PURGED=/*!80000 '+'*/ '508e7ea7-63f5-11f1-9d13-5242ca7f4bf5:1-285'; + +-- +-- Table structure for table `clubs` +-- + +DROP TABLE IF EXISTS `clubs`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `clubs` ( + `id` bigint unsigned NOT NULL AUTO_INCREMENT, + `name_ru` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `name_en` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `city_ru` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `city_en` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `clubs` +-- + +LOCK TABLES `clubs` WRITE; +/*!40000 ALTER TABLE `clubs` DISABLE KEYS */; +INSERT INTO `clubs` VALUES (1,'Металлург','Metallurg','Магнитогорск','Magnitogorsk','2026-06-09 14:08:31','2026-06-09 14:08:31'),(2,'Северсталь','Severstal','Сочи','Sochi','2026-06-09 14:08:31','2026-06-09 14:08:31'),(3,'Сибирь','Sibir','Санкт-Петербург','St. Petersburg','2026-06-09 14:08:31','2026-06-09 14:08:31'),(4,'Спартак','Spartak','Тольятти','Tolyatti','2026-06-09 14:08:31','2026-06-09 14:08:31'),(5,'Сочи','Sochi','Астана','Astana','2026-06-09 14:08:31','2026-06-09 14:08:31'),(6,'Салават Юлаев','Salavat Yulaev','Уфа','Ufa','2026-06-09 14:08:31','2026-06-09 14:08:31'),(7,'Металлург','Metallurg','Новосибирск','Novosibirsk','2026-06-09 14:08:31','2026-06-09 14:08:31'),(8,'Салават Юлаев','Salavat Yulaev','Хабаровск','Khabarovsk','2026-06-09 14:08:31','2026-06-09 14:08:31'),(9,'Металлург','Metallurg','Тольятти','Tolyatti','2026-06-09 14:08:31','2026-06-09 14:08:31'),(10,'СКА','SKA','Владивосток','Vladivostok','2026-06-09 14:08:31','2026-06-09 14:08:31'),(11,'Динамо','Dynamo','Владивосток','Vladivostok','2026-06-09 14:08:31','2026-06-09 14:08:31'),(12,'Ак Барс','Ak Bars','Санкт-Петербург','St. Petersburg','2026-06-09 14:08:31','2026-06-09 14:08:31'); +/*!40000 ALTER TABLE `clubs` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `players` +-- + +DROP TABLE IF EXISTS `players`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!50503 SET character_set_client = utf8mb4 */; +CREATE TABLE `players` ( + `id` bigint unsigned NOT NULL AUTO_INCREMENT, + `full_name_ru` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `full_name_en` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `weight` int unsigned NOT NULL, + `height` int unsigned NOT NULL, + `squad_number` tinyint NOT NULL, + `club_id` bigint unsigned NOT NULL, + `created_at` timestamp NULL DEFAULT NULL, + `updated_at` timestamp NULL DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `players_club_id_squad_number_unique` (`club_id`,`squad_number`), + CONSTRAINT `players_club_id_foreign` FOREIGN KEY (`club_id`) REFERENCES `clubs` (`id`) ON DELETE RESTRICT ON UPDATE CASCADE +) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `players` +-- + +LOCK TABLES `players` WRITE; +/*!40000 ALTER TABLE `players` DISABLE KEYS */; +INSERT INTO `players` VALUES (1,'Данис Зарипов','Danis Zaripov',72,172,45,9,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(2,'Илья Брызгалов','Ilya Bryzgalov',73,168,89,3,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(3,'Александр Семин','Alexander Semin',102,163,43,3,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(4,'Василий Подколзин','Vasily Podkolzin',96,173,94,11,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(5,'Егор Чинахов','Yegor Chinakhov',85,187,13,2,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(6,'Александр Георгиев','Alexandar Georgiev',97,172,97,8,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(7,'Александр Еременко','Alexander Yeryomenko',70,189,35,12,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(8,'Павел Бучневич','Pavel Buchnevich',96,190,61,10,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(9,'Антон Худобин','Anton Khudobin',85,199,5,4,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(10,'Александр Еременко','Alexander Yeryomenko',82,173,91,12,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(11,'Даниил Мироманов','Daniil Miromanov',100,177,22,3,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(12,'Александр Степанов','Alexander Stepanov',89,208,83,2,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(13,'Евгений Малкин','Evgeni Malkin',86,179,12,10,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(14,'Николай Хабибулин','Nikolai Khabibulin',94,203,71,10,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(15,'Александр Могильный','Alexander Mogilny',101,166,91,5,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(16,'Михаил Сергачев','Mikhail Sergachev',86,183,37,1,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(17,'Илья Ковальчук','Ilya Kovalchuk',68,171,10,2,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(18,'Николай Кулемин','Nikolay Kulemin',78,205,58,2,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(19,'Максим Сушинский','Maxim Sushinsky',70,164,66,10,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(20,'Евгений Кузнецов','Evgeny Kuznetsov',79,196,94,12,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(21,'Иван Проворов','Ivan Provorov',101,209,93,1,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(22,'Даниил Тарасов','Daniil Tarasov',96,181,78,12,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(23,'Сергей Светлов','Sergei Svetlov',85,163,69,6,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(24,'Илья Никулин','Ilya Nikulin',67,172,51,9,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(25,'Павел Бучневич','Pavel Buchnevich',90,170,68,3,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(26,'Семен Варламов','Semyon Varlamov',70,173,78,5,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(27,'Александр Гусев','Alexander Gusev',82,177,93,12,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(28,'Андрей Свечников','Andrei Svechnikov',67,194,5,7,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(29,'Валерий Васильев','Valeri Vasiliev',81,175,48,9,'2026-06-09 14:08:35','2026-06-09 14:08:35'),(30,'Александр Овечкин','Alexander Ovechkin',91,198,2,4,'2026-06-09 14:08:35','2026-06-09 14:08:35'); +/*!40000 ALTER TABLE `players` ENABLE KEYS */; +UNLOCK TABLES; +SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2026-06-09 14:09:19 diff --git a/main-repo/README.md b/main-repo/README.md index e9a05e1..42b65de 100644 --- a/main-repo/README.md +++ b/main-repo/README.md @@ -17,6 +17,10 @@ For Linux env: ```bash +mkdir ilya_test +cd ilya_test +git clone https://gitea.wired-mind.ru/ijin82/test-FHR.git . +cp main-repo/.env.example main-repo/.env docker compose up ``` @@ -45,4 +49,29 @@ php artisan app:test-fhr-sort которые потенциально имели опыт с решением подобных задач. Конечно это решение я в голове не носил, а достал его из гугла. -**Время: 25 минут.** \ No newline at end of file +**Время: 25 минут.** + +### Игроки и клубы, миграции, сидирование, выгрузка + +```bash +fhr-php + +php artisan migrate # Структура БД + +# Клубы +php artisan db:seed --class=ClubSeeder +# Игроки +php artisan db:seed --class=PlayerSeeder +``` + +Выгрузка данных по игрокам и клубам вместе со структурой + +```bash +cd /var/lib/mysql-files +mysqldump -u root -psecret test_fhr clubs players > clubs_and_players_dump.sql +``` + +После такой выгрузки, дамп появится в папке MySQL-files +Тестовый дамп лежит в корне проекта **clubs_and_players_dump.sql** + +**Время: 1 час 25 минут.** \ No newline at end of file diff --git a/main-repo/app/Models/Club.php b/main-repo/app/Models/Club.php new file mode 100644 index 0000000..ff98ec1 --- /dev/null +++ b/main-repo/app/Models/Club.php @@ -0,0 +1,13 @@ + + */ +class ClubFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + $clubs = [ + ['ru' => 'Ак Барс', 'en' => 'Ak Bars'], + ['ru' => 'Авангард', 'en' => 'Avangard'], + ['ru' => 'Салават Юлаев', 'en' => 'Salavat Yulaev'], + ['ru' => 'СКА', 'en' => 'SKA'], + ['ru' => 'ЦСКА', 'en' => 'CSKA'], + ['ru' => 'Металлург', 'en' => 'Metallurg'], + ['ru' => 'Динамо', 'en' => 'Dynamo'], + ['ru' => 'Локомотив', 'en' => 'Lokomotiv'], + ['ru' => 'Трактор', 'en' => 'Traktor'], + ['ru' => 'Автомобилист', 'en' => 'Avtomobilist'], + ['ru' => 'Торпедо', 'en' => 'Torpedo'], + ['ru' => 'Спартак', 'en' => 'Spartak'], + ['ru' => 'Северсталь', 'en' => 'Severstal'], + ['ru' => 'Амур', 'en' => 'Amur'], + ['ru' => 'Адмирал', 'en' => 'Admiral'], + ['ru' => 'Сибирь', 'en' => 'Sibir'], + ['ru' => 'Барыс', 'en' => 'Barys'], + ['ru' => 'Нефтехимик', 'en' => 'Neftekhimik'], + ['ru' => 'Куньлунь Ред Стар', 'en' => 'Kunlun Red Star'], + ['ru' => 'Витязь', 'en' => 'Vityaz'], + ['ru' => 'Сочи', 'en' => 'Sochi'], + ['ru' => 'Лада', 'en' => 'Lada'], + ]; + + $cities = [ + ['ru' => 'Москва', 'en' => 'Moscow'], + ['ru' => 'Санкт-Петербург', 'en' => 'St. Petersburg'], + ['ru' => 'Казань', 'en' => 'Kazan'], + ['ru' => 'Омск', 'en' => 'Omsk'], + ['ru' => 'Уфа', 'en' => 'Ufa'], + ['ru' => 'Магнитогорск', 'en' => 'Magnitogorsk'], + ['ru' => 'Ярославль', 'en' => 'Yaroslavl'], + ['ru' => 'Челябинск', 'en' => 'Chelyabinsk'], + ['ru' => 'Екатеринбург', 'en' => 'Yekaterinburg'], + ['ru' => 'Нижний Новгород', 'en' => 'Nizhny Novgorod'], + ['ru' => 'Череповец', 'en' => 'Cherepovets'], + ['ru' => 'Хабаровск', 'en' => 'Khabarovsk'], + ['ru' => 'Владивосток', 'en' => 'Vladivostok'], + ['ru' => 'Новосибирск', 'en' => 'Novosibirsk'], + ['ru' => 'Астана', 'en' => 'Astana'], + ['ru' => 'Нижнекамск', 'en' => 'Nizhnekamsk'], + ['ru' => 'Пекин', 'en' => 'Beijing'], + ['ru' => 'Подольск', 'en' => 'Podolsk'], + ['ru' => 'Сочи', 'en' => 'Sochi'], + ['ru' => 'Тольятти', 'en' => 'Tolyatti'], + ]; + + $club = $clubs[array_rand($clubs)]; + $city = $cities[array_rand($cities)]; + + return [ + 'name_ru' => $club['ru'], + 'name_en' => $club['en'], + 'city_ru' => $city['ru'], + 'city_en' => $city['en'], + ]; + } +} diff --git a/main-repo/database/factories/PlayerFactory.php b/main-repo/database/factories/PlayerFactory.php new file mode 100644 index 0000000..d75abda --- /dev/null +++ b/main-repo/database/factories/PlayerFactory.php @@ -0,0 +1,151 @@ + + */ +class PlayerFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + $names = [ + ['ru' => 'Александр Овечкин', 'en' => 'Alexander Ovechkin'], + ['ru' => 'Евгений Малкин', 'en' => 'Evgeni Malkin'], + ['ru' => 'Никита Кучеров', 'en' => 'Nikita Kucherov'], + ['ru' => 'Артемий Панарин', 'en' => 'Artemi Panarin'], + ['ru' => 'Андрей Василевский', 'en' => 'Andrei Vasilevskiy'], + ['ru' => 'Илья Ковальчук', 'en' => 'Ilya Kovalchuk'], + ['ru' => 'Павел Дацюк', 'en' => 'Pavel Datsyuk'], + ['ru' => 'Владимир Тарасенко', 'en' => 'Vladimir Tarasenko'], + ['ru' => 'Сергей Бобровский', 'en' => 'Sergei Bobrovsky'], + ['ru' => 'Кирилл Капризов', 'en' => 'Kirill Kaprizov'], + ['ru' => 'Игорь Шестеркин', 'en' => 'Igor Shesterkin'], + ['ru' => 'Илья Сорокин', 'en' => 'Ilya Sorokin'], + ['ru' => 'Александр Радулов', 'en' => 'Alexander Radulov'], + ['ru' => 'Евгений Кузнецов', 'en' => 'Evgeny Kuznetsov'], + ['ru' => 'Дмитрий Орлов', 'en' => 'Dmitry Orlov'], + ['ru' => 'Михаил Сергачев', 'en' => 'Mikhail Sergachev'], + ['ru' => 'Иван Проворов', 'en' => 'Ivan Provorov'], + ['ru' => 'Илья Самсонов', 'en' => 'Ilya Samsonov'], + ['ru' => 'Александр Романов', 'en' => 'Alexander Romanov'], + ['ru' => 'Андрей Свечников', 'en' => 'Andrei Svechnikov'], + ['ru' => 'Евгений Дадонов', 'en' => 'Evgenii Dadonov'], + ['ru' => 'Вадим Шипачев', 'en' => 'Vadim Shipachyov'], + ['ru' => 'Никита Гусев', 'en' => 'Nikita Gusev'], + ['ru' => 'Вячеслав Войнов', 'en' => 'Vyacheslav Voynov'], + ['ru' => 'Антон Худобин', 'en' => 'Anton Khudobin'], + ['ru' => 'Семен Варламов', 'en' => 'Semyon Varlamov'], + ['ru' => 'Валерий Ничушкин', 'en' => 'Valeri Nichushkin'], + ['ru' => 'Павел Бучневич', 'en' => 'Pavel Buchnevich'], + ['ru' => 'Владислав Гавриков', 'en' => 'Vladislav Gavrikov'], + ['ru' => 'Илья Михеев', 'en' => 'Ilya Mikheyev'], + ['ru' => 'Денис Гурьянов', 'en' => 'Denis Gurianov'], + ['ru' => 'Александр Барабанов', 'en' => 'Alexander Barabanov'], + ['ru' => 'Клим Костин', 'en' => 'Klim Kostin'], + ['ru' => 'Яков Тренин', 'en' => 'Yakov Trenin'], + ['ru' => 'Иван Барбашев', 'en' => 'Ivan Barbashev'], + ['ru' => 'Артем Зуб', 'en' => 'Artem Zub'], + ['ru' => 'Илья Любушкин', 'en' => 'Ilya Lyubushkin'], + ['ru' => 'Александр Георгиев', 'en' => 'Alexandar Georgiev'], + ['ru' => 'Петр Кочетков', 'en' => 'Pyotr Kochetkov'], + ['ru' => 'Даниил Тарасов', 'en' => 'Daniil Tarasov'], + ['ru' => 'Василий Подколзин', 'en' => 'Vasily Podkolzin'], + ['ru' => 'Григорий Денисенко', 'en' => 'Grigori Denisenko'], + ['ru' => 'Виталий Кравцов', 'en' => 'Vitali Kravtsov'], + ['ru' => 'Егор Чинахов', 'en' => 'Yegor Chinakhov'], + ['ru' => 'Марат Хуснутдинов', 'en' => 'Marat Khusnutdinov'], + ['ru' => 'Шакир Мухамадуллин', 'en' => 'Shakir Mukhamadullin'], + ['ru' => 'Александр Алексеев', 'en' => 'Alexander Alexeyev'], + ['ru' => 'Даниил Мироманов', 'en' => 'Daniil Miromanov'], + ['ru' => 'Дмитрий Воронков', 'en' => 'Dmitri Voronkov'], + ['ru' => 'Павел Дорофеев', 'en' => 'Pavel Dorofeyev'], + ['ru' => 'Николай Кулемин', 'en' => 'Nikolay Kulemin'], + ['ru' => 'Александр Семин', 'en' => 'Alexander Semin'], + ['ru' => 'Сергей Федоров', 'en' => 'Sergei Fedorov'], + ['ru' => 'Игорь Ларионов', 'en' => 'Igor Larionov'], + ['ru' => 'Вячеслав Фетисов', 'en' => 'Viacheslav Fetisov'], + ['ru' => 'Павел Буре', 'en' => 'Pavel Bure'], + ['ru' => 'Алексей Морозов', 'en' => 'Aleksey Morozov'], + ['ru' => 'Данис Зарипов', 'en' => 'Danis Zaripov'], + ['ru' => 'Максим Сушинский', 'en' => 'Maxim Sushinsky'], + ['ru' => 'Александр Степанов', 'en' => 'Alexander Stepanov'], + ['ru' => 'Илья Никулин', 'en' => 'Ilya Nikulin'], + ['ru' => 'Алексей Терещенко', 'en' => 'Aleksey Tereshchenko'], + ['ru' => 'Сергей Мозякин', 'en' => 'Sergei Mozyakin'], + ['ru' => 'Александр Еременко', 'en' => 'Alexander Yeryomenko'], + ['ru' => 'Василий Кошечкин', 'en' => 'Vasily Koshechkin'], + ['ru' => 'Илья Брызгалов', 'en' => 'Ilya Bryzgalov'], + ['ru' => 'Евгений Набоков', 'en' => 'Evgeni Nabokov'], + ['ru' => 'Николай Хабибулин', 'en' => 'Nikolai Khabibulin'], + ['ru' => 'Алексей Яшин', 'en' => 'Alexei Yashin'], + ['ru' => 'Валерий Каменский', 'en' => 'Valeri Kamensky'], + ['ru' => 'Алексей Жамнов', 'en' => 'Alexei Zhamnov'], + ['ru' => 'Александр Могильный', 'en' => 'Alexander Mogilny'], + ['ru' => 'Сергей Макаров', 'en' => 'Sergei Makarov'], + ['ru' => 'Владимир Крутов', 'en' => 'Vladimir Krutov'], + ['ru' => 'Вячеслав Быков', 'en' => 'Vyacheslav Bykov'], + ['ru' => 'Андрей Хомутов', 'en' => 'Andrei Khomutov'], + ['ru' => 'Александр Якушев', 'en' => 'Alexander Yakushev'], + ['ru' => 'Борис Михайлов', 'en' => 'Boris Mikhailov'], + ['ru' => 'Валерий Харламов', 'en' => 'Valeri Kharlamov'], + ['ru' => 'Владислав Третьяк', 'en' => 'Vladislav Tretiak'], + ['ru' => 'Виктор Тихонов', 'en' => 'Viktor Tikhonov'], + ['ru' => 'Всеволод Бобров', 'en' => 'Vsevolod Bobrov'], + ['ru' => 'Анатолий Фирсов', 'en' => 'Anatoli Firsov'], + ['ru' => 'Владимир Петров', 'en' => 'Vladimir Petrov'], + ['ru' => 'Сергей Капустин', 'en' => 'Sergei Kapustin'], + ['ru' => 'Виктор Жлуктов', 'en' => 'Viktor Zhluktov'], + ['ru' => 'Александр Мальцев', 'en' => 'Alexander Maltsev'], + ['ru' => 'Владимир Мышкин', 'en' => 'Vladimir Myshkin'], + ['ru' => 'Виктор Коноваленко', 'en' => 'Viktor Konovalenko'], + ['ru' => 'Евгений Паладьев', 'en' => 'Yevgeni Paladiev'], + ['ru' => 'Юрий Ляпкин', 'en' => 'Yuri Lyapkin'], + ['ru' => 'Владимир Шадрин', 'en' => 'Vladimir Shadrin'], + ['ru' => 'Александр Гусев', 'en' => 'Alexander Gusev'], + ['ru' => 'Валерий Васильев', 'en' => 'Valeri Vasiliev'], + ['ru' => 'Геннадий Цыганков', 'en' => 'Gennady Tsygankov'], + ['ru' => 'Александр Скворцов', 'en' => 'Alexander Skvortsov'], + ['ru' => 'Виктор Тюменев', 'en' => 'Viktor Tyumenev'], + ['ru' => 'Сергей Светлов', 'en' => 'Sergei Svetlov'], + ['ru' => 'Анатолий Семенов', 'en' => 'Anatoly Semenov'], + ['ru' => 'Андрей Ломакин', 'en' => 'Andrei Lomakin'], + ]; + + $name = $names[array_rand($names)]; + $club = Club::inRandomOrder()->first(); + + if (!$club) { + throw new Exception('No clubs found in the database. Please seed the clubs table first.'); + } + + $usedNumbers = Player::where('club_id', $club->id)->pluck('squad_number')->toArray(); + + $availableNumbers = array_diff(range(1, 99), $usedNumbers); + + if (empty($availableNumbers)) { + throw new Exception("No available squad numbers for club ID: {$club->id}."); + } + + $squadNumber = $availableNumbers[array_rand($availableNumbers)]; + + return [ + 'full_name_ru' => $name['ru'], + 'full_name_en' => $name['en'], + 'weight' => rand(65, 105), + 'height' => rand(160, 210), + 'squad_number' => $squadNumber, + 'club_id' => $club->id, + ]; + } +} diff --git a/main-repo/database/migrations/2026_06_09_130217_club_table.php b/main-repo/database/migrations/2026_06_09_130217_club_table.php new file mode 100644 index 0000000..cccfce0 --- /dev/null +++ b/main-repo/database/migrations/2026_06_09_130217_club_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('name_ru'); + $table->string('name_en'); + $table->string('city_ru'); + $table->string('city_en'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('clubs'); + } +}; diff --git a/main-repo/database/migrations/2026_06_09_130223_player_table.php b/main-repo/database/migrations/2026_06_09_130223_player_table.php new file mode 100644 index 0000000..bfe7668 --- /dev/null +++ b/main-repo/database/migrations/2026_06_09_130223_player_table.php @@ -0,0 +1,39 @@ +id(); + $table->string('full_name_ru'); + $table->string('full_name_en'); + $table->unsignedInteger('weight'); + $table->unsignedInteger('height'); + $table->tinyInteger('squad_number'); + $table->foreignIdFor(\App\Models\Club::class) + ->constrained() + ->onUpdate('cascade') + ->onDelete('restrict'); + + $table->unique(['club_id', 'squad_number']); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('players'); + } +}; diff --git a/main-repo/database/seeders/ClubSeeder.php b/main-repo/database/seeders/ClubSeeder.php new file mode 100644 index 0000000..48b627a --- /dev/null +++ b/main-repo/database/seeders/ClubSeeder.php @@ -0,0 +1,20 @@ +count(12) + ->create(); + } +} diff --git a/main-repo/database/seeders/PlayerSeeder.php b/main-repo/database/seeders/PlayerSeeder.php new file mode 100644 index 0000000..e0bb6a4 --- /dev/null +++ b/main-repo/database/seeders/PlayerSeeder.php @@ -0,0 +1,20 @@ +count(30) + ->create(); + } +}