티스토리 뷰
오늘 해야할 개발이다. 의도치않게 오후 9시 35분부터 시작하게 됐다.
1. 조회(Get) : userId로 구분
지도(위도/경도)
벌점내역
날짜
누적횟수 - 이건 entity 요소로 놓을지, count해서 표시할지 고민해봐야함.
2. 상세조회(Get)때 GPS(위도/경도)를 도로명 주소로 가져오기
실제 한 거
1. 조회(Get) : userId로 구분
조회를 만들고 연결한 MySQL로 데이터를 넣으려고 했는데, 생각해보니까
벌점기록을 넣는 것(post)도 만들어야겠다고 생각했다.
나중에는 ai를 통해 감지하는 python코드와 연결해서 자동으로 기록되게 할 예정이지만
그것도 나중에는 back에서 post로 추가해야할 기능이라고 생각되었고
지금은 수동으로 데이터를 넣는 것이지만 만드는 것에 어려움이 없을 것이라고 생각하여 만들었다.
1. Entity : Penalty
@Entity
@Setter
public class Penalty {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "penaltyId", updatable= false)
private Long id;
@Column(name = "date", updatable= false)
@Temporal(TemporalType.TIMESTAMP)
private Date date;
@Column(name = "content", updatable= false)
private String content;
// 이건 삭제 가능성
@Column(name = "count", updatable= false)
private int count;
// 증거 사진 : url
@Column(name = "photo", updatable= false)
private String photo;
@Column(name = "location", updatable= false)
private String location;
@Embedded
private PMap map;
@ManyToOne
@JoinColumn(name = "id")
private User user;
@PrePersist
protected void onCreate() {
date = new Date();
}
}
2. Entity : PMap
Map은 위도, 경도 정보를 넣어줄 예정이므로 entity를 따로 만들어주었다.
처음 entity이름은 Map이였는데, Service에서 기존에 있는 java.util.Map과 함께 사용할 일이 있어서 PMap으로 이름을 수정해 주었다.
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Embeddable
public class PMap {
// 위도
@Column(name = "latitude", updatable= false)
private Double latitude;
// 경도
@Column(name = "longitude", updatable= false)
private Double longitude;
}
3. DTO : PenaltyRequest
Penalty dto의 구성요소가 entity와 다른 이유는 자동으로 등록되어야 하는 데이터는 넣지 않았기 때문이다.
@Getter
@Setter
public class PenaltyRequest {
private String content;
private String photo;
private String location;
private Map<String, Object> map;
}
4. Controller : PenaltyController
controller는 기본 예외처리랑 penalty에 아무것도 넣지 않았을 때(empty) 비어있는 상태일 때를 예외로 처리해주었는데 생각해보면 penalty가 null일때의 상황도 추가해 줘야하나 싶다.
@RestController
@RequestMapping(value = "/penalty")
public class PenaltyController {
@Autowired
private PenaltyService penaltyService;
@GetMapping("/check")
public ResponseEntity<Map<String, Object>> checkPenalty(@RequestParam("userId") Long userId) {
Map<String, Object> response = new HashMap<>();
try {
List<Penalty> penalties = penaltyService.getPenaltiesByUserId(userId);
if (penalties.isEmpty()) {
response.put("message", "No penalty points found for the given userId.");
return new ResponseEntity<>(response, HttpStatus.NOT_FOUND);
}
response.put("message", "Penalty points were successfully searched in DB");
response.put("data", penalties);
return new ResponseEntity<>(response, HttpStatus.OK);
} catch (Exception e) {
e.printStackTrace();
response.put("message", "An error occurred while processing the request.");
return new ResponseEntity<>(response, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
5. Service : PenaltyService
get은 쉽게 repository를 호출해주면 되기 때문에 간단하게 만들 수 있다. 여기에서 좋은 구조를 하나 알았다.
@Autowired
private PenaltyRepository penaltyRepository;
이렇게 적어주는 것보다 아래와 같이 final를 적어주고 생성자에 @Autowired를 적어주는 것이 penaltyRepository의 불변성을 지켜주고 생성자를 적어줌으로써 의존성을 파악하기 쉬워 더 좋은 구조라는 것을 알았다.
@Service
public class PenaltyService {
private final PenaltyRepository penaltyRepository;
private final UserRepository userRepository;
@Autowired
public PenaltyService(PenaltyRepository penaltyRepository, UserRepository userRepository) {
this.penaltyRepository = penaltyRepository;
this.userRepository = userRepository;
}
@Transactional
public List<Penalty> getPenaltiesByUserId(Long userId) {
return penaltyRepository.findAllByUserId(userId);
}
}
6. Repository : PenaltyRepository
public interface PenaltyRepository extends JpaRepository<Penalty, Long> {
List<Penalty> findAllByUserId(Long userId);
long countByUserId(Long userId);
}
결과
이런 식으로 조회 가능. userId를 requestParam으로 받고 userId에 따라 벌점 기록 리스트가 나온다.
2. 데이터 생성(Post) : userId는 param으로 추가할 내용은 requestbody로 추가
'JAVA & Spring' 카테고리의 다른 글
- Total
- Today
- Yesterday
- 다인승
- yolov8
- Turtle Graphic
- 터틀그래픽
- 백준
- JAVA오류해결
- python공부
- YOLO
- gradleload오류
- streamlistener
- 파이썬
- randrange
- 문제풀이
- Kkma
- database연결
- 터틀그래픽 명령어
- randint
- baekjoon
- 10828번
- konlpy
- tweepy
- springboot
- 에러발생
- UnsupportedClassVersionError
- 터틀그래픽예제
- 사람수세기
- SPRING오류해결
- 오븐시계
- 사람검출
- 다인승탑승
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |