migrations/Version20260107201000.php line 1

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations;
  4. use App\Entity\Gamification\Mission;
  5. use App\Service\Gamification\MissionIdentifier;
  6. use Doctrine\DBAL\Schema\Schema;
  7. use Doctrine\Migrations\AbstractMigration;
  8. final class Version20260107201000 extends AbstractMigration
  9. {
  10.     public function getDescription(): string
  11.     {
  12.         return 'Insert daily missions for Backoffice, Sales & Placements, and XP & Rankings';
  13.     }
  14.     public function up(Schema $schema): void
  15.     {
  16.         // BACKOFFICE AND NAVIGATION (IDs 46-70)
  17.         $missionsBackofficeAndNavigation = [
  18.             [46MissionIdentifier::TYPE_DAILY_LOGIN_BACKOFFICE'daily_login_backoffice''daily'1],
  19.             [47MissionIdentifier::TYPE_DAILY_LOGIN_MOBILE'daily_login_mobile''daily'1],
  20.             [48MissionIdentifier::TYPE_DAILY_LOGIN_BEFORE_10AM'daily_login_before_10am''daily'1],
  21.             [49MissionIdentifier::TYPE_DAILY_LOGIN_AFTER_6PM'daily_login_after_6pm''daily'1],
  22.             [50MissionIdentifier::TYPE_DAILY_LOGIN_TWICE'daily_login_twice''daily'1],
  23.             [51MissionIdentifier::TYPE_DAILY_VIEW_DASHBOARD'daily_view_dashboard''daily'1],
  24.             [52MissionIdentifier::TYPE_DAILY_VIEW_PROFILE'daily_view_profile''daily'1],
  25.             [53MissionIdentifier::TYPE_DAILY_VIEW_MISSIONS'daily_view_missions''daily'1],
  26.             [54MissionIdentifier::TYPE_DAILY_VIEW_PROGRESSION'daily_view_progression''daily'1],
  27.             [55MissionIdentifier::TYPE_DAILY_VIEW_GAMIFICATION'daily_view_gamification''daily'1],
  28.             [56MissionIdentifier::TYPE_DAILY_VIEW_RANKINGS'daily_view_rankings''daily'1],
  29.             [57MissionIdentifier::TYPE_DAILY_VIEW_CLIENTS'daily_view_clients''daily'1],
  30.             [58MissionIdentifier::TYPE_DAILY_VIEW_SALES'daily_view_sales''daily'1],
  31.             [59MissionIdentifier::TYPE_DAILY_VIEW_PLACEMENTS'daily_view_placements''daily'1],
  32.             [60MissionIdentifier::TYPE_DAILY_VIEW_STATISTICS'daily_view_statistics''daily'1],
  33.             [61MissionIdentifier::TYPE_DAILY_VIEW_GOALS'daily_view_goals''daily'1],
  34.             [62MissionIdentifier::TYPE_DAILY_ADD_CALENDAR_EVENT'daily_add_calendar_event''daily'1],
  35.             [63MissionIdentifier::TYPE_DAILY_CHECK_NOTIFICATIONS'daily_check_notifications''daily'1],
  36.             [64MissionIdentifier::TYPE_DAILY_VIEW_ACTIVE_CLIENT'daily_view_active_client''daily'1],
  37.             [65MissionIdentifier::TYPE_DAILY_VIEW_TWO_ACTIVE_CLIENTS'daily_view_two_active_clients''daily'1],
  38.             [66MissionIdentifier::TYPE_DAILY_VIEW_INACTIVE_CLIENT'daily_view_inactive_client''daily'1],
  39.             [67MissionIdentifier::TYPE_DAILY_VIEW_TWO_INACTIVE_CLIENTS'daily_view_two_inactive_clients''daily'1],
  40.             [68MissionIdentifier::TYPE_DAILY_ADD_TWO_CARD_KANBAN'daily_add_two_card_kanban''daily'1],
  41.             [69MissionIdentifier::TYPE_DAILY_MYBIZ_RESOURCE_DOWNLOADED'daily_mybiz_resource_downloaded''daily'1],
  42.             [70MissionIdentifier::TYPE_DAILY_MYBIZ_NEWS_VIEWED'daily_mybiz_news_viewed''daily'1],
  43.         ];
  44.         $categoryBackofficeAndNavigation Mission::CATEGORY_BACKOFFICE_AND_NAVIGATION;
  45.         foreach ($missionsBackofficeAndNavigation as [$id$name$marketingName$recurrence$isEnabled]) {
  46.             $this->addSql("INSERT INTO mybiz_mission (id, name, marketing_name, recurrence, category, is_enabled)
  47.                 VALUES ({$id}, '{$name}', '{$marketingName}', '{$recurrence}', '{$categoryBackofficeAndNavigation}', {$isEnabled})");
  48.         }
  49.         // SALES AND PLACEMENTS (IDs 71-84)
  50.         $missionsSalesAndPlacements = [
  51.             [71MissionIdentifier::TYPE_DAILY_MAKE_SALE'daily_make_sale''daily'1],
  52.             [72MissionIdentifier::TYPE_DAILY_MAKE_TWO_SALES'daily_make_two_sales''daily'1],
  53.             [73MissionIdentifier::TYPE_DAILY_MAKE_SALE_BEFORE_3PM'daily_make_sale_before_3pm''daily'1],
  54.             [74MissionIdentifier::TYPE_DAILY_MAKE_SALE_AFTER_3PM'daily_make_sale_after_3pm''daily'1],
  55.             [75MissionIdentifier::TYPE_DAILY_MAKE_SALE_ABOVE_AVERAGE'daily_make_sale_above_average''daily'1],
  56.             [76MissionIdentifier::TYPE_DAILY_MAKE_PLACEMENT'daily_make_placement''daily'1],
  57.             [77MissionIdentifier::TYPE_DAILY_MAKE_TWO_PLACEMENTS'daily_make_two_placements''daily'1],
  58.             [78MissionIdentifier::TYPE_DAILY_MAKE_PLACEMENT_BEFORE_3PM'daily_make_placement_before_3pm''daily'1],
  59.             [79MissionIdentifier::TYPE_DAILY_MAKE_PLACEMENT_AFTER_3PM'daily_make_placement_after_3pm''daily'1],
  60.             [80MissionIdentifier::TYPE_DAILY_MAKE_SALE_AND_PLACEMENT'daily_make_sale_and_placement''daily'1],
  61.             [81MissionIdentifier::TYPE_DAILY_REACH_PERSONAL_SALES_RECORD'daily_reach_personal_sales_record''daily'1],
  62.             [82MissionIdentifier::TYPE_DAILY_REACH_PERSONAL_PLACEMENT_RECORD'daily_reach_personal_placement_record''daily'1],
  63.             [83MissionIdentifier::TYPE_DAILY_REACH_NEW_RANK'daily_reach_new_rank''daily'1],
  64.             [84MissionIdentifier::TYPE_DAILY_MAKE_LUUME_AND_FUTURESLEARN_SALE'daily_make_luume_and_futureslearn_sale''daily'1],
  65.         ];
  66.         $categorySalesAndPlacements Mission::CATEGORY_SALES_AND_PLACEMENTS;
  67.         foreach ($missionsSalesAndPlacements as [$id$name$marketingName$recurrence$isEnabled]) {
  68.             $this->addSql("INSERT INTO mybiz_mission (id, name, marketing_name, recurrence, category, is_enabled)
  69.                 VALUES ({$id}, '{$name}', '{$marketingName}', '{$recurrence}', '{$categorySalesAndPlacements}', {$isEnabled})");
  70.         }
  71.         // POINTS XP AND RANKINGS (IDs 85-101)
  72.         $missionsPointsXpAndRankings = [
  73.             [85MissionIdentifier::TYPE_DAILY_GENERATE_50_POINTS'daily_generate_50_points''daily'1],
  74.             [86MissionIdentifier::TYPE_DAILY_GENERATE_80_POINTS'daily_generate_80_points''daily'1],
  75.             [87MissionIdentifier::TYPE_DAILY_GENERATE_100_POINTS'daily_generate_100_points''daily'1],
  76.             [88MissionIdentifier::TYPE_DAILY_GENERATE_150_POINTS'daily_generate_150_points''daily'1],
  77.             [89MissionIdentifier::TYPE_DAILY_GENERATE_200_POINTS'daily_generate_200_points''daily'1],
  78.             [90MissionIdentifier::TYPE_DAILY_GENERATE_250_POINTS'daily_generate_250_points''daily'1],
  79.             [91MissionIdentifier::TYPE_DAILY_GENERATE_300_POINTS'daily_generate_300_points''daily'1],
  80.             [92MissionIdentifier::TYPE_DAILY_GENERATE_100_POINTS_BEFORE_3PM'daily_generate_100_points_before_3pm''daily'1],
  81.             [93MissionIdentifier::TYPE_DAILY_GENERATE_250_POINTS_BEFORE_6PM'daily_generate_250_points_before_6pm''daily'1],
  82.             [94MissionIdentifier::TYPE_DAILY_GENERATE_MORE_POINTS_THAN_YESTERDAY'daily_generate_more_points_than_yesterday''daily'1],
  83.             [95MissionIdentifier::TYPE_DAILY_GENERATE_POINTS_2_DAYS_IN_ROW'daily_generate_points_2_days_in_row''daily'1],
  84.             [96MissionIdentifier::TYPE_DAILY_GENERATE_POINTS_3_DAYS_IN_ROW'daily_generate_points_3_days_in_row''daily'1],
  85.             [97MissionIdentifier::TYPE_DAILY_GENERATE_POINTS_5_DAYS_IN_ROW'daily_generate_points_5_days_in_row''daily'1],
  86.             [98MissionIdentifier::TYPE_DAILY_APPEAR_IN_TOP_PERFORMER'daily_appear_in_top_performer''daily'1],
  87.             [99MissionIdentifier::TYPE_DAILY_APPEAR_IN_TOP_3_PERFORMER'daily_appear_in_top_3_performer''daily'1],
  88.             [100MissionIdentifier::TYPE_DAILY_APPEAR_IN_TOP_5_PERFORMER'daily_appear_in_top_5_performer''daily'1],
  89.             [101MissionIdentifier::TYPE_DAILY_REACH_DAILY_POINTS_RECORD'daily_reach_daily_points_record''daily'1],
  90.         ];
  91.         $categoryPointsXpAndRankings Mission::CATEGORY_POINTS_XP_AND_RANKINGS;
  92.         foreach ($missionsPointsXpAndRankings as [$id$name$marketingName$recurrence$isEnabled]) {
  93.             $this->addSql("INSERT INTO mybiz_mission (id, name, marketing_name, recurrence, category, is_enabled)
  94.                 VALUES ({$id}, '{$name}', '{$marketingName}', '{$recurrence}', '{$categoryPointsXpAndRankings}', {$isEnabled})");
  95.         }
  96.         // Mission Levels Data
  97.         // IDs are auto-incremented
  98.         $missionLevels = [
  99.             [110146], // daily_login_backoffice
  100.             [110147], // daily_login_mobile
  101.             [110148], // daily_login_before_10am
  102.             [110149], // daily_login_after_6pm
  103.             [210150], // daily_login_twice
  104.             [110151], // daily_view_dashboard
  105.             [110152], // daily_view_profile
  106.             [110153], // daily_view_missions
  107.             [110154], // daily_view_progression
  108.             [110155], // daily_view_gamification
  109.             [110156], // daily_view_rankings
  110.             [110157], // daily_view_clients
  111.             [110158], // daily_view_sales
  112.             [110159], // daily_view_placements
  113.             [110160], // daily_view_statistics
  114.             [110161], // daily_view_goals
  115.             [110162], // daily_add_calendar_event
  116.             [110163], // daily_check_notifications
  117.             [110164], // daily_view_active_client
  118.             [210165], // daily_view_two_active_clients
  119.             [110166], // daily_view_inactive_client
  120.             [210167], // daily_view_two_inactive_clients
  121.             [210168], // daily_add_two_prospects_kanban
  122.             [110169], // daily_mybiz_resource_downloaded
  123.             [110170], // daily_mybiz_news_viewed
  124.             [125171], // daily_make_sale
  125.             [250172], // daily_make_two_sales
  126.             [125173], // daily_make_sale_before_3pm
  127.             [125174], // daily_make_sale_after_3pm
  128.             [125175], // daily_make_sale_above_average
  129.             [110176], // daily_make_placement
  130.             [225177], // daily_make_two_placements
  131.             [110178], // daily_make_placement_before_3pm
  132.             [110179], // daily_make_placement_after_3pm
  133.             [225180], // daily_make_sale_and_placement
  134.             [150181], // daily_reach_personal_sales_record
  135.             [125182], // daily_reach_personal_placement_record
  136.             [150183], // daily_reach_new_rank
  137.             [250184], // daily_make_luume_and_futureslearn_sale
  138.             [5025185], // daily_generate_50_points
  139.             [8025186], // daily_generate_80_points
  140.             [10025187], // daily_generate_100_points
  141.             [15025188], // daily_generate_150_points
  142.             [20050189], // daily_generate_200_points
  143.             [25050190], // daily_generate_250_points
  144.             [30050191], // daily_generate_300_points
  145.             [10050192], // daily_generate_100_points_before_3pm
  146.             [25050193], // daily_generate_250_points_before_6pm
  147.             [125194], // daily_generate_more_points_than_yesterday
  148.             [225195], // daily_generate_points_2_days_in_row
  149.             [350196], // daily_generate_points_3_days_in_row
  150.             [550197], // daily_generate_points_5_days_in_row
  151.             [150198], // daily_appear_in_top_performer
  152.             [150199], // daily_appear_in_top_3_performer
  153.             [1501100], // daily_appear_in_top_5_performer
  154.             [1501101], // daily_reach_daily_points_record
  155.         ];
  156.         foreach ($missionLevels as [$threshold$xp$levelNumber$missionId]) {
  157.             $this->addSql("INSERT INTO mybiz_mission_level (threshold, xp, level_number, mission_id)
  158.                 VALUES ({$threshold}{$xp}{$levelNumber}{$missionId})");
  159.         }
  160.     }
  161.     public function down(Schema $schema): void
  162.     {
  163.         // Delete mission levels
  164.         $this->addSql('DELETE FROM mybiz_mission_level WHERE mission_id BETWEEN 46 AND 101');
  165.         // Delete missions
  166.         $this->addSql('DELETE FROM mybiz_mission WHERE id BETWEEN 46 AND 101');
  167.     }
  168. }