| @@ -0,0 +1,46 @@ | |||||
| package com.ffii.tsms.modules.data.entity; | |||||
| import com.ffii.core.entity.BaseEntity; | |||||
| import jakarta.persistence.*; | |||||
| import jakarta.validation.constraints.NotNull; | |||||
| import java.time.LocalDate; | |||||
| @Entity | |||||
| @Table(name = "position_log") | |||||
| public class PositionLog extends BaseEntity<Long> { | |||||
| @NotNull | |||||
| @OneToOne | |||||
| @JoinColumn(name = "staffId") | |||||
| private Staff staff; | |||||
| @NotNull | |||||
| @OneToOne | |||||
| @JoinColumn(name = "positionId") | |||||
| private Position position; | |||||
| @NotNull | |||||
| @Column(name = "from", length = 30) | |||||
| private LocalDate from; | |||||
| @NotNull | |||||
| @Column(name = "to", length = 30) | |||||
| private LocalDate to; | |||||
| public Staff getStaff() { | |||||
| return staff; | |||||
| } | |||||
| public void setStaff(Staff staff) { | |||||
| this.staff = staff; | |||||
| } | |||||
| public Position getPosition() { return position; } | |||||
| public void setPosition(Position position) { this.position = position; } | |||||
| public LocalDate getFrom() { return from; } | |||||
| public void setFrom(LocalDate from) { this.from = from; } | |||||
| } | |||||
| @@ -0,0 +1,11 @@ | |||||
| package com.ffii.tsms.modules.data.entity; | |||||
| import com.ffii.core.support.AbstractRepository; | |||||
| import com.ffii.tsms.modules.data.entity.projections.GradeLogInfo; | |||||
| import com.ffii.tsms.modules.data.entity.projections.PositionLogInfo; | |||||
| import java.util.List; | |||||
| public interface PositionLogRepository extends AbstractRepository<PositionLog, Long> { | |||||
| List<PositionLogInfo> findPositionLogInfoByStaffIdAndDeletedFalse(Long staffId); | |||||
| } | |||||
| @@ -0,0 +1,46 @@ | |||||
| package com.ffii.tsms.modules.data.entity; | |||||
| import com.ffii.core.entity.BaseEntity; | |||||
| import jakarta.persistence.*; | |||||
| import jakarta.validation.constraints.NotNull; | |||||
| import java.time.LocalDate; | |||||
| @Entity | |||||
| @Table(name = "team_log") | |||||
| public class TeamLog extends BaseEntity<Long> { | |||||
| @NotNull | |||||
| @OneToOne | |||||
| @JoinColumn(name = "staffId") | |||||
| private Staff staff; | |||||
| @NotNull | |||||
| @OneToOne | |||||
| @JoinColumn(name = "teamId") | |||||
| private Team team; | |||||
| @NotNull | |||||
| @Column(name = "from", length = 30) | |||||
| private LocalDate from; | |||||
| @NotNull | |||||
| @Column(name = "to", length = 30) | |||||
| private LocalDate to; | |||||
| public Staff getStaff() { | |||||
| return staff; | |||||
| } | |||||
| public void setStaff(Staff staff) { | |||||
| this.staff = staff; | |||||
| } | |||||
| public Team getTeam() { return team; } | |||||
| public void setTeam(Team team) { this.team = team; } | |||||
| public LocalDate getFrom() { return from; } | |||||
| public void setFrom(LocalDate from) { this.from = from; } | |||||
| } | |||||
| @@ -0,0 +1,11 @@ | |||||
| package com.ffii.tsms.modules.data.entity; | |||||
| import com.ffii.core.support.AbstractRepository; | |||||
| import com.ffii.tsms.modules.data.entity.projections.PositionLogInfo; | |||||
| import com.ffii.tsms.modules.data.entity.projections.TeamLogInfo; | |||||
| import java.util.List; | |||||
| public interface TeamLogRepository extends AbstractRepository<TeamLog, Long> { | |||||
| List<TeamLogInfo> findTeamLogInfoByStaffIdAndDeletedFalse(Long staffId); | |||||
| } | |||||
| @@ -1,7 +1,6 @@ | |||||
| package com.ffii.tsms.modules.data.entity.projections | package com.ffii.tsms.modules.data.entity.projections | ||||
| import com.ffii.tsms.modules.data.entity.Grade | import com.ffii.tsms.modules.data.entity.Grade | ||||
| import com.ffii.tsms.modules.data.entity.Position | |||||
| import org.springframework.beans.factory.annotation.Value | import org.springframework.beans.factory.annotation.Value | ||||
| import java.time.LocalDate | import java.time.LocalDate | ||||
| @@ -0,0 +1,21 @@ | |||||
| package com.ffii.tsms.modules.data.entity.projections | |||||
| import com.ffii.tsms.modules.data.entity.Position | |||||
| import org.springframework.beans.factory.annotation.Value | |||||
| import java.time.LocalDate | |||||
| interface PositionLogInfo { | |||||
| val id: Long | |||||
| @get:Value("#{target.staff.id}") | |||||
| val staffId: Long | |||||
| @get:Value("#{target.staff.name}") | |||||
| val staffName: String | |||||
| @get:Value("#{target.staff.staffId}") | |||||
| val staffCode: String | |||||
| val position: Position | |||||
| val from: LocalDate | |||||
| val to: LocalDate? | |||||
| } | |||||
| @@ -0,0 +1,41 @@ | |||||
| package com.ffii.tsms.modules.data.entity.projections | |||||
| import com.ffii.tsms.modules.data.entity.Grade | |||||
| import com.ffii.tsms.modules.data.entity.Team | |||||
| import org.springframework.beans.factory.annotation.Value | |||||
| import java.time.LocalDate | |||||
| interface TeamInfo { | |||||
| val id: Long | |||||
| @get:Value("#{target.description}") | |||||
| val description: String | |||||
| @get:Value("#{target.name}") | |||||
| val name: String | |||||
| @get:Value("#{target.code}") | |||||
| val code: String | |||||
| @get:Value("#{target.staff?.id}") | |||||
| val teamLead: Long? | |||||
| } | |||||
| interface TeamLogInfo { | |||||
| val id: Long | |||||
| @get:Value("#{target.staff.id}") | |||||
| val staffId: Long | |||||
| @get:Value("#{target.staff.name}") | |||||
| val staffName: String | |||||
| @get:Value("#{target.staff.staffId}") | |||||
| val staffCode: String | |||||
| @get:Value("#{target.team}") | |||||
| val team: TeamInfo | |||||
| val from: LocalDate | |||||
| val to: LocalDate? | |||||
| } | |||||
| @@ -0,0 +1,20 @@ | |||||
| package com.ffii.tsms.modules.data.service | |||||
| import com.ffii.core.support.AbstractBaseEntityService | |||||
| import com.ffii.core.support.JdbcDao | |||||
| import com.ffii.tsms.modules.data.entity.PositionLog | |||||
| import com.ffii.tsms.modules.data.entity.PositionLogRepository | |||||
| import com.ffii.tsms.modules.data.entity.projections.GradeLogInfo | |||||
| import com.ffii.tsms.modules.data.entity.projections.PositionLogInfo | |||||
| import org.springframework.stereotype.Service | |||||
| @Service | |||||
| open class PositionLogService ( | |||||
| private val positionLogRepository: PositionLogRepository, | |||||
| private val jdbcDao: JdbcDao, | |||||
| ) : AbstractBaseEntityService<PositionLog, Long, PositionLogRepository>(jdbcDao, positionLogRepository) { | |||||
| open fun allPositionLog(staffId: Long): List<PositionLogInfo> { | |||||
| return positionLogRepository.findPositionLogInfoByStaffIdAndDeletedFalse(staffId) | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,19 @@ | |||||
| package com.ffii.tsms.modules.data.service | |||||
| import com.ffii.core.support.AbstractBaseEntityService | |||||
| import com.ffii.core.support.JdbcDao | |||||
| import com.ffii.tsms.modules.data.entity.TeamLog | |||||
| import com.ffii.tsms.modules.data.entity.TeamLogRepository | |||||
| import com.ffii.tsms.modules.data.entity.projections.PositionLogInfo | |||||
| import com.ffii.tsms.modules.data.entity.projections.TeamLogInfo | |||||
| import org.springframework.stereotype.Service | |||||
| @Service | |||||
| open class TeamLogService ( | |||||
| private val teamLogRepository: TeamLogRepository, | |||||
| private val jdbcDao: JdbcDao, | |||||
| ) : AbstractBaseEntityService<TeamLog, Long, TeamLogRepository>(jdbcDao, teamLogRepository) { | |||||
| open fun allTeamLog(staffId: Long): List<TeamLogInfo> { | |||||
| return teamLogRepository.findTeamLogInfoByStaffIdAndDeletedFalse(staffId) | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,22 @@ | |||||
| package com.ffii.tsms.modules.data.web | |||||
| import com.ffii.tsms.modules.data.entity.PositionLogRepository | |||||
| import com.ffii.tsms.modules.data.entity.projections.GradeLogInfo | |||||
| import com.ffii.tsms.modules.data.entity.projections.PositionLogInfo | |||||
| import com.ffii.tsms.modules.data.service.PositionLogService | |||||
| import org.springframework.web.bind.annotation.GetMapping | |||||
| import org.springframework.web.bind.annotation.PathVariable | |||||
| import org.springframework.web.bind.annotation.RequestMapping | |||||
| import org.springframework.web.bind.annotation.RestController | |||||
| @RestController | |||||
| @RequestMapping("/positionLog") | |||||
| class PositionLogController( | |||||
| private val positionLogService: PositionLogService, | |||||
| private val positionLogRepository: PositionLogRepository, | |||||
| ) { | |||||
| @GetMapping("/{staffId}") | |||||
| fun allPositionLog(@PathVariable staffId: Long): List<PositionLogInfo> { | |||||
| return positionLogService.allPositionLog(staffId) | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,21 @@ | |||||
| package com.ffii.tsms.modules.data.web | |||||
| import com.ffii.tsms.modules.data.entity.TeamLogRepository | |||||
| import com.ffii.tsms.modules.data.entity.projections.TeamLogInfo | |||||
| import com.ffii.tsms.modules.data.service.TeamLogService | |||||
| import org.springframework.web.bind.annotation.GetMapping | |||||
| import org.springframework.web.bind.annotation.PathVariable | |||||
| import org.springframework.web.bind.annotation.RequestMapping | |||||
| import org.springframework.web.bind.annotation.RestController | |||||
| @RestController | |||||
| @RequestMapping("/teamLog") | |||||
| class TeamLogController( | |||||
| private val teamLogService: TeamLogService, | |||||
| private val teamLogRepository: TeamLogRepository, | |||||
| ) { | |||||
| @GetMapping("/{staffId}") | |||||
| fun allTeamLog(@PathVariable staffId: Long): List<TeamLogInfo> { | |||||
| return teamLogService.allTeamLog(staffId) | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,38 @@ | |||||
| -- liquibase formatted sql | |||||
| -- changeset derek:create grade log table | |||||
| CREATE TABLE position_log ( | |||||
| id INT NOT NULL AUTO_INCREMENT, | |||||
| version INT NOT NULL DEFAULT '0', | |||||
| created DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, | |||||
| createdBy VARCHAR(30) NULL, | |||||
| modified DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |||||
| modifiedBy VARCHAR(30) NULL, | |||||
| deleted TINYINT(1) NOT NULL DEFAULT '0', | |||||
| staffId INT NOT NULL, | |||||
| positionId INT NOT NULL, | |||||
| `from` DATE NOT NULL, | |||||
| `to` DATE NULL, | |||||
| CONSTRAINT pk_position_log PRIMARY KEY (id) | |||||
| ); | |||||
| ALTER TABLE position_log ADD CONSTRAINT FK_POSITION_LOG_ON_STAFFID FOREIGN KEY (staffId) REFERENCES staff (id); | |||||
| ALTER TABLE position_log ADD CONSTRAINT FK_POSITION_LOG_ON_POSITIONID FOREIGN KEY (positionId) REFERENCES `position` (id); | |||||
| CREATE TABLE team_log ( | |||||
| id INT NOT NULL AUTO_INCREMENT, | |||||
| version INT NOT NULL DEFAULT '0', | |||||
| created DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, | |||||
| createdBy VARCHAR(30) NULL, | |||||
| modified DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |||||
| modifiedBy VARCHAR(30) NULL, | |||||
| deleted TINYINT(1) NOT NULL DEFAULT '0', | |||||
| staffId INT NOT NULL, | |||||
| teamId INT NOT NULL, | |||||
| `from` DATE NOT NULL, | |||||
| `to` DATE NULL, | |||||
| CONSTRAINT pk_position_log PRIMARY KEY (id) | |||||
| ); | |||||
| ALTER TABLE team_log ADD CONSTRAINT FK_TEAM_LOG_ON_STAFFID FOREIGN KEY (staffId) REFERENCES staff (id); | |||||
| ALTER TABLE team_log ADD CONSTRAINT FK_TEAM_LOG_ON_TEAMID FOREIGN KEY (teamId) REFERENCES `team` (id); | |||||