From eab13ddcb01ac841c38a2ef3fbf87b2bff878a73 Mon Sep 17 00:00:00 2001 From: songhyeonseong Date: Tue, 4 Feb 2025 11:44:21 +0900 Subject: [PATCH 1/6] [UNI-23] chore : sync --- uniro_backend/build.gradle | 3 ++ .../admin/controller/AdminAPI.java | 24 ++++++++++++++++ .../admin/controller/AdminController.java | 22 +++++++++++++++ .../uniro_backend/admin/dto/RevInfoDTO.java | 15 ++++++++++ .../uniro_backend/admin/entity/Revinfo.java | 21 ++++++++++++++ .../admin/repository/RevInfoRepository.java | 8 ++++++ .../admin/service/AdminService.java | 28 +++++++++++++++++++ .../uniro_backend/node/entity/Node.java | 3 ++ .../route/controller/RouteApi.java | 2 +- .../uniro_backend/route/entity/Route.java | 7 ++++- 10 files changed, 131 insertions(+), 2 deletions(-) create mode 100644 uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminAPI.java create mode 100644 uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminController.java create mode 100644 uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/dto/RevInfoDTO.java create mode 100644 uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/entity/Revinfo.java create mode 100644 uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/repository/RevInfoRepository.java create mode 100644 uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/service/AdminService.java diff --git a/uniro_backend/build.gradle b/uniro_backend/build.gradle index cbe08a2..bd4cc47 100644 --- a/uniro_backend/build.gradle +++ b/uniro_backend/build.gradle @@ -65,6 +65,9 @@ dependencies { //webClient implementation 'org.springframework.boot:spring-boot-starter-webflux' + + //hibernate envers + implementation 'org.hibernate.orm:hibernate-envers:6.3.1.Final' } tasks.named('test') { diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminAPI.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminAPI.java new file mode 100644 index 0000000..5e6483d --- /dev/null +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminAPI.java @@ -0,0 +1,24 @@ +package com.softeer5.uniro_backend.admin.controller; + +import com.softeer5.uniro_backend.admin.dto.RevInfoDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; + +import java.util.List; + +@Tag(name = "admin 페이지 API") +public interface AdminAPI { + + @Operation(summary = "모든 버전정보 조회") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "모든 버전정보 조회 성공"), + @ApiResponse(responseCode = "400", description = "EXCEPTION(임시)", content = @Content), + }) + ResponseEntity> getAllRev(); + +} diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminController.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminController.java new file mode 100644 index 0000000..b49b7c0 --- /dev/null +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminController.java @@ -0,0 +1,22 @@ +package com.softeer5.uniro_backend.admin.controller; + +import com.softeer5.uniro_backend.admin.dto.RevInfoDTO; +import com.softeer5.uniro_backend.admin.service.AdminService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequiredArgsConstructor +public class AdminController implements AdminAPI{ + private final AdminService adminService; + + @Override + @GetMapping("/admin/rev") + public ResponseEntity> getAllRev() { + return ResponseEntity.ok().body(adminService.getAllRevInfo()); + } +} diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/dto/RevInfoDTO.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/dto/RevInfoDTO.java new file mode 100644 index 0000000..6989034 --- /dev/null +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/dto/RevInfoDTO.java @@ -0,0 +1,15 @@ +package com.softeer5.uniro_backend.admin.dto; + +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Getter +@Setter +@Builder +public class RevInfoDTO { + private Long rev; // Revision 번호 + private LocalDateTime revTime; // Revision 시간 +} \ No newline at end of file diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/entity/Revinfo.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/entity/Revinfo.java new file mode 100644 index 0000000..67a6f34 --- /dev/null +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/entity/Revinfo.java @@ -0,0 +1,21 @@ +package com.softeer5.uniro_backend.admin.entity; + +import jakarta.persistence.*; +import lombok.Getter; +import org.hibernate.envers.RevisionEntity; +import org.hibernate.envers.RevisionNumber; +import org.hibernate.envers.RevisionTimestamp; + +@Entity +@RevisionEntity +@Getter +public class Revinfo { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @RevisionNumber + private Long rev; + + @RevisionTimestamp + @Column(name = "revtstmp") + private long revTimeStamp; +} diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/repository/RevInfoRepository.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/repository/RevInfoRepository.java new file mode 100644 index 0000000..cdb2c98 --- /dev/null +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/repository/RevInfoRepository.java @@ -0,0 +1,8 @@ +package com.softeer5.uniro_backend.admin.repository; + +import com.softeer5.uniro_backend.admin.entity.Revinfo; +import org.springframework.data.jpa.repository.JpaRepository; + + +public interface RevInfoRepository extends JpaRepository { +} diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/service/AdminService.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/service/AdminService.java new file mode 100644 index 0000000..035b373 --- /dev/null +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/service/AdminService.java @@ -0,0 +1,28 @@ +package com.softeer5.uniro_backend.admin.service; + +import com.softeer5.uniro_backend.admin.dto.RevInfoDTO; +import com.softeer5.uniro_backend.admin.repository.RevInfoRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.List; + +@Service +@RequiredArgsConstructor +@Transactional +public class AdminService { + private final RevInfoRepository revInfoRepository; + + public List getAllRevInfo(){ + return revInfoRepository.findAll().stream().map(r -> RevInfoDTO.builder() + .rev(r.getRev()) + .revTime(LocalDateTime.ofInstant( + Instant.ofEpochMilli(r.getRevTimeStamp()), + ZoneId.systemDefault())) + .build()).toList(); + } +} diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/entity/Node.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/entity/Node.java index 1b820fc..b071e3c 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/entity/Node.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/node/entity/Node.java @@ -4,6 +4,7 @@ import java.util.Map; import lombok.*; +import org.hibernate.envers.Audited; import org.locationtech.jts.geom.Point; import jakarta.persistence.Column; @@ -19,6 +20,7 @@ @AllArgsConstructor(access = AccessLevel.PRIVATE) @Getter @ToString +@Audited public class Node { @Id @@ -26,6 +28,7 @@ public class Node { private Long id; @NotNull + @Column(columnDefinition = "POINT SRID 4326") private Point coordinates; private double height; diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/route/controller/RouteApi.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/route/controller/RouteApi.java index 671d75a..83dc0ff 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/route/controller/RouteApi.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/route/controller/RouteApi.java @@ -22,7 +22,7 @@ public interface RouteApi { @ApiResponse(responseCode = "200", description = "모든 지도 조회 성공"), @ApiResponse(responseCode = "400", description = "EXCEPTION(임시)", content = @Content), }) - public ResponseEntity getAllRoutesAndNodes(@PathVariable("univId") Long univId); + ResponseEntity> getAllRoutesAndNodes(@PathVariable("univId") Long univId); @Operation(summary = "위험&주의 요소 조회") @ApiResponses(value = { diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/route/entity/Route.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/route/entity/Route.java index bc7e727..84872dc 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/route/entity/Route.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/route/entity/Route.java @@ -8,6 +8,8 @@ import com.softeer5.uniro_backend.resolver.CautionListConverter; import com.softeer5.uniro_backend.resolver.DangerListConverter; import com.softeer5.uniro_backend.node.entity.Node; +import org.hibernate.envers.Audited; +import org.hibernate.envers.RelationTargetAuditMode; import org.locationtech.jts.geom.LineString; import jakarta.persistence.Column; @@ -26,6 +28,7 @@ @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter +@Audited public class Route { @Id @@ -34,16 +37,18 @@ public class Route { private double cost; - @Column(columnDefinition = "geometry(LineString, 4326)") // WGS84 좌표계 + @Column(columnDefinition = "LINESTRING SRID 4326") // WGS84 좌표계 private LineString path; @ManyToOne(fetch = LAZY) @JoinColumn(referencedColumnName = "id", name = "node1_id") + @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) @NotNull private Node node1; @ManyToOne(fetch = LAZY) @JoinColumn(referencedColumnName = "id", name = "node2_id") + @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) @NotNull private Node node2; From 39fa33317a495cd4d9f95c60d0dbbbdeed43e010 Mon Sep 17 00:00:00 2001 From: songhyeonseong Date: Tue, 4 Feb 2025 18:50:22 +0900 Subject: [PATCH 2/6] =?UTF-8?q?[UNI-23]=20feat=20:=20univId=20=EB=B3=84=20?= =?UTF-8?q?=EB=B2=84=EC=A0=84=EC=A0=95=EB=B3=B4=20=EC=A1=B0=ED=9A=8C=20API?= =?UTF-8?q?=20=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/AdminController.java | 7 ++++--- .../uniro_backend/admin/dto/RevInfoDTO.java | 20 ++++++++++++------- .../entity/{Revinfo.java => RevInfo.java} | 11 ++++++++-- .../admin/repository/RevInfoRepository.java | 7 +++++-- .../admin/service/AdminService.java | 12 +++++------ .../route/controller/RouteApi.java | 2 +- 6 files changed, 37 insertions(+), 22 deletions(-) rename uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/entity/{Revinfo.java => RevInfo.java} (61%) diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminController.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminController.java index b49b7c0..738f947 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminController.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminController.java @@ -5,6 +5,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import java.util.List; @@ -15,8 +16,8 @@ public class AdminController implements AdminAPI{ private final AdminService adminService; @Override - @GetMapping("/admin/rev") - public ResponseEntity> getAllRev() { - return ResponseEntity.ok().body(adminService.getAllRevInfo()); + @GetMapping("/admin/rev/{univId}") + public ResponseEntity> getAllRev(@PathVariable("univId") Long univId) { + return ResponseEntity.ok().body(adminService.getAllRevInfo(univId)); } } diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/dto/RevInfoDTO.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/dto/RevInfoDTO.java index 6989034..2e75386 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/dto/RevInfoDTO.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/dto/RevInfoDTO.java @@ -1,15 +1,21 @@ package com.softeer5.uniro_backend.admin.dto; -import lombok.Builder; -import lombok.Getter; -import lombok.Setter; +import com.softeer5.uniro_backend.admin.entity.RevInfo; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; import java.time.LocalDateTime; @Getter -@Setter -@Builder +@Schema(name = "GetBuildingResDTO", description = "건물 노드 조회 DTO") +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) public class RevInfoDTO { - private Long rev; // Revision 번호 - private LocalDateTime revTime; // Revision 시간 + private final Long rev; // Revision 번호 + private final LocalDateTime revTime; // Revision 시간 + private final Long univId; //UnivId + private final String action; // 행위 + + public static RevInfoDTO of(Long rev, LocalDateTime revTime, Long univId, String action) { + return new RevInfoDTO(rev, revTime, univId, action); + } } \ No newline at end of file diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/entity/Revinfo.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/entity/RevInfo.java similarity index 61% rename from uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/entity/Revinfo.java rename to uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/entity/RevInfo.java index 67a6f34..5d53b51 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/entity/Revinfo.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/entity/RevInfo.java @@ -1,15 +1,19 @@ package com.softeer5.uniro_backend.admin.entity; +import com.softeer5.uniro_backend.admin.setting.CustomReversionListener; import jakarta.persistence.*; import lombok.Getter; +import lombok.Setter; import org.hibernate.envers.RevisionEntity; import org.hibernate.envers.RevisionNumber; import org.hibernate.envers.RevisionTimestamp; @Entity -@RevisionEntity +@RevisionEntity(CustomReversionListener.class) @Getter -public class Revinfo { +@Setter +@Table(name = "Revinfo") +public class RevInfo { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @RevisionNumber @@ -18,4 +22,7 @@ public class Revinfo { @RevisionTimestamp @Column(name = "revtstmp") private long revTimeStamp; + @Column(name = "univ_id") + private Long univId; + private String action; } diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/repository/RevInfoRepository.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/repository/RevInfoRepository.java index cdb2c98..a7ab85c 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/repository/RevInfoRepository.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/repository/RevInfoRepository.java @@ -1,8 +1,11 @@ package com.softeer5.uniro_backend.admin.repository; -import com.softeer5.uniro_backend.admin.entity.Revinfo; +import com.softeer5.uniro_backend.admin.entity.RevInfo; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; -public interface RevInfoRepository extends JpaRepository { + +public interface RevInfoRepository extends JpaRepository { + List findAllByUnivId(Long univId); } diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/service/AdminService.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/service/AdminService.java index 035b373..34e5b73 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/service/AdminService.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/service/AdminService.java @@ -17,12 +17,10 @@ public class AdminService { private final RevInfoRepository revInfoRepository; - public List getAllRevInfo(){ - return revInfoRepository.findAll().stream().map(r -> RevInfoDTO.builder() - .rev(r.getRev()) - .revTime(LocalDateTime.ofInstant( - Instant.ofEpochMilli(r.getRevTimeStamp()), - ZoneId.systemDefault())) - .build()).toList(); + public List getAllRevInfo(Long univId){ + return revInfoRepository.findAllByUnivId(univId).stream().map(r -> RevInfoDTO.of(r.getRev(), + LocalDateTime.ofInstant(Instant.ofEpochMilli(r.getRevTimeStamp()), ZoneId.systemDefault()), + r.getUnivId(), + r.getAction())).toList(); } } diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/route/controller/RouteApi.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/route/controller/RouteApi.java index 83dc0ff..9fcd150 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/route/controller/RouteApi.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/route/controller/RouteApi.java @@ -22,7 +22,7 @@ public interface RouteApi { @ApiResponse(responseCode = "200", description = "모든 지도 조회 성공"), @ApiResponse(responseCode = "400", description = "EXCEPTION(임시)", content = @Content), }) - ResponseEntity> getAllRoutesAndNodes(@PathVariable("univId") Long univId); + ResponseEntity getAllRoutesAndNodes(@PathVariable("univId") Long univId); @Operation(summary = "위험&주의 요소 조회") @ApiResponses(value = { From 4b3ad325658607264cd251e5372f24dd6f4e2ec0 Mon Sep 17 00:00:00 2001 From: songhyeonseong Date: Tue, 4 Feb 2025 20:24:24 +0900 Subject: [PATCH 3/6] =?UTF-8?q?[UNI-23]=20feat=20:=20RevInfo=20=EC=97=90?= =?UTF-8?q?=20univId,=20action=20=EC=9D=84=20=EC=B6=94=EA=B0=80=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20=EC=9C=84=ED=95=9C=20=EB=A1=9C=EC=A7=81=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/AdminAPI.java | 2 +- .../uniro_backend/admin/entity/RevInfo.java | 2 +- .../setting/CustomReversionListener.java | 13 ++++++++++ .../admin/setting/RevisionContext.java | 26 +++++++++++++++++++ 4 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/setting/CustomReversionListener.java create mode 100644 uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/setting/RevisionContext.java diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminAPI.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminAPI.java index 5e6483d..66c16d4 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminAPI.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminAPI.java @@ -19,6 +19,6 @@ public interface AdminAPI { @ApiResponse(responseCode = "200", description = "모든 버전정보 조회 성공"), @ApiResponse(responseCode = "400", description = "EXCEPTION(임시)", content = @Content), }) - ResponseEntity> getAllRev(); + ResponseEntity> getAllRev(@PathVariable("univId") Long univId); } diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/entity/RevInfo.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/entity/RevInfo.java index 5d53b51..36a6774 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/entity/RevInfo.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/entity/RevInfo.java @@ -22,7 +22,7 @@ public class RevInfo { @RevisionTimestamp @Column(name = "revtstmp") private long revTimeStamp; - @Column(name = "univ_id") + @Column(name = "univ_id", nullable = false) private Long univId; private String action; } diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/setting/CustomReversionListener.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/setting/CustomReversionListener.java new file mode 100644 index 0000000..9af5ca4 --- /dev/null +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/setting/CustomReversionListener.java @@ -0,0 +1,13 @@ +package com.softeer5.uniro_backend.admin.setting; + +import com.softeer5.uniro_backend.admin.entity.RevInfo; +import org.hibernate.envers.RevisionListener; + +public class CustomReversionListener implements RevisionListener { + @Override + public void newRevision(Object revisionEntity) { + RevInfo revinfo = (RevInfo) revisionEntity; + revinfo.setUnivId(RevisionContext.getUnivId()); + revinfo.setAction(RevisionContext.getAction()); + } +} \ No newline at end of file diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/setting/RevisionContext.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/setting/RevisionContext.java new file mode 100644 index 0000000..7bc21ee --- /dev/null +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/setting/RevisionContext.java @@ -0,0 +1,26 @@ +package com.softeer5.uniro_backend.admin.setting; + +public class RevisionContext { + private static final ThreadLocal univIdHolder = new ThreadLocal<>(); + private static final ThreadLocal actionHolder = new ThreadLocal<>(); + + public static void setAction(String action) { + actionHolder.set(action); + } + + public static String getAction() { + return actionHolder.get(); + } + + public static void setUnivId(Long univId) { + univIdHolder.set(univId); + } + + public static Long getUnivId() { + return univIdHolder.get(); + } + + public static void clear() { + univIdHolder.remove(); + } +} From c9e4ae14ca6eb297dbe928b86917b57c797e90bd Mon Sep 17 00:00:00 2001 From: songhyeonseong Date: Tue, 4 Feb 2025 20:26:28 +0900 Subject: [PATCH 4/6] =?UTF-8?q?[UNI-23]=20feat:=20GET=20=EC=9D=B4=EC=99=B8?= =?UTF-8?q?=EC=9D=98=20=EB=A1=9C=EC=A7=81=EC=97=90=20=EB=8C=80=ED=95=B4=20?= =?UTF-8?q?Revision=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EB=A5=BC=20=EA=B8=B0=EB=A1=9D=ED=95=98=EA=B8=B0=20?= =?UTF-8?q?=EC=9C=84=ED=95=9C=20=EC=BB=A4=EC=8A=A4=ED=85=80=20=EC=96=B4?= =?UTF-8?q?=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/annotation/RevisionOperation.java | 12 ++++ .../admin/aspect/RevisionOperationAspect.java | 66 +++++++++++++++++++ .../admin/entity/RevisionOperationType.java | 6 ++ .../route/service/RouteService.java | 3 + 4 files changed, 87 insertions(+) create mode 100644 uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/annotation/RevisionOperation.java create mode 100644 uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/aspect/RevisionOperationAspect.java create mode 100644 uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/entity/RevisionOperationType.java diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/annotation/RevisionOperation.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/annotation/RevisionOperation.java new file mode 100644 index 0000000..a767ece --- /dev/null +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/annotation/RevisionOperation.java @@ -0,0 +1,12 @@ +package com.softeer5.uniro_backend.admin.annotation; + +import com.softeer5.uniro_backend.admin.entity.RevisionOperationType; + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RevisionOperation { + RevisionOperationType value() default RevisionOperationType.DEFAULT; +} diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/aspect/RevisionOperationAspect.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/aspect/RevisionOperationAspect.java new file mode 100644 index 0000000..02eb20d --- /dev/null +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/aspect/RevisionOperationAspect.java @@ -0,0 +1,66 @@ +package com.softeer5.uniro_backend.admin.aspect; + +import com.softeer5.uniro_backend.admin.annotation.RevisionOperation; +import com.softeer5.uniro_backend.admin.entity.RevisionOperationType; +import com.softeer5.uniro_backend.admin.setting.RevisionContext; +import com.softeer5.uniro_backend.route.dto.PostRiskReqDTO; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +@Aspect +@Component +@Order(-1) +public class RevisionOperationAspect { + + @Around("@annotation(revisionOperation)") + public Object around(ProceedingJoinPoint joinPoint, RevisionOperation revisionOperation) throws Throwable { + RevisionOperationType opType = revisionOperation.value(); + + Object result; + switch (opType) { + case UPDATE_RISK -> result = updateRiskHandler(joinPoint); + default -> result = joinPoint.proceed(); + } + + return result; + } + + private Object updateRiskHandler(ProceedingJoinPoint joinPoint) throws Throwable { + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + String[] parameterNames = signature.getParameterNames(); + Object[] args = joinPoint.getArgs(); + + Long univId = null; + String action = null; + for (int i = 0; i < args.length; i++) { + if (args[i] instanceof Long && "univId".equals(parameterNames[i])) { + univId = (Long) args[i]; + } + else if(args[i] instanceof PostRiskReqDTO postRiskReqDTO){ + int cautionSize = postRiskReqDTO.getCautionTypes().size(); + int dangerSize = postRiskReqDTO.getDangerTypes().size(); + + if (cautionSize > 0) { + action = "주의요소 업데이트"; + } else if (dangerSize > 0) { + action = "위험요소 업데이트"; + } else { + action = "위험/주의요소 해제"; + } + } + } + RevisionContext.setUnivId(univId); + RevisionContext.setAction(action); + try{ + return joinPoint.proceed(); + } + finally { + RevisionContext.clear(); + } + } + +} diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/entity/RevisionOperationType.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/entity/RevisionOperationType.java new file mode 100644 index 0000000..10b9ee7 --- /dev/null +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/entity/RevisionOperationType.java @@ -0,0 +1,6 @@ +package com.softeer5.uniro_backend.admin.entity; + +public enum RevisionOperationType { + UPDATE_RISK, + DEFAULT; +} diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/route/service/RouteService.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/route/service/RouteService.java index e4df221..9167917 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/route/service/RouteService.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/route/service/RouteService.java @@ -3,6 +3,8 @@ import java.util.*; import java.util.stream.Collectors; +import com.softeer5.uniro_backend.admin.annotation.RevisionOperation; +import com.softeer5.uniro_backend.admin.entity.RevisionOperationType; import com.softeer5.uniro_backend.common.error.ErrorCode; import com.softeer5.uniro_backend.common.exception.custom.DangerCautionConflictException; import com.softeer5.uniro_backend.common.exception.custom.InvalidMapException; @@ -215,6 +217,7 @@ public GetRiskResDTO getRisk(Long univId, double startLat, double startLng, doub return GetRiskResDTO.of(routeWithJoin); } + @RevisionOperation(RevisionOperationType.UPDATE_RISK) @Transactional public void updateRisk(Long univId, Long routeId, PostRiskReqDTO postRiskReqDTO) { Route route = routeRepository.findByIdAndUnivId(routeId, univId) From d2e6fb700de550eb28d1e45ba4884e3b9795aaf7 Mon Sep 17 00:00:00 2001 From: songhyeonseong Date: Tue, 4 Feb 2025 20:38:27 +0900 Subject: [PATCH 5/6] =?UTF-8?q?[UNI-23]=20refactor=20:=20=EC=83=81?= =?UTF-8?q?=EC=88=98=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../uniro_backend/admin/aspect/RevisionOperationAspect.java | 4 +++- .../softeer5/uniro_backend/common/constant/UniroConst.java | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/aspect/RevisionOperationAspect.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/aspect/RevisionOperationAspect.java index 02eb20d..8cab26d 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/aspect/RevisionOperationAspect.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/aspect/RevisionOperationAspect.java @@ -11,9 +11,11 @@ import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; +import static com.softeer5.uniro_backend.common.constant.UniroConst.*; + @Aspect @Component -@Order(-1) +@Order(BEFORE_DEFAULT_ORDER) public class RevisionOperationAspect { @Around("@annotation(revisionOperation)") diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/common/constant/UniroConst.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/common/constant/UniroConst.java index b565816..538dfb8 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/common/constant/UniroConst.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/common/constant/UniroConst.java @@ -3,4 +3,5 @@ public final class UniroConst { public static final String NODE_KEY_DELIMITER = " "; public static final int CORE_NODE_CONDITION = 3; + public static final int BEFORE_DEFAULT_ORDER = -1; } From 3b8dfef8b7b4e3082ad5079c4b6539501411afbb Mon Sep 17 00:00:00 2001 From: songhyeonseong Date: Wed, 5 Feb 2025 16:40:54 +0900 Subject: [PATCH 6/6] =?UTF-8?q?[UNI-23]=20refactor=20:=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=EB=A6=AC=EB=B7=B0=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 클래스명 컨밴션에 따라 변경 - 엔드포인트 rev -> revision 으로 명시 - readOnly=true 반영 --- .../admin/controller/{AdminAPI.java => AdminApi.java} | 2 +- .../uniro_backend/admin/controller/AdminController.java | 4 ++-- .../java/com/softeer5/uniro_backend/admin/dto/RevInfoDTO.java | 4 ++++ .../softeer5/uniro_backend/admin/service/AdminService.java | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) rename uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/{AdminAPI.java => AdminApi.java} (97%) diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminAPI.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminApi.java similarity index 97% rename from uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminAPI.java rename to uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminApi.java index 66c16d4..e28d4d1 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminAPI.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminApi.java @@ -12,7 +12,7 @@ import java.util.List; @Tag(name = "admin 페이지 API") -public interface AdminAPI { +public interface AdminApi { @Operation(summary = "모든 버전정보 조회") @ApiResponses(value = { diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminController.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminController.java index 738f947..1ed101a 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminController.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/controller/AdminController.java @@ -12,11 +12,11 @@ @RestController @RequiredArgsConstructor -public class AdminController implements AdminAPI{ +public class AdminController implements AdminApi { private final AdminService adminService; @Override - @GetMapping("/admin/rev/{univId}") + @GetMapping("/admin/revision/{univId}") public ResponseEntity> getAllRev(@PathVariable("univId") Long univId) { return ResponseEntity.ok().body(adminService.getAllRevInfo(univId)); } diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/dto/RevInfoDTO.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/dto/RevInfoDTO.java index 2e75386..398f4da 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/dto/RevInfoDTO.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/dto/RevInfoDTO.java @@ -10,9 +10,13 @@ @Schema(name = "GetBuildingResDTO", description = "건물 노드 조회 DTO") @RequiredArgsConstructor(access = AccessLevel.PRIVATE) public class RevInfoDTO { + @Schema(description = "버전명", example = "4") private final Long rev; // Revision 번호 + @Schema(description = "버전 타임스탬프", example = "2025-02-04T17:56:06.832") private final LocalDateTime revTime; // Revision 시간 + @Schema(description = "학교id", example = "1") private final Long univId; //UnivId + @Schema(description = "변경사항 desc", example = "위험요소 추가") private final String action; // 행위 public static RevInfoDTO of(Long rev, LocalDateTime revTime, Long univId, String action) { diff --git a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/service/AdminService.java b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/service/AdminService.java index 34e5b73..49a256d 100644 --- a/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/service/AdminService.java +++ b/uniro_backend/src/main/java/com/softeer5/uniro_backend/admin/service/AdminService.java @@ -13,7 +13,7 @@ @Service @RequiredArgsConstructor -@Transactional +@Transactional(readOnly = true) public class AdminService { private final RevInfoRepository revInfoRepository;