{"id":21733957,"url":"https://github.com/pintoderian/video-courses","last_synced_at":"2026-04-12T19:37:23.564Z","repository":{"id":261694828,"uuid":"885062932","full_name":"pintoderian/video-courses","owner":"pintoderian","description":null,"archived":false,"fork":false,"pushed_at":"2024-11-09T17:59:52.000Z","size":3068,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-25T20:41:31.659Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pintoderian.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-07T22:14:33.000Z","updated_at":"2024-11-09T17:59:56.000Z","dependencies_parsed_at":"2024-11-07T23:30:39.099Z","dependency_job_id":"6f257928-0811-4d62-9c3f-080fa9e131bd","html_url":"https://github.com/pintoderian/video-courses","commit_stats":null,"previous_names":["pintoderian/video-courses"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pintoderian%2Fvideo-courses","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pintoderian%2Fvideo-courses/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pintoderian%2Fvideo-courses/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pintoderian%2Fvideo-courses/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pintoderian","download_url":"https://codeload.github.com/pintoderian/video-courses/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244711962,"owners_count":20497418,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-26T05:07:10.847Z","updated_at":"2025-12-31T00:03:45.575Z","avatar_url":"https://github.com/pintoderian.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# README - Proyecto de Enseñanza en Línea\n\nEste proyecto tiene como objetivo administrar un pequeño sitio web de enseñanza en línea con dos roles principales: Administrador y Usuario. El sistema permite a los administradores gestionar cursos, videos, y usuarios, mientras que los usuarios pueden registrarse en cursos, ver videos, dejar comentarios y seguir su progreso.\n\n### Requisitos\n\n-   PHP 8.x o superior\n-   Composer\n-   Node.js y npm\n-   MySQL o base de datos compatible\n-   Laravel 10.x o superior\n\n## Pasos para ejecutar el proyecto\n\n1. **Clonar el repositorio**\n\n    Clona el repositorio en tu máquina local.\n\n    ```bash\n    git clone https://github.com/pintoderian/video-courses.git\n    cd video-courses\n    ```\n\n2. **Crear el archivo `.env`**\n\n    Crea un archivo `.env` a partir del archivo `.env.example` para configurar las variables de entorno.\n\n    ```bash\n    cp .env.example .env\n    ```\n\n3. **Instalar dependencias**\n\n    Instala las dependencias de PHP y de JavaScript.\n\n    ```bash\n    composer install\n    npm install\n    ```\n\n4. **Configurar la base de datos**\n\n    Asegúrate de tener una base de datos configurada en el archivo `.env` con los siguientes parámetros:\n\n    ```env\n    DB_CONNECTION=mysql\n    DB_HOST=127.0.0.1\n    DB_PORT=3306\n    DB_DATABASE=nombre_de_base_de_datos\n    DB_USERNAME=tu_usuario\n    DB_PASSWORD=tu_contraseña\n    ```\n\n5. **Ejecutar migraciones**\n\n    Ejecuta las migraciones para crear las tablas en la base de datos.\n\n    ```bash\n    php artisan migrate\n    ```\n\n6. **Ejecutar el seeder para agregar datos de prueba**\n\n    Si deseas agregar datos de prueba, ejecuta el siguiente comando:\n\n    ```bash\n    php artisan db:seed\n    ```\n\n7. **Compilar los assets**\n\n    Para la compilación de los archivos estáticos (CSS, JS, etc.), ejecuta:\n\n    ```bash\n    npm run build\n    ```\n\n8. **Generar link para las imágenes**\n\n    ```bash\n    php artisan storage:link\n    ```\n\n9. **Iniciar el servidor de desarrollo**\n\n    Una vez configurado todo, inicia el servidor de desarrollo de Laravel:\n\n    ```bash\n    php artisan serve\n    ```\n\n    El sitio web estará disponible en `http://localhost:8000`.\n\n## Datos de prueba\n\n### Admin\n\n```\nemail: me@dpinto.dev\npassword: password123\n```\n\n### User\n\n```\nemail: testuser@dpinto.dev\npassword: password123\n```\n\n## Funcionalidades del Proyecto\n\n### Roles\n\n-   **Administrador**:\n\n    -   Puede crear y gestionar cursos y videos.\n    -   Puede administrar categorías de cursos y videos.\n    -   Puede ver los comentarios hechos por los usuarios y aprobarlos o rechazarlos.\n    -   Puede ver las estadísticas de progreso de los usuarios y su actividad en los cursos.\n\n-   **Usuario**:\n    -   Puede registrarse en el sitio.\n    -   Puede buscar y registrarse en cursos.\n    -   Puede ver los videos de los cursos en los que está registrado.\n    -   Puede dejar comentarios y dar likes a los videos.\n    -   Puede ver su progreso en los cursos en los que está inscrito.\n\n### Características de la Web\n\n1. **Gestión de Cursos y Videos (Administrador)**:\n\n    - Los administradores pueden crear cursos con:\n        - Nombre, descripción, categoría y grupos de edades.\n        - Los cursos pueden tener videos de YouTube.\n    - Los administradores pueden gestionar los videos de cada curso:\n        - Los videos pueden ser etiquetados con categorías.\n        - Los videos pueden ser marcados como bloqueados o visibles.\n\n2. **Registro de Usuarios y Progreso de Cursos**:\n\n    - Los usuarios pueden registrarse en un curso.\n    - Los usuarios pueden ver videos del curso y dejar comentarios.\n    - Los usuarios pueden dar likes a los videos.\n    - Los usuarios pueden ver su progreso de visualización de los videos.\n\n3. **Administración de Usuarios y Progreso (Administrador)**:\n\n    - Los administradores pueden ver todos los usuarios registrados en los cursos y el progreso de estos.\n    - Los administradores pueden ver en qué video está cada usuario.\n\n4. **Gestión de Comentarios (Administrador)**:\n    - Los administradores pueden aprobar o rechazar los comentarios dejados por los usuarios en los videos.\n    - Los administradores pueden ver los likes y las estadísticas de los videos.\n\n### API de la Aplicación\n\nLa API permite la interacción con los datos de cursos, videos, comentarios, likes y progreso.\n\n#### Rutas de la API\n\n1. **Listar todos los cursos**\n\n    `GET /api/v1/courses`\n\n    **Respuesta esperada**:\n\n    ```json\n    {\n        \"current_page\": 1,\n        \"data\": [\n            {\n                \"id\": 1,\n                \"name\": \"Course of Music #1\",\n                \"slug\": \"course-of-music-1\",\n                \"age_group\": \"9-13\",\n                \"category\": {\n                    \"id\": 12,\n                    \"name\": \"Music\"\n                },\n                \"created_at\": \"2024-11-09T05:04:19.000000Z\"\n            }\n        ]\n    }\n    ```\n\n2. **Buscar cursos por categoría, rango de edad y nombre**\n\n    `GET /api/v1/courses?category_id={categoryId}\u0026age_group={ageGroup}\u0026search={name}`\n\n3. **Registrar un usuario en un curso**\n\n    `POST /api/v1/courses/register`\n\n    **Parametros en el cuerpo**:\n\n    ```json\n    {\n        \"user_id\": 1,\n        \"course_id\": 1\n    }\n    ```\n\n4. **Ver videos de un curso**\n\n    `GET /api/v1/courses/{courseId}/videos`\n\n    **Respuesta esperada**:\n\n    ```json\n    {\n        \"current_page\": 1,\n        \"data\": [\n            {\n                \"id\": 1,\n                \"name\": \"Video 1 del Course of Photography #1\",\n                \"slug\": \"video-1-del-course-of-photography-1\",\n                \"course_id\": 1,\n                \"url\": \"https://www.youtube.com/watch?v=dQw4w9WgXcQ\",\n                \"description\": \"Description Video Video 1 del Course of Photography #1\",\n                \"is_block\": 0\n            }\n        ]\n    }\n    ```\n\n5. **Subir comentarios**\n\n    `POST /api/v1/comments/{videoId}`\n\n    **Parametros en el cuerpo**:\n\n    ```json\n    {\n        \"user_id\": 1,\n        \"video_id\": 1,\n        \"comment\": \"Great video!\"\n    }\n    ```\n\n6. **Dar likes a un video**\n\n    `POST /api/v1/videos/{videoId}/like`\n\n    **Parametros en el cuerpo**:\n\n    ```json\n    {\n        \"user_id\": 1\n    }\n    ```\n\n7. **Actualizar progreso de un video**\n\n    `POST /api/v1/progress/{courseId}/update`\n\n    **Parametros en el cuerpo**:\n\n    ```json\n    {\n        \"user_id\": 1,\n        \"video_id\": 1,\n        \"is_completed\": true\n    }\n    ```\n\n## Pruebas Unitarias\n\nLas pruebas unitarias se han implementado para asegurar que la API y las funcionalidades de la aplicación funcionen correctamente. Puedes ejecutar las pruebas con el siguiente comando:\n\n```bash\nphp artisan test\n```\n\n### Dependencias principales\n\n-   **Laravel**: Framework PHP para el desarrollo web.\n-   **Livewire**: Biblioteca para interfaces dinámicas en Laravel.\n-   **Laravel Sanctum**: Para la autenticación de la API.\n-   **Factory y Seeder**: Para la generación de datos de prueba.\n\n### SCREENS\n\n\u003cimg src=\"/screenshots/screen-1.png\" width=\"300\"\u003e\n\n\u003cimg src=\"/screenshots/screen-2.png\" width=\"300\"\u003e\n\n\u003cimg src=\"/screenshots/screen-3.png\" width=\"300\"\u003e\n\n\u003cimg src=\"/screenshots/screen-4.png\" width=\"300\"\u003e\n\n\u003cimg src=\"/screenshots/screen-5.png\" width=\"300\"\u003e\n\n\u003cimg src=\"/screenshots/screen-6-admin.png\" width=\"300\"\u003e\n\n\u003cimg src=\"/screenshots/screen-7.png\" width=\"300\"\u003e\n\n\u003cimg src=\"/screenshots/screen-8.png\" width=\"300\"\u003e\n\n\u003cimg src=\"/screenshots/screen-9.png\" width=\"300\"\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpintoderian%2Fvideo-courses","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpintoderian%2Fvideo-courses","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpintoderian%2Fvideo-courses/lists"}