<?php 

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

class CreateViewTrendingBeritaMigration_307 extends Migration
{
    /**
     * Run the migrations
     *
     * @return void
     */
    public function up()
    {
        self::$connection->execute("
            DROP VIEW IF EXISTS jaga.view_trending_berita;
            CREATE OR REPLACE VIEW jaga.view_trending_berita 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::bigint) AS total_comment,
            COALESCE(dl.like_count, 0::bigint) AS total_like,
            COALESCE(ds.share_count, 0::bigint) AS total_share,
            COALESCE(COALESCE(dc.comment_count, 0::bigint) + COALESCE(dl.like_count, 0::bigint) + COALESCE(ds.share_count, 0::bigint), 0::bigint) 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_comment.diskusi_id,
                    count(diskusi_comment.diskusi_id) AS comment_count
                   FROM jaga.diskusi_comment
                  WHERE diskusi_comment.created_at > (now() - '8 days'::interval) AND diskusi_comment.created_at <= (now()::date + '00:00:01'::interval)
                  GROUP BY diskusi_comment.diskusi_id) dc ON d.id = dc.diskusi_id
             LEFT JOIN ( SELECT diskusi_like.diskusi_id,
                    count(diskusi_like.diskusi_id) AS like_count
                   FROM jaga.diskusi_like
                  WHERE diskusi_like.created_at > (now() - '8 days'::interval) AND diskusi_like.created_at <= (now()::date + '00:00:01'::interval)
                  GROUP BY diskusi_like.diskusi_id) dl ON d.id = dl.diskusi_id
             LEFT JOIN ( SELECT diskusi_share.diskusi_id,
                    count(diskusi_share.diskusi_id) AS share_count
                   FROM jaga.diskusi_share
                  WHERE diskusi_share.created_at > (now() - '8 days'::interval) AND diskusi_share.created_at <= (now()::date + '00:00:01'::interval)
                  GROUP BY diskusi_share.diskusi_id) ds ON d.id = ds.diskusi_id
          WHERE d.type = 1 AND d.is_deleted = 0
          ORDER BY (COALESCE(COALESCE(dc.comment_count, 0::bigint) + COALESCE(dl.like_count, 0::bigint) + COALESCE(ds.share_count, 0::bigint), 0::bigint)) DESC            
          ;
        ");
    }

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

}
