user(); } public function rules(): array { return [ 'type' => ['required', 'string', 'in:text,artwork_share,upload,achievement'], 'visibility' => ['required', 'string', 'in:public,followers,private'], 'body' => ['nullable', 'string', 'max:2000'], 'targets' => ['nullable', 'array', 'max:1'], 'targets.*.type' => ['required_with:targets', 'string', 'in:artwork'], 'targets.*.id' => ['required_with:targets', 'integer', 'min:1'], 'link_preview' => ['nullable', 'array'], 'link_preview.url' => ['nullable', 'string', 'url', 'max:2048'], 'link_preview.title' => ['nullable', 'string', 'max:300'], 'link_preview.description' => ['nullable', 'string', 'max:500'], 'link_preview.image' => ['nullable', 'string', 'url', 'max:2048'], 'link_preview.site_name' => ['nullable', 'string', 'max:100'], 'tagged_users' => ['nullable', 'array', 'max:10'], 'tagged_users.*.id' => ['required_with:tagged_users', 'integer', 'min:1'], 'tagged_users.*.username' => ['required_with:tagged_users', 'string', 'max:50'], 'tagged_users.*.name' => ['nullable', 'string', 'max:100'], 'publish_at' => ['nullable', 'date', 'after:now'], ]; } public function messages(): array { return [ 'body.max' => 'Post body cannot exceed 2,000 characters.', ]; } }