View file database/upgrades/20210424201416_convert_messages.php

File size: 2.14Kb
<?php

declare(strict_types=1);

use App\Migrations\Migration;
use App\Models\Dialogue;
use App\Models\Message;
use App\Models\Message2;

final class ConvertMessages extends Migration
{
    /**
     * Migrate Up.
     */
    public function up(): void
    {
        $messages = Message::query()->orderBy('created_at')->get();

        /** @var Message $message */
        foreach ($messages as $message) {
            $hash = $message->user_id . '-' . $message->author_id . '-' . $message->created_at;
            $hash2 = $message->author_id . '-' . $message->user_id . '-' . $message->created_at;

            $message2 = Message2::query()
                ->where('hash', $hash)
                ->orWhere('hash', $hash2)
                ->first();

            if (! $message2) {
                if ($message->type === Message::OUT) {
                    $userOut = $message->user_id;
                    $userIn = $message->author_id;
                } else {
                    $userOut = $message->author_id;
                    $userIn = $message->user_id;
                }

                $message2 = Message2::query()->create([
                    'user_id'    => $userIn,
                    'author_id'  => $userOut,
                    'text'       => $message->text,
                    'created_at' => $message->created_at,
                    'hash'       => $hash,
                ]);
            }

            $hash = $message->user_id . '-' . $message->author_id . '-' . $message2->id;

            $dial = Dialogue::query()->where('hash', $hash)->first();
            if ($dial) {
                continue;
            }

            $dialogue = new Dialogue();
            $dialogue->message_id = $message2->id;
            $dialogue->user_id    = $message->user_id;
            $dialogue->author_id  = $message->author_id;
            $dialogue->type       = $message->type;
            $dialogue->reading    = $message->reading;
            $dialogue->created_at = $message->created_at;
            $dialogue->hash       = $hash;
            $dialogue->save();
        }
    }

    /**
     * Migrate Down.
     */
    public function down(): void
    {
    }
}