<?php 

use Phalcon\Db\Column;
use Phalcon\Db\Index;
use Phalcon\Db\Reference;
use Phalcon\Mvc\Model\Migration;

class UpdateViewHotDiskusiMigration_307 extends Migration
{
    /**
     * Run the migrations
     *
     * @return void
     */
    public function up()
    {
        self::$connection->execute("
            DROP VIEW IF EXISTS jaga.view_hot_diskusi;
            CREATE OR REPLACE VIEW jaga.view_hot_diskusi AS
            select
                d.id,
                d.title,
                d.content,
                d.uuid,
                d.created_at,
                d.updated_at,
                d.release_date,
                d.user_id,
                u.is_banned,
                u.um_user_name as nama,
                u.uuid_user,
                u.jenis_kelamin,
                p.nama as nama_produk,
                d.is_deleted,
                d.type,
                u.foto,
                d.is_anonymous,
                COALESCE(dc.comment_count, 0) as total_comment,
                COALESCE(dl.like_count, 0) as total_like,
                COALESCE(ds.share_count, 0) as total_share,
                COALESCE((COALESCE(dc.comment_count, 0) + COALESCE(dl.like_count, 0) + COALESCE(ds.share_count, 0)), 0) as hotness
            from
                jaga.diskusi d
            join jaga.um_user u on d.user_id = u.um_id
            join jaga.kategori_diskusi kd on d.kategori_diskusi_id = kd.id
            join jaga.produk p on p.id_index = kd.produk_id
            left join (
                select
                    diskusi_id,
                    count(diskusi_id) as comment_count
                from jaga.diskusi_comment
                where created_at > (NOW() - INTERVAL '1 MONTH + 1 DAY')
                group by diskusi_id
            ) as dc
            on d.id = dc.diskusi_id
            left join (
                select 
                    diskusi_id,
                    count(diskusi_id) as like_count
                from jaga.diskusi_like
                where created_at > (NOW() - INTERVAL '1 MONTH + 1 DAY')
                group by diskusi_id
            ) as dl
            on d.id = dl.diskusi_id
            left join (
                select
                    diskusi_id,
                    count(diskusi_id) as share_count
                from jaga.diskusi_share
                where created_at > (NOW() - INTERVAL '1 MONTH + 1 DAY')
                group by diskusi_id
            ) as ds
            on d.id = ds.diskusi_id
            where d.type = 0
            and d.is_deleted = 0
            order by hotness desc
            ;
        ");
    }

    /**
     * Reverse the migrations
     *
     * @return void
     */
    public function down()
    {
        self::$connection->execute("
            DROP VIEW IF EXISTS jaga.view_hot_diskusi;
        ");
    }

}
