Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 0 additions & 7 deletions src/main/java/app/snapshot/qure/config/SecurityConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ public SecurityConfig(KakaoOAuth2UserService kakaoOAuth2UserService,
this.kakaoOAuth2UserService = kakaoOAuth2UserService;
this.managerService = managerService;
}

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
Expand Down Expand Up @@ -84,25 +83,19 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
(Map<String, Object>) principal.getAttributes().get("kakao_account");
Map<String, Object> profile =
(Map<String, Object>) kakaoAccount.get("profile");

String email = (String) kakaoAccount.get("email");
String nickname = (String) profile.get("nickname");

ManagerDTO manager = managerService.processLogin(email, nickname);

HttpSession session = request.getSession();
SessionUtil.setManagerSession(session, manager.getManagersId(), email, nickname);

System.out.println("로그인 성공: " + nickname + " (" + email + ")");

response.sendRedirect(request.getContextPath() + "/dashboard");
})
.userInfoEndpoint(userInfo -> userInfo.userService(kakaoOAuth2UserService))
);

return http.build();
}

@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@ public String inspectorDetail(@PathVariable("id") int id, Model model) {
List<InspectorDetailDTO> details = inspectorDetailService.getInspectorDetail(id);

if (!details.isEmpty()) {
model.addAttribute("inspector", details.get(0)); // 이름/연락처
model.addAttribute("facilities", details); // 시설 리스트
model.addAttribute("inspectorName", details.get(0).getInspectorName());
model.addAttribute("phone", details.get(0).getPhone());
model.addAttribute("facilities", details);
}

return "inspectors/inspectorDetail";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package app.snapshot.qure.inspectors.controller;

import app.snapshot.qure.inspectors.dto.InspectorRegisterDTO;
import app.snapshot.qure.facilities.dto.FacilityRegisterDTO;
import app.snapshot.qure.inspectors.service.InspectorRegisterService;
import app.snapshot.qure.login.util.SessionUtil;
import jakarta.servlet.http.HttpSession;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
@RequiredArgsConstructor
Expand All @@ -15,11 +16,18 @@ public class InspectorRegisterController {
private final InspectorRegisterService inspectorRegisterService;

@PostMapping("/inspectors/register")
public String registerInspectorWithFacility(
public String registerInspector(
@ModelAttribute InspectorRegisterDTO inspectorDto,
@ModelAttribute FacilityRegisterDTO facilityDto) {
HttpSession session) {

Long managerId = SessionUtil.getManagerId(session);
if (managerId == null) {
return "redirect:/dashboard"; // 로그인 안된 경우
}

inspectorDto.setManagerId(managerId);

inspectorRegisterService.registerInspectorWithFacility(inspectorDto, facilityDto);
inspectorRegisterService.registerInspector(inspectorDto);
return "redirect:/inspectors/inspectorsList";
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package app.snapshot.qure.inspectors.controller;
import app.snapshot.qure.inspectors.dto.InspectorDTO;
import app.snapshot.qure.inspectors.service.InspectorsService;
import app.snapshot.qure.login.util.SessionUtil;
import jakarta.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
Expand All @@ -19,17 +21,33 @@ public InspectorsController(InspectorsService inspectorsService) {

@GetMapping("/inspectors/inspectorsList")
public String showInspectorList(@RequestParam(defaultValue = "1") int page,
Model model
) {
int size = 15;
List<InspectorDTO> inspectors = inspectorsService.getPagedInspectors(page, size);
int totalCount = inspectorsService.getTotalCount();
Model model, HttpSession session) {
int size = 15; // 한 페이지 데이터 수
Long managersId = SessionUtil.getManagerId(session);
System.out.println("세션 managersId: " + managersId);
if (managersId == null) {
return "redirect:/dashboard";
}

List<InspectorDTO> inspectors = inspectorsService.getPagedInspectors(page, size,managersId);
int totalCount = inspectorsService.getTotalCount(Math.toIntExact(managersId));
int totalPages = (int) Math.ceil((double) totalCount / size);
int pageBlock = 3;
int currentBlock = (int) Math.ceil((double) page / pageBlock);

int startPage = (currentBlock - 1) * pageBlock + 1;
int endPage = startPage + pageBlock - 1;
if (endPage > totalPages) {
endPage = totalPages;
}

model.addAttribute("inspectors", inspectors);
model.addAttribute("currentPage", page);
model.addAttribute("totalPages", totalPages);
model.addAttribute("totalCount", totalCount);
model.addAttribute("startPage", startPage);
model.addAttribute("endPage", endPage);

return "inspectors/inspectorsList";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ public class InspectorDTO {
private int inspectorId;
private String phone;
private String name;
private Long managerId;
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@
@Data
public class InspectorDetailDTO {
private int inspectorId;
private String name;
private String inspectorName; // ip.name → inspectorName
private String phone;
private String domain;
private String facility;
private String facility; // f.name → facility
}

Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@ public class InspectorRegisterDTO {
private Integer inspectorId;
private String name;
private String phone;
private Long managerId;
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@

import app.snapshot.qure.inspectors.dto.InspectorDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.security.core.parameters.P;

import java.util.List;
import java.util.Map;

@Mapper
public interface InspectorsMapper {
List<InspectorDTO> findPaged(@Param("startRow") int startRow, @Param("endRow") int endRow);
int countAll();
// 특정 매니저의 작업자 목록 페이징 조회
List<InspectorDTO> findPagedByManager(Map<String, Object> params);

// 특정 매니저의 작업자 총 수 카운트
int countByManager(long managersId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

import app.snapshot.qure.inspectors.dto.InspectorRegisterDTO;
import org.apache.ibatis.annotations.Mapper;

import org.apache.ibatis.annotations.Param;

@Mapper
public interface InspectorsRegisterMapper {
void insertInspector(InspectorRegisterDTO dto);

int getLastInsertedId(); // 시퀀스 currval 가져오기용

Integer findInspectorIdByNameAndPhone(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package app.snapshot.qure.inspectors.service;

import app.snapshot.qure.inspectors.dto.InspectorRegisterDTO;
import app.snapshot.qure.facilities.dto.FacilityRegisterDTO;
import app.snapshot.qure.inspectors.repository.InspectorsRegisterMapper;
import app.snapshot.qure.facilities.repository.FacilitiesRegisterMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -13,24 +11,25 @@
public class InspectorRegisterService {

private final InspectorsRegisterMapper inspectorsRegisterMapper;
private final FacilitiesRegisterMapper facilitiesRegisterMapper;

/**
* 점검자 등록
* - 이름, 전화번호로 중복 체크
* - 없으면 새로 등록, 있으면 무시
*/
@Transactional
public void registerInspectorWithFacility(InspectorRegisterDTO inspectorDto, FacilityRegisterDTO facilityDto) {
// 1. 이미 존재하는 작업자인지 확인
Integer existingId = inspectorsRegisterMapper.findInspectorIdByNameAndPhone(inspectorDto.getName(), inspectorDto.getPhone());
public void registerInspector(InspectorRegisterDTO inspectorDto) {
// 이미 존재하는 작업자인지 확인
Integer existingId = inspectorsRegisterMapper
.findInspectorIdByNameAndPhone(inspectorDto.getName(), inspectorDto.getPhone());

int inspectorId;
if (existingId != null) {
inspectorId = existingId; // 기존 inspector 재사용
} else {
inspectorsRegisterMapper.insertInspector(inspectorDto);
inspectorId = inspectorsRegisterMapper.getLastInsertedId();
System.out.println("이미 존재하는 점검자 → id=" + existingId);
return;
}

// 2. 설비 등록
facilityDto.setInspectorId(inspectorId);
facilitiesRegisterMapper.insertFacility(facilityDto);
inspectorsRegisterMapper.insertInspector(inspectorDto);
int newId = inspectorsRegisterMapper.getLastInsertedId();
System.out.println("새 점검자 등록 완료 → id=" + newId);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
import app.snapshot.qure.inspectors.repository.InspectorsMapper;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class InspectorsService {
Expand All @@ -15,13 +17,21 @@ public InspectorsService(InspectorsMapper inspectorMapper) {
this.inspectorsMapper = inspectorMapper;
}

public List<InspectorDTO> getPagedInspectors(int page, int size) {
int startRow = (page-1) * size+1;
public List<InspectorDTO> getPagedInspectors(int page, int size, long managersId) {
int startRow = (page - 1) * size + 1;
int endRow = page * size;
return inspectorsMapper.findPaged(startRow, endRow);

Map<String, Object> params = new HashMap<>();
params.put("startRow", startRow);
params.put("endRow", endRow);
params.put("managersId", managersId);

return inspectorsMapper.findPagedByManager(params);
}

public int getTotalCount() {
return inspectorsMapper.countAll();
};
public int getTotalCount(int managersId) {
return inspectorsMapper.countByManager(managersId);
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo
// 세션에 카카오 로그인 정보 저장 (유틸리티 사용)
HttpSession session = request.getSession(true); // 세션이 없으면 생성
SessionUtil.setManagerSession(session, manager.getManagersId(), email, name);
System.out.println("세션 저장 완료: managerId=" + manager.getManagersId() +
", sessionId=" + session.getId());

// 세션 설정 추가
session.setMaxInactiveInterval(60 * 60 * 24); // 24시간
Expand All @@ -51,6 +53,6 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo
", sessionId=" + session.getId());

// 홈 페이지로 리다이렉트
response.sendRedirect("/manager/home");
response.sendRedirect("/dashboard");
}
}
4 changes: 2 additions & 2 deletions src/main/java/app/snapshot/qure/login/util/SessionUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ public class SessionUtil {
public static final String KAKAO_NAME = "KAKAO_NAME";

// 세션에 매니저 정보 저장
public static void setManagerSession(HttpSession session, Long managerId, String email, String name) {
session.setAttribute(LOGIN_MANAGER_ID, managerId);
public static void setManagerSession(HttpSession session, Long managersId, String email, String name) {
session.setAttribute(LOGIN_MANAGER_ID, managersId);
session.setAttribute(KAKAO_EMAIL, email);
session.setAttribute(KAKAO_NAME, name);
}
Expand Down
12 changes: 0 additions & 12 deletions src/main/resources/mappers/FacilitiesRegisterMapper.xml

This file was deleted.

4 changes: 2 additions & 2 deletions src/main/resources/mappers/InsepctorRegisterMapper.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
<mapper namespace="app.snapshot.qure.inspectors.repository.InspectorsRegisterMapper">

<insert id="insertInspector" parameterType="app.snapshot.qure.inspectors.dto.InspectorRegisterDTO">
INSERT INTO inspector_profile (inspector_id, name, phone)
VALUES (inspector_seq.NEXTVAL, #{name}, #{phone})
INSERT INTO inspector_profile (inspector_id, name, phone, manager_id)
VALUES (inspector_seq.NEXTVAL, #{name}, #{phone}, #{managerId})
</insert>

<select id="getLastInsertedId" resultType="int">
Expand Down
14 changes: 8 additions & 6 deletions src/main/resources/mappers/InspectorsDetailMapper.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,15 @@
<mapper namespace="app.snapshot.qure.inspectors.repository.InspectorsDetailMapper">

<select id="getInspectorDetail" resultType="app.snapshot.qure.inspectors.dto.InspectorDetailDTO">
SELECT ip.inspector_id,
ip.name AS name, -- DTO의 name 필드랑 맞춤
ip.phone,
f.domain,
f.name AS facility
SELECT
ip.inspector_id AS inspectorId,
ip.name AS inspectorName,
ip.phone AS phone,
f.domain AS domain,
f.name AS facility
FROM inspector_profile ip
JOIN facilities f ON ip.inspector_id = f.inspector_id
LEFT JOIN facilities f
ON ip.inspector_id = f.inspector_id
WHERE ip.inspector_id = #{inspectorId}
</select>

Expand Down
Loading