Skip to content

Commit

Permalink
Add model fields to lesson model (#318)
Browse files Browse the repository at this point in the history
* Add model fields to lesson model

---------

Co-authored-by: Tomasz Smolarek <tomasz.smolarek@escolasoft.com>
  • Loading branch information
dyfero and dyfero authored Mar 7, 2024
1 parent bc01c5d commit 76928e6
Show file tree
Hide file tree
Showing 17 changed files with 150 additions and 51 deletions.
12 changes: 2 additions & 10 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -110,15 +110,6 @@ jobs:
- name: Run tests
run: vendor/bin/phpunit

- name: Clear config
run: vendor/bin/testbench config:clear

- name: Publish things
run: vendor/bin/testbench migrate:fresh

- name: Run tests
run: vendor/bin/phpunit

php81-laravel-latest-phpunit-postgres:
runs-on: ubuntu-latest
container:
Expand All @@ -140,7 +131,7 @@ jobs:
uses: actions/checkout@v2

- name: Update composer
run: COMPOSER_ROOT_VERSION=0.9.9 composer update
run: composer update

- name: Setup environment
run: cp env/postgres/* .
Expand All @@ -153,4 +144,5 @@ jobs:

- name: Run tests
run: vendor/bin/phpunit

### TODO add behat tests here
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,15 @@
"require": {
"php": ">=7.4",
"davidbadura/faker-markdown-generator": "^1.1",
"devianl2/laravel-scorm": "^2.0",
"devianl2/laravel-scorm": "^4.0",
"escolalms/auth": "^0",
"escolalms/categories": "^0",
"escolalms/core": "^1",
"escolalms/files": "^0",
"escolalms/scorm": "^0",
"escolalms/settings": "^0",
"escolalms/tags": "^0",
"escolalms/model-fields": "^0",
"laravel/framework": ">=8.0",
"spatie/laravel-responsecache": "^7.4"
},
Expand Down
5 changes: 4 additions & 1 deletion env/codecov/testbench.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,15 @@ env:
- DB_PASSWORD=password

providers:
- Spatie\Permission\PermissionServiceProvider
- Laravel\Passport\PassportServiceProvider
- Spatie\Permission\PermissionServiceProvider
- EscolaLms\Categories\EscolaLmsCategoriesServiceProvider
- EscolaLms\Core\EscolaLmsServiceProvider
- EscolaLms\Auth\EscolaLmsAuthServiceProvider
- EscolaLms\Scorm\EscolaLmsScormServiceProvider
- EscolaLms\Courses\EscolaLmsCourseServiceProvider
- EscolaLms\Tags\EscolaLmsTagsServiceProvider
- EscolaLms\Settings\EscolaLmsSettingsServiceProvider
- EscolaLms\Courses\Tests\EscolaLmsTopicTypeTestServiceProvider
- EscolaLms\Files\EscolaLmsFilesServiceProvider
- EscolaLms\ModelFields\ModelFieldsServiceProvider
5 changes: 4 additions & 1 deletion env/mysql/testbench.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,15 @@ env:
- APP_DEBUG=true

providers:
- Spatie\Permission\PermissionServiceProvider
- Laravel\Passport\PassportServiceProvider
- Spatie\Permission\PermissionServiceProvider
- EscolaLms\Categories\EscolaLmsCategoriesServiceProvider
- EscolaLms\Core\EscolaLmsServiceProvider
- EscolaLms\Auth\EscolaLmsAuthServiceProvider
- EscolaLms\Scorm\EscolaLmsScormServiceProvider
- EscolaLms\Courses\EscolaLmsCourseServiceProvider
- EscolaLms\Tags\EscolaLmsTagsServiceProvider
- EscolaLms\Settings\EscolaLmsSettingsServiceProvider
- EscolaLms\Courses\Tests\EscolaLmsTopicTypeTestServiceProvider
- EscolaLms\Files\EscolaLmsFilesServiceProvider
- EscolaLms\ModelFields\ModelFieldsServiceProvider
5 changes: 4 additions & 1 deletion env/postgres/testbench.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,15 @@ env:
- DB_PASSWORD=postgres

providers:
- Spatie\Permission\PermissionServiceProvider
- Laravel\Passport\PassportServiceProvider
- Spatie\Permission\PermissionServiceProvider
- EscolaLms\Categories\EscolaLmsCategoriesServiceProvider
- EscolaLms\Core\EscolaLmsServiceProvider
- EscolaLms\Auth\EscolaLmsAuthServiceProvider
- EscolaLms\Scorm\EscolaLmsScormServiceProvider
- EscolaLms\Courses\EscolaLmsCourseServiceProvider
- EscolaLms\Tags\EscolaLmsTagsServiceProvider
- EscolaLms\Settings\EscolaLmsSettingsServiceProvider
- EscolaLms\Courses\Tests\EscolaLmsTopicTypeTestServiceProvider
- EscolaLms\Files\EscolaLmsFilesServiceProvider
- EscolaLms\ModelFields\ModelFieldsServiceProvider
5 changes: 5 additions & 0 deletions src/EscolaLmsCourseServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

namespace EscolaLms\Courses;

use EscolaLms\Courses\Models\Lesson;
use EscolaLms\Courses\Models\Topic;
use EscolaLms\Courses\Observers\LessonObserver;
use EscolaLms\Courses\Observers\TopicObserver;
use EscolaLms\Courses\Providers\EventServiceProvider;
use EscolaLms\Courses\Providers\SettingsServiceProvider;
Expand All @@ -26,6 +28,7 @@
use EscolaLms\Courses\Services\LessonService;
use EscolaLms\Courses\Services\ProgressService;
use EscolaLms\Courses\Services\TopicService;
use EscolaLms\ModelFields\ModelFieldsServiceProvider;
use EscolaLms\Scorm\EscolaLmsScormServiceProvider;
use EscolaLms\Tags\EscolaLmsTagsServiceProvider;
use Illuminate\Support\ServiceProvider;
Expand Down Expand Up @@ -61,6 +64,7 @@ public function boot()
$router->aliasMiddleware('cacheResponse', CacheResponse::class);

Topic::observe(TopicObserver::class);
Lesson::observe(LessonObserver::class);
}

protected function bootForConsole(): void
Expand All @@ -82,5 +86,6 @@ public function register()
$this->app->register(EventServiceProvider::class);
$this->app->register(EscolaLmsScormServiceProvider::class);
$this->app->register(EscolaLmsTagsServiceProvider::class);
$this->app->register(ModelFieldsServiceProvider::class);
}
}
3 changes: 2 additions & 1 deletion src/Http/Requests/CreateLessonAPIRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use EscolaLms\Courses\Models\Course;
use EscolaLms\Courses\Models\Lesson;
use EscolaLms\Courses\Rules\ValidParentLesson;
use EscolaLms\ModelFields\Facades\ModelFields;
use Illuminate\Foundation\Http\FormRequest;

class CreateLessonAPIRequest extends FormRequest
Expand All @@ -21,6 +22,6 @@ public function rules(): array
{
return array_merge(Lesson::$rules, [
'parent_lesson_id' => ['nullable', new ValidParentLesson($this->get('course_id'))],
]);
], ModelFields::getFieldsMetadataRules(Lesson::class));
}
}
3 changes: 2 additions & 1 deletion src/Http/Requests/UpdateLessonAPIRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use EscolaLms\Courses\Models\Lesson;
use EscolaLms\Courses\Rules\ValidParentLesson;
use EscolaLms\ModelFields\Facades\ModelFields;
use Illuminate\Foundation\Http\FormRequest;

class UpdateLessonAPIRequest extends FormRequest
Expand All @@ -20,6 +21,6 @@ public function rules(): array
{
return array_merge(Lesson::$rules, [
'parent_lesson_id' => ['nullable', new ValidParentLesson($this->get('course_id'))],
]);
], ModelFields::getFieldsMetadataRules(Lesson::class));
}
}
3 changes: 3 additions & 0 deletions src/Http/Resources/Admin/LessonWithTopicsAdminResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
namespace EscolaLms\Courses\Http\Resources\Admin;

use EscolaLms\Courses\Models\Lesson;
use EscolaLms\ModelFields\Enum\MetaFieldVisibilityEnum;
use EscolaLms\ModelFields\Facades\ModelFields;
use Illuminate\Http\Resources\Json\JsonResource;

/**
Expand Down Expand Up @@ -39,6 +41,7 @@ public function toArray($request): array
'lessons' => LessonWithTopicsAdminResource::collection($lesson->lessons->sortBy('order')),
'active_from' => $this->active_from,
'active_to' => $this->active_to,
...ModelFields::getExtraAttributesValues($this->resource, MetaFieldVisibilityEnum::PUBLIC)
];
}
}
3 changes: 3 additions & 0 deletions src/Http/Resources/LessonResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
namespace EscolaLms\Courses\Http\Resources;

use EscolaLms\Courses\Models\Lesson;
use EscolaLms\ModelFields\Enum\MetaFieldVisibilityEnum;
use EscolaLms\ModelFields\Facades\ModelFields;
use Illuminate\Http\Resources\Json\JsonResource;

/**
Expand All @@ -23,6 +25,7 @@ public function toArray($request): array
'active_from' => $this->active_from,
'active_to' => $this->active_to,
'lessons' => LessonSimpleResource::collection($this->lessons->filter(fn (Lesson $lesson) => $lesson->active)->sortBy('order')),
...ModelFields::getExtraAttributesValues($this->resource, MetaFieldVisibilityEnum::PUBLIC)
];
}
}
3 changes: 3 additions & 0 deletions src/Http/Resources/LessonWithTopicsResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

use EscolaLms\Courses\Models\Lesson;
use EscolaLms\Courses\Models\Topic;
use EscolaLms\ModelFields\Enum\MetaFieldVisibilityEnum;
use EscolaLms\ModelFields\Facades\ModelFields;
use Illuminate\Http\Resources\Json\JsonResource;

class LessonWithTopicsResource extends JsonResource
Expand Down Expand Up @@ -39,6 +41,7 @@ public function toArray($request): array
'active_from' => $this->active_from,
'active_to' => $this->active_to,
'lessons' => LessonWithTopicsResource::collection($lessons),
...ModelFields::getExtraAttributesValues($this->resource, MetaFieldVisibilityEnum::PUBLIC)
];
}
}
20 changes: 4 additions & 16 deletions src/Models/Lesson.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use EscolaLms\Core\Models\Traits\QueryCacheable;
use EscolaLms\Courses\Database\Factories\LessonFactory;
use EscolaLms\ModelFields\Traits\ModelFields;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
Expand Down Expand Up @@ -73,7 +74,9 @@
*/
class Lesson extends Model
{
use HasFactory, QueryCacheable;
use HasFactory;
use QueryCacheable;
use ModelFields;

public $table = 'lessons';

Expand Down Expand Up @@ -174,19 +177,4 @@ public function isActive(): bool

return true;
}

protected static function booted()
{
static::creating(function (Lesson $lesson) {
if (!$lesson->order) {
$lesson->order = 1 + (int)Lesson::when($lesson->course_id, function (Builder $query, int $courseId) {
$query->where('course_id', $courseId);
})
->when($lesson->parent_lesson_id, function (Builder $query, int $parentId) {
$query->where('parent_lesson_id', $parentId);
})
->max('order');
}
});
}
}
1 change: 0 additions & 1 deletion src/Models/Topic.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

namespace EscolaLms\Courses\Models;

use Chelout\RelationshipEvents\Concerns\HasMorphToManyEvents;
use EscolaLms\Core\Models\Traits\QueryCacheable;
use EscolaLms\Courses\Database\Factories\TopicFactory;
use EscolaLms\Courses\Facades\Topic as TopicFacade;
Expand Down
24 changes: 24 additions & 0 deletions src/Observers/LessonObserver.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

namespace EscolaLms\Courses\Observers;

use EscolaLms\Courses\Models\Lesson;
use Illuminate\Database\Eloquent\Builder;

class LessonObserver
{
public function creating(Lesson $lesson): void
{
if (!$lesson->order) {
$lesson->order = 1 +
(int)Lesson::query()
->when($lesson->course_id, function (Builder $query, int $courseId) {
$query->where('course_id', $courseId);
})
->when($lesson->parent_lesson_id, function (Builder $query, int $parentId) {
$query->where('parent_lesson_id', $parentId);
})
->max('order');
}
}
}
1 change: 1 addition & 0 deletions testbench.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,4 @@ providers:
- EscolaLms\Settings\EscolaLmsSettingsServiceProvider
- EscolaLms\Courses\Tests\EscolaLmsTopicTypeTestServiceProvider
- EscolaLms\Files\EscolaLmsFilesServiceProvider
- EscolaLms\ModelFields\ModelFieldsServiceProvider
Loading

0 comments on commit 76928e6

Please sign in to comment.