diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/DepartmentRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/DepartmentRepository.java index e1b5f46..7fb5f2e 100644 --- a/src/main/java/com/ffii/tsms/modules/data/entity/DepartmentRepository.java +++ b/src/main/java/com/ffii/tsms/modules/data/entity/DepartmentRepository.java @@ -1,6 +1,10 @@ package com.ffii.tsms.modules.data.entity; import com.ffii.core.support.AbstractRepository; +import com.ffii.tsms.modules.data.entity.projections.DepartmentSearchInfo; + +import java.util.List; public interface DepartmentRepository extends AbstractRepository { + List findDepartmentSearchInfoBy(); } \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/PositionRepository.java b/src/main/java/com/ffii/tsms/modules/data/entity/PositionRepository.java index 4c1894c..9cd8dbf 100644 --- a/src/main/java/com/ffii/tsms/modules/data/entity/PositionRepository.java +++ b/src/main/java/com/ffii/tsms/modules/data/entity/PositionRepository.java @@ -1,6 +1,11 @@ package com.ffii.tsms.modules.data.entity; import com.ffii.core.support.AbstractRepository; +import com.ffii.tsms.modules.data.entity.projections.PositionSearchInfo; + +import java.util.List; public interface PositionRepository extends AbstractRepository { + + List findPositionSearchInfoBy(); } \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/projections/DepartmentSearchInfo.java b/src/main/java/com/ffii/tsms/modules/data/entity/projections/DepartmentSearchInfo.java new file mode 100644 index 0000000..7cbde50 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/projections/DepartmentSearchInfo.java @@ -0,0 +1,12 @@ +package com.ffii.tsms.modules.data.entity.projections; + +/** + * Projection for {@link com.ffii.tsms.modules.data.entity.Company} + */ +public interface DepartmentSearchInfo { + + Long getId(); + String getCode(); + String getName(); + String getDescription(); +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/entity/projections/PositionSearchInfo.java b/src/main/java/com/ffii/tsms/modules/data/entity/projections/PositionSearchInfo.java new file mode 100644 index 0000000..2b38a3c --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/entity/projections/PositionSearchInfo.java @@ -0,0 +1,12 @@ +package com.ffii.tsms.modules.data.entity.projections; + +/** + * Projection for {@link com.ffii.tsms.modules.data.entity.Company} + */ +public interface PositionSearchInfo { + + Long getId(); + String getCode(); + String getName(); + String getDescription(); +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/service/DepartmentService.kt b/src/main/java/com/ffii/tsms/modules/data/service/DepartmentService.kt new file mode 100644 index 0000000..4ec44f8 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/service/DepartmentService.kt @@ -0,0 +1,28 @@ +package com.ffii.tsms.modules.data.service + +import com.ffii.tsms.modules.data.entity.CompanyRepository +import com.ffii.tsms.modules.data.entity.Department +import com.ffii.tsms.modules.data.entity.DepartmentRepository +import com.ffii.tsms.modules.data.entity.projections.CompanySearchInfo +import com.ffii.tsms.modules.data.entity.projections.DepartmentSearchInfo +import com.ffii.tsms.modules.data.web.models.NewDepartmentRequest +import org.springframework.stereotype.Service +@Service +class DepartmentService( + private val departmentRepository: DepartmentRepository +) { + fun allDepartments(): List{ + return departmentRepository.findDepartmentSearchInfoBy() + } + + fun saveDepartment(request: NewDepartmentRequest): Department { + val department = + Department().apply { + name = request.departmentName + code = request.departmentCode + description = request.description + } + + return departmentRepository.save(department) + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/service/PositionService.kt b/src/main/java/com/ffii/tsms/modules/data/service/PositionService.kt new file mode 100644 index 0000000..b9452a9 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/service/PositionService.kt @@ -0,0 +1,32 @@ +package com.ffii.tsms.modules.data.service + +import com.ffii.tsms.modules.data.entity.CompanyRepository +import com.ffii.tsms.modules.data.entity.Department +import com.ffii.tsms.modules.data.entity.DepartmentRepository +import com.ffii.tsms.modules.data.entity.Position +import com.ffii.tsms.modules.data.entity.PositionRepository +import com.ffii.tsms.modules.data.entity.projections.CompanySearchInfo +import com.ffii.tsms.modules.data.entity.projections.DepartmentSearchInfo +import com.ffii.tsms.modules.data.entity.projections.PositionSearchInfo +import com.ffii.tsms.modules.data.web.models.NewDepartmentRequest +import com.ffii.tsms.modules.data.web.models.NewPositionRequest +import org.springframework.stereotype.Service +@Service +class PositionService( + private val positionRepository: PositionRepository +) { + fun allPositions(): List{ + return positionRepository.findPositionSearchInfoBy() + } + + fun savePosition(request: NewPositionRequest): Position { + val position = + Position().apply { + name = request.positionName + code = request.positionCode + description = request.description + } + + return positionRepository.save(position) + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/web/DepartmentController.kt b/src/main/java/com/ffii/tsms/modules/data/web/DepartmentController.kt new file mode 100644 index 0000000..acb84cb --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/web/DepartmentController.kt @@ -0,0 +1,25 @@ +package com.ffii.tsms.modules.data.web + +import com.ffii.tsms.modules.data.entity.Department +import com.ffii.tsms.modules.data.entity.projections.DepartmentSearchInfo +import com.ffii.tsms.modules.data.service.DepartmentService +import com.ffii.tsms.modules.data.web.models.NewDepartmentRequest +import com.ffii.tsms.modules.project.entity.Project +import com.ffii.tsms.modules.project.web.models.NewProjectRequest +import jakarta.validation.Valid +import org.springframework.web.bind.annotation.* + +@RestController +@RequestMapping("/departments") +class DepartmentController(private val departmentService: DepartmentService +) { + @GetMapping + fun allDepartments(): List{ + return departmentService.allDepartments() + } + + @PostMapping("/new") + fun saveProject(@Valid @RequestBody newDepartment: NewDepartmentRequest): Department { + return departmentService.saveDepartment(newDepartment) + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/web/PositionController.kt b/src/main/java/com/ffii/tsms/modules/data/web/PositionController.kt new file mode 100644 index 0000000..642ccb4 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/web/PositionController.kt @@ -0,0 +1,29 @@ +package com.ffii.tsms.modules.data.web + +import com.ffii.tsms.modules.data.entity.Department +import com.ffii.tsms.modules.data.entity.Position +import com.ffii.tsms.modules.data.entity.projections.DepartmentSearchInfo +import com.ffii.tsms.modules.data.entity.projections.PositionSearchInfo +import com.ffii.tsms.modules.data.service.DepartmentService +import com.ffii.tsms.modules.data.service.PositionService +import com.ffii.tsms.modules.data.web.models.NewDepartmentRequest +import com.ffii.tsms.modules.data.web.models.NewPositionRequest +import com.ffii.tsms.modules.project.entity.Project +import com.ffii.tsms.modules.project.web.models.NewProjectRequest +import jakarta.validation.Valid +import org.springframework.web.bind.annotation.* + +@RestController +@RequestMapping("/positions") +class PositionController(private val positionService: PositionService +) { + @GetMapping + fun allPositions(): List{ + return positionService.allPositions() + } + + @PostMapping("/new") + fun saveProject(@Valid @RequestBody newPosition: NewPositionRequest): Position { + return positionService.savePosition(newPosition) + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/tsms/modules/data/web/models/NewDepartmentRequest.kt b/src/main/java/com/ffii/tsms/modules/data/web/models/NewDepartmentRequest.kt new file mode 100644 index 0000000..eb43676 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/web/models/NewDepartmentRequest.kt @@ -0,0 +1,12 @@ +package com.ffii.tsms.modules.data.web.models + +import jakarta.validation.constraints.NotBlank + +data class NewDepartmentRequest ( + @field: NotBlank(message = "Department code cannot be empty") + val departmentCode: String, + @field:NotBlank(message = "Department name cannot be empty") + val departmentName: String, + + val description: String +) diff --git a/src/main/java/com/ffii/tsms/modules/data/web/models/NewPositionRequest.kt b/src/main/java/com/ffii/tsms/modules/data/web/models/NewPositionRequest.kt new file mode 100644 index 0000000..8f21f57 --- /dev/null +++ b/src/main/java/com/ffii/tsms/modules/data/web/models/NewPositionRequest.kt @@ -0,0 +1,12 @@ +package com.ffii.tsms.modules.data.web.models + +import jakarta.validation.constraints.NotBlank + +data class NewPositionRequest ( + @field: NotBlank(message = "Department code cannot be empty") + val positionCode: String, + @field:NotBlank(message = "Department name cannot be empty") + val positionName: String, + + val description: String +)