@@ -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); |