main: 用户管理和会话功能初始实现

- 添加用户管理功能的测试,包括创建、更新、停用、激活用户及用户登录 JWT 测试
- 提供用户管理相关的请求验证类与控制器
- 引入 CORS 配置信息,支持跨域请求
- 添加数据库播种器以便创建根用户
- 配置 API 默认使用 JWT 认证
- 添加聊天会话和消息的模型、迁移文件及关联功能
This commit is contained in:
2025-12-14 17:49:08 +08:00
parent e28318b4ec
commit c6d6534b63
36 changed files with 2119 additions and 16 deletions

View File

@@ -0,0 +1,48 @@
<?php
namespace App\Models;
use App\Enums\ChatSessionStatus;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
class ChatSession extends Model
{
use HasFactory;
protected $primaryKey = 'session_id';
public $incrementing = false;
protected $keyType = 'string';
protected $fillable = [
'session_id',
'session_name',
'status',
'last_seq',
];
protected function casts(): array
{
return [
'last_seq' => 'integer',
];
}
public function messages(): HasMany
{
return $this->hasMany(Message::class, 'session_id', 'session_id');
}
public function isClosed(): bool
{
return $this->status === ChatSessionStatus::CLOSED;
}
public function isLocked(): bool
{
return $this->status === ChatSessionStatus::LOCKED;
}
}

52
app/Models/Message.php Normal file
View File

@@ -0,0 +1,52 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Message extends Model
{
use HasFactory;
public const ROLE_USER = 'USER';
public const ROLE_AGENT = 'AGENT';
public const ROLE_TOOL = 'TOOL';
public const ROLE_SYSTEM = 'SYSTEM';
protected $primaryKey = 'message_id';
public $incrementing = false;
protected $keyType = 'string';
public $timestamps = false;
protected $fillable = [
'message_id',
'session_id',
'role',
'type',
'content',
'payload',
'seq',
'reply_to',
'dedupe_key',
'created_at',
];
protected function casts(): array
{
return [
'payload' => 'array',
'seq' => 'integer',
'created_at' => 'datetime',
];
}
public function session(): BelongsTo
{
return $this->belongsTo(ChatSession::class, 'session_id', 'session_id');
}
}

View File

@@ -6,8 +6,9 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use PHPOpenSourceSaver\JWTAuth\Contracts\JWTSubject;
class User extends Authenticatable
class User extends Authenticatable implements JWTSubject
{
/** @use HasFactory<\Database\Factories\UserFactory> */
use HasFactory, Notifiable;
@@ -21,6 +22,7 @@ class User extends Authenticatable
'name',
'email',
'password',
'is_active',
];
/**
@@ -43,6 +45,17 @@ class User extends Authenticatable
return [
'email_verified_at' => 'datetime',
'password' => 'hashed',
'is_active' => 'boolean',
];
}
public function getJWTIdentifier(): mixed
{
return $this->getKey();
}
public function getJWTCustomClaims(): array
{
return [];
}
}