*/ class DocumentFactory extends Factory { /** * The name of the factory's corresponding model. * * @var string */ protected $model = Document::class; /** * Define the model's default state. * * @return array */ public function definition(): array { // 使用中文 Faker 生成器 $faker = \Faker\Factory::create('zh_CN'); // 生成中文文档标题 $titles = [ '项目管理规范', '技术文档模板', '员工手册', '产品需求文档', '系统设计方案', '测试报告', '会议纪要', '培训资料', '操作指南', '年度总结报告', ]; $title = $faker->randomElement($titles) . ' - ' . $faker->word(); $fileName = $faker->word() . '_' . date('Ymd') . '.docx'; return [ 'title' => $title, 'description' => $faker->paragraph(3), 'file_path' => 'documents/' . date('Y/m/d') . '/' . fake()->uuid() . '.docx', 'file_name' => $fileName, 'file_size' => fake()->numberBetween(10000, 5000000), 'mime_type' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'type' => fake()->randomElement(['global', 'dedicated']), 'group_id' => null, 'uploaded_by' => User::factory(), 'markdown_path' => null, 'markdown_preview' => null, 'conversion_status' => 'pending', 'conversion_error' => null, ]; } /** * 指定文档为全局类型 */ public function global(): static { return $this->state(fn (array $attributes) => [ 'type' => 'global', 'group_id' => null, ]); } /** * 指定文档为专用类型 */ public function dedicated(?int $groupId = null): static { return $this->state(fn (array $attributes) => [ 'type' => 'dedicated', 'group_id' => $groupId ?? Group::factory(), ]); } /** * 指定文档已完成转换 */ public function converted(): static { $faker = \Faker\Factory::create('zh_CN'); $uuid = fake()->uuid(); return $this->state(fn (array $attributes) => [ 'markdown_path' => 'markdown/' . date('Y/m/d') . '/' . $uuid . '.md', 'markdown_preview' => $faker->text(500), 'conversion_status' => 'completed', 'conversion_error' => null, ]); } /** * 指定文档转换失败 */ public function conversionFailed(): static { return $this->state(fn (array $attributes) => [ 'markdown_path' => null, 'markdown_preview' => null, 'conversion_status' => 'failed', 'conversion_error' => 'Failed to convert document: Invalid file format', ]); } /** * 指定文档正在转换中 */ public function converting(): static { return $this->state(fn (array $attributes) => [ 'markdown_path' => null, 'markdown_preview' => null, 'conversion_status' => 'processing', 'conversion_error' => null, ]); } }