Skip to content

se creo el endpoint de ExplorerCourses#25

Open
martinconD wants to merge 3 commits intodevfrom
feature/ExplorerCourses
Open

se creo el endpoint de ExplorerCourses#25
martinconD wants to merge 3 commits intodevfrom
feature/ExplorerCourses

Conversation

@martinconD
Copy link
Copy Markdown
Collaborator

En api.php agregué la ruta /v1/Explorer_courses para el CourseController. En CourseController.php creé la función getExplorerCourses que llama al servicio para obtener los cursos y devuelve los resultados en un JSON. En ExplorerCourseService.php se definió la lógica para obtener la lista de cursos incluyendo sus servicios relacionados. Por último, en Course.php se configuró el modelo para usar cou_token como llave primaria y se estableció la relación con la tabla de servicios para permitir la carga de datos.

- se creo CourseController y ExplorerCourseService
- se actualizoz el modelo Course con la PK cou_token y la relación con servicios
@Theproxy206 Theproxy206 changed the base branch from main to dev January 30, 2026 18:20
Copy link
Copy Markdown
Owner

@Theproxy206 Theproxy206 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Organización generalmente bien, solo eliminar la relación a services ya que no existe y ademas agregar filtros a la busqueda, se puede hacer con query params

*/
public static function execute(): Collection
{
return Course::with(['services'])
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No existe una relacion de Curso a Services para usar eager loading

public function services(): HasMany
{
return $this->hasMany(Lesson::class, 'fk_lessons_courses', 'cou_token');
return $this->hasMany(CourseService::class, 'fk_course_services_courses', 'cou_token');
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CourseService no es un modelo, es un servicio

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agregar formas de filtrar la consulta de Cursos, como por categoria, por asignatura, por fecha y por codigo

- Creado el modelo CourseService para habilitar Eager Loading y separar lógica de datos.
- Corregida la relación en el modelo Course para apuntar al modelo correcto.
- Implementados filtros dinámicos por categoría, asignatura, fecha y código en el servicio.
@martinconD
Copy link
Copy Markdown
Collaborator Author

Rutas (api.php): Se actualizó el endpoint a /v1/explore-courses eliminando mayúsculas y aplicando el estándar kebab-case.

Modelos (Course.php / CourseService.php): Se creó el modelo CourseService para representar la tabla en la DB, lo que permitió corregir la relación services() en el modelo Course y habilitar el Eager Loading (with(['services'])).

Servicios (ExplorerCourseService.php): Se añadieron filtros dinámicos mediante el método when() para permitir búsquedas por categoría, asignatura, fecha y código.

Controladores (CourseController.php): Se refactorizó la llamada al servicio usando un import (instrucción use)


class CourseController extends Controller
{
public function getExplorerCourses(Request $request): JsonResponse
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Utilizar un request propio para definir que parametros va a pasar el frontend.
Ejemplo:

Suggested change
public function getExplorerCourses(Request $request): JsonResponse
public function getExplorerCourses(GetCoursesRequest $request): JsonResponse

GetCoursesRequest:
public function rules(): array { return ['code' => 'required|string', 'subject' => 'string', etc]; }

public function getExplorerCourses(Request $request): JsonResponse
{
try {
$courses = ExplorerCourseService::Execute($request);
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No funciona si no es un metodo estatico, usar:

Suggested change
$courses = ExplorerCourseService::Execute($request);
$courses = $this->explorerCourse->Execute($request);

Y agregar al inicio del controlador el contructor:

public function __construct(
    private readonly ExplorerCourseService $explorerCourse
) {}

class CourseService extends Model
{

protected $table = 'course_services';
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No existe la tabla course_services

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants