Conversation
- se creo CourseController y ExplorerCourseService - se actualizoz el modelo Course con la PK cou_token y la relación con servicios
Theproxy206
left a comment
There was a problem hiding this comment.
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']) |
There was a problem hiding this comment.
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'); |
There was a problem hiding this comment.
CourseService no es un modelo, es un servicio
There was a problem hiding this comment.
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.
|
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 |
There was a problem hiding this comment.
Utilizar un request propio para definir que parametros va a pasar el frontend.
Ejemplo:
| 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); |
There was a problem hiding this comment.
No funciona si no es un metodo estatico, usar:
| $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'; |
There was a problem hiding this comment.
No existe la tabla course_services
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.