README.md
# Webinar
Package enabling live video stream
[![swagger](https://img.shields.io/badge/documentation-swagger-green)](https://escolalms.github.io/Webinar/)
[![codecov](https://codecov.io/gh/EscolaLMS/Webinar/branch/main/graph/badge.svg?token=NRAN4R8AGZ)](https://codecov.io/gh/EscolaLMS/Webinar)
[![phpunit](https://github.com/EscolaLMS/Webinar/actions/workflows/test.yml/badge.svg)](https://github.com/EscolaLMS/Webinar/actions/workflows/test.yml)
[![downloads](https://img.shields.io/packagist/dt/escolalms/webinar)](https://packagist.org/packages/escolalms/webinar)
[![downloads](https://img.shields.io/packagist/v/escolalms/webinar)](https://packagist.org/packages/escolalms/webinar)
[![downloads](https://img.shields.io/packagist/l/escolalms/webinar)](https://packagist.org/packages/escolalms/webinar)
[![Maintainability](https://api.codeclimate.com/v1/badges/0c9e2593fb30e2048f95/maintainability)](https://codeclimate.com/github/EscolaLMS/Webinar/maintainability)
## What does it do
This package is used for creating Webinar for EscolaLms.
## Installing
- `composer require escolalms/webinar`
- `php artisan migrate`
- `php artisan db:seed --class="EscolaLms\Webinar\Database\Seeders\WebinarsPermissionSeeder"`
- Integration with [Youtube](https://github.com/EscolaLMS/Youtube)
## Schedule
- In App\Console\Kernel to method schedule add
- `$schedule->job(new ReminderAboutWebinarJob(WebinarTermReminderStatusEnum::REMINDED_HOUR_BEFORE))->everyFiveMinutes()` - reminder about to webinar before one hour, executed every 5 minutes
- `$schedule->job(new ReminderAboutWebinarJob(WebinarTermReminderStatusEnum::REMINDED_DAY_BEFORE))->everySixHours();` - reminder about to webinar before one day, executed every 6 hours
## Endpoints
All the endpoints are defined in [![swagger](https://img.shields.io/badge/documentation-swagger-green)](https://escolalms.github.io/Webinar/)
## Tests
Run `./vendor/bin/phpunit --filter=Webinar` to run tests. See [tests](tests) folder as it's quite good staring point as documentation appendix.
Test details [![codecov](https://codecov.io/gh/EscolaLMS/Webinar/branch/main/graph/badge.svg?token=NRAN4R8AGZ)](https://codecov.io/gh/EscolaLMS/Webinar) [![phpunit](https://github.com/EscolaLMS/Webinar/actions/workflows/test.yml/badge.svg)](https://github.com/EscolaLMS/Webinar/actions/workflows/test.yml)
## Events
- `EscolaLms\Webinar\Events\ReminderAboutTerm` => Event is dispatched after execute cron job `EscolaLms\Webinar\Jobs\ReminderAboutWebinarJob`, Event is dispatched when deadline for purchased webinars before 1 hours and 1 day
- `EscolaLms\Webinar\Events\WebinarTrainerAssigned` => Event is dispatched after assigned trainer to webinar
- `EscolaLms\Webinar\Events\WebinarTrainerUnassigned` => Event is dispatched after unassigned trainer from webinar
## Listeners
- `EscolaLms\Webinar\Listeners\ReminderAboutTermListener` => Listener execute a method that singed the status in the webinar reminder
## How does this work on frontend.
```mermaid
sequenceDiagram
box Embeed in Web App
participant Jisti
actor Tutor
participant Youtube
participant Web App
actor Student
end
box Administration
participant Admin Panel
actor Admin
end
Admin->>Admin Panel: Creates a webinar instance
Student->>Web App: Get access to webinar (eg. buys)
Tutor->>Web App: (on the day of the event) Broadcast
Web App->>Jisti: Broadcast with Jitsu GUI
Jisti->>Youtube: Broadcast to public
Youtube->>Web App: forward for public
Student->>Web App: Watches webinar with YT GUI
```
## Permissions
Permissions are defined in [seeder](vendor/escolalms/webinar/database/seeders/WebinarsPermissionSeeder.php)
## Database relation
1. `Trainers` Webinar is related belongs to many with User
2. `Tags` Webinar model morph many to model tags
3. `Users` Webinar is related belongs to many with User which bought webinar
```
Webinar 1 -> n User
Webinar 1 -> n Tags
Webinar 1 -> n User
```