oep --- controller with logger
package com.example.OepAchievers.Controller;
import com.example.OepAchievers.Model.Course;
import com.example.OepAchievers.Service.CourseService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/courses")
@CrossOrigin(origins = "http://localhost:3000/")
public class CourseController {
private static final Logger logger= LoggerFactory.getLogger(CourseController.class);
@Autowired
private CourseService courseService;
@PostMapping
public ResponseEntity<Course> createCourse(@RequestBody Course course) {
logger.info("Request to create course: {}",course);
Course createdCourse=courseService.createCourse(course);
logger.info("Course created successfully with ID: {}",createdCourse.getId());
return ResponseEntity.ok(createdCourse);
}
@GetMapping("/{id}")
public ResponseEntity<Course> getCourse(@PathVariable Long id) {
logger.info("Request to get course with ID: {}",id);
Course course=courseService.getCourseById(id);
logger.info("Course retrieved: {}",course);
return ResponseEntity.ok(course);
}
@GetMapping("/published")
public ResponseEntity<List<Course>> getPublishedCourses() {
logger.info("Request to get all published courses");
List<Course> courses=courseService.getPublishedCourses();
logger.info("Number of published courses retrieved:{}",courses.size());
return ResponseEntity.ok(courses);
}
@PutMapping("/{id}/status")
public ResponseEntity<Course> updateCourseStatus(
@PathVariable Long id,
@RequestParam Course.CourseStatus status) {
logger.info("Request to update course status with ID: {} to {}",id,status);
Course course = courseService.getCourseById(id);
course.setStatus(status);
Course updatedCourse=courseService.createCourse(course);
logger.info("Course status updated successfully for ID: {} ",id);
return ResponseEntity.ok(updatedCourse);
}
}
-------Enrollment-------
package com.example.OepAchievers.Controller;
import com.example.OepAchievers.Model.Enrollment;
import com.example.OepAchievers.Service.EnrollmentService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/enrollments")
@CrossOrigin(origins = "http://localhost:3000/")
public class EnrollmentController {
@Autowired
private EnrollmentService enrollmentService;
private static final Logger logger= LoggerFactory.getLogger(EnrollmentController.class);
@PostMapping
public ResponseEntity<Enrollment> enrollInCourse(@RequestBody Enrollment enrollment) {
logger.info("Request to enroll in course: {}",enrollment);
Enrollment enrolled=enrollmentService.enroll(enrollment);
logger.info("Enrollment successful: {}",enrolled);
return ResponseEntity.ok(enrolled);
}
@GetMapping("/student/{studentId}")
public ResponseEntity<List<Enrollment>> getStudentEnrollments (Long studentId) {
logger.info("Request to get enrollments for student ID: {}",studentId);
List<Enrollment> enrollments= enrollmentService.getStudentEnrollments(studentId);
logger.info("Number of enrollments retrieved for student ID {}: {}",studentId,enrollments.size());
return ResponseEntity.ok(enrollments);
}
@PutMapping("/{id}/progress")
public ResponseEntity<Void> updateProgress(
@PathVariable Long id,
@RequestParam Double progress) {
logger.info("Request to update progress for enrollment ID:{} to {}",id,progress);
enrollmentService.updateProgress(id, progress);
logger.info("progress updated successfully for enrollment ID: {}",id);
return ResponseEntity.ok().build();
}
}
-------------------------User
package com.example.OepAchievers.Controller;
import com.example.OepAchievers.Dto.LoginDto;
import com.example.OepAchievers.Model.User;
import com.example.OepAchievers.Service.UserServ;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/users")
@CrossOrigin(origins = "http://localhost:3000/") // Ensure your React app is on this port
public class UserController {
private static final Logger logger= LoggerFactory.getLogger(UserController .class);
@Autowired
private UserServ userService;
@Autowired
private PasswordEncoder passwordEncoder;
@PostMapping("/register")
public ResponseEntity<String> registerUser(@RequestBody User user) {
logger.info("Request to register user: {}",user);
try {
userService.saveUser(user); // Save the user (you should implement this method in your service)
logger.info("User registered successfully: {}",user.getUsername());
return ResponseEntity.ok("User registered successfully");
} catch (Exception e) {
logger.error("Error registering user: {}",user,e);
return ResponseEntity.badRequest().body("Error processing request");
}
}
@GetMapping("/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
logger.info("Request to get user with id {}",id);
User user=userService.getUserById(id);
logger.info("User retrieved: {}",user);
return ResponseEntity.ok(user);
}
@PostMapping("/login")
public ResponseEntity<String> login(@RequestBody LoginDto loginDto){
logger.info("Login request for username: {}",loginDto.getUsername());
User user = userService.getUserByUsername(loginDto.getUsername());
if((user != null) && passwordEncoder.matches(loginDto.getPassword(),user.getPassword())) {
logger.info("Login successful for username: {}",loginDto.getUsername());
return ResponseEntity.ok("LOGIN SUCCESS " + user.getUsername());
} else {
logger.warn("Login failed for username: {}",loginDto.getUsername());
return ResponseEntity.status(401).body("Invalid username or password");
}
}
}