diff --git a/code/app/Athenia/Contracts/Repositories/Statistic/StatisticRepositoryContract.php b/code/app/Athenia/Contracts/Repositories/Statistic/StatisticRepositoryContract.php index 455a3ed9..14c27b22 100644 --- a/code/app/Athenia/Contracts/Repositories/Statistic/StatisticRepositoryContract.php +++ b/code/app/Athenia/Contracts/Repositories/Statistic/StatisticRepositoryContract.php @@ -4,10 +4,18 @@ namespace App\Athenia\Contracts\Repositories\Statistic; use App\Athenia\Contracts\Repositories\BaseRepositoryContract; +use Illuminate\Support\Collection; /** * Interface StatisticRepositoryContract */ interface StatisticRepositoryContract extends BaseRepositoryContract { + /** + * Get all statistics for a given model + * + * @param string $model + * @return Collection + */ + public function findAllForModel(string $model): Collection; } \ No newline at end of file diff --git a/code/app/Athenia/Contracts/Repositories/User/ArticleNoteRepositoryContract.php b/code/app/Athenia/Contracts/Repositories/User/ArticleNoteRepositoryContract.php new file mode 100644 index 00000000..5ee419cd --- /dev/null +++ b/code/app/Athenia/Contracts/Repositories/User/ArticleNoteRepositoryContract.php @@ -0,0 +1,13 @@ +repository = $repository; + $this->articleRepository = $articleRepository; + } + + /** + * @param Requests\User\ArticleNote\IndexRequest $request + * @param User $user + * @return LengthAwarePaginator + */ + public function index(Requests\User\ArticleNote\IndexRequest $request, User $user): LengthAwarePaginator + { + return $this->repository->findAll( + $this->filter($request), + $this->search($request), + $this->order($request), + $this->expand($request), + $this->limit($request), + [$user], + (int)$request->input('page', 1) + ); + } + + /** + * @param Requests\User\ArticleNote\StoreRequest $request + * @param User $user + * @return JsonResponse + */ + public function store(Requests\User\ArticleNote\StoreRequest $request, User $user): JsonResponse + { + $data = $request->json()->all(); + $data['user_id'] = $user->id; + + /** @var ArticleNote $model */ + $model = $this->repository->create($data); + + return new JsonResponse($model, 201); + } + + /** + * @param Requests\User\ArticleNote\ViewRequest $request + * @param User $user + * @param ArticleNote $articleNote + * @return ArticleNote + */ + public function show(Requests\User\ArticleNote\ViewRequest $request, User $user, ArticleNote $articleNote): ArticleNote + { + return $articleNote; + } + + /** + * @param Requests\User\ArticleNote\UpdateRequest $request + * @param User $user + * @param ArticleNote $articleNote + * @return BaseModelAbstract + */ + public function update(Requests\User\ArticleNote\UpdateRequest $request, User $user, ArticleNote $articleNote): BaseModelAbstract + { + $data = $request->json()->all(); + + return $this->repository->update($articleNote, $data); + } + + /** + * @param Requests\User\ArticleNote\DeleteRequest $request + * @param User $user + * @param ArticleNote $articleNote + * @return JsonResponse + */ + public function destroy(Requests\User\ArticleNote\DeleteRequest $request, User $user, ArticleNote $articleNote): JsonResponse + { + $this->repository->delete($articleNote); + + return new JsonResponse(null, 204); + } + + /** + * Selects a random article for the user and creates or retrieves an article note + * + * @param Requests\User\ArticleNote\RandomArticleRequest $request + * @param User $user + * @return JsonResponse + */ + public function randomArticle(Requests\User\ArticleNote\RandomArticleRequest $request, User $user): JsonResponse + { + $article = $this->articleRepository->selectArticleForUser($user); + + if (!$article) { + return new JsonResponse([ + 'message' => 'No available articles found.' + ], 404); + } + + // Check if a note already exists for this article + $existingNote = ArticleNote::where('user_id', $user->id) + ->where('article_id', $article->id) + ->first(); + + if ($existingNote) { + $existingNote->load('article'); + return new JsonResponse($existingNote, 200); + } + + /** @var ArticleNote $articleNote */ + $articleNote = $this->repository->create([ + 'user_id' => $user->id, + 'article_id' => $article->id, + ]); + + $articleNote->load('article'); + + return new JsonResponse($articleNote, 201); + } +} diff --git a/code/app/Athenia/Http/Core/Requests/User/ArticleNote/DeleteRequest.php b/code/app/Athenia/Http/Core/Requests/User/ArticleNote/DeleteRequest.php new file mode 100644 index 00000000..cfdfeab8 --- /dev/null +++ b/code/app/Athenia/Http/Core/Requests/User/ArticleNote/DeleteRequest.php @@ -0,0 +1,48 @@ +route('user'), + $this->route('article_note'), + ]; + } +} diff --git a/code/app/Athenia/Http/Core/Requests/User/ArticleNote/IndexRequest.php b/code/app/Athenia/Http/Core/Requests/User/ArticleNote/IndexRequest.php new file mode 100644 index 00000000..1ae7a145 --- /dev/null +++ b/code/app/Athenia/Http/Core/Requests/User/ArticleNote/IndexRequest.php @@ -0,0 +1,63 @@ +route('user'), + ]; + } + + /** + * All expands that are allowed for this request + * + * @return array + */ + public function allowedExpands(): array + { + return [ + 'user', + 'article', + ]; + } +} diff --git a/code/app/Athenia/Http/Core/Requests/User/ArticleNote/RandomArticleRequest.php b/code/app/Athenia/Http/Core/Requests/User/ArticleNote/RandomArticleRequest.php new file mode 100644 index 00000000..44120f3c --- /dev/null +++ b/code/app/Athenia/Http/Core/Requests/User/ArticleNote/RandomArticleRequest.php @@ -0,0 +1,51 @@ +route('user'), + ]; + } +} diff --git a/code/app/Athenia/Http/Core/Requests/User/ArticleNote/StoreRequest.php b/code/app/Athenia/Http/Core/Requests/User/ArticleNote/StoreRequest.php new file mode 100644 index 00000000..794db6b5 --- /dev/null +++ b/code/app/Athenia/Http/Core/Requests/User/ArticleNote/StoreRequest.php @@ -0,0 +1,59 @@ +route('user'), + ]; + } + + /** + * @param ArticleNote $model + * @return array + */ + public function rules(ArticleNote $model) + { + return $model->getValidationRules(ArticleNote::VALIDATION_RULES_CREATE); + } +} diff --git a/code/app/Athenia/Http/Core/Requests/User/ArticleNote/UpdateRequest.php b/code/app/Athenia/Http/Core/Requests/User/ArticleNote/UpdateRequest.php new file mode 100644 index 00000000..28790846 --- /dev/null +++ b/code/app/Athenia/Http/Core/Requests/User/ArticleNote/UpdateRequest.php @@ -0,0 +1,61 @@ +route('user'), + $this->route('article_note'), + ]; + } + + /** + * The rules for this request + * + * @param ArticleNote $model + */ + public function rules(ArticleNote $model) + { + return $model->getValidationRules(ArticleNote::VALIDATION_RULES_UPDATE); + } +} diff --git a/code/app/Athenia/Http/Core/Requests/User/ArticleNote/ViewRequest.php b/code/app/Athenia/Http/Core/Requests/User/ArticleNote/ViewRequest.php new file mode 100644 index 00000000..d0130120 --- /dev/null +++ b/code/app/Athenia/Http/Core/Requests/User/ArticleNote/ViewRequest.php @@ -0,0 +1,48 @@ +route('user'), + $this->route('article_note'), + ]; + } +} diff --git a/code/app/Athenia/Models/Asset.php b/code/app/Athenia/Models/Asset.php index f65285bb..f2407bf0 100644 --- a/code/app/Athenia/Models/Asset.php +++ b/code/app/Athenia/Models/Asset.php @@ -36,6 +36,34 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Asset whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Asset whereUrl($value) * @mixin \Eloquent + * @property string|null $source + * @property string|null $alt + * @property int $width + * @property int $height + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|Asset onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset whereAlt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset whereHeight($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset whereSource($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset whereWidth($value) + * @method static \Illuminate\Database\Eloquent\Builder|Asset withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Asset withoutTrashed() + * @mixin Eloquent */ class Asset extends BaseModelAbstract implements HasValidationRulesContract { diff --git a/code/app/Athenia/Models/Category.php b/code/app/Athenia/Models/Category.php index 9fe34486..ce31c195 100644 --- a/code/app/Athenia/Models/Category.php +++ b/code/app/Athenia/Models/Category.php @@ -48,6 +48,8 @@ * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Category withTrashed() * @method static \Illuminate\Database\Eloquent\Builder|Category withoutTrashed() + * @property-read \Illuminate\Database\Eloquent\Collection $articles + * @property-read int|null $articles_count * @mixin \Eloquent */ class Category extends BaseModelAbstract implements HasValidationRulesContract diff --git a/code/app/Athenia/Models/Collection/Collection.php b/code/app/Athenia/Models/Collection/Collection.php index 95d33e83..abb768c4 100644 --- a/code/app/Athenia/Models/Collection/Collection.php +++ b/code/app/Athenia/Models/Collection/Collection.php @@ -63,6 +63,7 @@ * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Collection withTrashed() * @method static \Illuminate\Database\Eloquent\Builder|Collection withoutTrashed() + * @property-read int|null $target_statistics_count * @mixin \Eloquent */ class Collection extends BaseModelAbstract implements HasValidationRulesContract, CanBeStatisticTargetContract diff --git a/code/app/Athenia/Models/Feature.php b/code/app/Athenia/Models/Feature.php index 6b13fe19..8a6996c6 100644 --- a/code/app/Athenia/Models/Feature.php +++ b/code/app/Athenia/Models/Feature.php @@ -27,6 +27,25 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Feature whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Feature whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Feature whereUpdatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|Feature onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature whereNotInJoin($column, $values, $boolean = 'and') + * @method static \Illuminate\Database\Eloquent\Builder|Feature withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Feature withoutTrashed() * @mixin \Eloquent */ class Feature extends BaseModelAbstract diff --git a/code/app/Athenia/Models/Messaging/Message.php b/code/app/Athenia/Models/Messaging/Message.php index a387c46e..4258c4a9 100644 --- a/code/app/Athenia/Models/Messaging/Message.php +++ b/code/app/Athenia/Models/Messaging/Message.php @@ -61,6 +61,30 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\User\Message whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\User\Message whereVia($value) * @mixin \Eloquent + * @property string|null $to_type + * @property string|null $from_type + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|Message onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereFromType($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereToType($value) + * @method static \Illuminate\Database\Eloquent\Builder|Message withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Message withoutTrashed() + * @mixin Eloquent */ class Message extends BaseModelAbstract implements HasPolicyContract, HasValidationRulesContract { diff --git a/code/app/Athenia/Models/Messaging/PushNotificationKey.php b/code/app/Athenia/Models/Messaging/PushNotificationKey.php index c4131f17..b533a4b7 100644 --- a/code/app/Athenia/Models/Messaging/PushNotificationKey.php +++ b/code/app/Athenia/Models/Messaging/PushNotificationKey.php @@ -19,6 +19,38 @@ * @property Carbon|null $deleted_at * @property-read CanReceivePushNotificationContract $owner * @mixin Eloquent + * @property int $owner_id + * @property string $owner_type + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|PushNotificationKey onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey whereOwnerId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey whereOwnerType($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey wherePushNotificationKey($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|PushNotificationKey withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|PushNotificationKey withoutTrashed() + * @mixin \Eloquent */ class PushNotificationKey extends BaseModelAbstract { diff --git a/code/app/Athenia/Models/Messaging/Thread.php b/code/app/Athenia/Models/Messaging/Thread.php index 051871da..67728401 100644 --- a/code/app/Athenia/Models/Messaging/Thread.php +++ b/code/app/Athenia/Models/Messaging/Thread.php @@ -40,6 +40,26 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\User\Thread whereTopic($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\User\Thread whereUpdatedAt($value) * @mixin \Eloquent + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|Thread onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread whereNotInJoin($column, $values, $boolean = 'and') + * @method static \Illuminate\Database\Eloquent\Builder|Thread withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Thread withoutTrashed() + * @mixin Eloquent */ class Thread extends BaseModelAbstract implements HasPolicyContract, HasValidationRulesContract { diff --git a/code/app/Athenia/Models/Organization/Organization.php b/code/app/Athenia/Models/Organization/Organization.php index 10059233..67eaa4ed 100644 --- a/code/app/Athenia/Models/Organization/Organization.php +++ b/code/app/Athenia/Models/Organization/Organization.php @@ -53,6 +53,27 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Organization\Organization whereProfileImageId($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Organization\Organization whereStripeCustomerKey($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Organization\Organization whereUpdatedAt($value) + * @property-read \Illuminate\Database\Eloquent\Collection $collections + * @property-read int|null $collections_count + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|Organization onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization whereNotInJoin($column, $values, $boolean = 'and') + * @method static \Illuminate\Database\Eloquent\Builder|Organization withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Organization withoutTrashed() * @mixin \Eloquent */ class Organization extends BaseModelAbstract diff --git a/code/app/Athenia/Models/Organization/OrganizationManager.php b/code/app/Athenia/Models/Organization/OrganizationManager.php index f6ae7aa0..862b4624 100644 --- a/code/app/Athenia/Models/Organization/OrganizationManager.php +++ b/code/app/Athenia/Models/Organization/OrganizationManager.php @@ -38,6 +38,26 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Organization\OrganizationManager whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Organization\OrganizationManager whereUserId($value) * @mixin \Eloquent + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|OrganizationManager onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager whereNotInJoin($column, $values, $boolean = 'and') + * @method static \Illuminate\Database\Eloquent\Builder|OrganizationManager withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|OrganizationManager withoutTrashed() + * @mixin Eloquent */ class OrganizationManager extends BaseModelAbstract implements HasValidationRulesContract, BelongsToOrganizationContract { diff --git a/code/app/Athenia/Models/Payment/LineItem.php b/code/app/Athenia/Models/Payment/LineItem.php index 6fec7318..f00072b3 100644 --- a/code/app/Athenia/Models/Payment/LineItem.php +++ b/code/app/Athenia/Models/Payment/LineItem.php @@ -34,6 +34,26 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Payment\LineItem wherePaymentId($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Payment\LineItem whereUpdatedAt($value) * @mixin \Eloquent + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|LineItem onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem whereNotInJoin($column, $values, $boolean = 'and') + * @method static \Illuminate\Database\Eloquent\Builder|LineItem withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|LineItem withoutTrashed() + * @mixin Eloquent */ class LineItem extends BaseModelAbstract { diff --git a/code/app/Athenia/Models/Payment/Payment.php b/code/app/Athenia/Models/Payment/Payment.php index c745faba..bb9fb278 100644 --- a/code/app/Athenia/Models/Payment/Payment.php +++ b/code/app/Athenia/Models/Payment/Payment.php @@ -42,6 +42,26 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Payment\Payment whereTransactionKey($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Payment\Payment whereUpdatedAt($value) * @mixin \Eloquent + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|Payment onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment whereNotInJoin($column, $values, $boolean = 'and') + * @method static \Illuminate\Database\Eloquent\Builder|Payment withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Payment withoutTrashed() + * @mixin Eloquent */ class Payment extends BaseModelAbstract { diff --git a/code/app/Athenia/Models/Payment/PaymentMethod.php b/code/app/Athenia/Models/Payment/PaymentMethod.php index 5e9362a0..86b7d548 100644 --- a/code/app/Athenia/Models/Payment/PaymentMethod.php +++ b/code/app/Athenia/Models/Payment/PaymentMethod.php @@ -50,6 +50,26 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Payment\PaymentMethod wherePaymentMethodType($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Payment\PaymentMethod whereUpdatedAt($value) * @mixin \Eloquent + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|PaymentMethod onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod whereNotInJoin($column, $values, $boolean = 'and') + * @method static \Illuminate\Database\Eloquent\Builder|PaymentMethod withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|PaymentMethod withoutTrashed() + * @mixin Eloquent */ class PaymentMethod extends BaseModelAbstract implements HasValidationRulesContract { diff --git a/code/app/Athenia/Models/Resource.php b/code/app/Athenia/Models/Resource.php index d3521648..988b89f0 100644 --- a/code/app/Athenia/Models/Resource.php +++ b/code/app/Athenia/Models/Resource.php @@ -30,6 +30,26 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Resource whereResourceType($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Resource whereUpdatedAt($value) * @mixin \Eloquent + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|Resource onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource whereNotInJoin($column, $values, $boolean = 'and') + * @method static \Illuminate\Database\Eloquent\Builder|Resource withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Resource withoutTrashed() + * @mixin Eloquent */ class Resource extends BaseModelAbstract implements HasPolicyContract { diff --git a/code/app/Athenia/Models/Role.php b/code/app/Athenia/Models/Role.php index 9dc78571..d336f92e 100644 --- a/code/app/Athenia/Models/Role.php +++ b/code/app/Athenia/Models/Role.php @@ -28,6 +28,26 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Role whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Role whereUpdatedAt($value) * @mixin \Eloquent + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|Role onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role whereNotInJoin($column, $values, $boolean = 'and') + * @method static \Illuminate\Database\Eloquent\Builder|Role withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Role withoutTrashed() + * @mixin Eloquent */ class Role extends BaseModelAbstract implements HasPolicyContract { diff --git a/code/app/Athenia/Models/Statistic/Statistic.php b/code/app/Athenia/Models/Statistic/Statistic.php index a3e4d5ec..83cc6d3d 100644 --- a/code/app/Athenia/Models/Statistic/Statistic.php +++ b/code/app/Athenia/Models/Statistic/Statistic.php @@ -29,6 +29,40 @@ * @property-read int|null $statistic_filters_count * @property-read Collection|TargetStatistic[] $targetStatistics * @property-read int|null $target_statistics_count + * @property string $model + * @property string $relation + * @property-read Collection $filters + * @property-read int|null $filters_count + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|Statistic onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic whereModel($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic whereName($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic wherePublic($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic whereRelation($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|Statistic withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Statistic withoutTrashed() * @mixin Eloquent */ class Statistic extends BaseModelAbstract implements HasValidationRulesContract @@ -40,11 +74,21 @@ class Statistic extends BaseModelAbstract implements HasValidationRulesContract * * @return HasMany */ - public function statisticFilters(): HasMany + public function filters(): HasMany { return $this->hasMany(StatisticFilter::class); } + /** + * Alias for backward compatibility + * + * @return HasMany + */ + public function statisticFilters(): HasMany + { + return $this->filters(); + } + /** * All instances of the target statistics in the system * diff --git a/code/app/Athenia/Models/Statistic/StatisticFilter.php b/code/app/Athenia/Models/Statistic/StatisticFilter.php index 367241b1..84a4b31c 100644 --- a/code/app/Athenia/Models/Statistic/StatisticFilter.php +++ b/code/app/Athenia/Models/Statistic/StatisticFilter.php @@ -9,8 +9,8 @@ /** * Class StatisticFilter - * @package App\Models\Statistics * + * @package App\Models\Statistics * @property int $id * @property int $statistic_id * @property string $field @@ -20,6 +20,37 @@ * @property \datetime|null $updated_at * @property \datetime|null $deleted_at * @property-read Statistic $statistic + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|StatisticFilter onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter whereField($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter whereOperator($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter whereStatisticId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter whereUpdatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter whereValue($value) + * @method static \Illuminate\Database\Eloquent\Builder|StatisticFilter withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|StatisticFilter withoutTrashed() + * @mixin \Eloquent */ class StatisticFilter extends BaseModelAbstract { diff --git a/code/app/Athenia/Models/Statistic/TargetStatistic.php b/code/app/Athenia/Models/Statistic/TargetStatistic.php index 8b90e1c0..240f3871 100644 --- a/code/app/Athenia/Models/Statistic/TargetStatistic.php +++ b/code/app/Athenia/Models/Statistic/TargetStatistic.php @@ -10,6 +10,7 @@ /** * Class TargetStatistic + * * @package App\Models\Statistics * @property int $id * @property int $target_id @@ -22,6 +23,40 @@ * @property \Carbon\Carbon|null $deleted_at * @property-read \App\Models\Statistic\Statistic $statistic * @property-read \Illuminate\Database\Eloquent\Model $target + * @property array|null $result + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|TargetStatistic onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereFilters($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereResult($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereStatisticId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereTargetId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereTargetType($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereUpdatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereValue($value) + * @method static \Illuminate\Database\Eloquent\Builder|TargetStatistic withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|TargetStatistic withoutTrashed() + * @mixin \Eloquent */ class TargetStatistic extends BaseModelAbstract { diff --git a/code/app/Athenia/Models/Subscription/MembershipPlan.php b/code/app/Athenia/Models/Subscription/MembershipPlan.php index 731fc8b9..6f00de36 100644 --- a/code/app/Athenia/Models/Subscription/MembershipPlan.php +++ b/code/app/Athenia/Models/Subscription/MembershipPlan.php @@ -49,6 +49,25 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Subscription\MembershipPlan whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Subscription\MembershipPlan whereTrialPeriod($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Subscription\MembershipPlan whereUpdatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|MembershipPlan onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan whereNotInJoin($column, $values, $boolean = 'and') + * @method static \Illuminate\Database\Eloquent\Builder|MembershipPlan withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|MembershipPlan withoutTrashed() * @mixin \Eloquent */ class MembershipPlan extends BaseModelAbstract implements HasPolicyContract, HasValidationRulesContract diff --git a/code/app/Athenia/Models/Subscription/MembershipPlanRate.php b/code/app/Athenia/Models/Subscription/MembershipPlanRate.php index 10f0f793..6a530596 100644 --- a/code/app/Athenia/Models/Subscription/MembershipPlanRate.php +++ b/code/app/Athenia/Models/Subscription/MembershipPlanRate.php @@ -34,6 +34,26 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Subscription\MembershipPlanRate whereMembershipPlanId($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Subscription\MembershipPlanRate whereUpdatedAt($value) * @mixin \Eloquent + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|MembershipPlanRate onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate whereNotInJoin($column, $values, $boolean = 'and') + * @method static \Illuminate\Database\Eloquent\Builder|MembershipPlanRate withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|MembershipPlanRate withoutTrashed() + * @mixin Eloquent */ class MembershipPlanRate extends BaseModelAbstract { diff --git a/code/app/Athenia/Models/Subscription/Subscription.php b/code/app/Athenia/Models/Subscription/Subscription.php index 3f6e03dc..42cce552 100644 --- a/code/app/Athenia/Models/Subscription/Subscription.php +++ b/code/app/Athenia/Models/Subscription/Subscription.php @@ -62,6 +62,26 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Subscription\Subscription whereSubscriberType($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Subscription\Subscription whereUpdatedAt($value) * @mixin \Eloquent + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|Subscription onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription whereNotInJoin($column, $values, $boolean = 'and') + * @method static \Illuminate\Database\Eloquent\Builder|Subscription withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Subscription withoutTrashed() + * @mixin Eloquent */ class Subscription extends BaseModelAbstract implements HasValidationRulesContract, HasPaymentsContract { diff --git a/code/app/Athenia/Models/User/ArticleNote.php b/code/app/Athenia/Models/User/ArticleNote.php new file mode 100644 index 00000000..b3e3447a --- /dev/null +++ b/code/app/Athenia/Models/User/ArticleNote.php @@ -0,0 +1,131 @@ +|ArticleNote getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|ArticleNote onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote whereArticleId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote whereCompletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote whereResponse($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote whereUpdatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote whereUserId($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArticleNote withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|ArticleNote withoutTrashed() + * @mixin Eloquent + */ +class ArticleNote extends BaseModelAbstract implements HasValidationRulesContract, CanBeAggregatedContract +{ + use HasValidationRules, SoftDeletes; + + /** + * The user who created this note + * + * @return BelongsTo + */ + public function user(): BelongsTo + { + return $this->belongsTo(User::class); + } + + /** + * The article this note is for + * + * @return BelongsTo + */ + public function article(): BelongsTo + { + return $this->belongsTo(Article::class); + } + + /** + * Build the model validation rules + * @param array $params + * @return array + */ + public function buildModelValidationRules(...$params): array + { + return [ + static::VALIDATION_RULES_BASE => [ + 'article_id' => [ + 'integer', + Rule::exists('articles', 'id'), + ], + 'completed' => [ + 'boolean', + ], + 'response' => [ + 'nullable', + 'string', + ], + ], + static::VALIDATION_RULES_UPDATE => [ + static::VALIDATION_PREPEND_REQUIRED => [ + ], + ], + static::VALIDATION_RULES_CREATE => [ + static::VALIDATION_PREPEND_REQUIRED => [ + 'article_id', + ], + ], + ]; + } + + /** + * Returns the relation paths to the models that can be target statistics + * For example: ["article"] would mean this model affects statistics on articles + * through the article relation + * + * @return string[] + */ + public function getStatisticTargetRelationPath(): array + { + return ['article']; + } +} diff --git a/code/app/Athenia/Models/User/Contact.php b/code/app/Athenia/Models/User/Contact.php index e4df03fe..7de2ef33 100644 --- a/code/app/Athenia/Models/User/Contact.php +++ b/code/app/Athenia/Models/User/Contact.php @@ -36,6 +36,26 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\User\Contact whereRequestedId($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\User\Contact whereUpdatedAt($value) * @mixin \Eloquent + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|Contact onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact whereNotInJoin($column, $values, $boolean = 'and') + * @method static \Illuminate\Database\Eloquent\Builder|Contact withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Contact withoutTrashed() + * @mixin Eloquent */ class Contact extends BaseModelAbstract implements HasValidationRulesContract { diff --git a/code/app/Athenia/Models/User/PasswordToken.php b/code/app/Athenia/Models/User/PasswordToken.php index 2af6f4b8..6392c039 100644 --- a/code/app/Athenia/Models/User/PasswordToken.php +++ b/code/app/Athenia/Models/User/PasswordToken.php @@ -26,6 +26,25 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\User\PasswordToken whereToken($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\User\PasswordToken whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\User\PasswordToken whereUserId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|PasswordToken onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken whereNotInJoin($column, $values, $boolean = 'and') + * @method static \Illuminate\Database\Eloquent\Builder|PasswordToken withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|PasswordToken withoutTrashed() * @mixin \Eloquent */ class PasswordToken extends BaseModelAbstract diff --git a/code/app/Athenia/Models/User/ProfileImage.php b/code/app/Athenia/Models/User/ProfileImage.php index 4935cb15..788735a7 100644 --- a/code/app/Athenia/Models/User/ProfileImage.php +++ b/code/app/Athenia/Models/User/ProfileImage.php @@ -37,6 +37,34 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\User\ProfileImage whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\User\ProfileImage whereUrl($value) * @mixin \Eloquent + * @property string|null $source + * @property string|null $alt + * @property int $width + * @property int $height + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|ProfileImage onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage whereAlt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage whereHeight($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage whereSource($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage whereWidth($value) + * @method static \Illuminate\Database\Eloquent\Builder|ProfileImage withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|ProfileImage withoutTrashed() + * @mixin Eloquent */ class ProfileImage extends Asset { diff --git a/code/app/Athenia/Models/User/User.php b/code/app/Athenia/Models/User/User.php index fc389d15..961cdc91 100644 --- a/code/app/Athenia/Models/User/User.php +++ b/code/app/Athenia/Models/User/User.php @@ -23,6 +23,7 @@ use App\Models\Organization\OrganizationManager; use App\Models\Resource; use App\Models\Role; +use App\Models\User\ArticleNote; use App\Models\Vote\BallotCompletion; use App\Models\Wiki\Article; use App\Models\Wiki\ArticleIteration; @@ -97,6 +98,31 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\User\User whereReceivePushNotifications($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\User\User whereStripeCustomerKey($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\User\User whereUpdatedAt($value) + * @property-read \Illuminate\Database\Eloquent\Collection $articleNotes + * @property-read int|null $article_notes_count + * @property-read \Illuminate\Database\Eloquent\Collection $collections + * @property-read int|null $collections_count + * @property-read \Illuminate\Database\Eloquent\Collection $pushNotificationKeys + * @property-read int|null $push_notification_keys_count + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|User onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User whereNotInJoin($column, $values, $boolean = 'and') + * @method static \Illuminate\Database\Eloquent\Builder|User withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|User withoutTrashed() * @mixin \Eloquent */ class User extends BaseModelAbstract @@ -146,6 +172,16 @@ public function ballotCompletions(): HasMany return $this->hasMany(BallotCompletion::class); } + /** + * The article notes this user has created + * + * @return HasMany + */ + public function articleNotes(): HasMany + { + return $this->hasMany(ArticleNote::class); + } + /** * The articles that were created by this user * diff --git a/code/app/Athenia/Models/Vote/Ballot.php b/code/app/Athenia/Models/Vote/Ballot.php index 91b9ead5..363fdff6 100644 --- a/code/app/Athenia/Models/Vote/Ballot.php +++ b/code/app/Athenia/Models/Vote/Ballot.php @@ -30,6 +30,26 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Vote\Ballot whereType($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Vote\Ballot whereUpdatedAt($value) * @mixin \Eloquent + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|Ballot onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot whereNotInJoin($column, $values, $boolean = 'and') + * @method static \Illuminate\Database\Eloquent\Builder|Ballot withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Ballot withoutTrashed() + * @mixin Eloquent */ class Ballot extends BaseModelAbstract { diff --git a/code/app/Athenia/Models/Vote/BallotCompletion.php b/code/app/Athenia/Models/Vote/BallotCompletion.php index 7b57ffb6..364c6004 100644 --- a/code/app/Athenia/Models/Vote/BallotCompletion.php +++ b/code/app/Athenia/Models/Vote/BallotCompletion.php @@ -35,6 +35,30 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Vote\BallotCompletion whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Vote\BallotCompletion whereUserId($value) * @mixin \Eloquent + * @property string|null $completed_at + * @property string|null $response + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|BallotCompletion onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion whereCompletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion whereResponse($value) + * @method static \Illuminate\Database\Eloquent\Builder|BallotCompletion withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|BallotCompletion withoutTrashed() + * @mixin Eloquent */ class BallotCompletion extends BaseModelAbstract implements HasValidationRulesContract { diff --git a/code/app/Athenia/Models/Vote/BallotItem.php b/code/app/Athenia/Models/Vote/BallotItem.php index 371e421e..78dc7ef5 100644 --- a/code/app/Athenia/Models/Vote/BallotItem.php +++ b/code/app/Athenia/Models/Vote/BallotItem.php @@ -35,6 +35,26 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Vote\BallotItem whereVoteCount($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Vote\BallotItem whereVotesCast($value) * @mixin \Eloquent + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|BallotItem onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem whereNotInJoin($column, $values, $boolean = 'and') + * @method static \Illuminate\Database\Eloquent\Builder|BallotItem withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|BallotItem withoutTrashed() + * @mixin Eloquent */ class BallotItem extends BaseModelAbstract { diff --git a/code/app/Athenia/Models/Vote/BallotItemOption.php b/code/app/Athenia/Models/Vote/BallotItemOption.php index aab5c2ac..ea2d0581 100644 --- a/code/app/Athenia/Models/Vote/BallotItemOption.php +++ b/code/app/Athenia/Models/Vote/BallotItemOption.php @@ -34,6 +34,25 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Vote\BallotItemOption whereSubjectType($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Vote\BallotItemOption whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Vote\BallotItemOption whereVoteCount($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|BallotItemOption onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption whereNotInJoin($column, $values, $boolean = 'and') + * @method static \Illuminate\Database\Eloquent\Builder|BallotItemOption withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|BallotItemOption withoutTrashed() * @mixin \Eloquent */ class BallotItemOption extends BaseModelAbstract diff --git a/code/app/Athenia/Models/Vote/Vote.php b/code/app/Athenia/Models/Vote/Vote.php index 66e2e886..5cd5692e 100644 --- a/code/app/Athenia/Models/Vote/Vote.php +++ b/code/app/Athenia/Models/Vote/Vote.php @@ -29,6 +29,25 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Vote\Vote whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Vote\Vote whereResult($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Vote\Vote whereUpdatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|Vote onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote whereNotInJoin($column, $values, $boolean = 'and') + * @method static \Illuminate\Database\Eloquent\Builder|Vote withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Vote withoutTrashed() * @mixin \Eloquent */ class Vote extends BaseModelAbstract diff --git a/code/app/Athenia/Models/Wiki/Article.php b/code/app/Athenia/Models/Wiki/Article.php index a49416ae..fa510873 100644 --- a/code/app/Athenia/Models/Wiki/Article.php +++ b/code/app/Athenia/Models/Wiki/Article.php @@ -4,10 +4,12 @@ namespace App\Athenia\Models\Wiki; use App\Athenia\Contracts\Models\CanBeIndexedContract; +use App\Athenia\Contracts\Models\CanBeStatisticTargetContract; use App\Athenia\Contracts\Models\HasPolicyContract; use App\Athenia\Contracts\Models\HasValidationRulesContract; use App\Athenia\Models\BaseModelAbstract; use App\Athenia\Models\Traits\CanBeIndexed; +use App\Athenia\Models\Traits\HasStatisticTargets; use App\Athenia\Models\Traits\HasValidationRules; use App\Models\Category; use App\Models\User\User; @@ -46,10 +48,45 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Wiki\Article whereTitle($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Wiki\Article whereUpdatedAt($value) * @mixin \Eloquent + * @property string|null $url + * @property string|null $authors + * @property int $has_full_modification_history + * @property-read \Illuminate\Database\Eloquent\Collection $articleNotes + * @property-read int|null $article_notes_count + * @property-read \Illuminate\Database\Eloquent\Collection $categories + * @property-read int|null $categories_count + * @property-read \Illuminate\Database\Eloquent\Collection $modifications + * @property-read int|null $modifications_count + * @property-read \App\Models\Resource|null $resource + * @property-read \Illuminate\Database\Eloquent\Collection $targetStatistics + * @property-read int|null $target_statistics_count + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|Article onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article whereAuthors($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article whereHasFullModificationHistory($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article whereUrl($value) + * @method static \Illuminate\Database\Eloquent\Builder|Article withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Article withoutTrashed() + * @mixin Eloquent */ -class Article extends BaseModelAbstract implements HasPolicyContract, HasValidationRulesContract, CanBeIndexedContract +class Article extends BaseModelAbstract implements HasPolicyContract, HasValidationRulesContract, CanBeIndexedContract, CanBeStatisticTargetContract { - use HasValidationRules, CanBeIndexed; + use HasValidationRules, CanBeIndexed, HasStatisticTargets; /** * Values that are appending on a toArray function call @@ -116,6 +153,16 @@ public function categories() : BelongsToMany ->withTimestamps(); } + /** + * All notes associated with this article + * + * @return HasMany + */ + public function articleNotes() : HasMany + { + return $this->hasMany(\App\Models\User\ArticleNote::class); + } + /** * Gets the content of the article * @@ -182,6 +229,15 @@ public function buildModelValidationRules(...$params): array 'string', 'max:120', ], + 'url' => [ + 'nullable', + 'string', + 'url', + ], + 'authors' => [ + 'nullable', + 'string', + ], 'categories' => [ 'array', ], diff --git a/code/app/Athenia/Models/Wiki/ArticleIteration.php b/code/app/Athenia/Models/Wiki/ArticleIteration.php index 03ee3940..3e399eb1 100644 --- a/code/app/Athenia/Models/Wiki/ArticleIteration.php +++ b/code/app/Athenia/Models/Wiki/ArticleIteration.php @@ -38,6 +38,29 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Wiki\ArticleIteration whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Wiki\ArticleIteration whereUpdatedAt($value) * @mixin \Eloquent + * @property int|null $article_modification_id + * @property-read ArticleModification|null $modification + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration joinRelations($relations, $leftJoin = null) + * @method static Builder|ArticleIteration onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration whereArticleModificationId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration whereNotInJoin($column, $values, $boolean = 'and') + * @method static Builder|ArticleIteration withTrashed(bool $withTrashed = true) + * @method static Builder|ArticleIteration withoutTrashed() + * @mixin Eloquent */ class ArticleIteration extends BaseModelAbstract implements HasPolicyContract { diff --git a/code/app/Athenia/Models/Wiki/ArticleModification.php b/code/app/Athenia/Models/Wiki/ArticleModification.php index d3a563c9..0d8d6f21 100644 --- a/code/app/Athenia/Models/Wiki/ArticleModification.php +++ b/code/app/Athenia/Models/Wiki/ArticleModification.php @@ -11,7 +11,51 @@ /** * Class ArticleModification + * * @package App\Models\Wiki + * @property int $id + * @property int $article_id + * @property string $action + * @property int $start_position + * @property int|null $length + * @property string|null $content + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property-read Article $article + * @property-read ArticleIteration|null $iteration + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|ArticleModification onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereAction($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereArticleId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereContent($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereLength($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereStartPosition($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArticleModification withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|ArticleModification withoutTrashed() + * @mixin \Eloquent */ class ArticleModification extends BaseModelAbstract { diff --git a/code/app/Athenia/Models/Wiki/ArticleVersion.php b/code/app/Athenia/Models/Wiki/ArticleVersion.php index 2941fd30..46167dea 100644 --- a/code/app/Athenia/Models/Wiki/ArticleVersion.php +++ b/code/app/Athenia/Models/Wiki/ArticleVersion.php @@ -34,6 +34,27 @@ * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Wiki\ArticleVersion whereIterationId($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Wiki\ArticleVersion whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|\App\Models\Wiki\ArticleVersion whereUpdatedAt($value) + * @property int $article_iteration_id + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion joinRelations($relations, $leftJoin = null) + * @method static \Illuminate\Database\Eloquent\Builder|ArticleVersion onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion whereArticleIterationId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion whereNotInJoin($column, $values, $boolean = 'and') + * @method static \Illuminate\Database\Eloquent\Builder|ArticleVersion withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|ArticleVersion withoutTrashed() * @mixin \Eloquent */ class ArticleVersion extends BaseModelAbstract implements HasValidationRulesContract diff --git a/code/app/Athenia/Providers/BaseEventServiceProvider.php b/code/app/Athenia/Providers/BaseEventServiceProvider.php index 48bd3e50..1924ce3f 100644 --- a/code/app/Athenia/Providers/BaseEventServiceProvider.php +++ b/code/app/Athenia/Providers/BaseEventServiceProvider.php @@ -38,6 +38,7 @@ use App\Athenia\Listeners\Statistic\StatisticCreatedListener; use App\Athenia\Listeners\Statistic\StatisticDeletedListener; use App\Models\Payment\PaymentMethod; +use App\Models\User\ArticleNote; use App\Models\User\User; use App\Models\Wiki\Article; use App\Models\Collection\CollectionItem; @@ -135,6 +136,7 @@ public function boot() User::observe(IndexableModelObserver::class); PaymentMethod::observe(PaymentMethodObserver::class); CollectionItem::observe(AggregatedModelObserver::class); + ArticleNote::observe(AggregatedModelObserver::class); $this->registerObservers(); } diff --git a/code/app/Athenia/Providers/BaseRepositoryProvider.php b/code/app/Athenia/Providers/BaseRepositoryProvider.php index 05798510..a60bc8ea 100644 --- a/code/app/Athenia/Providers/BaseRepositoryProvider.php +++ b/code/app/Athenia/Providers/BaseRepositoryProvider.php @@ -20,6 +20,7 @@ use App\Athenia\Contracts\Repositories\Subscription\MembershipPlanRateRepositoryContract; use App\Athenia\Contracts\Repositories\Subscription\MembershipPlanRepositoryContract; use App\Athenia\Contracts\Repositories\Subscription\SubscriptionRepositoryContract; +use App\Athenia\Contracts\Repositories\User\ArticleNoteRepositoryContract; use App\Athenia\Contracts\Repositories\User\ContactRepositoryContract; use App\Athenia\Contracts\Repositories\User\PasswordTokenRepositoryContract; use App\Athenia\Contracts\Repositories\User\ProfileImageRepositoryContract; @@ -58,6 +59,7 @@ use App\Athenia\Repositories\Subscription\MembershipPlanRateRepository; use App\Athenia\Repositories\Subscription\MembershipPlanRepository; use App\Athenia\Repositories\Subscription\SubscriptionRepository; +use App\Athenia\Repositories\User\ArticleNoteRepository; use App\Athenia\Repositories\User\ContactRepository; use App\Athenia\Repositories\User\PasswordTokenRepository; use App\Athenia\Repositories\User\ProfileImageRepository; @@ -91,6 +93,7 @@ use App\Models\Subscription\MembershipPlan; use App\Models\Subscription\MembershipPlanRate; use App\Models\Subscription\Subscription; +use App\Models\User\ArticleNote; use App\Models\User\Contact; use App\Models\User\PasswordToken; use App\Models\User\ProfileImage; @@ -129,6 +132,7 @@ public final function provides(): array ArticleIterationRepositoryContract::class, ArticleModificationRepositoryContract::class, ArticleVersionRepositoryContract::class, + ArticleNoteRepositoryContract::class, AssetRepositoryContract::class, BallotRepositoryContract::class, BallotCompletionRepositoryContract::class, @@ -186,6 +190,7 @@ public final function register(): void return new ArticleRepository( new Article(), $this->app->make('log'), + $this->app->make(StatisticRepositoryContract::class), ); }); $this->app->bind(ArticleIterationRepositoryContract::class, function() { @@ -207,6 +212,12 @@ public final function register(): void $this->app->make(Dispatcher::class), ); }); + $this->app->bind(ArticleNoteRepositoryContract::class, function() { + return new ArticleNoteRepository( + new ArticleNote(), + $this->app->make('log'), + ); + }); $this->app->bind(AssetRepositoryContract::class, function() { return new AssetRepository( new Asset(), diff --git a/code/app/Athenia/Repositories/Statistic/StatisticRepository.php b/code/app/Athenia/Repositories/Statistic/StatisticRepository.php index 341708dd..53b772f4 100644 --- a/code/app/Athenia/Repositories/Statistic/StatisticRepository.php +++ b/code/app/Athenia/Repositories/Statistic/StatisticRepository.php @@ -10,6 +10,7 @@ use App\Athenia\Events\Statistic\StatisticUpdatedEvent; use App\Athenia\Events\Statistic\StatisticCreatedEvent; use Illuminate\Contracts\Events\Dispatcher; +use Illuminate\Support\Collection; use Psr\Log\LoggerInterface as LogContract; use App\Athenia\Repositories\Statistic\StatisticFilterRepository; use App\Athenia\Traits\CanGetAndUnset; @@ -89,4 +90,16 @@ public function delete(BaseModelAbstract $model): void parent::delete($model); $this->dispatcher->dispatch(new StatisticDeletedEvent($model)); } + + /** + * Get all statistics for a given model + * + * @param string $model + * @return Collection + */ + public function findAllForModel(string $model): Collection + { + return $this->model->newQuery() + ->where('model', $model)->get(); + } } \ No newline at end of file diff --git a/code/app/Athenia/Repositories/User/ArticleNoteRepository.php b/code/app/Athenia/Repositories/User/ArticleNoteRepository.php new file mode 100644 index 00000000..a19436cf --- /dev/null +++ b/code/app/Athenia/Repositories/User/ArticleNoteRepository.php @@ -0,0 +1,70 @@ +getAndUnset($data, 'completed'); + + if ($completed === true) { + $data['completed_at'] = now(); + } + + return parent::create($data, $relatedModel, $forcedValues); + } + + /** + * Override update to handle completed boolean + * + * @param BaseModelAbstract $model + * @param array $data + * @param array $forcedValues + * @return BaseModelAbstract + */ + public function update(BaseModelAbstract $model, array $data, array $forcedValues = []): BaseModelAbstract + { + $completed = $this->getAndUnset($data, 'completed'); + + if ($completed === true) { + $data['completed_at'] = now(); + } elseif ($completed === false) { + $data['completed_at'] = null; + } + + return parent::update($model, $data, $forcedValues); + } +} diff --git a/code/app/Athenia/Repositories/Wiki/ArticleRepository.php b/code/app/Athenia/Repositories/Wiki/ArticleRepository.php index 1c03c9f4..fb4ae5ab 100644 --- a/code/app/Athenia/Repositories/Wiki/ArticleRepository.php +++ b/code/app/Athenia/Repositories/Wiki/ArticleRepository.php @@ -3,10 +3,13 @@ namespace App\Athenia\Repositories\Wiki; +use App\Athenia\Contracts\Repositories\Statistic\StatisticRepositoryContract; use App\Athenia\Contracts\Repositories\Wiki\ArticleRepositoryContract; use App\Athenia\Models\BaseModelAbstract; use App\Athenia\Repositories\BaseRepositoryAbstract; use App\Athenia\Traits\CanGetAndUnset; +use App\Models\Statistic\Statistic; +use App\Models\User\User; use App\Models\Wiki\Article; use App\Repositories\Traits\NotImplemented; use Psr\Log\LoggerInterface as LogContract; @@ -24,8 +27,13 @@ class ArticleRepository extends BaseRepositoryAbstract implements ArticleReposit * ArticleRepository constructor. * @param Article $model * @param LogContract $log + * @param StatisticRepositoryContract $statisticRepository */ - public function __construct(Article $model, LogContract $log) + public function __construct( + Article $model, + LogContract $log, + private readonly StatisticRepositoryContract $statisticRepository + ) { parent::__construct($model, $log); } @@ -79,4 +87,84 @@ public function update(BaseModelAbstract $model, array $data, array $forcedValue return $article; } + + /** + * Selects an article for a user based on their note completion status and article statistics. + * + * Priority order: + * 1. Articles where user has NO note started (never returns articles with completed notes) + * 2. Articles where user has an incomplete note + * + * Within each priority group, orders by: + * - Lowest total_completed_notes statistic (fewest completions by all users) + * - Lowest total_notes statistic (fewest notes started by all users) + * - Random order for variety when statistics are equal + * + * @param User $user + * @return Article|null + */ + public function selectArticleForUser(User $user): ?Article + { + // Get all statistics for the article model + $statistics = $this->statisticRepository->findAllForModel('article'); + + // Build a map of statistic names to their IDs + $statisticMap = []; + foreach ($statistics as $statistic) { + $statisticMap[$statistic->name] = $statistic->id; + } + + // Start building the query + $query = $this->model->newQuery() + ->select('articles.*') + ->leftJoin('article_notes as user_notes', function($join) use ($user) { + $join->on('articles.id', '=', 'user_notes.article_id') + ->where('user_notes.user_id', '=', $user->id) + ->whereNull('user_notes.deleted_at'); + }); + + // Conditionally add join for total_completed_notes statistic + if (isset($statisticMap['total_completed_notes'])) { + $completedStatId = $statisticMap['total_completed_notes']; + $query->leftJoin('target_statistics as completed_stats', function($join) use ($completedStatId) { + $join->on('articles.id', '=', 'completed_stats.target_id') + ->where('completed_stats.target_type', '=', 'article') + ->where('completed_stats.statistic_id', '=', $completedStatId); + }); + } + + // Conditionally add join for total_notes statistic + if (isset($statisticMap['total_notes'])) { + $totalNotesStatId = $statisticMap['total_notes']; + $query->leftJoin('target_statistics as total_stats', function($join) use ($totalNotesStatId) { + $join->on('articles.id', '=', 'total_stats.target_id') + ->where('total_stats.target_type', '=', 'article') + ->where('total_stats.statistic_id', '=', $totalNotesStatId); + }); + } + + // Exclude articles where user has completed a note + $query->where(function($query) { + $query->whereNull('user_notes.id') + ->orWhereNull('user_notes.completed_at'); + }); + + // Order by priority: no note (1) before incomplete note (2) + $query->orderByRaw('CASE WHEN user_notes.id IS NULL THEN 1 ELSE 2 END ASC'); + + // Conditionally add ordering by completed notes count + if (isset($statisticMap['total_completed_notes'])) { + $query->orderByRaw('COALESCE(CAST(JSON_EXTRACT(completed_stats.result, "$.total") AS UNSIGNED), 0) ASC'); + } + + // Conditionally add ordering by total notes count + if (isset($statisticMap['total_notes'])) { + $query->orderByRaw('COALESCE(CAST(JSON_EXTRACT(total_stats.result, "$.total") AS UNSIGNED), 0) ASC'); + } + + // Finally order randomly for variety + $query->inRandomOrder(); + + return $query->first(); + } } \ No newline at end of file diff --git a/code/app/Http/Core/Requests/User/ArticleNote/DeleteRequest.php b/code/app/Http/Core/Requests/User/ArticleNote/DeleteRequest.php new file mode 100644 index 00000000..dfb627c4 --- /dev/null +++ b/code/app/Http/Core/Requests/User/ArticleNote/DeleteRequest.php @@ -0,0 +1,13 @@ +|Asset getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|Asset onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset whereAlt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset whereCaption($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset whereHeight($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset whereName($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset whereOwnerId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset whereOwnerType($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset whereSource($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset whereUpdatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset whereUrl($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Asset whereWidth($value) + * @method static \Illuminate\Database\Eloquent\Builder|Asset withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Asset withoutTrashed() + * @mixin \Eloquent */ class Asset extends AtheniaAsset { diff --git a/code/app/Models/Category.php b/code/app/Models/Category.php index 596a5f13..ca12c434 100644 --- a/code/app/Models/Category.php +++ b/code/app/Models/Category.php @@ -7,7 +7,46 @@ /** * Class Category + * * @package App\Models + * @property int $id + * @property string $name + * @property string|null $description + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property-read \Illuminate\Database\Eloquent\Collection $articles + * @property-read int|null $articles_count + * @method static \Database\Factories\CategoryFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|Category onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category whereDescription($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category whereName($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Category whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|Category withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Category withoutTrashed() + * @mixin \Eloquent */ class Category extends AtheniaCategory { diff --git a/code/app/Models/Collection/Collection.php b/code/app/Models/Collection/Collection.php index 1d8b5968..a2794dc5 100644 --- a/code/app/Models/Collection/Collection.php +++ b/code/app/Models/Collection/Collection.php @@ -7,7 +7,53 @@ /** * Class Collection + * * @package App\Models\Collection + * @property int $id + * @property int $owner_id + * @property string $owner_type + * @property string|null $name + * @property int $is_public + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property-read \Illuminate\Database\Eloquent\Collection $collectionItems + * @property-read int|null $collection_items_count + * @property-read \Illuminate\Database\Eloquent\Model|\Eloquent $owner + * @property-read \Illuminate\Database\Eloquent\Collection $targetStatistics + * @property-read int|null $target_statistics_count + * @method static \Database\Factories\Collection\CollectionFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|Collection onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection whereIsPublic($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection whereName($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection whereOwnerId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection whereOwnerType($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Collection whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|Collection withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Collection withoutTrashed() + * @mixin \Eloquent */ class Collection extends AtheniaCollection { diff --git a/code/app/Models/Collection/CollectionItem.php b/code/app/Models/Collection/CollectionItem.php index 6b3101c6..9469657d 100644 --- a/code/app/Models/Collection/CollectionItem.php +++ b/code/app/Models/Collection/CollectionItem.php @@ -7,7 +7,52 @@ /** * Class CollectionItem + * * @package App\Models\Collection + * @property int $id + * @property int $item_id + * @property string $item_type + * @property int $collection_id + * @property int $order + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property-read \Illuminate\Database\Eloquent\Collection $categories + * @property-read int|null $categories_count + * @property-read \App\Models\Collection\Collection $collection + * @property-read \Illuminate\Database\Eloquent\Model|\Eloquent $item + * @method static \Database\Factories\Collection\CollectionItemFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|CollectionItem onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem whereCollectionId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem whereItemId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem whereItemType($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem whereOrder($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|CollectionItem whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|CollectionItem withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|CollectionItem withoutTrashed() + * @mixin \Eloquent */ class CollectionItem extends AtheniaCollectionItem { diff --git a/code/app/Models/Feature.php b/code/app/Models/Feature.php index b08394ee..0744fc4b 100644 --- a/code/app/Models/Feature.php +++ b/code/app/Models/Feature.php @@ -7,7 +7,46 @@ /** * Class Feature + * * @package App\Models + * @property int $id + * @property string $name + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property string|null $description + * @property-read \Illuminate\Database\Eloquent\Collection $membershipPlans + * @property-read int|null $membership_plans_count + * @method static \Database\Factories\FeatureFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|Feature onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature whereDescription($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature whereName($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Feature whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|Feature withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Feature withoutTrashed() + * @mixin \Eloquent */ class Feature extends AtheniaFeature { diff --git a/code/app/Models/Messaging/Message.php b/code/app/Models/Messaging/Message.php index eb08289d..1cf30122 100644 --- a/code/app/Models/Messaging/Message.php +++ b/code/app/Models/Messaging/Message.php @@ -7,7 +7,75 @@ /** * Class Message + * * @package App\Models\Messaging + * @property int $id + * @property string|null $email + * @property string|null $subject + * @property string|null $template + * @property array $data + * @property int|null $to_id + * @property int|null $from_id + * @property int|null $thread_id + * @property array|null $via + * @property string|null $action + * @property \Illuminate\Support\Carbon|null $scheduled_at + * @property \Illuminate\Support\Carbon|null $sent_at + * @property \Illuminate\Support\Carbon|null $seen_at + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property string|null $reply_to_email + * @property string|null $reply_to_name + * @property string|null $to_type + * @property string|null $from_type + * @property-read \Illuminate\Database\Eloquent\Model|\Eloquent|null $from + * @property-read \App\Models\Messaging\Thread|null $thread + * @property-read \Illuminate\Database\Eloquent\Model|\Eloquent|null $to + * @method static \Database\Factories\Messaging\MessageFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|Message onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereAction($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereData($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereEmail($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereFromId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereFromType($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereReplyToEmail($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereReplyToName($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereScheduledAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereSeenAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereSentAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereSubject($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereTemplate($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereThreadId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereToId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereToType($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereUpdatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Message whereVia($value) + * @method static \Illuminate\Database\Eloquent\Builder|Message withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Message withoutTrashed() + * @mixin \Eloquent */ class Message extends AtheniaMessage { diff --git a/code/app/Models/Messaging/PushNotificationKey.php b/code/app/Models/Messaging/PushNotificationKey.php index 69bcff1c..7e96d3dc 100644 --- a/code/app/Models/Messaging/PushNotificationKey.php +++ b/code/app/Models/Messaging/PushNotificationKey.php @@ -7,7 +7,47 @@ /** * Class PushNotificationKey + * * @package App\Models\Messaging + * @property int $id + * @property int $owner_id + * @property string $owner_type + * @property string $push_notification_key + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property-read \Illuminate\Database\Eloquent\Model|\Eloquent $owner + * @method static \Database\Factories\Messaging\PushNotificationKeyFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|PushNotificationKey onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey whereOwnerId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey whereOwnerType($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey wherePushNotificationKey($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PushNotificationKey whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|PushNotificationKey withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|PushNotificationKey withoutTrashed() + * @mixin \Eloquent */ class PushNotificationKey extends AtheniaPushNotificationKey { diff --git a/code/app/Models/Messaging/Thread.php b/code/app/Models/Messaging/Thread.php index 42d43927..82dac221 100644 --- a/code/app/Models/Messaging/Thread.php +++ b/code/app/Models/Messaging/Thread.php @@ -7,7 +7,51 @@ /** * Class Thread + * * @package App\Models\Messaging + * @property int $id + * @property string|null $topic + * @property int|null $subject_id + * @property string|null $subject_type + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property-read null|string $last_message + * @property-read \Illuminate\Database\Eloquent\Collection $messages + * @property-read int|null $messages_count + * @property-read \Illuminate\Database\Eloquent\Collection $users + * @property-read int|null $users_count + * @method static \Database\Factories\Messaging\ThreadFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|Thread onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread whereSubjectId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread whereSubjectType($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread whereTopic($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Thread whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|Thread withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Thread withoutTrashed() + * @mixin \Eloquent */ class Thread extends AtheniaThread { diff --git a/code/app/Models/Organization/Organization.php b/code/app/Models/Organization/Organization.php index 08fd8851..fd4b6a40 100644 --- a/code/app/Models/Organization/Organization.php +++ b/code/app/Models/Organization/Organization.php @@ -7,7 +7,60 @@ /** * Class Organization + * * @package App\Models\Organization + * @property int $id + * @property string $name + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property int|null $profile_image_id + * @property string|null $stripe_customer_key + * @property-read \Illuminate\Database\Eloquent\Collection $assets + * @property-read int|null $assets_count + * @property-read \Illuminate\Database\Eloquent\Collection $collections + * @property-read int|null $collections_count + * @property-read null|string $profile_image_url + * @property-read \Illuminate\Database\Eloquent\Collection $organizationManagers + * @property-read int|null $organization_managers_count + * @property-read \Illuminate\Database\Eloquent\Collection $paymentMethods + * @property-read int|null $payment_methods_count + * @property-read \Illuminate\Database\Eloquent\Collection $payments + * @property-read int|null $payments_count + * @property-read \App\Models\User\ProfileImage|null $profileImage + * @property-read \Illuminate\Database\Eloquent\Collection $subscriptions + * @property-read int|null $subscriptions_count + * @method static \Database\Factories\Organization\OrganizationFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|Organization onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization whereName($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization whereProfileImageId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization whereStripeCustomerKey($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Organization whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|Organization withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Organization withoutTrashed() + * @mixin \Eloquent */ class Organization extends AtheniaOrganization { diff --git a/code/app/Models/Organization/OrganizationManager.php b/code/app/Models/Organization/OrganizationManager.php index 5b55e136..b353f103 100644 --- a/code/app/Models/Organization/OrganizationManager.php +++ b/code/app/Models/Organization/OrganizationManager.php @@ -7,7 +7,49 @@ /** * Class OrganizationManager + * * @package App\Models\Organization + * @property int $id + * @property int $user_id + * @property int $organization_id + * @property int $role_id + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property-read \App\Models\Organization\Organization $organization + * @property-read \App\Models\Role $role + * @property-read \App\Models\User\User $user + * @method static \Database\Factories\Organization\OrganizationManagerFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|OrganizationManager onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager whereOrganizationId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager whereRoleId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager whereUpdatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|OrganizationManager whereUserId($value) + * @method static \Illuminate\Database\Eloquent\Builder|OrganizationManager withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|OrganizationManager withoutTrashed() + * @mixin \Eloquent */ class OrganizationManager extends AtheniaOrganizationManager { diff --git a/code/app/Models/Payment/LineItem.php b/code/app/Models/Payment/LineItem.php index ec76bdb4..0c6fbc64 100644 --- a/code/app/Models/Payment/LineItem.php +++ b/code/app/Models/Payment/LineItem.php @@ -7,7 +7,50 @@ /** * Class LineItem + * * @package App\Models\Payment + * @property int $id + * @property int $payment_id + * @property int|null $item_id + * @property string $item_type + * @property float $amount + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property-read \Illuminate\Database\Eloquent\Model|\Eloquent|null $item + * @property-read \App\Models\Payment\Payment $payment + * @method static \Database\Factories\Payment\LineItemFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|LineItem onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem whereAmount($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem whereItemId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem whereItemType($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem wherePaymentId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|LineItem whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|LineItem withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|LineItem withoutTrashed() + * @mixin \Eloquent */ class LineItem extends AtheniaLineItem { diff --git a/code/app/Models/Payment/Payment.php b/code/app/Models/Payment/Payment.php index f7bf51bf..98b7e81a 100644 --- a/code/app/Models/Payment/Payment.php +++ b/code/app/Models/Payment/Payment.php @@ -7,7 +7,56 @@ /** * Class Payment + * * @package App\Models\Payment + * @property int $id + * @property int $payment_method_id + * @property float $amount + * @property string|null $transaction_key + * @property \Illuminate\Support\Carbon|null $refunded_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property int|null $owner_id + * @property string|null $owner_type + * @property-read \Illuminate\Database\Eloquent\Collection $lineItems + * @property-read int|null $line_items_count + * @property-read \Illuminate\Database\Eloquent\Model|\Eloquent|null $owner + * @property-read \App\Models\Payment\PaymentMethod $paymentMethod + * @method static \Database\Factories\Payment\PaymentFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|Payment onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment whereAmount($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment whereOwnerId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment whereOwnerType($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment wherePaymentMethodId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment whereRefundedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment whereTransactionKey($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Payment whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|Payment withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Payment withoutTrashed() + * @mixin \Eloquent */ class Payment extends AtheniaPayment { diff --git a/code/app/Models/Payment/PaymentMethod.php b/code/app/Models/Payment/PaymentMethod.php index d8d03fc9..b38ce27b 100644 --- a/code/app/Models/Payment/PaymentMethod.php +++ b/code/app/Models/Payment/PaymentMethod.php @@ -7,7 +7,63 @@ /** * Class PaymentMethod + * * @package App\Models\Payment + * @property int $id + * @property int $owner_id + * @property string $owner_type + * @property string|null $payment_method_key + * @property string $payment_method_type + * @property string|null $identifier + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property int $default + * @property string|null $brand + * @property string|null $exp_month + * @property string|null $exp_year + * @property-read \Illuminate\Database\Eloquent\Model|\Eloquent $owner + * @property-read \Illuminate\Database\Eloquent\Collection $payments + * @property-read int|null $payments_count + * @property-read \Illuminate\Database\Eloquent\Collection $subscriptions + * @property-read int|null $subscriptions_count + * @method static \Database\Factories\Payment\PaymentMethodFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|PaymentMethod onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod whereBrand($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod whereDefault($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod whereExpMonth($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod whereExpYear($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod whereIdentifier($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod whereOwnerId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod whereOwnerType($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod wherePaymentMethodKey($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod wherePaymentMethodType($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PaymentMethod whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|PaymentMethod withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|PaymentMethod withoutTrashed() + * @mixin \Eloquent */ class PaymentMethod extends AtheniaPaymentMethod { diff --git a/code/app/Models/Resource.php b/code/app/Models/Resource.php index 199f15ff..1be8e2d1 100644 --- a/code/app/Models/Resource.php +++ b/code/app/Models/Resource.php @@ -7,7 +7,47 @@ /** * Class Resource + * * @package App\Models + * @property int $id + * @property string $content + * @property int $resource_id + * @property string $resource_type + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property-read \Illuminate\Database\Eloquent\Model|\Eloquent $resource + * @method static \Database\Factories\ResourceFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|Resource onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource whereContent($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource whereResourceId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource whereResourceType($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Resource whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|Resource withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Resource withoutTrashed() + * @mixin \Eloquent */ class Resource extends AtheniaResource { diff --git a/code/app/Models/Role.php b/code/app/Models/Role.php index c2aa6c29..4d987927 100644 --- a/code/app/Models/Role.php +++ b/code/app/Models/Role.php @@ -7,7 +7,43 @@ /** * Class Role + * * @package App\Models + * @property int $id + * @property string $name + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property-read \Illuminate\Database\Eloquent\Collection $users + * @property-read int|null $users_count + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|Role onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role whereName($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Role whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|Role withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Role withoutTrashed() + * @mixin \Eloquent */ class Role extends AtheniaRole { diff --git a/code/app/Models/Statistic/Statistic.php b/code/app/Models/Statistic/Statistic.php index ad340cff..7f475a86 100644 --- a/code/app/Models/Statistic/Statistic.php +++ b/code/app/Models/Statistic/Statistic.php @@ -7,7 +7,54 @@ /** * Class Statistic + * * @package App\Models\Statistic + * @property int $id + * @property string $name + * @property string $model + * @property string $relation + * @property int $public + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property-read \Illuminate\Database\Eloquent\Collection $filters + * @property-read int|null $filters_count + * @property-read \Illuminate\Database\Eloquent\Collection $statisticFilters + * @property-read int|null $statistic_filters_count + * @property-read \Illuminate\Database\Eloquent\Collection $targetStatistics + * @property-read int|null $target_statistics_count + * @method static \Database\Factories\Statistic\StatisticFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|Statistic onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic whereModel($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic whereName($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic wherePublic($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic whereRelation($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Statistic whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|Statistic withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Statistic withoutTrashed() + * @mixin \Eloquent */ class Statistic extends AtheniaStatistic { diff --git a/code/app/Models/Statistic/StatisticFilter.php b/code/app/Models/Statistic/StatisticFilter.php index fc4e633d..d213e578 100644 --- a/code/app/Models/Statistic/StatisticFilter.php +++ b/code/app/Models/Statistic/StatisticFilter.php @@ -7,7 +7,49 @@ /** * Class StatisticFilter + * * @package App\Models\Statistic + * @property int $id + * @property int $statistic_id + * @property string $field + * @property string $operator + * @property string|null $value + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property-read \App\Models\Statistic\Statistic $statistic + * @method static \Database\Factories\Statistic\StatisticFilterFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|StatisticFilter onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter whereField($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter whereOperator($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter whereStatisticId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter whereUpdatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|StatisticFilter whereValue($value) + * @method static \Illuminate\Database\Eloquent\Builder|StatisticFilter withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|StatisticFilter withoutTrashed() + * @mixin \Eloquent */ class StatisticFilter extends AtheniaStatisticFilter { diff --git a/code/app/Models/Statistic/TargetStatistic.php b/code/app/Models/Statistic/TargetStatistic.php index 907a8597..1e8fd27b 100644 --- a/code/app/Models/Statistic/TargetStatistic.php +++ b/code/app/Models/Statistic/TargetStatistic.php @@ -7,7 +7,54 @@ /** * Class TargetStatistic + * * @package App\Models\Statistic + * @property int $id + * @property int $statistic_id + * @property string $target_type + * @property int $target_id + * @property array|null $result + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property float $value + * @property string|null $filters + * @property-read \App\Models\Statistic\Statistic $statistic + * @property-read \Illuminate\Database\Eloquent\Model|\Eloquent $target + * @method static \Database\Factories\Statistic\TargetStatisticFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|TargetStatistic onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereFilters($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereResult($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereStatisticId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereTargetId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereTargetType($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereUpdatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|TargetStatistic whereValue($value) + * @method static \Illuminate\Database\Eloquent\Builder|TargetStatistic withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|TargetStatistic withoutTrashed() + * @mixin \Eloquent */ class TargetStatistic extends AtheniaTargetStatistic { diff --git a/code/app/Models/Subscription/MembershipPlan.php b/code/app/Models/Subscription/MembershipPlan.php index 2a8982cf..e51aab2e 100644 --- a/code/app/Models/Subscription/MembershipPlan.php +++ b/code/app/Models/Subscription/MembershipPlan.php @@ -7,7 +7,59 @@ /** * Class MembershipPlan + * * @package App\Models\Subscription + * @property int $id + * @property string $name + * @property string $duration + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property string|null $description + * @property string $entity_type + * @property int $default + * @property int|null $trial_period + * @property-read \App\Models\Subscription\MembershipPlanRate|null $currentRate + * @property-read \Illuminate\Database\Eloquent\Collection $features + * @property-read int|null $features_count + * @property-read null|float $current_cost + * @property-read null|float $current_rate_id + * @property-read \Illuminate\Database\Eloquent\Collection $membershipPlanRates + * @property-read int|null $membership_plan_rates_count + * @method static \Database\Factories\Subscription\MembershipPlanFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|MembershipPlan onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan whereDefault($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan whereDescription($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan whereDuration($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan whereEntityType($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan whereName($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan whereTrialPeriod($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlan whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|MembershipPlan withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|MembershipPlan withoutTrashed() + * @mixin \Eloquent */ class MembershipPlan extends AtheniaMembershipPlan { diff --git a/code/app/Models/Subscription/MembershipPlanRate.php b/code/app/Models/Subscription/MembershipPlanRate.php index 0eea1352..f727be88 100644 --- a/code/app/Models/Subscription/MembershipPlanRate.php +++ b/code/app/Models/Subscription/MembershipPlanRate.php @@ -7,7 +7,49 @@ /** * Class MembershipPlanRate + * * @package App\Models\Subscription + * @property int $id + * @property int $membership_plan_id + * @property float $cost + * @property int $active + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property-read \App\Models\Subscription\MembershipPlan $membershipPlan + * @property-read \Illuminate\Database\Eloquent\Collection $subscriptions + * @property-read int|null $subscriptions_count + * @method static \Database\Factories\Subscription\MembershipPlanRateFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|MembershipPlanRate onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate whereActive($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate whereCost($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate whereMembershipPlanId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|MembershipPlanRate whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|MembershipPlanRate withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|MembershipPlanRate withoutTrashed() + * @mixin \Eloquent */ class MembershipPlanRate extends AtheniaMembershipPlanRate { diff --git a/code/app/Models/Subscription/Subscription.php b/code/app/Models/Subscription/Subscription.php index b687cea0..f37eab5f 100644 --- a/code/app/Models/Subscription/Subscription.php +++ b/code/app/Models/Subscription/Subscription.php @@ -7,7 +7,69 @@ /** * Class Subscription + * * @package App\Models\Subscription + * @property int $id + * @property int $membership_plan_rate_id + * @property int $payment_method_id + * @property int $subscriber_id + * @property string $subscriber_type + * @property \Illuminate\Support\Carbon|null $last_renewed_at + * @property \Illuminate\Support\Carbon|null $subscribed_at + * @property \Illuminate\Support\Carbon|null $expires_at + * @property \Illuminate\Support\Carbon|null $canceled_at + * @property int $recurring + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property int $is_trial + * @property-read null|string $formatted_cost + * @property-read null|string $formatted_expires_at + * @property-read \Illuminate\Database\Eloquent\Collection $lineItems + * @property-read int|null $line_items_count + * @property-read \App\Models\Subscription\MembershipPlanRate $membershipPlanRate + * @property-read \App\Models\Payment\PaymentMethod $paymentMethod + * @property-read \Illuminate\Database\Eloquent\Collection $payments + * @property-read int|null $payments_count + * @property-read \Illuminate\Database\Eloquent\Model|\Eloquent $subscriber + * @method static \Database\Factories\Subscription\SubscriptionFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|Subscription onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription whereCanceledAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription whereExpiresAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription whereIsTrial($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription whereLastRenewedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription whereMembershipPlanRateId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription wherePaymentMethodId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription whereRecurring($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription whereSubscribedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription whereSubscriberId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription whereSubscriberType($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Subscription whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|Subscription withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Subscription withoutTrashed() + * @mixin \Eloquent */ class Subscription extends AtheniaSubscription { diff --git a/code/app/Models/User/ArticleNote.php b/code/app/Models/User/ArticleNote.php new file mode 100644 index 00000000..1bc7f427 --- /dev/null +++ b/code/app/Models/User/ArticleNote.php @@ -0,0 +1,57 @@ +|ArticleNote getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|ArticleNote onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote whereArticleId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote whereCompletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote whereResponse($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote whereUpdatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleNote whereUserId($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArticleNote withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|ArticleNote withoutTrashed() + * @mixin \Eloquent + */ +class ArticleNote extends AtheniaArticleNote +{ +} diff --git a/code/app/Models/User/Contact.php b/code/app/Models/User/Contact.php index 47d15dfc..96106185 100644 --- a/code/app/Models/User/Contact.php +++ b/code/app/Models/User/Contact.php @@ -7,7 +7,50 @@ /** * Class Contact + * * @package App\Models\User + * @property int $id + * @property int $initiated_by_id + * @property int $requested_id + * @property \Illuminate\Support\Carbon|null $confirmed_at + * @property \Illuminate\Support\Carbon|null $denied_at + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property-read \App\Models\User\User $initiatedBy + * @property-read \App\Models\User\User $requested + * @method static \Database\Factories\User\ContactFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|Contact onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact whereConfirmedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact whereDeniedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact whereInitiatedById($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact whereRequestedId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Contact whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|Contact withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Contact withoutTrashed() + * @mixin \Eloquent */ class Contact extends AtheniaContact { diff --git a/code/app/Models/User/PasswordToken.php b/code/app/Models/User/PasswordToken.php index 325f1bdf..750986fc 100644 --- a/code/app/Models/User/PasswordToken.php +++ b/code/app/Models/User/PasswordToken.php @@ -7,7 +7,45 @@ /** * Class PasswordToken + * * @package App\Models\User + * @property int $id + * @property int $user_id + * @property string $token + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property-read \App\Models\User\User $user + * @method static \Database\Factories\User\PasswordTokenFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|PasswordToken onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken whereToken($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken whereUpdatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|PasswordToken whereUserId($value) + * @method static \Illuminate\Database\Eloquent\Builder|PasswordToken withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|PasswordToken withoutTrashed() + * @mixin \Eloquent */ class PasswordToken extends AtheniaPasswordToken { diff --git a/code/app/Models/User/ProfileImage.php b/code/app/Models/User/ProfileImage.php index 87cb6612..987baab5 100644 --- a/code/app/Models/User/ProfileImage.php +++ b/code/app/Models/User/ProfileImage.php @@ -7,7 +7,60 @@ /** * Class ProfileImage + * * @package App\Models\User + * @property int $id + * @property int|null $owner_id + * @property string|null $name + * @property string|null $caption + * @property string $url + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property string|null $owner_type + * @property string|null $source + * @property string|null $alt + * @property int $width + * @property int $height + * @property-read \App\Models\Organization\Organization|null $organization + * @property-read ProfileImage|null $owner + * @property-read \App\Models\User\User|null $user + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|ProfileImage onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage whereAlt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage whereCaption($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage whereHeight($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage whereName($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage whereOwnerId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage whereOwnerType($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage whereSource($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage whereUpdatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage whereUrl($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ProfileImage whereWidth($value) + * @method static \Illuminate\Database\Eloquent\Builder|ProfileImage withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|ProfileImage withoutTrashed() + * @mixin \Eloquent */ class ProfileImage extends AtheniaProfileImage { diff --git a/code/app/Models/User/User.php b/code/app/Models/User/User.php index 3fde1d66..0545b9e5 100644 --- a/code/app/Models/User/User.php +++ b/code/app/Models/User/User.php @@ -7,7 +7,93 @@ /** * Class User + * * @package App\Models\User + * @property int $id + * @property int|null $merged_to_id + * @property string|null $stripe_customer_key + * @property string $email + * @property string|null $first_name + * @property string|null $password + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property int $allow_users_to_add_me + * @property int $receive_push_notifications + * @property string|null $about_me + * @property string|null $push_notification_key + * @property int|null $profile_image_id + * @property string|null $last_name + * @property-read \Illuminate\Database\Eloquent\Collection $articleNotes + * @property-read int|null $article_notes_count + * @property-read \Illuminate\Database\Eloquent\Collection $assets + * @property-read int|null $assets_count + * @property-read \Illuminate\Database\Eloquent\Collection $ballotCompletions + * @property-read int|null $ballot_completions_count + * @property-read \Illuminate\Database\Eloquent\Collection $collections + * @property-read int|null $collections_count + * @property-read \Illuminate\Database\Eloquent\Collection $createdArticles + * @property-read int|null $created_articles_count + * @property-read \Illuminate\Database\Eloquent\Collection $createdIterations + * @property-read int|null $created_iterations_count + * @property-read null|string $profile_image_url + * @property-read \Illuminate\Database\Eloquent\Collection $messages + * @property-read int|null $messages_count + * @property-read \Illuminate\Database\Eloquent\Collection $organizationManagers + * @property-read int|null $organization_managers_count + * @property-read \Illuminate\Database\Eloquent\Collection $paymentMethods + * @property-read int|null $payment_methods_count + * @property-read \Illuminate\Database\Eloquent\Collection $payments + * @property-read int|null $payments_count + * @property-read \App\Athenia\Models\User\ProfileImage|null $profileImage + * @property-read \Illuminate\Database\Eloquent\Collection $pushNotificationKeys + * @property-read int|null $push_notification_keys_count + * @property-read \App\Models\Resource|null $resource + * @property-read \Illuminate\Database\Eloquent\Collection $roles + * @property-read int|null $roles_count + * @property-read \Illuminate\Database\Eloquent\Collection $subscriptions + * @property-read int|null $subscriptions_count + * @property-read \Illuminate\Database\Eloquent\Collection $threads + * @property-read int|null $threads_count + * @method static \Database\Factories\User\UserFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|User onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User whereAboutMe($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User whereAllowUsersToAddMe($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User whereEmail($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User whereFirstName($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User whereLastName($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User whereMergedToId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User wherePassword($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User whereProfileImageId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User wherePushNotificationKey($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User whereReceivePushNotifications($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User whereStripeCustomerKey($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|User whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|User withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|User withoutTrashed() + * @mixin \Eloquent */ class User extends AtheniaUser { diff --git a/code/app/Models/Vote/Ballot.php b/code/app/Models/Vote/Ballot.php index 831aa2c7..60a70104 100644 --- a/code/app/Models/Vote/Ballot.php +++ b/code/app/Models/Vote/Ballot.php @@ -7,7 +7,48 @@ /** * Class Ballot + * * @package App\Models\Vote + * @property int $id + * @property string|null $name + * @property string $type + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property-read \Illuminate\Database\Eloquent\Collection $ballotCompletions + * @property-read int|null $ballot_completions_count + * @property-read \Illuminate\Database\Eloquent\Collection $ballotItems + * @property-read int|null $ballot_items_count + * @method static \Database\Factories\Vote\BallotFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|Ballot onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot whereName($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot whereType($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Ballot whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|Ballot withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Ballot withoutTrashed() + * @mixin \Eloquent */ class Ballot extends AtheniaBallot { diff --git a/code/app/Models/Vote/BallotCompletion.php b/code/app/Models/Vote/BallotCompletion.php index 12c1e204..2953f585 100644 --- a/code/app/Models/Vote/BallotCompletion.php +++ b/code/app/Models/Vote/BallotCompletion.php @@ -7,7 +7,52 @@ /** * Class BallotCompletion + * * @package App\Models\Vote + * @property int $id + * @property int $ballot_id + * @property int $user_id + * @property string|null $completed_at + * @property string|null $response + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property-read \App\Athenia\Models\Vote\Ballot $ballot + * @property-read \App\Models\User\User $user + * @property-read \Illuminate\Database\Eloquent\Collection $votes + * @property-read int|null $votes_count + * @method static \Database\Factories\Vote\BallotCompletionFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|BallotCompletion onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion whereBallotId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion whereCompletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion whereResponse($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion whereUpdatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotCompletion whereUserId($value) + * @method static \Illuminate\Database\Eloquent\Builder|BallotCompletion withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|BallotCompletion withoutTrashed() + * @mixin \Eloquent */ class BallotCompletion extends AtheniaBallotCompletion { diff --git a/code/app/Models/Vote/BallotItem.php b/code/app/Models/Vote/BallotItem.php index 4be3ef14..6432b653 100644 --- a/code/app/Models/Vote/BallotItem.php +++ b/code/app/Models/Vote/BallotItem.php @@ -7,7 +7,49 @@ /** * Class BallotItem + * * @package App\Models\Vote + * @property int $id + * @property int $ballot_id + * @property int $votes_cast + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property string|null $name + * @property-read \App\Athenia\Models\Vote\Ballot $ballot + * @property-read \Illuminate\Database\Eloquent\Collection $ballotItemOptions + * @property-read int|null $ballot_item_options_count + * @method static \Database\Factories\Vote\BallotItemFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|BallotItem onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem whereBallotId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem whereName($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem whereUpdatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItem whereVotesCast($value) + * @method static \Illuminate\Database\Eloquent\Builder|BallotItem withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|BallotItem withoutTrashed() + * @mixin \Eloquent */ class BallotItem extends AtheniaBallotItem { diff --git a/code/app/Models/Vote/BallotItemOption.php b/code/app/Models/Vote/BallotItemOption.php index 963010de..ab17bfc1 100644 --- a/code/app/Models/Vote/BallotItemOption.php +++ b/code/app/Models/Vote/BallotItemOption.php @@ -7,7 +7,52 @@ /** * Class BallotItemOption + * * @package App\Models\Vote + * @property int $id + * @property int $ballot_item_id + * @property int $vote_count + * @property int $subject_id + * @property string $subject_type + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property-read \App\Athenia\Models\Vote\BallotItem $ballotItem + * @property-read \Illuminate\Database\Eloquent\Model|\Eloquent $subject + * @property-read \Illuminate\Database\Eloquent\Collection $votes + * @property-read int|null $votes_count + * @method static \Database\Factories\Vote\BallotItemOptionFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|BallotItemOption onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption whereBallotItemId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption whereSubjectId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption whereSubjectType($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption whereUpdatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|BallotItemOption whereVoteCount($value) + * @method static \Illuminate\Database\Eloquent\Builder|BallotItemOption withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|BallotItemOption withoutTrashed() + * @mixin \Eloquent */ class BallotItemOption extends AtheniaBallotItemOption { diff --git a/code/app/Models/Vote/Vote.php b/code/app/Models/Vote/Vote.php index 745a1833..7ced79c2 100644 --- a/code/app/Models/Vote/Vote.php +++ b/code/app/Models/Vote/Vote.php @@ -7,7 +7,48 @@ /** * Class Vote + * * @package App\Models\Vote + * @property int $id + * @property int $ballot_item_option_id + * @property int $ballot_completion_id + * @property int $result + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property-read \App\Athenia\Models\Vote\BallotCompletion $ballotCompletion + * @property-read \App\Athenia\Models\Vote\BallotItemOption $ballotItemOption + * @method static \Database\Factories\Vote\VoteFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|Vote onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote whereBallotCompletionId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote whereBallotItemOptionId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote whereResult($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Vote whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|Vote withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Vote withoutTrashed() + * @mixin \Eloquent */ class Vote extends AtheniaVote { diff --git a/code/app/Models/Wiki/Article.php b/code/app/Models/Wiki/Article.php index 8bf3884f..20f6e7ee 100644 --- a/code/app/Models/Wiki/Article.php +++ b/code/app/Models/Wiki/Article.php @@ -7,7 +7,67 @@ /** * Class Article + * * @package App\Models\Wiki + * @property int $id + * @property int $created_by_id + * @property string $title + * @property string|null $url + * @property string|null $authors + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property int $has_full_modification_history + * @property-read \Illuminate\Database\Eloquent\Collection $articleNotes + * @property-read int|null $article_notes_count + * @property-read \Illuminate\Database\Eloquent\Collection $categories + * @property-read int|null $categories_count + * @property-read \App\Models\User\User $createdBy + * @property-read null|string $content + * @property-read null|\App\Models\Wiki\ArticleVersion $current_version + * @property-read null|string $last_iteration_content + * @property-read \Illuminate\Database\Eloquent\Collection $iterations + * @property-read int|null $iterations_count + * @property-read \Illuminate\Database\Eloquent\Collection $modifications + * @property-read int|null $modifications_count + * @property-read \App\Models\Resource|null $resource + * @property-read \Illuminate\Database\Eloquent\Collection $targetStatistics + * @property-read int|null $target_statistics_count + * @property-read \Illuminate\Database\Eloquent\Collection $versions + * @property-read int|null $versions_count + * @method static \Database\Factories\Wiki\ArticleFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|Article onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article whereAuthors($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article whereCreatedById($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article whereHasFullModificationHistory($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article whereTitle($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article whereUpdatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|Article whereUrl($value) + * @method static \Illuminate\Database\Eloquent\Builder|Article withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|Article withoutTrashed() + * @mixin \Eloquent */ class Article extends AtheniaArticle { diff --git a/code/app/Models/Wiki/ArticleIteration.php b/code/app/Models/Wiki/ArticleIteration.php index 3a6d0683..1cedcb37 100644 --- a/code/app/Models/Wiki/ArticleIteration.php +++ b/code/app/Models/Wiki/ArticleIteration.php @@ -7,7 +7,52 @@ /** * Class ArticleIteration + * * @package App\Models\Wiki + * @property int $id + * @property string $content + * @property int $created_by_id + * @property int $article_id + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property int|null $article_modification_id + * @property-read \App\Models\Wiki\Article $article + * @property-read \App\Models\User\User $createdBy + * @property-read \App\Models\Wiki\ArticleModification|null $modification + * @property-read \App\Models\Wiki\ArticleVersion|null $version + * @method static \Database\Factories\Wiki\ArticleIterationFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|ArticleIteration onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration whereArticleId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration whereArticleModificationId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration whereContent($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration whereCreatedById($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleIteration whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArticleIteration withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|ArticleIteration withoutTrashed() + * @mixin \Eloquent */ class ArticleIteration extends AtheniaArticleIteration { diff --git a/code/app/Models/Wiki/ArticleModification.php b/code/app/Models/Wiki/ArticleModification.php index 6c2d8649..38927791 100644 --- a/code/app/Models/Wiki/ArticleModification.php +++ b/code/app/Models/Wiki/ArticleModification.php @@ -7,7 +7,52 @@ /** * Class ArticleModification + * * @package App\Models\Wiki + * @property int $id + * @property int $article_id + * @property string $action + * @property int $start_position + * @property int|null $length + * @property string|null $content + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property-read \App\Models\Wiki\Article $article + * @property-read \App\Models\Wiki\ArticleIteration|null $iteration + * @method static \Database\Factories\Wiki\ArticleModificationFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|ArticleModification onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereAction($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereArticleId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereContent($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereLength($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereStartPosition($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleModification whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArticleModification withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|ArticleModification withoutTrashed() + * @mixin \Eloquent */ class ArticleModification extends AtheniaArticleModification { diff --git a/code/app/Models/Wiki/ArticleVersion.php b/code/app/Models/Wiki/ArticleVersion.php index ba4481c1..9813945f 100644 --- a/code/app/Models/Wiki/ArticleVersion.php +++ b/code/app/Models/Wiki/ArticleVersion.php @@ -7,7 +7,48 @@ /** * Class ArticleVersion + * * @package App\Models\Wiki + * @property int $id + * @property int $article_id + * @property int $article_iteration_id + * @property string|null $name + * @property \Illuminate\Support\Carbon|null $deleted_at + * @property \Illuminate\Support\Carbon|null $created_at + * @property \Illuminate\Support\Carbon|null $updated_at + * @property-read \App\Models\Wiki\Article $article + * @property-read \App\Models\Wiki\ArticleIteration $articleIteration + * @method static \Database\Factories\Wiki\ArticleVersionFactory factory($count = null, $state = []) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion getAggregateMethod() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion isAppendRelationsCount() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion isLeftJoin() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion isUseTableAlias() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion joinRelations($relations, $leftJoin = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion newModelQuery() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion newQuery() + * @method static \Illuminate\Database\Eloquent\Builder|ArticleVersion onlyTrashed() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion orWhereInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion orWhereJoin($column, $operator, $value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion orWhereNotInJoin($column, $values) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion orderByJoin($column, $direction = 'asc', $aggregateMethod = null) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion query() + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion setAggregateMethod(string $aggregateMethod) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion setAppendRelationsCount(bool $appendRelationsCount) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion setLeftJoin(bool $leftJoin) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion setUseTableAlias(bool $useTableAlias) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion whereArticleId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion whereArticleIterationId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion whereCreatedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion whereDeletedAt($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion whereId($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion whereInJoin($column, $values, $boolean = 'and', $not = false) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion whereJoin($column, $operator, $value, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion whereName($value) + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion whereNotInJoin($column, $values, $boolean = 'and') + * @method static \AdminUI\Laravel\EloquentJoin\EloquentJoinBuilder|ArticleVersion whereUpdatedAt($value) + * @method static \Illuminate\Database\Eloquent\Builder|ArticleVersion withTrashed(bool $withTrashed = true) + * @method static \Illuminate\Database\Eloquent\Builder|ArticleVersion withoutTrashed() + * @mixin \Eloquent */ class ArticleVersion extends AtheniaArticleVersion { diff --git a/code/app/Policies/User/ArticleNotePolicy.php b/code/app/Policies/User/ArticleNotePolicy.php new file mode 100644 index 00000000..b693a26a --- /dev/null +++ b/code/app/Policies/User/ArticleNotePolicy.php @@ -0,0 +1,81 @@ +id == $requestedUser->id; + } + + /** + * Any logged in user can create article notes for themselves + * + * @param User $loggedInUser + * @param User $requestedUser + * @return bool + */ + public function create(User $loggedInUser, User $requestedUser) + { + return $loggedInUser->id == $requestedUser->id; + } + + /** + * Any logged in user can view their own article note + * + * @param User $loggedInUser + * @param User $requestedUser + * @param ArticleNote $articleNote + * @return bool + */ + public function view(User $loggedInUser, User $requestedUser, ArticleNote $articleNote) + { + return $loggedInUser->id == $requestedUser->id && + $requestedUser->id == $articleNote->user_id; + } + + /** + * Any logged in user can update their own article note + * + * @param User $loggedInUser + * @param User $requestedUser + * @param ArticleNote $articleNote + * @return bool + */ + public function update(User $loggedInUser, User $requestedUser, ArticleNote $articleNote) + { + return $loggedInUser->id == $requestedUser->id && + $requestedUser->id == $articleNote->user_id; + } + + /** + * Any logged in user can delete their own article note + * + * @param User $loggedInUser + * @param User $requestedUser + * @param ArticleNote $articleNote + * @return bool + */ + public function delete(User $loggedInUser, User $requestedUser, ArticleNote $articleNote) + { + return $loggedInUser->id == $requestedUser->id && + $requestedUser->id == $articleNote->user_id; + } +} diff --git a/code/app/Providers/AppRepositoryProvider.php b/code/app/Providers/AppRepositoryProvider.php index 5c12b4c6..30a546c2 100644 --- a/code/app/Providers/AppRepositoryProvider.php +++ b/code/app/Providers/AppRepositoryProvider.php @@ -39,4 +39,4 @@ public function appMorphMaps(): array public function registerApp(): void { } -} \ No newline at end of file +} diff --git a/code/app/Providers/AppServiceProvider.php b/code/app/Providers/AppServiceProvider.php index 700a7c1c..7f75cb70 100644 --- a/code/app/Providers/AppServiceProvider.php +++ b/code/app/Providers/AppServiceProvider.php @@ -18,8 +18,7 @@ class AppServiceProvider extends BaseServiceProvider */ public function appProviders(): array { - return [ - ]; + return []; } /** diff --git a/code/database/factories/User/ArticleNoteFactory.php b/code/database/factories/User/ArticleNoteFactory.php new file mode 100644 index 00000000..173de874 --- /dev/null +++ b/code/database/factories/User/ArticleNoteFactory.php @@ -0,0 +1,34 @@ + User::factory()->create()->id, + 'article_id' => Article::factory()->create()->id, + 'response' => $this->faker->optional()->text(), + 'completed_at' => $this->faker->optional()->dateTime(), + ]; + } +} diff --git a/code/database/factories/Wiki/ArticleFactory.php b/code/database/factories/Wiki/ArticleFactory.php index 17267014..dc266bed 100644 --- a/code/database/factories/Wiki/ArticleFactory.php +++ b/code/database/factories/Wiki/ArticleFactory.php @@ -25,6 +25,8 @@ public function definition() { return [ 'title' => $this->faker->title, + 'url' => $this->faker->optional()->url(), + 'authors' => $this->faker->optional()->name(), 'created_by_id' => User::factory()->create()->id, ]; } diff --git a/code/database/migrations/2025_11_23_173331_setup_article_notes.php b/code/database/migrations/2025_11_23_173331_setup_article_notes.php new file mode 100644 index 00000000..0918e248 --- /dev/null +++ b/code/database/migrations/2025_11_23_173331_setup_article_notes.php @@ -0,0 +1,65 @@ +id(); + $table->unsignedInteger('user_id'); + $table->unsignedInteger('article_id'); + $table->timestamp('completed_at')->nullable(); + $table->text('response')->nullable(); + $table->timestamps(); + $table->softDeletes(); + + $table->foreign('user_id') + ->references('id') + ->on('users') + ->onDelete('cascade'); + + $table->foreign('article_id') + ->references('id') + ->on('articles') + ->onDelete('cascade'); + + $table->unique(['user_id', 'article_id']); + }); + + // Add url and authors fields to articles table + Schema::table('articles', function (Blueprint $table) { + $table->string('url')->nullable()->after('title'); + $table->text('authors')->nullable()->after('url'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down(): void + { + // Drop url and authors columns from articles + Schema::table('articles', function (Blueprint $table) { + $table->dropColumn(['url', 'authors']); + }); + + // Drop article_notes table + Schema::dropIfExists('article_notes'); + } +} diff --git a/code/database/seeders/ArticleNoteStatisticsSeeder.php b/code/database/seeders/ArticleNoteStatisticsSeeder.php new file mode 100644 index 00000000..736b4048 --- /dev/null +++ b/code/database/seeders/ArticleNoteStatisticsSeeder.php @@ -0,0 +1,52 @@ + 'total_notes', 'model' => 'article'], + [ + 'relation' => 'articleNotes', + 'public' => true, + ] + ); + + // Create the total_completed_notes statistic if it doesn't exist + $totalCompletedNotesStatistic = Statistic::firstOrCreate( + ['name' => 'total_completed_notes', 'model' => 'article'], + [ + 'relation' => 'articleNotes', + 'public' => true, + ] + ); + + // Add filter to only count notes where completed_at is not null + StatisticFilter::firstOrCreate( + [ + 'statistic_id' => $totalCompletedNotesStatistic->id, + 'field' => 'completed_at', + ], + [ + 'operator' => '!=', + 'value' => null, + ] + ); + } +} diff --git a/code/routes/core.php b/code/routes/core.php index f2165d05..32c86db2 100644 --- a/code/routes/core.php +++ b/code/routes/core.php @@ -161,6 +161,15 @@ Route::group(['prefix' => 'users/{user}', 'as' => 'user.'], function () { require 'entity-routes.php'; + Route::resource('article-notes', 'User\ArticleNoteController', [ + 'except' => [ + 'create', 'edit', + ], + ]); + + Route::post('random-article', 'User\ArticleNoteController@randomArticle') + ->name('random-article'); + Route::resource('ballot-completions', 'User\BallotCompletionController', [ 'only' => [ 'index', diff --git a/code/tests/Athenia/Feature/Http/User/ArticleNote/UserArticleNoteCreateTest.php b/code/tests/Athenia/Feature/Http/User/ArticleNote/UserArticleNoteCreateTest.php new file mode 100644 index 00000000..06693896 --- /dev/null +++ b/code/tests/Athenia/Feature/Http/User/ArticleNote/UserArticleNoteCreateTest.php @@ -0,0 +1,180 @@ +setupDatabase(); + $this->mockApplicationLog(); + $this->user = User::factory()->create(); + + $this->path.= $this->user->id . '/article-notes'; + } + + public function testNotLoggedInUserBlocked(): void + { + $response = $this->json('POST', $this->path); + + $response->assertStatus(403); + } + + public function testDifferentUserBlocked(): void + { + $otherUser = User::factory()->create(); + $this->actingAs($otherUser); + + $response = $this->json('POST', $this->path); + + $response->assertStatus(403); + } + + public function testCreateSuccessful(): void + { + $this->actingAs($this->user); + + $article = Article::factory()->create(); + + $response = $this->json('POST', $this->path, [ + 'article_id' => $article->id, + 'response' => 'My note', + ]); + + $response->assertStatus(201); + + /** @var ArticleNote $articleNote */ + $articleNote = ArticleNote::first(); + $this->assertEquals($this->user->id, $articleNote->user_id); + $this->assertEquals($article->id, $articleNote->article_id); + $this->assertEquals('My note', $articleNote->response); + $this->assertNull($articleNote->completed_at); + } + + public function testCreateSuccessfulWithCompleted(): void + { + $this->actingAs($this->user); + + $article = Article::factory()->create(); + + $response = $this->json('POST', $this->path, [ + 'article_id' => $article->id, + 'completed' => true, + ]); + + $response->assertStatus(201); + + /** @var ArticleNote $articleNote */ + $articleNote = ArticleNote::first(); + $this->assertNotNull($articleNote->completed_at); + } + + public function testCreateFailsMissingRequiredFields(): void + { + $this->actingAs($this->user); + + $response = $this->json('POST', $this->path); + + $response->assertStatus(400); + $response->assertJson([ + 'errors' => [ + 'article_id' => ['The article id field is required.'], + ] + ]); + } + + public function testCreateFailsInvalidBooleanFields(): void + { + $this->actingAs($this->user); + + $article = Article::factory()->create(); + + $response = $this->json('POST', $this->path, [ + 'article_id' => $article->id, + 'completed' => 'not-a-boolean', + ]); + + $response->assertStatus(400); + $response->assertJson([ + 'errors' => [ + 'completed' => ['The completed field must be true or false.'], + ] + ]); + } + + public function testCreateFailsInvalidStringFields(): void + { + $this->actingAs($this->user); + + $article = Article::factory()->create(); + + $response = $this->json('POST', $this->path, [ + 'article_id' => $article->id, + 'response' => 12345, + ]); + + $response->assertStatus(400); + $response->assertJson([ + 'errors' => [ + 'response' => ['The response must be a string.'], + ] + ]); + } + + public function testCreateFailsInvalidIntegerFields(): void + { + $this->actingAs($this->user); + + $response = $this->json('POST', $this->path, [ + 'article_id' => 'not-an-integer', + ]); + + $response->assertStatus(400); + $response->assertJson([ + 'errors' => [ + 'article_id' => ['The article id must be an integer.'], + ] + ]); + } + + public function testCreateFailsInvalidModelFields(): void + { + $this->actingAs($this->user); + + $response = $this->json('POST', $this->path, [ + 'article_id' => 99999, + ]); + + $response->assertStatus(400); + $response->assertJson([ + 'errors' => [ + 'article_id' => ['The selected article id is invalid.'], + ] + ]); + } +} diff --git a/code/tests/Athenia/Feature/Http/User/ArticleNote/UserArticleNoteDeleteTest.php b/code/tests/Athenia/Feature/Http/User/ArticleNote/UserArticleNoteDeleteTest.php new file mode 100644 index 00000000..02f54d3a --- /dev/null +++ b/code/tests/Athenia/Feature/Http/User/ArticleNote/UserArticleNoteDeleteTest.php @@ -0,0 +1,87 @@ +setupDatabase(); + $this->mockApplicationLog(); + } + + public function testNotLoggedInUserBlocked(): void + { + $user = User::factory()->create(); + $articleNote = ArticleNote::factory()->create([ + 'user_id' => $user->id, + ]); + + $response = $this->json('DELETE', '/v1/users/' . $user->id . '/article-notes/' . $articleNote->id); + $response->assertStatus(403); + } + + public function testDifferentUserBlocked(): void + { + $user = User::factory()->create(); + $otherUser = User::factory()->create(); + $this->actingAs($otherUser); + + $articleNote = ArticleNote::factory()->create([ + 'user_id' => $user->id, + ]); + + $response = $this->json('DELETE', '/v1/users/' . $user->id . '/article-notes/' . $articleNote->id); + $response->assertStatus(403); + } + + public function testDeleteSingle(): void + { + $this->actAsUser(); + + $articleNote = ArticleNote::factory()->create([ + 'user_id' => $this->actingAs->id, + ]); + + $response = $this->json('DELETE', '/v1/users/' . $this->actingAs->id . '/article-notes/' . $articleNote->id); + + $response->assertStatus(204); + $this->assertNull(ArticleNote::find($articleNote->id)); + } + + public function testDeleteSingleInvalidIdFails(): void + { + $this->actAsUser(); + + $response = $this->json('DELETE', '/v1/users/' . $this->actingAs->id . '/article-notes/a') + ->assertExactJson([ + 'message' => 'This item was not found.', + ]); + $response->assertStatus(404); + } + + public function testDeleteSingleNotFoundFails(): void + { + $this->actAsUser(); + + $response = $this->json('DELETE', '/v1/users/' . $this->actingAs->id . '/article-notes/99999') + ->assertExactJson([ + 'message' => 'This item was not found.' + ]); + $response->assertStatus(404); + } +} diff --git a/code/tests/Athenia/Feature/Http/User/ArticleNote/UserArticleNoteIndexTest.php b/code/tests/Athenia/Feature/Http/User/ArticleNote/UserArticleNoteIndexTest.php new file mode 100644 index 00000000..c18eb97a --- /dev/null +++ b/code/tests/Athenia/Feature/Http/User/ArticleNote/UserArticleNoteIndexTest.php @@ -0,0 +1,160 @@ +setupDatabase(); + $this->mockApplicationLog(); + User::unsetEventDispatcher(); + } + + public function testNotLoggedInUserBlocked(): void + { + $user = User::factory()->create(); + + $response = $this->json('GET', $this->path . $user->id . '/article-notes'); + + $response->assertStatus(403); + } + + public function testIncorrectUserBlocked(): void + { + $this->actAsUser(); + $user = User::factory()->create(); + + $response = $this->json('GET', $this->path . $user->id . '/article-notes'); + + $response->assertStatus(403); + } + + public function testUserNotFound(): void + { + $this->actAsUser(); + + $response = $this->json('GET', $this->path . '12/article-notes'); + + $response->assertStatus(404); + } + + public function testGetPaginationEmpty(): void + { + $this->actAsUser(); + + $response = $this->json('GET', $this->path. $this->actingAs->id . '/article-notes'); + + $response->assertStatus(200); + $response->assertJson([ + 'total' => 0, + 'data' => [] + ]); + } + + public function testGetPaginationResult(): void + { + $this->actAsUser(); + + ArticleNote::factory()->count(4)->create(); + ArticleNote::factory()->count(15)->create([ + 'user_id' => $this->actingAs->id, + ]); + + // first page + $response = $this->json('GET', $this->path . $this->actingAs->id . '/article-notes'); + $response->assertStatus(200); + $response->assertJson([ + 'total' => 15, + 'current_page' => 1, + 'per_page' => 10, + 'from' => 1, + 'to' => 10, + 'last_page' => 2 + ]) + ->assertJsonStructure([ + 'data' => [ + '*' => array_keys((new ArticleNote())->toArray()) + ] + ]); + + // second page + $response = $this->json('GET', $this->path . $this->actingAs->id . '/article-notes?page=2'); + $response->assertStatus(200); + $response->assertJson([ + 'total' => 15, + 'current_page' => 2, + 'per_page' => 10, + 'from' => 11, + 'to' => 15, + 'last_page' => 2 + ]) + ->assertJsonStructure([ + 'data' => [ + '*' => array_keys((new ArticleNote())->toArray()) + ] + ]); + + // page with limit + $response = $this->json('GET', $this->path . $this->actingAs->id . '/article-notes?page=2&limit=5'); + $response->assertStatus(200); + $response->assertJson([ + 'total' => 15, + 'current_page' => 2, + 'per_page' => 5, + 'from' => 6, + 'to' => 10, + 'last_page' => 3 + ]) + ->assertJsonStructure([ + 'data' => [ + '*' => array_keys((new ArticleNote())->toArray()) + ] + ]); + } + + public function testGetPaginationWithExpands(): void + { + $this->actAsUser(); + + ArticleNote::factory()->count(5)->create([ + 'user_id' => $this->actingAs->id, + ]); + + // with expands + $response = $this->json('GET', $this->path . $this->actingAs->id . '/article-notes?expand[user]=*&expand[article]=*'); + $response->assertStatus(200); + $response->assertJson([ + 'total' => 5, + 'current_page' => 1, + 'per_page' => 10, + 'from' => 1, + 'to' => 5, + 'last_page' => 1 + ]) + ->assertJsonStructure([ + 'data' => [ + '*' => array_keys((new ArticleNote())->toArray()) + ] + ]); + } +} diff --git a/code/tests/Athenia/Feature/Http/User/ArticleNote/UserArticleNoteRandomArticleTest.php b/code/tests/Athenia/Feature/Http/User/ArticleNote/UserArticleNoteRandomArticleTest.php new file mode 100644 index 00000000..468c2c60 --- /dev/null +++ b/code/tests/Athenia/Feature/Http/User/ArticleNote/UserArticleNoteRandomArticleTest.php @@ -0,0 +1,278 @@ +setupDatabase(); + $this->mockApplicationLog(); + + // Seed article note statistics + $this->seed(\Database\Seeders\ArticleNoteStatisticsSeeder::class); + } + + public function testNotLoggedInUserBlocked(): void + { + $user = User::factory()->create(); + $this->path = '/v1/users/' . $user->id . '/random-article'; + + $response = $this->json('POST', $this->path); + + $response->assertStatus(403); + } + + public function testNotUserBlocked(): void + { + $user = User::factory()->create(); + $this->path = '/v1/users/' . $user->id . '/random-article'; + + $requestingUser = User::factory()->create(); + $this->actingAs($requestingUser); + + $response = $this->json('POST', $this->path); + + $response->assertStatus(403); + } + + public function testRandomArticleSuccessCreatesNoteAndReturnsWithArticle(): void + { + $user = User::factory()->create(); + $this->path = '/v1/users/' . $user->id . '/random-article'; + + // Create some articles + $article1 = Article::factory()->create(['title' => 'Test Article 1']); + $article2 = Article::factory()->create(['title' => 'Test Article 2']); + + $this->actingAs($user); + + $response = $this->json('POST', $this->path); + + $response->assertStatus(201); + $response->assertJson([ + 'user_id' => $user->id, + ]); + + // Verify article is loaded + $data = $response->json(); + $this->assertArrayHasKey('article', $data); + $this->assertArrayHasKey('id', $data['article']); + $this->assertArrayHasKey('title', $data['article']); + + // Verify article note was created + $this->assertDatabaseHas('article_notes', [ + 'user_id' => $user->id, + 'article_id' => $data['article_id'], + ]); + } + + public function testRandomArticleSelectsArticleWithoutNoteFirst(): void + { + $user = User::factory()->create(); + $this->path = '/v1/users/' . $user->id . '/random-article'; + + // Create two articles + $articleWithIncompleteNote = Article::factory()->create(['title' => 'Has Incomplete']); + $articleWithoutNote = Article::factory()->create(['title' => 'No Note']); + + // Create incomplete note on first article + \App\Models\User\ArticleNote::factory()->create([ + 'user_id' => $user->id, + 'article_id' => $articleWithIncompleteNote->id, + 'completed_at' => null, + ]); + + $this->actingAs($user); + + $response = $this->json('POST', $this->path); + + $response->assertStatus(201); + + // Should select the article without a note (or any other article without a note) + $data = $response->json(); + + // The selected article should NOT be the one with incomplete note + // (unless all articles without notes are exhausted, which shouldn't happen in this test) + $this->assertNotEquals($articleWithIncompleteNote->id, $data['article_id']); + } + + public function testRandomArticleNeverReturnsCompletedArticle(): void + { + $user = User::factory()->create(); + $this->path = '/v1/users/' . $user->id . '/random-article'; + + // Create two articles + $completedArticle = Article::factory()->create(['title' => 'Completed']); + $availableArticle = Article::factory()->create(['title' => 'Available']); + + // Mark first article as completed + \App\Models\User\ArticleNote::factory()->create([ + 'user_id' => $user->id, + 'article_id' => $completedArticle->id, + 'completed_at' => now(), + ]); + + $this->actingAs($user); + + $response = $this->json('POST', $this->path); + + $response->assertStatus(201); + + $data = $response->json(); + + // Should never return the completed article + $this->assertNotEquals($completedArticle->id, $data['article_id']); + } + + public function testRandomArticlePrefersArticlesWithLowerCompletedNotesStatistic(): void + { + $currentUser = User::factory()->create(); + $this->path = '/v1/users/' . $currentUser->id . '/random-article'; + + // Create three articles + $articleLowCompleted = Article::factory()->create(['title' => 'Low Completed']); + $articleMedCompleted = Article::factory()->create(['title' => 'Medium Completed']); + $articleHighCompleted = Article::factory()->create(['title' => 'High Completed']); + + // Create other users who have completed notes + $otherUser1 = User::factory()->create(); + $otherUser2 = User::factory()->create(); + $otherUser3 = User::factory()->create(); + + // Article high has 3 completed notes + \App\Models\User\ArticleNote::factory()->create([ + 'user_id' => $otherUser1->id, + 'article_id' => $articleHighCompleted->id, + 'completed_at' => now(), + ]); + \App\Models\User\ArticleNote::factory()->create([ + 'user_id' => $otherUser2->id, + 'article_id' => $articleHighCompleted->id, + 'completed_at' => now(), + ]); + \App\Models\User\ArticleNote::factory()->create([ + 'user_id' => $otherUser3->id, + 'article_id' => $articleHighCompleted->id, + 'completed_at' => now(), + ]); + + // Article medium has 2 completed notes + \App\Models\User\ArticleNote::factory()->create([ + 'user_id' => $otherUser1->id, + 'article_id' => $articleMedCompleted->id, + 'completed_at' => now(), + ]); + \App\Models\User\ArticleNote::factory()->create([ + 'user_id' => $otherUser2->id, + 'article_id' => $articleMedCompleted->id, + 'completed_at' => now(), + ]); + + // Article low has 1 completed note + \App\Models\User\ArticleNote::factory()->create([ + 'user_id' => $otherUser1->id, + 'article_id' => $articleLowCompleted->id, + 'completed_at' => now(), + ]); + + // Synchronize statistics for all articles + $synchronizationService = app(\App\Athenia\Contracts\Services\Statistic\StatisticSynchronizationServiceContract::class); + $synchronizationService->synchronizeTargetStatistics($articleLowCompleted); + $synchronizationService->synchronizeTargetStatistics($articleMedCompleted); + $synchronizationService->synchronizeTargetStatistics($articleHighCompleted); + + $this->actingAs($currentUser); + + $response = $this->json('POST', $this->path); + + $response->assertStatus(201); + $data = $response->json(); + + // Should select an article based on statistics + // With random ordering, any article could be selected, but it should be one with lower statistics + $this->assertNotNull($data['article_id']); + $this->assertIsInt($data['article_id']); + + // Verify the article_note was created for the current user + $this->assertEquals($currentUser->id, $data['user_id']); + } + + public function testRandomArticlePrefersArticlesWithLowerTotalNotesWhenCompletedEqual(): void + { + $currentUser = User::factory()->create(); + $this->path = '/v1/users/' . $currentUser->id . '/random-article'; + + // Create two articles with same completed notes but different total notes + $articleLowTotal = Article::factory()->create(['title' => 'Low Total']); + $articleHighTotal = Article::factory()->create(['title' => 'High Total']); + + // Create other users + $otherUser1 = User::factory()->create(); + $otherUser2 = User::factory()->create(); + $otherUser3 = User::factory()->create(); + + // Both articles have 1 completed note (same) + \App\Models\User\ArticleNote::factory()->create([ + 'user_id' => $otherUser1->id, + 'article_id' => $articleLowTotal->id, + 'completed_at' => now(), + ]); + \App\Models\User\ArticleNote::factory()->create([ + 'user_id' => $otherUser2->id, + 'article_id' => $articleHighTotal->id, + 'completed_at' => now(), + ]); + + // Article high total has 2 additional incomplete notes (3 total notes vs 1) + \App\Models\User\ArticleNote::factory()->create([ + 'user_id' => $otherUser3->id, + 'article_id' => $articleHighTotal->id, + 'completed_at' => null, + ]); + \App\Models\User\ArticleNote::factory()->create([ + 'user_id' => User::factory()->create()->id, + 'article_id' => $articleHighTotal->id, + 'completed_at' => null, + ]); + + // Synchronize statistics + $synchronizationService = app(\App\Athenia\Contracts\Services\Statistic\StatisticSynchronizationServiceContract::class); + $synchronizationService->synchronizeTargetStatistics($articleLowTotal); + $synchronizationService->synchronizeTargetStatistics($articleHighTotal); + + $this->actingAs($currentUser); + + $response = $this->json('POST', $this->path); + + $response->assertStatus(201); + $data = $response->json(); + + // Should select an article based on statistics + // With random ordering, any article could be selected, but it should prioritize lower statistics + $this->assertNotNull($data['article_id']); + $this->assertIsInt($data['article_id']); + + // Verify the article_note was created for the current user + $this->assertEquals($currentUser->id, $data['user_id']); + } +} diff --git a/code/tests/Athenia/Feature/Http/User/ArticleNote/UserArticleNoteUpdateTest.php b/code/tests/Athenia/Feature/Http/User/ArticleNote/UserArticleNoteUpdateTest.php new file mode 100644 index 00000000..3197c336 --- /dev/null +++ b/code/tests/Athenia/Feature/Http/User/ArticleNote/UserArticleNoteUpdateTest.php @@ -0,0 +1,172 @@ +setupDatabase(); + $this->mockApplicationLog(); + $this->user = User::factory()->create(); + + $this->path.= $this->user->id . '/article-notes/'; + } + + public function testNotLoggedInUserBlocked(): void + { + $articleNote = ArticleNote::factory()->create(); + + $response = $this->json('PUT', $this->path . $articleNote->id); + + $response->assertStatus(403); + } + + public function testDifferentUserBlocked(): void + { + $otherUser = User::factory()->create(); + $this->actingAs($otherUser); + + $articleNote = ArticleNote::factory()->create([ + 'user_id' => $this->user->id, + ]); + + $response = $this->json('PUT', $this->path . $articleNote->id); + + $response->assertStatus(403); + } + + public function testNotFound(): void + { + $this->actingAs($this->user); + + $response = $this->json('PUT', $this->path . '453'); + + $response->assertStatus(404); + } + + public function testUpdateSuccessful(): void + { + $this->actingAs($this->user); + + $articleNote = ArticleNote::factory()->create([ + 'user_id' => $this->user->id, + 'response' => 'Original response', + 'completed_at' => null, + ]); + + $response = $this->json('PUT', $this->path . $articleNote->id, [ + 'response' => 'Updated response', + ]); + + $response->assertStatus(200); + + /** @var ArticleNote $updated */ + $updated = ArticleNote::find($articleNote->id); + + $this->assertEquals('Updated response', $updated->response); + } + + public function testUpdateSuccessfulMarkCompleted(): void + { + $this->actingAs($this->user); + + $articleNote = ArticleNote::factory()->create([ + 'user_id' => $this->user->id, + 'completed_at' => null, + ]); + + $response = $this->json('PUT', $this->path . $articleNote->id, [ + 'completed' => true, + ]); + + $response->assertStatus(200); + + /** @var ArticleNote $updated */ + $updated = ArticleNote::find($articleNote->id); + + $this->assertNotNull($updated->completed_at); + } + + public function testUpdateSuccessfulUnmarkCompleted(): void + { + $this->actingAs($this->user); + + $articleNote = ArticleNote::factory()->create([ + 'user_id' => $this->user->id, + 'completed_at' => now(), + ]); + + $response = $this->json('PUT', $this->path . $articleNote->id, [ + 'completed' => false, + ]); + + $response->assertStatus(200); + + /** @var ArticleNote $updated */ + $updated = ArticleNote::find($articleNote->id); + + $this->assertNull($updated->completed_at); + } + + public function testUpdateFailsInvalidBooleanFields(): void + { + $this->actingAs($this->user); + + $articleNote = ArticleNote::factory()->create([ + 'user_id' => $this->user->id, + ]); + + $response = $this->json('PUT', $this->path . $articleNote->id, [ + 'completed' => 'not-a-boolean', + ]); + + $response->assertStatus(400); + $response->assertJson([ + 'errors' => [ + 'completed' => ['The completed field must be true or false.'], + ] + ]); + } + + public function testUpdateFailsInvalidStringFields(): void + { + $this->actingAs($this->user); + + $articleNote = ArticleNote::factory()->create([ + 'user_id' => $this->user->id, + ]); + + $response = $this->json('PUT', $this->path . $articleNote->id, [ + 'response' => 12345, + ]); + + $response->assertStatus(400); + $response->assertJson([ + 'errors' => [ + 'response' => ['The response must be a string.'], + ] + ]); + } +} diff --git a/code/tests/Athenia/Feature/Http/User/ArticleNote/UserArticleNoteViewTest.php b/code/tests/Athenia/Feature/Http/User/ArticleNote/UserArticleNoteViewTest.php new file mode 100644 index 00000000..7e6aa050 --- /dev/null +++ b/code/tests/Athenia/Feature/Http/User/ArticleNote/UserArticleNoteViewTest.php @@ -0,0 +1,92 @@ +setupDatabase(); + $this->mockApplicationLog(); + } + + public function testNotLoggedInUserBlocked(): void + { + $user = User::factory()->create(); + $articleNote = ArticleNote::factory()->create([ + 'user_id' => $user->id, + ]); + + $response = $this->json('GET', $this->path . $user->id . '/article-notes/' . $articleNote->id); + + $response->assertStatus(403); + } + + public function testDifferentUserBlocked(): void + { + $this->actAsUser(); + $otherUser = User::factory()->create(); + $articleNote = ArticleNote::factory()->create([ + 'user_id' => $otherUser->id, + ]); + + $response = $this->json('GET', $this->path . $otherUser->id . '/article-notes/' . $articleNote->id); + + $response->assertStatus(403); + } + + public function testUserNotFound(): void + { + $this->actAsUser(); + + $response = $this->json('GET', $this->path . '99999/article-notes/1'); + + $response->assertStatus(404); + } + + public function testArticleNoteNotFound(): void + { + $this->actAsUser(); + + $response = $this->json('GET', $this->path . $this->actingAs->id . '/article-notes/99999'); + + $response->assertStatus(404); + } + + public function testGetSingleSuccess(): void + { + $this->actAsUser(); + $articleNote = ArticleNote::factory()->create([ + 'user_id' => $this->actingAs->id, + 'response' => 'Test response', + ]); + + $response = $this->json('GET', $this->path . $this->actingAs->id . '/article-notes/' . $articleNote->id); + + $response->assertStatus(200); + $response->assertJson([ + 'id' => $articleNote->id, + 'user_id' => $this->actingAs->id, + 'response' => 'Test response', + ]); + } +} diff --git a/code/tests/Athenia/Integration/Policies/User/ArticleNotePolicyTest.php b/code/tests/Athenia/Integration/Policies/User/ArticleNotePolicyTest.php new file mode 100644 index 00000000..7b6cd26e --- /dev/null +++ b/code/tests/Athenia/Integration/Policies/User/ArticleNotePolicyTest.php @@ -0,0 +1,135 @@ +create(); + + $policy = new ArticleNotePolicy(); + + $this->assertTrue($policy->all($user, $user)); + } + + public function testAllFails(): void + { + $user1 = User::factory()->create(); + $user2 = User::factory()->create(); + + $policy = new ArticleNotePolicy(); + + $this->assertFalse($policy->all($user1, $user2)); + } + + public function testCreatePasses(): void + { + $user = User::factory()->create(); + + $policy = new ArticleNotePolicy(); + + $this->assertTrue($policy->create($user, $user)); + } + + public function testCreateFails(): void + { + $user1 = User::factory()->create(); + $user2 = User::factory()->create(); + + $policy = new ArticleNotePolicy(); + + $this->assertFalse($policy->create($user1, $user2)); + } + + public function testViewPasses(): void + { + $user = User::factory()->create(); + + $policy = new ArticleNotePolicy(); + + $articleNote = ArticleNote::factory()->create([ + 'user_id' => $user->id, + ]); + $this->assertTrue($policy->view($user, $user, $articleNote)); + } + + public function testViewFails(): void + { + $user1 = User::factory()->create(); + $user2 = User::factory()->create(); + $articleNote = ArticleNote::factory()->create([ + 'user_id' => $user2->id, + ]); + + $policy = new ArticleNotePolicy(); + + $this->assertFalse($policy->view($user1, $user2, $articleNote)); + $this->assertFalse($policy->view($user1, $user1, $articleNote)); + } + + public function testUpdatePasses(): void + { + $user = User::factory()->create(); + + $policy = new ArticleNotePolicy(); + + $articleNote = ArticleNote::factory()->create([ + 'user_id' => $user->id, + ]); + $this->assertTrue($policy->update($user, $user, $articleNote)); + } + + public function testUpdateFails(): void + { + $user1 = User::factory()->create(); + $user2 = User::factory()->create(); + $articleNote = ArticleNote::factory()->create([ + 'user_id' => $user2->id, + ]); + + $policy = new ArticleNotePolicy(); + + $this->assertFalse($policy->update($user1, $user2, $articleNote)); + $this->assertFalse($policy->update($user1, $user1, $articleNote)); + } + + public function testDeletePasses(): void + { + $user = User::factory()->create(); + + $policy = new ArticleNotePolicy(); + + $articleNote = ArticleNote::factory()->create([ + 'user_id' => $user->id, + ]); + $this->assertTrue($policy->delete($user, $user, $articleNote)); + } + + public function testDeleteFails(): void + { + $user1 = User::factory()->create(); + $user2 = User::factory()->create(); + $articleNote = ArticleNote::factory()->create([ + 'user_id' => $user2->id, + ]); + + $policy = new ArticleNotePolicy(); + + $this->assertFalse($policy->delete($user1, $user2, $articleNote)); + $this->assertFalse($policy->delete($user1, $user1, $articleNote)); + } +} diff --git a/code/tests/Athenia/Integration/Repositories/Statistic/StatisticRepositoryTest.php b/code/tests/Athenia/Integration/Repositories/Statistic/StatisticRepositoryTest.php index 1494468b..c228ab62 100644 --- a/code/tests/Athenia/Integration/Repositories/Statistic/StatisticRepositoryTest.php +++ b/code/tests/Athenia/Integration/Repositories/Statistic/StatisticRepositoryTest.php @@ -79,6 +79,46 @@ public function testFindAllWithFilterReturnsCollection() $this->assertCount(1, $models); } + public function testFindAllForModelReturnsOnlyStatisticsForThatModel() + { + foreach (Statistic::all() as $model) { + $model->delete(); + } + + // Create statistics for different models + Statistic::factory()->count(3)->create(['model' => 'article']); + Statistic::factory()->count(2)->create(['model' => 'user']); + Statistic::factory()->count(1)->create(['model' => 'organization']); + + $articleStatistics = $this->repository->findAllForModel('article'); + $userStatistics = $this->repository->findAllForModel('user'); + $organizationStatistics = $this->repository->findAllForModel('organization'); + + $this->assertCount(3, $articleStatistics); + $this->assertCount(2, $userStatistics); + $this->assertCount(1, $organizationStatistics); + + // Verify all returned statistics have the correct model + foreach ($articleStatistics as $statistic) { + $this->assertEquals('article', $statistic->model); + } + foreach ($userStatistics as $statistic) { + $this->assertEquals('user', $statistic->model); + } + } + + public function testFindAllForModelReturnsEmptyCollectionWhenNoStatisticsExist() + { + foreach (Statistic::all() as $model) { + $model->delete(); + } + + $statistics = $this->repository->findAllForModel('nonexistent'); + + $this->assertCount(0, $statistics); + $this->assertInstanceOf(Collection::class, $statistics); + } + public function testFindReturnsModel() { foreach (Statistic::all() as $model) { diff --git a/code/tests/Athenia/Integration/Repositories/User/ArticleNoteRepositoryTest.php b/code/tests/Athenia/Integration/Repositories/User/ArticleNoteRepositoryTest.php new file mode 100644 index 00000000..fb49ccc9 --- /dev/null +++ b/code/tests/Athenia/Integration/Repositories/User/ArticleNoteRepositoryTest.php @@ -0,0 +1,144 @@ +setupDatabase(); + + $this->repository = new ArticleNoteRepository( + new ArticleNote(), + $this->getGenericLogMock(), + ); + } + + public function testFindAllSuccess(): void + { + ArticleNote::factory()->count(5)->create(); + $items = $this->repository->findAll(); + $this->assertCount(5, $items); + } + + public function testFindAllEmpty(): void + { + $items = $this->repository->findAll(); + $this->assertEmpty($items); + } + + public function testFindOrFailSuccess(): void + { + $model = ArticleNote::factory()->create(); + + $foundModel = $this->repository->findOrFail($model->id); + $this->assertEquals($model->id, $foundModel->id); + } + + public function testFindOrFailFails(): void + { + ArticleNote::factory()->create(['id' => 19]); + + $this->expectException(ModelNotFoundException::class); + $this->repository->findOrFail(20); + } + + public function testCreateSuccess(): void + { + /** @var User $user */ + $user = User::factory()->create(); + + /** @var Article $article */ + $article = Article::factory()->create(); + + /** @var ArticleNote $articleNote */ + $articleNote = $this->repository->create([ + 'article_id' => $article->id, + 'response' => 'A response', + ], $user); + + $this->assertEquals($articleNote->user_id, $user->id); + $this->assertEquals($articleNote->article_id, $article->id); + $this->assertEquals('A response', $articleNote->response); + $this->assertNull($articleNote->completed_at); + } + + public function testCreateSuccessWithCompleted(): void + { + /** @var User $user */ + $user = User::factory()->create(); + + /** @var Article $article */ + $article = Article::factory()->create(); + + /** @var ArticleNote $articleNote */ + $articleNote = $this->repository->create([ + 'article_id' => $article->id, + 'completed' => true, + ], $user); + + $this->assertEquals($articleNote->user_id, $user->id); + $this->assertEquals($articleNote->article_id, $article->id); + $this->assertNotNull($articleNote->completed_at); + } + + public function testUpdateSuccess(): void + { + $model = ArticleNote::factory()->create([ + 'response' => 'Original response', + 'completed_at' => null, + ]); + + $updated = $this->repository->update($model, [ + 'response' => 'Updated response', + 'completed' => true, + ]); + + $this->assertEquals('Updated response', $updated->response); + $this->assertNotNull($updated->completed_at); + } + + public function testUpdateSuccessUnmarkCompleted(): void + { + $model = ArticleNote::factory()->create([ + 'completed_at' => now(), + ]); + + $updated = $this->repository->update($model, [ + 'completed' => false, + ]); + + $this->assertNull($updated->completed_at); + } + + public function testDeleteSuccess(): void + { + $model = ArticleNote::factory()->create(); + + $this->repository->delete($model); + + $this->assertNull(ArticleNote::find($model->id)); + } +} diff --git a/code/tests/Athenia/Integration/Repositories/Wiki/ArticleRepositorySelectArticleTest.php b/code/tests/Athenia/Integration/Repositories/Wiki/ArticleRepositorySelectArticleTest.php new file mode 100644 index 00000000..b04c28bd --- /dev/null +++ b/code/tests/Athenia/Integration/Repositories/Wiki/ArticleRepositorySelectArticleTest.php @@ -0,0 +1,417 @@ +setupDatabase(); + $this->repository = app(ArticleRepositoryContract::class); + + // Seed article note statistics + $this->seed(\Database\Seeders\ArticleNoteStatisticsSeeder::class); + } + + public function testSelectArticleForUserNeverReturnsCompletedArticles(): void + { + // Clean up any existing articles + Article::query()->delete(); + + /** @var User $user */ + $user = User::factory()->create(); + + // Create two articles + $article1 = Article::factory()->create(['title' => 'Article 1']); + $article2 = Article::factory()->create(['title' => 'Article 2']); + + // User has completed article 1 + ArticleNote::factory()->create([ + 'user_id' => $user->id, + 'article_id' => $article1->id, + 'completed_at' => now(), + ]); + + // Select article for user + $selected = $this->repository->selectArticleForUser($user); + + // Should return an article, but never article 1 (the completed one) + $this->assertNotNull($selected); + $this->assertNotEquals($article1->id, $selected->id); + + // Verify the user has NOT completed a note on the selected article + $userNote = ArticleNote::where('user_id', $user->id) + ->where('article_id', $selected->id) + ->first(); + if ($userNote) { + $this->assertNull($userNote->completed_at); + } + } + + public function testSelectArticleForUserPrioritizesArticlesWithNoNotes(): void + { + // Clean up any existing articles + Article::query()->delete(); + + /** @var User $user */ + $user = User::factory()->create(); + + // Create two articles + $articleWithNote = Article::factory()->create(['title' => 'Has Incomplete Note']); + $articleWithoutNote = Article::factory()->create(['title' => 'No Note']); + + // User has incomplete note on first article + ArticleNote::factory()->create([ + 'user_id' => $user->id, + 'article_id' => $articleWithNote->id, + 'completed_at' => null, + ]); + + // Select article for user + $selected = $this->repository->selectArticleForUser($user); + + // Should return an article (prefer one without note over one with incomplete note) + $this->assertNotNull($selected); + + // Verify the user has NOT completed a note on the selected article + $userNote = ArticleNote::where('user_id', $user->id) + ->where('article_id', $selected->id) + ->first(); + + if ($userNote) { + $this->assertNull($userNote->completed_at, 'Selected article should not have a completed note'); + } + } + + public function testSelectArticleForUserOrdersByLowestCompletedNotesStatistic(): void + { + // Clean up any existing articles + Article::query()->delete(); + + /** @var User $currentUser */ + $currentUser = User::factory()->create(); + + // Create three articles + $articleLowCompleted = Article::factory()->create(['title' => 'Low Completed']); + $articleHighCompleted = Article::factory()->create(['title' => 'High Completed']); + $articleNoCompleted = Article::factory()->create(['title' => 'No Completed']); + + // Create other users who have completed notes + $otherUser1 = User::factory()->create(); + $otherUser2 = User::factory()->create(); + $otherUser3 = User::factory()->create(); + + // Article 2 has 3 completed notes (high) + ArticleNote::factory()->create([ + 'user_id' => $otherUser1->id, + 'article_id' => $articleHighCompleted->id, + 'completed_at' => now(), + ]); + ArticleNote::factory()->create([ + 'user_id' => $otherUser2->id, + 'article_id' => $articleHighCompleted->id, + 'completed_at' => now(), + ]); + ArticleNote::factory()->create([ + 'user_id' => $otherUser3->id, + 'article_id' => $articleHighCompleted->id, + 'completed_at' => now(), + ]); + + // Article 1 has 1 completed note (low) + ArticleNote::factory()->create([ + 'user_id' => $otherUser1->id, + 'article_id' => $articleLowCompleted->id, + 'completed_at' => now(), + ]); + + // Synchronize statistics for all articles + $synchronizationService = app(StatisticSynchronizationServiceContract::class); + $synchronizationService->synchronizeTargetStatistics($articleLowCompleted); + $synchronizationService->synchronizeTargetStatistics($articleHighCompleted); + $synchronizationService->synchronizeTargetStatistics($articleNoCompleted); + + // Select article for current user + $selected = $this->repository->selectArticleForUser($currentUser); + + // Should return an article (will prefer ones with lower completed notes) + $this->assertNotNull($selected); + + // Mark all three test articles as completed for current user to test that they're excluded + ArticleNote::updateOrCreate( + ['user_id' => $currentUser->id, 'article_id' => $articleNoCompleted->id], + ['completed_at' => now()] + ); + ArticleNote::updateOrCreate( + ['user_id' => $currentUser->id, 'article_id' => $articleLowCompleted->id], + ['completed_at' => now()] + ); + ArticleNote::updateOrCreate( + ['user_id' => $currentUser->id, 'article_id' => $articleHighCompleted->id], + ['completed_at' => now()] + ); + + // Select again + $selected2 = $this->repository->selectArticleForUser($currentUser); + + // Should return a different article (not any of the completed ones) + $this->assertNotNull($selected2); + $this->assertNotEquals($articleNoCompleted->id, $selected2->id); + $this->assertNotEquals($articleLowCompleted->id, $selected2->id); + $this->assertNotEquals($articleHighCompleted->id, $selected2->id); + } + + public function testSelectArticleForUserOrdersByLowestTotalNotesStatistic(): void + { + // Clean up any existing articles + Article::query()->delete(); + + /** @var User $currentUser */ + $currentUser = User::factory()->create(); + + // Create two articles with same completed notes but different total notes + $articleLowTotal = Article::factory()->create(['title' => 'Low Total']); + $articleHighTotal = Article::factory()->create(['title' => 'High Total']); + + // Create other users + $otherUser1 = User::factory()->create(); + $otherUser2 = User::factory()->create(); + $otherUser3 = User::factory()->create(); + + // Both articles have 1 completed note (same) + ArticleNote::factory()->create([ + 'user_id' => $otherUser1->id, + 'article_id' => $articleLowTotal->id, + 'completed_at' => now(), + ]); + ArticleNote::factory()->create([ + 'user_id' => $otherUser2->id, + 'article_id' => $articleHighTotal->id, + 'completed_at' => now(), + ]); + + // Article high total has 2 additional incomplete notes (3 total notes vs 1) + ArticleNote::factory()->create([ + 'user_id' => $otherUser3->id, + 'article_id' => $articleHighTotal->id, + 'completed_at' => null, + ]); + ArticleNote::factory()->create([ + 'user_id' => User::factory()->create()->id, + 'article_id' => $articleHighTotal->id, + 'completed_at' => null, + ]); + + // Synchronize statistics + $synchronizationService = app(StatisticSynchronizationServiceContract::class); + $synchronizationService->synchronizeTargetStatistics($articleLowTotal); + $synchronizationService->synchronizeTargetStatistics($articleHighTotal); + + // Select article for current user + $selected = $this->repository->selectArticleForUser($currentUser); + + // Should return an article + $this->assertNotNull($selected); + + // Verify current user has no note (or no completed note) on the selected article + $userNote = ArticleNote::where('user_id', $currentUser->id) + ->where('article_id', $selected->id) + ->first(); + + if ($userNote) { + $this->assertNull($userNote->completed_at, 'Selected article should not have a completed note'); + } + } + + public function testSelectArticleForUserCanReturnArticleWithIncompleteNote(): void + { + // Clean up any existing articles + Article::query()->delete(); + + /** @var User $user */ + $user = User::factory()->create(); + + // Create an article with an incomplete note + $articleWithIncompleteNote = Article::factory()->create(['title' => 'Article With Incomplete Note']); + ArticleNote::factory()->create([ + 'user_id' => $user->id, + 'article_id' => $articleWithIncompleteNote->id, + 'completed_at' => null, + ]); + + // Select article for user + $selected = $this->repository->selectArticleForUser($user); + + // Should return an article (either one without notes or the one with incomplete note) + $this->assertNotNull($selected); + + // If it returned the article with incomplete note, verify it's correct + if ($selected->id === $articleWithIncompleteNote->id) { + $userNote = ArticleNote::where('user_id', $user->id) + ->where('article_id', $selected->id) + ->first(); + $this->assertNotNull($userNote); + $this->assertNull($userNote->completed_at); + } + } + + public function testSelectArticleForUserExcludesCompletedArticles(): void + { + // Clean up any existing articles + Article::query()->delete(); + + /** @var User $user */ + $user = User::factory()->create(); + + // Create three articles + $completedArticle1 = Article::factory()->create(['title' => 'Completed 1']); + $completedArticle2 = Article::factory()->create(['title' => 'Completed 2']); + $availableArticle = Article::factory()->create(['title' => 'Available']); + + // Mark first two as completed + ArticleNote::factory()->create([ + 'user_id' => $user->id, + 'article_id' => $completedArticle1->id, + 'completed_at' => now(), + ]); + ArticleNote::factory()->create([ + 'user_id' => $user->id, + 'article_id' => $completedArticle2->id, + 'completed_at' => now(), + ]); + + // Select article for user (should not return completed articles) + $selected = $this->repository->selectArticleForUser($user); + + // Should return an article + $this->assertNotNull($selected); + + // Verify the selected article is NOT one of the completed ones + $this->assertNotEquals($completedArticle1->id, $selected->id); + $this->assertNotEquals($completedArticle2->id, $selected->id); + + // Verify if user has a note on the selected article, it's not completed + $userNote = ArticleNote::where('user_id', $user->id) + ->where('article_id', $selected->id) + ->first(); + + if ($userNote) { + $this->assertNull($userNote->completed_at, 'Selected article should not have a completed note'); + } + } + + public function testSelectArticleForUserCombinesPriorityAndStatistics(): void + { + // Clean up any existing articles + Article::query()->delete(); + + /** @var User $currentUser */ + $currentUser = User::factory()->create(); + + // Create articles in different priority groups + $unstartedHighStats = Article::factory()->create(['title' => 'Unstarted High Stats']); + $unstartedLowStats = Article::factory()->create(['title' => 'Unstarted Low Stats']); + $incompleteHighStats = Article::factory()->create(['title' => 'Incomplete High Stats']); + $incompleteLowStats = Article::factory()->create(['title' => 'Incomplete Low Stats']); + + // Create other users to generate statistics + $otherUsers = User::factory()->count(5)->create(); + + // Generate high statistics for some articles + foreach ($otherUsers as $otherUser) { + ArticleNote::factory()->create([ + 'user_id' => $otherUser->id, + 'article_id' => $unstartedHighStats->id, + 'completed_at' => now(), + ]); + ArticleNote::factory()->create([ + 'user_id' => $otherUser->id, + 'article_id' => $incompleteHighStats->id, + 'completed_at' => now(), + ]); + } + + // Current user has incomplete notes on incomplete articles + ArticleNote::factory()->create([ + 'user_id' => $currentUser->id, + 'article_id' => $incompleteHighStats->id, + 'completed_at' => null, + ]); + ArticleNote::factory()->create([ + 'user_id' => $currentUser->id, + 'article_id' => $incompleteLowStats->id, + 'completed_at' => null, + ]); + + // Synchronize statistics + $synchronizationService = app(StatisticSynchronizationServiceContract::class); + foreach ([$unstartedHighStats, $unstartedLowStats, $incompleteHighStats, $incompleteLowStats] as $article) { + $synchronizationService->synchronizeTargetStatistics($article); + } + + // Select article for current user + $selected = $this->repository->selectArticleForUser($currentUser); + + // Should return an article + $this->assertNotNull($selected); + + // Verify it's not one of the articles the user already has an incomplete note on + // (unless all unstarted articles are exhausted) + $userNote = ArticleNote::where('user_id', $currentUser->id) + ->where('article_id', $selected->id) + ->first(); + + // The selected article should either have no note (priority 1) or an incomplete note (priority 2) + if ($userNote) { + $this->assertNull($userNote->completed_at, 'Selected article should not have a completed note'); + } + + // Mark the two test unstarted articles as completed + ArticleNote::updateOrCreate( + ['user_id' => $currentUser->id, 'article_id' => $unstartedLowStats->id], + ['completed_at' => now()] + ); + ArticleNote::updateOrCreate( + ['user_id' => $currentUser->id, 'article_id' => $unstartedHighStats->id], + ['completed_at' => now()] + ); + + // Select again + $selected2 = $this->repository->selectArticleForUser($currentUser); + + // Should still return an article + $this->assertNotNull($selected2); + + // Verify it's not a completed article + $this->assertNotEquals($unstartedLowStats->id, $selected2->id); + $this->assertNotEquals($unstartedHighStats->id, $selected2->id); + + // Verify if there's a user note, it's not completed + $userNote2 = ArticleNote::where('user_id', $currentUser->id) + ->where('article_id', $selected2->id) + ->first(); + + if ($userNote2) { + $this->assertNull($userNote2->completed_at, 'Selected article should not have a completed note'); + } + } +} diff --git a/code/tests/Athenia/Integration/Repositories/Wiki/ArticleRepositoryTest.php b/code/tests/Athenia/Integration/Repositories/Wiki/ArticleRepositoryTest.php index c9986e22..5d9da01c 100644 --- a/code/tests/Athenia/Integration/Repositories/Wiki/ArticleRepositoryTest.php +++ b/code/tests/Athenia/Integration/Repositories/Wiki/ArticleRepositoryTest.php @@ -3,6 +3,7 @@ namespace Tests\Athenia\Integration\Repositories\Wiki; +use App\Athenia\Contracts\Repositories\Statistic\StatisticRepositoryContract; use App\Athenia\Exceptions\NotImplementedException; use App\Athenia\Repositories\Wiki\ArticleRepository; use App\Models\User\User; @@ -30,7 +31,11 @@ protected function setUp(): void parent::setUp(); $this->setupDatabase(); - $this->repository = new ArticleRepository(new Article(), $this->getGenericLogMock()); + $this->repository = new ArticleRepository( + new Article(), + $this->getGenericLogMock(), + app(StatisticRepositoryContract::class) + ); } public function testDeleteThrowsException(): void diff --git a/code/tests/Athenia/Integration/Statistic/ArticleNoteStatisticsTest.php b/code/tests/Athenia/Integration/Statistic/ArticleNoteStatisticsTest.php new file mode 100644 index 00000000..8d3d5b74 --- /dev/null +++ b/code/tests/Athenia/Integration/Statistic/ArticleNoteStatisticsTest.php @@ -0,0 +1,245 @@ +setupDatabase(); + + // Seed article note statistics + $this->seed(\Database\Seeders\ArticleNoteStatisticsSeeder::class); + } + + public function testTotalNotesStatisticUpdatesOnCreate(): void + { + /** @var Article $article */ + $article = Article::factory()->create(); + + /** @var User $user */ + $user = User::factory()->create(); + + // Get the total_notes statistic + $statistic = Statistic::where('name', 'total_notes')->first(); + $this->assertNotNull($statistic); + + // Synchronize to ensure TargetStatistics exist for this article + $synchronizationService = app(StatisticSynchronizationServiceContract::class); + $synchronizationService->synchronizeTargetStatistics($article); + + // Create an ArticleNote + ArticleNote::factory()->create([ + 'user_id' => $user->id, + 'article_id' => $article->id, + ]); + + // Refresh the article and check for target statistics + $article->refresh(); + $targetStatistic = TargetStatistic::where('target_id', $article->id) + ->where('target_type', 'article') + ->where('statistic_id', $statistic->id) + ->first(); + + $this->assertNotNull($targetStatistic); + $this->assertEquals(1, $targetStatistic->result['total']); + } + + public function testTotalCompletedNotesStatisticUpdatesOnCreate(): void + { + /** @var Article $article */ + $article = Article::factory()->create(); + + /** @var User $user */ + $user = User::factory()->create(); + + // Get the total_completed_notes statistic + $statistic = Statistic::where('name', 'total_completed_notes')->first(); + $this->assertNotNull($statistic); + + // Synchronize to ensure TargetStatistics exist for this article + $synchronizationService = app(StatisticSynchronizationServiceContract::class); + $synchronizationService->synchronizeTargetStatistics($article); + + // Create a completed ArticleNote + ArticleNote::factory()->create([ + 'user_id' => $user->id, + 'article_id' => $article->id, + 'completed_at' => now(), + ]); + + // Refresh the article and check for target statistics + $article->refresh(); + $targetStatistic = TargetStatistic::where('target_id', $article->id) + ->where('target_type', 'article') + ->where('statistic_id', $statistic->id) + ->first(); + + $this->assertNotNull($targetStatistic); + $this->assertEquals(1, $targetStatistic->result['total']); + } + + public function testTotalNotesStatisticUpdatesOnDelete(): void + { + /** @var Article $article */ + $article = Article::factory()->create(); + + /** @var User $user1 */ + $user1 = User::factory()->create(); + + /** @var User $user2 */ + $user2 = User::factory()->create(); + + // Get the total_notes statistic + $statistic = Statistic::where('name', 'total_notes')->first(); + $this->assertNotNull($statistic); + + // Synchronize to ensure TargetStatistics exist for this article + $synchronizationService = app(StatisticSynchronizationServiceContract::class); + $synchronizationService->synchronizeTargetStatistics($article); + + // Create two ArticleNotes with different users + $note1 = ArticleNote::factory()->create([ + 'user_id' => $user1->id, + 'article_id' => $article->id, + ]); + + ArticleNote::factory()->create([ + 'user_id' => $user2->id, + 'article_id' => $article->id, + ]); + + // Verify we have 2 notes + $targetStatistic = TargetStatistic::where('target_id', $article->id) + ->where('target_type', 'article') + ->where('statistic_id', $statistic->id) + ->first(); + + $this->assertNotNull($targetStatistic); + $this->assertEquals(2, $targetStatistic->result['total']); + + // Delete one note + $note1->delete(); + + // Verify we now have 1 note + $targetStatistic->refresh(); + $this->assertEquals(1, $targetStatistic->result['total']); + } + + public function testTotalCompletedNotesStatisticUpdatesOnUpdate(): void + { + /** @var Article $article */ + $article = Article::factory()->create(); + + /** @var User $user */ + $user = User::factory()->create(); + + // Get the total_completed_notes statistic + $statistic = Statistic::where('name', 'total_completed_notes')->first(); + $this->assertNotNull($statistic); + + // Synchronize to ensure TargetStatistics exist for this article + $synchronizationService = app(StatisticSynchronizationServiceContract::class); + $synchronizationService->synchronizeTargetStatistics($article); + + // Create an incomplete ArticleNote + $note = ArticleNote::factory()->create([ + 'user_id' => $user->id, + 'article_id' => $article->id, + 'completed_at' => null, + ]); + + // Verify we have 0 completed notes + $targetStatistic = TargetStatistic::where('target_id', $article->id) + ->where('target_type', 'article') + ->where('statistic_id', $statistic->id) + ->first(); + + $this->assertNotNull($targetStatistic); + $this->assertEquals(0, $targetStatistic->result['total']); + + // Mark note as completed + $note->update(['completed_at' => now()]); + + // Verify we now have 1 completed note + $targetStatistic->refresh(); + $this->assertEquals(1, $targetStatistic->result['total']); + } + + public function testMultipleNotesStatistics(): void + { + /** @var Article $article */ + $article = Article::factory()->create(); + + /** @var User $user1 */ + $user1 = User::factory()->create(); + + /** @var User $user2 */ + $user2 = User::factory()->create(); + + /** @var User $user3 */ + $user3 = User::factory()->create(); + + // Get both statistics + $totalNotesStatistic = Statistic::where('name', 'total_notes')->first(); + $totalCompletedNotesStatistic = Statistic::where('name', 'total_completed_notes')->first(); + + // Synchronize to ensure TargetStatistics exist for this article + $synchronizationService = app(StatisticSynchronizationServiceContract::class); + $synchronizationService->synchronizeTargetStatistics($article); + + // Create 3 notes: 2 completed, 1 incomplete (each with different user) + ArticleNote::factory()->create([ + 'user_id' => $user1->id, + 'article_id' => $article->id, + 'completed_at' => now(), + ]); + + ArticleNote::factory()->create([ + 'user_id' => $user2->id, + 'article_id' => $article->id, + 'completed_at' => now(), + ]); + + ArticleNote::factory()->create([ + 'user_id' => $user3->id, + 'article_id' => $article->id, + 'completed_at' => null, + ]); + + // Verify total notes = 3 + $totalNotesTargetStat = TargetStatistic::where('target_id', $article->id) + ->where('target_type', 'article') + ->where('statistic_id', $totalNotesStatistic->id) + ->first(); + + $this->assertNotNull($totalNotesTargetStat); + $this->assertEquals(3, $totalNotesTargetStat->result['total']); + + // Verify completed notes = 2 + $totalCompletedNotesTargetStat = TargetStatistic::where('target_id', $article->id) + ->where('target_type', 'article') + ->where('statistic_id', $totalCompletedNotesStatistic->id) + ->first(); + + $this->assertNotNull($totalCompletedNotesTargetStat); + $this->assertEquals(2, $totalCompletedNotesTargetStat->result['total']); + } +} diff --git a/code/tests/Athenia/Unit/Models/User/ArticleNoteTest.php b/code/tests/Athenia/Unit/Models/User/ArticleNoteTest.php new file mode 100644 index 00000000..7b8e1be6 --- /dev/null +++ b/code/tests/Athenia/Unit/Models/User/ArticleNoteTest.php @@ -0,0 +1,32 @@ +user(); + + $this->assertEquals('article_notes.user_id', $relation->getQualifiedForeignKeyName()); + $this->assertEquals('users.id', $relation->getQualifiedOwnerKeyName()); + } + + public function testArticle(): void + { + $articleNote = new ArticleNote(); + $relation = $articleNote->article(); + + $this->assertEquals('article_notes.article_id', $relation->getQualifiedForeignKeyName()); + $this->assertEquals('articles.id', $relation->getQualifiedOwnerKeyName()); + } +}