]> BookStack Code Mirror - bookstack/blobdiff - app/Sorting/SortSet.php
Sorting: Added tests to cover AssignSortSetCommand
[bookstack] / app / Sorting / SortSet.php
index ee45c211f2dc15b7a68672ab7a5f4abfa8de4c3f..cc8879f965782f58742c7131938dfaa45b4c476c 100644 (file)
@@ -2,8 +2,13 @@
 
 namespace BookStack\Sorting;
 
+use BookStack\Activity\Models\Loggable;
+use BookStack\Entities\Models\Book;
 use Carbon\Carbon;
+use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\HasMany;
 
 /**
  * @property int $id
@@ -12,16 +17,16 @@ use Illuminate\Database\Eloquent\Model;
  * @property Carbon $created_at
  * @property Carbon $updated_at
  */
-class SortSet extends Model
+class SortSet extends Model implements Loggable
 {
+    use HasFactory;
+
     /**
      * @return SortSetOperation[]
      */
     public function getOperations(): array
     {
-        $strOptions = explode(',', $this->sequence);
-        $options = array_map(fn ($val) => SortSetOperation::tryFrom($val), $strOptions);
-        return array_filter($options);
+        return SortSetOperation::fromSequence($this->sequence);
     }
 
     /**
@@ -32,4 +37,27 @@ class SortSet extends Model
         $values = array_map(fn (SortSetOperation $opt) => $opt->value, $options);
         $this->sequence = implode(',', $values);
     }
+
+    public function logDescriptor(): string
+    {
+        return "({$this->id}) {$this->name}";
+    }
+
+    public function getUrl(): string
+    {
+        return url("/settings/sorting/sets/{$this->id}");
+    }
+
+    public function books(): HasMany
+    {
+        return $this->hasMany(Book::class);
+    }
+
+    public static function allByName(): Collection
+    {
+        return static::query()
+            ->withCount('books')
+            ->orderBy('name', 'asc')
+            ->get();
+    }
 }