From 941bf322e5c56f2d4f5eeee36735e2043d36a9f4 Mon Sep 17 00:00:00 2001 From: Hai Nguyen <2nguyen.work@gmail.com> Date: Fri, 21 Aug 2026 22:17:02 +0700 Subject: [PATCH] feat: update course entity & refactor package --- .../exception/GlobalExceptionHandler.java | 40 -------------- .../lms/api/controllers/CourseController.java | 48 ----------------- .../lms/application/dtos/CourseReqDto.java | 6 --- .../lms/application/dtos/CourseResDto.java | 17 ------ .../lms/application/mappers/CourseMapper.java | 20 ------- .../application/services/CourseService.java | 52 ------------------- .../backend/lms/domain/entities/Course.java | 24 --------- .../domain/repositories/CourseRepository.java | 19 ------- .../infrastructure/config/OpenApiConfig.java | 28 ---------- .../infrastructure/config/SecurityConfig.java | 25 --------- .../repositories/CourseJpaRepository.java | 9 ---- .../repositories/CourseRepositoryImpl.java | 35 ------------- src/main/resources/application.yaml | 6 +-- .../{V1__init.sql => V1__course_module.sql} | 0 14 files changed, 3 insertions(+), 326 deletions(-) delete mode 100644 src/main/java/aplp/backend/lms/api/common/exception/GlobalExceptionHandler.java delete mode 100644 src/main/java/aplp/backend/lms/api/controllers/CourseController.java delete mode 100644 src/main/java/aplp/backend/lms/application/dtos/CourseReqDto.java delete mode 100644 src/main/java/aplp/backend/lms/application/dtos/CourseResDto.java delete mode 100644 src/main/java/aplp/backend/lms/application/mappers/CourseMapper.java delete mode 100644 src/main/java/aplp/backend/lms/application/services/CourseService.java delete mode 100644 src/main/java/aplp/backend/lms/domain/entities/Course.java delete mode 100644 src/main/java/aplp/backend/lms/domain/repositories/CourseRepository.java delete mode 100644 src/main/java/aplp/backend/lms/infrastructure/config/OpenApiConfig.java delete mode 100644 src/main/java/aplp/backend/lms/infrastructure/config/SecurityConfig.java delete mode 100644 src/main/java/aplp/backend/lms/infrastructure/persistence/repositories/CourseJpaRepository.java delete mode 100644 src/main/java/aplp/backend/lms/infrastructure/persistence/repositories/CourseRepositoryImpl.java rename src/main/resources/db/migration/{V1__init.sql => V1__course_module.sql} (100%) diff --git a/src/main/java/aplp/backend/lms/api/common/exception/GlobalExceptionHandler.java b/src/main/java/aplp/backend/lms/api/common/exception/GlobalExceptionHandler.java deleted file mode 100644 index 90aa0cd..0000000 --- a/src/main/java/aplp/backend/lms/api/common/exception/GlobalExceptionHandler.java +++ /dev/null @@ -1,40 +0,0 @@ -package aplp.backend.lms.api.common.exception; - -import aplp.backend.core.common.exception.ResourceNotFoundException; -import aplp.backend.core.common.response.ErrorResponse; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.RestControllerAdvice; - -import java.time.LocalDateTime; - -@RestControllerAdvice -public class GlobalExceptionHandler { - - @ExceptionHandler(ResourceNotFoundException.class) - public ResponseEntity handleNotFound( - ResourceNotFoundException ex - ) { - return ResponseEntity - .status(HttpStatus.NOT_FOUND) - .body(new ErrorResponse( - HttpStatus.NOT_FOUND.value(), - ex.getMessage(), - LocalDateTime.now() - )); - } - - @ExceptionHandler(Exception.class) - public ResponseEntity handleException( - Exception ex - ) { - return ResponseEntity - .status(HttpStatus.INTERNAL_SERVER_ERROR) - .body(new ErrorResponse( - HttpStatus.INTERNAL_SERVER_ERROR.value(), - "Internal server error", - LocalDateTime.now() - )); - } -} diff --git a/src/main/java/aplp/backend/lms/api/controllers/CourseController.java b/src/main/java/aplp/backend/lms/api/controllers/CourseController.java deleted file mode 100644 index fcce627..0000000 --- a/src/main/java/aplp/backend/lms/api/controllers/CourseController.java +++ /dev/null @@ -1,48 +0,0 @@ -package aplp.backend.lms.api.controllers; - -import aplp.backend.lms.application.dtos.CourseReqDto; -import aplp.backend.lms.application.dtos.CourseResDto; -import aplp.backend.lms.application.services.CourseService; -import jakarta.validation.Valid; -import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -@RestController -@RequestMapping("/api/courses") -@RequiredArgsConstructor -public class CourseController { - - private final CourseService courseService; - - @GetMapping - public List getAll() { - return courseService.getAll(); - } - - @GetMapping("/{id}") - public CourseResDto getById(@PathVariable Long id) { - return courseService.getById(id); - } - - @PostMapping - @ResponseStatus(HttpStatus.CREATED) - public CourseResDto create(@Valid @RequestBody CourseReqDto request) { - return courseService.create(request); - } - - @PutMapping("/{id}") - public CourseResDto update( - @PathVariable Long id, - @RequestBody CourseReqDto request) { - return courseService.update(id, request); - } - - @DeleteMapping("/{id}") - @ResponseStatus(HttpStatus.NO_CONTENT) - public void delete(@PathVariable Long id) { - courseService.delete(id); - } -} \ No newline at end of file diff --git a/src/main/java/aplp/backend/lms/application/dtos/CourseReqDto.java b/src/main/java/aplp/backend/lms/application/dtos/CourseReqDto.java deleted file mode 100644 index d966352..0000000 --- a/src/main/java/aplp/backend/lms/application/dtos/CourseReqDto.java +++ /dev/null @@ -1,6 +0,0 @@ -package aplp.backend.lms.application.dtos; - -public record CourseReqDto( - String title, - String description -) {} diff --git a/src/main/java/aplp/backend/lms/application/dtos/CourseResDto.java b/src/main/java/aplp/backend/lms/application/dtos/CourseResDto.java deleted file mode 100644 index 6841bbc..0000000 --- a/src/main/java/aplp/backend/lms/application/dtos/CourseResDto.java +++ /dev/null @@ -1,17 +0,0 @@ -package aplp.backend.lms.application.dtos; - -import aplp.backend.lms.domain.entities.Course; - -public record CourseResDto( - Long id, - String title, - String description -) { - public static CourseResDto from(Course course) { - return new CourseResDto( - course.getId(), - course.getTitle(), - course.getDescription() - ); - } -} \ No newline at end of file diff --git a/src/main/java/aplp/backend/lms/application/mappers/CourseMapper.java b/src/main/java/aplp/backend/lms/application/mappers/CourseMapper.java deleted file mode 100644 index 6bb6150..0000000 --- a/src/main/java/aplp/backend/lms/application/mappers/CourseMapper.java +++ /dev/null @@ -1,20 +0,0 @@ -package aplp.backend.lms.application.mappers; - -import aplp.backend.lms.application.dtos.CourseReqDto; -import aplp.backend.lms.application.dtos.CourseResDto; -import aplp.backend.lms.domain.entities.Course; -import org.mapstruct.Mapper; -import org.mapstruct.MappingTarget; - -@Mapper(componentModel = "spring") -public interface CourseMapper { - - CourseResDto toResponse(Course course); - - Course toEntity(CourseReqDto request); - - void updateEntity( - CourseReqDto request, - @MappingTarget Course course - ); -} diff --git a/src/main/java/aplp/backend/lms/application/services/CourseService.java b/src/main/java/aplp/backend/lms/application/services/CourseService.java deleted file mode 100644 index a84dbb2..0000000 --- a/src/main/java/aplp/backend/lms/application/services/CourseService.java +++ /dev/null @@ -1,52 +0,0 @@ -package aplp.backend.lms.application.services; - -import aplp.backend.core.common.exception.ResourceNotFoundException; -import aplp.backend.lms.application.dtos.CourseReqDto; -import aplp.backend.lms.application.dtos.CourseResDto; -import aplp.backend.lms.application.mappers.CourseMapper; -import aplp.backend.lms.domain.entities.Course; -import aplp.backend.lms.domain.repositories.CourseRepository; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -import java.util.List; - -@Service -@RequiredArgsConstructor -public class CourseService { - - private final CourseRepository courseRepository; - private final CourseMapper courseMapper; - - public List getAll() { - return courseRepository.findAll() - .stream() - .map(CourseResDto::from) - .toList(); - } - - public CourseResDto getById(Long id) { - Course course = courseRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Course not found")); - - return CourseResDto.from(course); - } - - public CourseResDto create(CourseReqDto request) { - Course course = courseMapper.toEntity(request); - return courseMapper.toResponse(courseRepository.save(course)); - } - - public CourseResDto update(Long id, CourseReqDto request) { - Course course = courseRepository.findById(id) - .orElseThrow(() -> new ResourceNotFoundException("Course not found")); - - courseMapper.updateEntity(request, course); - - return courseMapper.toResponse(courseRepository.save(course)); - } - - public void delete(Long id) { - courseRepository.deleteById(id); - } -} diff --git a/src/main/java/aplp/backend/lms/domain/entities/Course.java b/src/main/java/aplp/backend/lms/domain/entities/Course.java deleted file mode 100644 index d1eaf40..0000000 --- a/src/main/java/aplp/backend/lms/domain/entities/Course.java +++ /dev/null @@ -1,24 +0,0 @@ -package aplp.backend.lms.domain.entities; - -import jakarta.persistence.*; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@Entity -@Table(name = "courses") -@Getter -@Setter -@NoArgsConstructor -public class Course { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - @Column(nullable = false, length = 200) - private String title; - - @Column(length = 1000) - private String description; -} \ No newline at end of file diff --git a/src/main/java/aplp/backend/lms/domain/repositories/CourseRepository.java b/src/main/java/aplp/backend/lms/domain/repositories/CourseRepository.java deleted file mode 100644 index a854dad..0000000 --- a/src/main/java/aplp/backend/lms/domain/repositories/CourseRepository.java +++ /dev/null @@ -1,19 +0,0 @@ -package aplp.backend.lms.domain.repositories; - -import aplp.backend.lms.domain.entities.Course; -import org.springframework.stereotype.Repository; - -import java.util.List; -import java.util.Optional; - -@Repository -public interface CourseRepository { - - Optional findById(Long id); - - List findAll(); - - Course save(Course course); - - void deleteById(Long id); -} \ No newline at end of file diff --git a/src/main/java/aplp/backend/lms/infrastructure/config/OpenApiConfig.java b/src/main/java/aplp/backend/lms/infrastructure/config/OpenApiConfig.java deleted file mode 100644 index 5165148..0000000 --- a/src/main/java/aplp/backend/lms/infrastructure/config/OpenApiConfig.java +++ /dev/null @@ -1,28 +0,0 @@ -package aplp.backend.lms.infrastructure.config; - -import io.swagger.v3.oas.annotations.OpenAPIDefinition; -import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; -import io.swagger.v3.oas.annotations.info.Info; -import io.swagger.v3.oas.annotations.security.SecurityRequirement; -import io.swagger.v3.oas.annotations.security.SecurityScheme; -import org.springframework.context.annotation.Configuration; - -@Configuration -@OpenAPIDefinition( - info = @Info( - title = "APLP LMS API", - version = "v1", - description = "APLP Learning Management System API" - ), - security = { - @SecurityRequirement(name = "bearerAuth") - } -) -@SecurityScheme( - name = "bearerAuth", - type = SecuritySchemeType.HTTP, - bearerFormat = "JWT", - scheme = "bearer" -) -public class OpenApiConfig { -} diff --git a/src/main/java/aplp/backend/lms/infrastructure/config/SecurityConfig.java b/src/main/java/aplp/backend/lms/infrastructure/config/SecurityConfig.java deleted file mode 100644 index e1d72b7..0000000 --- a/src/main/java/aplp/backend/lms/infrastructure/config/SecurityConfig.java +++ /dev/null @@ -1,25 +0,0 @@ -package aplp.backend.lms.infrastructure.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; -import org.springframework.security.web.SecurityFilterChain; - -@Configuration -public class SecurityConfig { - - @Bean - public SecurityFilterChain securityFilterChain( - HttpSecurity http - ) throws Exception { - - http - .csrf(AbstractHttpConfigurer::disable) - .authorizeHttpRequests(auth -> auth - .anyRequest().permitAll() - ); - - return http.build(); - } -} diff --git a/src/main/java/aplp/backend/lms/infrastructure/persistence/repositories/CourseJpaRepository.java b/src/main/java/aplp/backend/lms/infrastructure/persistence/repositories/CourseJpaRepository.java deleted file mode 100644 index 05bef6c..0000000 --- a/src/main/java/aplp/backend/lms/infrastructure/persistence/repositories/CourseJpaRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package aplp.backend.lms.infrastructure.persistence.repositories; - -import aplp.backend.lms.domain.entities.Course; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface CourseJpaRepository extends JpaRepository { -} \ No newline at end of file diff --git a/src/main/java/aplp/backend/lms/infrastructure/persistence/repositories/CourseRepositoryImpl.java b/src/main/java/aplp/backend/lms/infrastructure/persistence/repositories/CourseRepositoryImpl.java deleted file mode 100644 index 605699a..0000000 --- a/src/main/java/aplp/backend/lms/infrastructure/persistence/repositories/CourseRepositoryImpl.java +++ /dev/null @@ -1,35 +0,0 @@ -package aplp.backend.lms.infrastructure.persistence.repositories; - -import aplp.backend.lms.domain.entities.Course; -import aplp.backend.lms.domain.repositories.CourseRepository; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - -import java.util.List; -import java.util.Optional; - -@Repository -@RequiredArgsConstructor -public class CourseRepositoryImpl implements CourseRepository { - private final CourseJpaRepository repository; - - @Override - public Optional findById(Long id) { - return repository.findById(id); - } - - @Override - public List findAll() { - return repository.findAll(); - } - - @Override - public Course save(Course course) { - return repository.save(course); - } - - @Override - public void deleteById(Long id) { - repository.deleteById(id); - } -} diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 1a72aa8..a1ac880 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -3,13 +3,13 @@ spring: name: lms datasource: - url: jdbc:postgresql://localhost:5432/aplp + url: jdbc:postgresql://192.168.2.100:5432/aplp username: postgres password: Pa55w0rd jpa: hibernate: - ddl-auto: validate + ddl-auto: update properties: hibernate: default_schema: lms @@ -17,7 +17,7 @@ spring: show-sql: true flyway: - enabled: true + enabled: false default-schema: lms schemas: lms locations: classpath:db/migration diff --git a/src/main/resources/db/migration/V1__init.sql b/src/main/resources/db/migration/V1__course_module.sql similarity index 100% rename from src/main/resources/db/migration/V1__init.sql rename to src/main/resources/db/migration/V1__course_module.sql