更新
This commit is contained in:
@@ -0,0 +1,197 @@
|
||||
<?php
|
||||
|
||||
namespace app\controller\api;
|
||||
|
||||
use app\model\AiModel;
|
||||
use app\model\Conversation as ConversationModel;
|
||||
use app\model\MembershipLevel;
|
||||
use app\model\Message;
|
||||
use app\model\SystemSetting;
|
||||
use app\model\User;
|
||||
use app\model\UserDailyStat;
|
||||
use app\service\SettingsService;
|
||||
|
||||
class Admin extends BaseApi
|
||||
{
|
||||
public function users()
|
||||
{
|
||||
$page = max(1, (int) $this->request->get('page', 1));
|
||||
$limit = min(50, max(1, (int) $this->request->get('limit', 20)));
|
||||
|
||||
$query = User::alias('u')
|
||||
->leftJoin('membership_levels ml', 'u.membership_level_id = ml.id')
|
||||
->field('u.id,u.username,u.email,u.nickname,u.role,u.status,u.membership_level_id,u.created_at,u.last_login_at,ml.name as membership_name')
|
||||
->order('u.id', 'desc');
|
||||
|
||||
$total = (clone $query)->count();
|
||||
$list = $query->page($page, $limit)->select();
|
||||
|
||||
return $this->success(['list' => $list, 'total' => $total]);
|
||||
}
|
||||
|
||||
public function updateUser($id)
|
||||
{
|
||||
$input = $this->request->put();
|
||||
$allowed = ['nickname', 'role', 'status', 'membership_level_id'];
|
||||
$data = [];
|
||||
|
||||
foreach ($allowed as $field) {
|
||||
if (array_key_exists($field, $input)) {
|
||||
$data[$field] = $input[$field];
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($data)) {
|
||||
return $this->error('无更新内容');
|
||||
}
|
||||
|
||||
User::where('id', $id)->update($data);
|
||||
return $this->success(null, '更新成功');
|
||||
}
|
||||
|
||||
public function conversations()
|
||||
{
|
||||
$page = max(1, (int) $this->request->get('page', 1));
|
||||
$limit = min(50, max(1, (int) $this->request->get('limit', 20)));
|
||||
$userId = $this->request->get('user_id');
|
||||
|
||||
$query = ConversationModel::alias('c')
|
||||
->join('users u', 'c.user_id = u.id')
|
||||
->whereNull('c.deleted_at')
|
||||
->field('c.*,u.username,u.email')
|
||||
->order('c.updated_at', 'desc');
|
||||
|
||||
if ($userId) {
|
||||
$query->where('c.user_id', $userId);
|
||||
}
|
||||
|
||||
return $this->success($query->page($page, $limit)->select());
|
||||
}
|
||||
|
||||
public function stats()
|
||||
{
|
||||
return $this->success([
|
||||
'users' => User::count(),
|
||||
'conversations' => ConversationModel::whereNull('deleted_at')->count(),
|
||||
'messages' => Message::count(),
|
||||
'today_messages' => (int) UserDailyStat::where('stat_date', date('Y-m-d'))->sum('message_count'),
|
||||
]);
|
||||
}
|
||||
|
||||
public function settings()
|
||||
{
|
||||
$rows = SystemSetting::select();
|
||||
$settings = [];
|
||||
|
||||
foreach ($rows as $row) {
|
||||
$decoded = json_decode($row->setting_value, true);
|
||||
$settings[$row->setting_key] = [
|
||||
'value' => json_last_error() === JSON_ERROR_NONE ? $decoded : $row->setting_value,
|
||||
'description' => $row->description,
|
||||
];
|
||||
}
|
||||
|
||||
return $this->success($settings);
|
||||
}
|
||||
|
||||
public function updateSettings()
|
||||
{
|
||||
$input = $this->request->put();
|
||||
foreach ($input as $key => $value) {
|
||||
SettingsService::set($key, $value);
|
||||
}
|
||||
return $this->success(null, '设置已更新');
|
||||
}
|
||||
|
||||
public function models()
|
||||
{
|
||||
$list = AiModel::field('id,name,model_id,api_base_url,max_tokens,temperature,is_default,enabled,sort_order')
|
||||
->order('sort_order')
|
||||
->select();
|
||||
return $this->success($list);
|
||||
}
|
||||
|
||||
public function createModel()
|
||||
{
|
||||
$input = $this->request->post();
|
||||
$model = AiModel::create([
|
||||
'name' => $input['name'],
|
||||
'model_id' => $input['model_id'],
|
||||
'api_base_url' => $input['api_base_url'] ?? 'https://api.openai.com/v1',
|
||||
'api_key' => $input['api_key'],
|
||||
'max_tokens' => $input['max_tokens'] ?? 4096,
|
||||
'temperature' => $input['temperature'] ?? 0.7,
|
||||
'is_default' => (int) ($input['is_default'] ?? 0),
|
||||
'enabled' => (int) ($input['enabled'] ?? 1),
|
||||
'sort_order' => $input['sort_order'] ?? 0,
|
||||
]);
|
||||
|
||||
if (!empty($input['is_default'])) {
|
||||
AiModel::where('id', '<>', $model->id)->update(['is_default' => 0]);
|
||||
}
|
||||
|
||||
return $this->success(['id' => $model->id], '创建成功');
|
||||
}
|
||||
|
||||
public function updateModel($id)
|
||||
{
|
||||
$input = $this->request->put();
|
||||
$allowed = ['name', 'model_id', 'api_base_url', 'api_key', 'max_tokens', 'temperature', 'is_default', 'enabled', 'sort_order'];
|
||||
$data = [];
|
||||
|
||||
foreach ($allowed as $field) {
|
||||
if (array_key_exists($field, $input)) {
|
||||
$data[$field] = $input[$field];
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($data)) {
|
||||
return $this->error('无更新内容');
|
||||
}
|
||||
|
||||
AiModel::where('id', $id)->update($data);
|
||||
|
||||
if (!empty($input['is_default'])) {
|
||||
AiModel::where('id', '<>', $id)->update(['is_default' => 0]);
|
||||
}
|
||||
|
||||
return $this->success(null, '更新成功');
|
||||
}
|
||||
|
||||
public function deleteModel($id)
|
||||
{
|
||||
AiModel::destroy($id);
|
||||
return $this->success(null, '删除成功');
|
||||
}
|
||||
|
||||
public function memberships()
|
||||
{
|
||||
$levels = MembershipLevel::order('sort_order')->select();
|
||||
return $this->success($levels);
|
||||
}
|
||||
|
||||
public function updateMembership($id)
|
||||
{
|
||||
$input = $this->request->put();
|
||||
$data = [];
|
||||
|
||||
foreach (['name', 'max_conversations', 'max_messages_per_day', 'max_upload_size_mb', 'sort_order'] as $field) {
|
||||
if (isset($input[$field])) {
|
||||
$data[$field] = $input[$field];
|
||||
}
|
||||
}
|
||||
if (isset($input['permissions'])) {
|
||||
$data['permissions'] = $input['permissions'];
|
||||
}
|
||||
if (isset($input['allowed_models'])) {
|
||||
$data['allowed_models'] = $input['allowed_models'];
|
||||
}
|
||||
|
||||
if (empty($data)) {
|
||||
return $this->error('无更新内容');
|
||||
}
|
||||
|
||||
MembershipLevel::where('id', $id)->update($data);
|
||||
return $this->success(null, '更新成功');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user