migrations/Version20260107160000.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 Version20260107160000 extends AbstractMigration
  9. {
  10.     public function getDescription(): string
  11.     {
  12.         return 'Insert weekly missions for Backoffice, Sales & Placements, and XP & Rankings';
  13.     }
  14.     public function up(Schema $schema): void
  15.     {
  16.         // Weekly Backoffice & Navigation
  17.         $missionsBackoffice = [
  18.             [18MissionIdentifier::TYPE_WEEKLY_ADD_5_EVENTS'weekly_add_5_events''weekly'Mission::CATEGORY_BACKOFFICE_AND_NAVIGATION1],
  19.             [19MissionIdentifier::TYPE_WEEKLY_ADD_8_PROSPECTS'weekly_add_8_prospects''weekly'Mission::CATEGORY_BACKOFFICE_AND_NAVIGATION1],
  20.         ];
  21.         foreach ($missionsBackoffice as [$id$name$marketingName$recurrence$category$isEnabled]) {
  22.             $this->addSql("INSERT INTO mybiz_mission (id, name, marketing_name, recurrence, category, is_enabled)
  23.                 VALUES ({$id}, '{$name}', '{$marketingName}', '{$recurrence}', '{$category}', {$isEnabled})");
  24.         }
  25.         // Weekly Sales & Placements
  26.         $missionsSalesAndPlacements = [
  27.             [20MissionIdentifier::TYPE_WEEKLY_MAKE_3_SALES'weekly_make_3_sales''weekly'1],
  28.             [21MissionIdentifier::TYPE_WEEKLY_MAKE_5_SALES'weekly_make_5_sales''weekly'1],
  29.             [22MissionIdentifier::TYPE_WEEKLY_MAKE_2_SALES_ABOVE_100'weekly_make_2_sales_above_100''weekly'1],
  30.             [23MissionIdentifier::TYPE_WEEKLY_MAKE_SALE_ABOVE_AVERAGE'weekly_make_sale_above_average''weekly'1],
  31.             [24MissionIdentifier::TYPE_WEEKLY_MAKE_5_PLACEMENTS'weekly_make_5_placements''weekly'1],
  32.             [25MissionIdentifier::TYPE_WEEKLY_MAKE_10_PLACEMENTS'weekly_make_10_placements''weekly'1],
  33.             [26MissionIdentifier::TYPE_WEEKLY_LOGIN_5_DAYS'weekly_login_5_days''weekly'1],
  34.             [27MissionIdentifier::TYPE_WEEKLY_MAKE_SALE_AND_PLACEMENT_SAME_DAY'weekly_make_sale_and_placement_same_day''weekly'1],
  35.             [28MissionIdentifier::TYPE_WEEKLY_REACH_DAILY_SALES_RECORD'weekly_reach_daily_sales_record''weekly'1],
  36.             [29MissionIdentifier::TYPE_WEEKLY_REACH_DAILY_PLACEMENT_RECORD'weekly_reach_daily_placement_record''weekly'1],
  37.             [30MissionIdentifier::TYPE_WEEKLY_REACH_NEW_RANK'weekly_reach_new_rank''weekly'1],
  38.             [31MissionIdentifier::TYPE_WEEKLY_GENERATE_2_LUUME_AND_2_FUTURESLEARN_SALES'weekly_generate_2_luume_and_2_futureslearn_sales''weekly'1],
  39.         ];
  40.         $categorySalesAndPlacements Mission::CATEGORY_SALES_AND_PLACEMENTS;
  41.         foreach ($missionsSalesAndPlacements as [$id$name$marketingName$recurrence$isEnabled]) {
  42.             $this->addSql("INSERT INTO mybiz_mission (id, name, marketing_name, recurrence, category, is_enabled)
  43.                 VALUES ({$id}, '{$name}', '{$marketingName}', '{$recurrence}', '{$categorySalesAndPlacements}', {$isEnabled})");
  44.         }
  45.         // Weekly XP & Rankings
  46.         $missionsXpAndRankings = [
  47.             [32MissionIdentifier::TYPE_WEEKLY_GENERATE_250_POINTS'weekly_generate_250_points''weekly'1],
  48.             [33MissionIdentifier::TYPE_WEEKLY_GENERATE_500_POINTS'weekly_generate_500_points''weekly'1],
  49.             [34MissionIdentifier::TYPE_WEEKLY_GENERATE_1000_POINTS'weekly_generate_1000_points''weekly'1],
  50.             [35MissionIdentifier::TYPE_WEEKLY_GENERATE_1500_POINTS'weekly_generate_1500_points''weekly'1],
  51.             [36MissionIdentifier::TYPE_WEEKLY_GENERATE_2000_POINTS'weekly_generate_2000_points''weekly'1],
  52.             [37MissionIdentifier::TYPE_WEEKLY_GENERATE_2500_POINTS'weekly_generate_2500_points''weekly'1],
  53.             [38MissionIdentifier::TYPE_WEEKLY_GENERATE_MORE_POINTS_THAN_LAST_WEEK'weekly_generate_more_points_than_last_week''weekly'1],
  54.             [39MissionIdentifier::TYPE_WEEKLY_GENERATE_POINTS_2_DAYS_IN_ROW'weekly_generate_points_2_days_in_row''weekly'1],
  55.             [40MissionIdentifier::TYPE_WEEKLY_GENERATE_POINTS_3_DAYS_IN_ROW'weekly_generate_points_3_days_in_row''weekly'1],
  56.             [41MissionIdentifier::TYPE_WEEKLY_GENERATE_POINTS_5_DAYS_IN_ROW'weekly_generate_points_5_days_in_row''weekly'1],
  57.             [42MissionIdentifier::TYPE_WEEKLY_APPEAR_IN_TOP_PERFORMER'weekly_appear_in_top_performer''weekly'1],
  58.             [43MissionIdentifier::TYPE_WEEKLY_APPEAR_IN_TOP_3_PERFORMER'weekly_appear_in_top_3_performer''weekly'1],
  59.             [44MissionIdentifier::TYPE_WEEKLY_APPEAR_IN_TOP_5_PERFORMER'weekly_appear_in_top_5_performer''weekly'1],
  60.             [45MissionIdentifier::TYPE_WEEKLY_REACH_WEEKLY_POINTS_RECORD'weekly_reach_weekly_points_record''weekly'1],
  61.         ];
  62.         $categoryPointsXpAndRankings Mission::CATEGORY_POINTS_XP_AND_RANKINGS;
  63.         foreach ($missionsXpAndRankings as [$id$name$marketingName$recurrence$isEnabled]) {
  64.             $this->addSql("INSERT INTO mybiz_mission (id, name, marketing_name, recurrence, category, is_enabled)
  65.                 VALUES ({$id}, '{$name}', '{$marketingName}', '{$recurrence}', '{$categoryPointsXpAndRankings}', {$isEnabled})");
  66.         }
  67.         // Mission Levels Data
  68.         // IDs are auto-incremented, starting from 141 naturally
  69.         $missionLevels = [
  70.             [510118], // weekly_add_5_events
  71.             [810119], // weekly_add_8_prospects
  72.             [310120], // weekly_make_3_sales
  73.             [550121], // weekly_make_5_sales
  74.             [225122], // weekly_make_2_sales_above_100
  75.             [125123], // weekly_make_sale_above_average
  76.             [510124], // weekly_make_5_placements
  77.             [1025125], // weekly_make_10_placements
  78.             [510126], // weekly_login_5_days
  79.             [225127], // weekly_make_sale_and_placement_same_day
  80.             [150128], // weekly_reach_daily_sales_record
  81.             [125129], // weekly_reach_daily_placement_record
  82.             [150130], // weekly_reach_new_rank
  83.             [450131], // weekly_generate_2_luume_and_2_futureslearn_sales
  84.             [25010132], // weekly_generate_250_points
  85.             [50010133], // weekly_generate_500_points
  86.             [100025134], // weekly_generate_1000_points
  87.             [150025135], // weekly_generate_1500_points
  88.             [200050136], // weekly_generate_2000_points
  89.             [250050137], // weekly_generate_2500_points
  90.             [125138], // weekly_generate_more_points_than_last_week
  91.             [225139], // weekly_generate_points_2_days_in_row
  92.             [350140], // weekly_generate_points_3_days_in_row
  93.             [550141], // weekly_generate_points_5_days_in_row
  94.             [150142], // weekly_appear_in_top_performer
  95.             [350143], // weekly_appear_in_top_3_performer
  96.             [550144], // weekly_appear_in_top_5_performer
  97.             [150145], // weekly_reach_weekly_points_record
  98.         ];
  99.         foreach ($missionLevels as [$threshold$xp$levelNumber$missionId]) {
  100.             $this->addSql("INSERT INTO mybiz_mission_level (threshold, xp, level_number, mission_id)
  101.                 VALUES ({$threshold}{$xp}{$levelNumber}{$missionId})");
  102.         }
  103.     }
  104.     public function down(Schema $schema): void
  105.     {
  106.         // Delete mission levels
  107.         $this->addSql('DELETE FROM mybiz_mission_level WHERE mission_id BETWEEN 18 AND 45');
  108.         // Delete missions
  109.         $this->addSql('DELETE FROM mybiz_mission WHERE id BETWEEN 18 AND 45');
  110.     }
  111. }