Просмотр файла database/upgrades/2021_12_05_013412_remove_rated_from_downs.php

Размер файла: 2.5Kb
  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. use App\Models\Down;
  6. use App\Models\Polling;
  7. use Illuminate\Database\Migrations\Migration;
  8. use Illuminate\Database\Schema\Blueprint;
  9. use Illuminate\Support\Facades\Schema;
  10.  
  11. final class RemoveRatedFromDowns extends Migration
  12. {
  13. /**
  14. * Run the migrations.
  15. *
  16. * @return void
  17. */
  18. public function up(): void
  19. {
  20. $downs = Down::query()->get();
  21.  
  22. foreach ($downs as $down) {
  23. $newRating = 0;
  24. $avgRating = $down->rated ? $down->rating / $down->rated : 0;
  25.  
  26. if ($avgRating >= 4) {
  27. $newRating = $down->rated; // 100 проц лайков
  28. }
  29.  
  30. if ($avgRating >= 3.5 && $avgRating < 4) {
  31. $newRating = $down->rated - round($down->rated / 100 * 25); // 75 проц лайков
  32. }
  33.  
  34. if ($avgRating >= 3 && $avgRating < 3.5) {
  35. $newRating = round($down->rated / 2); // 50 проц лайков
  36. }
  37.  
  38. if ($avgRating >= 2.5 && $avgRating < 3) {
  39. $newRating = round($down->rated - round($down->rated / 100 * 75)); // 25 проц лайков
  40. }
  41.  
  42. if ($avgRating >= 2 && $avgRating < 2.5) {
  43. $newRating = -round($down->rated / 2); // 50 проц дизлайков
  44. }
  45.  
  46. if ($avgRating >= 1.5 && $avgRating < 2) {
  47. $newRating = -round($down->rated - round($down->rated / 100 * 25)); // 75 проц дизлайков
  48. }
  49.  
  50. if ($avgRating < 1.5) {
  51. $newRating = -$down->rated; // 100 проц дизлайков
  52. }
  53.  
  54. if ($down->rated === 0) {
  55. $newRating = 0;
  56. }
  57.  
  58. Down::query()
  59. ->where('id', $down->id)
  60. ->update(['rating' => $newRating]);
  61. }
  62.  
  63. Polling::query()
  64. ->where('relate_type', Down::$morphName)
  65. ->whereIn('vote', [3, 4, 5])
  66. ->update(['vote' => '+']);
  67.  
  68. Polling::query()
  69. ->where('relate_type', Down::$morphName)
  70. ->whereIn('vote', [1, 2])
  71. ->update(['vote' => '-']);
  72.  
  73. Schema::table('downs', function (Blueprint $table) {
  74. $table->dropColumn('rated');
  75. });
  76. }
  77.  
  78. /**
  79. * Reverse the migrations.
  80. *
  81. * @return void
  82. */
  83. public function down(): void
  84. {
  85. Schema::table('downs', function (Blueprint $table) {
  86. $table->integer('rated')->default(0)->after('rating');
  87. });
  88. }
  89. }