KioskApi.php 4.19 KB
<?php
declare(strict_types=1);

namespace app\controller;

use app\BaseController;
use app\service\KioskService;
use think\App;
use think\Response;

class KioskApi extends BaseController
{
    protected KioskService $svc;

    public function __construct(App $app)
    {
        parent::__construct($app);
        $this->svc = new KioskService();
    }

    public function bundle(): Response
    {
        try {
            $data = $this->svc->getBundle();
            return json(['code' => 0, 'data' => $data]);
        } catch (\Throwable $e) {
            return json(['code' => 500, 'msg' => $e->getMessage()], 500);
        }
    }

    /** 天文知识库专用列表(与 bundle 内 knowledge 同源,便于页面独立刷新) */
    public function knowledge(): Response
    {
        try {
            return json(['code' => 0, 'data' => ['entries' => $this->svc->getKnowledgeList()]]);
        } catch (\Throwable $e) {
            return json(['code' => 500, 'msg' => $e->getMessage()], 500);
        }
    }

    public function dataDisplay(): Response
    {
        try {
            return json(['code' => 0, 'data' => $this->svc->getDataDisplay()]);
        } catch (\Throwable $e) {
            return json(['code' => 500, 'msg' => $e->getMessage()], 500);
        }
    }

    public function observatoryHistory(): Response
    {
        try {
            return json(['code' => 0, 'data' => $this->svc->getObservatoryHistory()]);
        } catch (\Throwable $e) {
            return json(['code' => 500, 'msg' => $e->getMessage()], 500);
        }
    }

    public function saveHomeBackgrounds(): Response
    {
        $urls = $this->request->post('urls');
        if (!is_array($urls)) {
            return json(['code' => 400, 'msg' => 'urls must be array'], 400);
        }
        $clean = array_values(array_filter($urls, fn ($u) => is_string($u) && $u !== ''));
        try {
            $this->svc->setJsonKv(\app\common\KioskDefaults::KEY_HOME_BG, $clean);
            return json(['code' => 0, 'msg' => 'ok']);
        } catch (\Throwable $e) {
            return json(['code' => 500, 'msg' => $e->getMessage()], 500);
        }
    }

    public function saveWelcome(): Response
    {
        $w = $this->request->post();
        $payload = [
            'zh-CN' => (string) ($w['zh-CN'] ?? ''),
            'en'    => (string) ($w['en'] ?? ''),
            'bo'    => (string) ($w['bo'] ?? ''),
        ];
        try {
            $this->svc->setJsonKv(\app\common\KioskDefaults::KEY_WELCOME, $payload);
            return json(['code' => 0, 'msg' => 'ok']);
        } catch (\Throwable $e) {
            return json(['code' => 500, 'msg' => $e->getMessage()], 500);
        }
    }

    public function saveGuide(): Response
    {
        $g = $this->request->post('guide');
        if (!is_array($g)) {
            return json(['code' => 400, 'msg' => 'guide must be object'], 400);
        }
        try {
            $this->svc->setJsonKv(\app\common\KioskDefaults::KEY_GUIDE, $g);
            return json(['code' => 0, 'msg' => 'ok']);
        } catch (\Throwable $e) {
            return json(['code' => 500, 'msg' => $e->getMessage()], 500);
        }
    }

    public function saveKnowledge(): Response
    {
        $entries = $this->request->post('entries');
        if (!is_array($entries)) {
            return json(['code' => 400, 'msg' => 'entries must be array'], 400);
        }
        try {
            $this->svc->replaceKnowledge($entries);
            return json(['code' => 0, 'msg' => 'ok']);
        } catch (\Throwable $e) {
            return json(['code' => 500, 'msg' => $e->getMessage()], 500);
        }
    }

    public function seedKnowledge(): Response
    {
        $entries = \app\common\KioskDefaults::knowledge();
        if ($entries === []) {
            return json([
                'code' => 400,
                'msg'  => '演示知识种子已关闭,请使用 knowledge/sync 同步真实条目,勿调用本接口清空库表',
            ], 400);
        }
        try {
            $this->svc->replaceKnowledge($entries);
            return json(['code' => 0, 'msg' => 'ok']);
        } catch (\Throwable $e) {
            return json(['code' => 500, 'msg' => $e->getMessage()], 500);
        }
    }
}