<?php

namespace app\common\model;

use think\Model;
use app\common\Redis;
use think\facade\Config;

/**
 * Description of RedisBaseModel
 *
 * @author sgq
 */
class RedisBaseModel extends Model {

    protected static function onAfterWrite(Model $model): void {
        $data = $model->toArray();
        if ($data["id"]) {
            $redis = Redis::instance(Config::get("cache.stores.redis.select"));
            $redis->hSet($model->name, $data["id"], json_encode($data));
        }
    }

    protected static function onAfterDelete(Model $model): void {
        $data = $model->toArray();
        if ($data["id"]) {
            $redis = Redis::instance(Config::get("cache.stores.redis.select"));
            $redis->hDel($model->name, $data["id"]);
        }
    }

    public static function cache($id = 0) {
        $redis = Redis::instance(Config::get("cache.stores.redis.select"));
        if ($id) {
            $data = self::select($id);
            $name = $data->name;
            $redis->hSet($name, $id, json_encode($data));
        } else {
            $list = self::select();
            $name = $list[0]->name;
            $redis->del($name);
            foreach ($list as $data) {
                $redis->hSet($name, $data["id"], json_encode($data));
            }
        }
    }

}
