Skip to content

Commit

Permalink
Merge pull request #109 from JeongHunMoon/refac/106-delete
Browse files Browse the repository at this point in the history
feat/106-delete
  • Loading branch information
JeongHunMoon authored Jan 16, 2024
2 parents 869d526 + b41c510 commit 255cde5
Show file tree
Hide file tree
Showing 14 changed files with 540 additions and 88 deletions.
17 changes: 17 additions & 0 deletions src/main/java/GHOST/sk_ghost/controller/Admin.java
Original file line number Diff line number Diff line change
Expand Up @@ -301,6 +301,23 @@ public String deleteSchedule(
public ResponseEntity<String> updateSchedule(@RequestBody List<Map<String, String>> requestBody) throws Exception {
System.out.println("modifyUpdate from DB : " + requestBody);
try {
Set<String> dateSet = new HashSet<>();

for (Map<String, String> map : requestBody) {
String date = map.get("date");
if (date != null && !date.isEmpty()) {
dateSet.add(date);
}
}

for (String date : dateSet) {
if (v1service.isDateHistory(date)) {
String name = v1service.getNameFromId(requestBody.get(0).get("manager"));
System.out.println(name +"으로" +date +"의 shcedule_hisotry 변경한다");
v1service.updateDateToScheduleHistoryTable(date, name);
}
}

v1service.updateSchedule(requestBody);
}
catch (Exception e) {
Expand Down
53 changes: 51 additions & 2 deletions src/main/java/GHOST/sk_ghost/controller/Home.java
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,6 @@ public ResponseEntity<List<List<Map<String, String>>>> getSchedule(@RequestBody
for (String card : dateInfo) {
List<Map<String, String>> lists = v1service.oneDateSchedule(card); // 금일의 대응자 admin을 조회한다.
payload.add(lists);

}
System.out.println("조희 결과> " + payload);

Expand All @@ -184,7 +183,34 @@ public ResponseEntity<List<List<Map<String, String>>>> getSchedule(@RequestBody
@PostMapping("/saveSchedule")
public ResponseEntity<String> saveScheduleInsert(@RequestBody List<Map<String, String>> requestBody) throws Exception {
System.out.println("Save to DB : " + requestBody);
try{
// date가 있는지 검사한다. > 있다면 무시한다.
// > 없다면 card table에 담당자의 이름을 추가한다. id를 넣으면 이름을 가져오는 서비스가 필요함.
try {

Set<String> dateSet = new HashSet<>();

for (Map<String, String> map : requestBody) {
String date = map.get("date");
if (date != null && !date.isEmpty()) {
dateSet.add(date);
}
}

for (String date : dateSet) {
// 해당 카드를 새로 만드는 insert
if (!v1service.isDateHistory(date)) {
String name = v1service.getNameFromId(requestBody.get(0).get("manager"));
System.out.println(name +"으로" +date +"의 shcedule_hisotry 를 만든다.");
v1service.insertDateToScheduleHistoryTable(date, name);
}
// 해당 카드를 수정하는 insert
else {
String name = v1service.getNameFromId(requestBody.get(0).get("manager"));
System.out.println(name +"으로" +date +"의 shcedule_hisotry 를 수정한다.");
v1service.updateDateToScheduleHistoryTable(date, name);
}
}

v1service.saveSchedule(requestBody);
}
catch (Exception e) {
Expand Down Expand Up @@ -215,6 +241,29 @@ public ResponseEntity<String> delete(@RequestBody List<Map<String, String>> requ
System.out.println("delete from DB : " + requestBody);
try {
v1service.deleteSchedule(requestBody);

// 날짜 추출 > 해당 날짜가 admin_shift에 없으면 > history_table에서 해당 날짜 제거 하기.
Set<String> dateSet = new HashSet<>();

for (Map<String, String> map : requestBody) {
String date = map.get("date");
if (date != null && !date.isEmpty()) {
dateSet.add(date);
}
}

for (String date : dateSet) {
// admin_shift 테이블에 이제 더 이상 운영자가 없기에 히스토리도 지운다.
if (!v1service.isDateAdminShiftTable(date)) {
v1service.deleteDateToScheduleHistoryTable(date);
}
// 누군가 카드를 삭제하긴 했는데 > 아직 살아있기 때문에 수정자 이름을 바꾼다.
else {
String name = v1service.getNameFromId(requestBody.get(0).get("manager"));
System.out.println(name +"으로" +date +"의 shcedule_hisotry 를 수정한다.");
v1service.updateDateToScheduleHistoryTable(date, name);
}
}
}
catch (Exception e) {
return ResponseEntity.ok("Delete Fail");
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/GHOST/sk_ghost/dao/V1Dao.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package GHOST.sk_ghost.dao;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
import java.util.ArrayList;
Expand All @@ -26,4 +28,20 @@ public interface V1Dao {
public void deleteSchedule(List<Map<String, String>> scheduleData);

public void updateSchedule(Map<String, String> scheduleData);

public String getNameFromId(String id);

public int isDateHistory(String date);

// DAO 코드
public void insertDateToScheduleHistoryTable(@Param("date") String date, @Param("creator") String creator);

// history table업데이트
public void updateDateToScheduleHistoryTable(@Param("date") String date, @Param("modificator") String modificator);

// admin_shift 테이블에서 해당 날짜를 가진 투플의 개수 반환.
public boolean isDateAdminShiftTable(String date);

public void deleteDateToScheduleHistoryTable(String date);

}
45 changes: 45 additions & 0 deletions src/main/java/GHOST/sk_ghost/service/V1service.java
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,57 @@ public void updateSchedule(List<Map<String, String>> itemList) {
System.out.println("변경 준비 완료");

for (Map<String, String> scheduleItem : itemList) {
// 업데이트는 반드시
v1Dao.updateSchedule(scheduleItem);

if (isDateHistory(scheduleItem.get(0))) {

}
}

} catch (Exception e) {
System.out.println("Fail to call v1Dao: " + e.getMessage());
e.printStackTrace();
}
}


// 카카오 id > 사용자의 이름
public String getNameFromId(String id) {
String userName = v1Dao.getNameFromId(id);

// 이름이 없을 경우 기본값 "홍길동" 반환
return (userName != null && !userName.isEmpty()) ? userName : "???";
}

// 해당 날짜가 history 테이블에 있는지 검사
public boolean isDateHistory(String date) {
int count = v1Dao.isDateHistory(date);
System.out.println("서비스 : " + date + "가 디비에 있나? >" + count);
return count > 0;
}

public void insertDateToScheduleHistoryTable(String date, String creator){
System.out.println(date + " : " + creator + "이 값을 히스토리에 넣음");

v1Dao.insertDateToScheduleHistoryTable(date, creator);
}

public void updateDateToScheduleHistoryTable(String date, String modificator){
System.out.println(date + " : " + modificator + "이 값을 히스토리에 변경한다.");

v1Dao.updateDateToScheduleHistoryTable(date, modificator);
}

public boolean isDateAdminShiftTable(String date) {
boolean bool = v1Dao.isDateAdminShiftTable(date);
System.out.println("admin_shift 삭제 : " + date + "가 존재하는 판단 요청됨>> " + bool);
return bool;
}

public void deleteDateToScheduleHistoryTable(String date) {
System.out.println(date + "shedule_admin 테이블에서 삭제 요청됨");
v1Dao.deleteDateToScheduleHistoryTable(date);
}

}
54 changes: 50 additions & 4 deletions src/main/resources/sqlmapper/V1sql.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,12 @@

<!-- 해당 날짜의 운영자 스케줄 조희 -->
<select id="oneDateSchedule" resultType="map">
select A.name, CAST(A.date as CHAR) as date, A.shift, A.priority, B.process
SELECT A.name, CAST(A.date as CHAR) as date, A.shift, A.priority, B.process, COALESCE(C.creator, '-') as creator, COALESCE(C.modificator, '-') as modificator
FROM admin_shift A
LEFT JOIN member B
on A.name = B.name
where A.date = #{dateInfo}
LEFT JOIN member B ON A.name = B.name
LEFT JOIN schedule_history C ON A.date = C.date
WHERE A.date = #{dateInfo}

</select>

<!-- 입력된 운영자 스케줄 저장 -->
Expand Down Expand Up @@ -84,5 +85,50 @@
AND shift = #{shift, jdbcType=VARCHAR}
AND priority = #{priority, jdbcType=VARCHAR}
</update>


<select id="getNameFromId" resultType="java.lang.String">
SELECT name FROM member WHERE id = #{id}
</select>


<select id="isDateHistory" resultType="int">
SELECT COUNT(*) FROM schedule_history WHERE date = #{date}
</select>


<!-- schedule_history 테이블에 생성자 이름을 삽입 -->
<insert id="insertDateToScheduleHistoryTable" parameterType="String">
INSERT INTO schedule_history (date, creator, modificator)
VALUES (#{date, jdbcType=DATE}, #{creator, jdbcType=VARCHAR}, NULL)
</insert>

<!-- schedule_history 테이블에 수정자 이름을 삽입 -->
<update id="updateDateToScheduleHistoryTable">
UPDATE schedule_history
SET modificator = #{modificator, jdbcType=VARCHAR}
WHERE date = #{date, jdbcType=DATE}
</update>

<!-- admin_shift 테이블에 date가 들어있는지 검사 -->
<select id="isDateAdminShiftTable" resultType="boolean">
SELECT EXISTS (
SELECT 1
FROM admin_shift
WHERE date = #{date, jdbcType=DATE}
LIMIT 1
) AS result
</select>

<!-- shedule_admin 테이블에서 해당 날짜를 삭제하는 쿼리 -->
<delete id="deleteDateToScheduleHistoryTable" parameterType="java.lang.String">
DELETE FROM schedule_history
WHERE date = #{date, jdbcType=DATE}
</delete>





</mapper>

7 changes: 7 additions & 0 deletions src/main/resources/static/JavaScript/createSchedule.js
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ function createSchedule() {
"date": formdate,
"shift": i % 3 === 1 ? 'N' : i % 3 === 2 ? 'D' : 'E',
"priority": i < 4 ? '1' : '2',
"manager" : nowUserId
});
} else {
noChange = true;
Expand All @@ -155,6 +156,7 @@ function createSchedule() {
"date": formdate,
"shift": i % 3 === 1 ? 'N' : i % 3 === 2 ? 'D' : 'E',
"priority": i < 4 ? '1' : '2',
"manager" : nowUserId
});
} else {
noChange = true;
Expand All @@ -173,6 +175,7 @@ function createSchedule() {
"date": formdate,
"shift": i % 3 === 1 ? 'N' : i % 3 === 2 ? 'D' : 'E',
"priority": i < 4 ? '1' : '2',
"manager" : nowUserId
});
} else {
noChange = true;
Expand All @@ -191,6 +194,7 @@ function createSchedule() {
"date": formdate,
"shift": i % 3 === 1 ? 'N' : i % 3 === 2 ? 'D' : 'E',
"priority": i < 4 ? '1' : '2',
"manager" : nowUserId
});
} else {
noChange = true;
Expand All @@ -209,6 +213,7 @@ function createSchedule() {
"date": formdate,
"shift": i % 3 === 1 ? 'N' : i % 3 === 2 ? 'D' : 'E',
"priority": i < 4 ? '1' : '2',
"manager" : nowUserId
});
} else {
noChange = true;
Expand All @@ -227,6 +232,7 @@ function createSchedule() {
"date": formdate,
"shift": i % 3 === 1 ? 'N' : i % 3 === 2 ? 'D' : 'E',
"priority": i < 4 ? '1' : '2',
"manager" : nowUserId
});
} else {
noChange = true;
Expand All @@ -245,6 +251,7 @@ function createSchedule() {
"date": formdate,
"shift": i % 3 === 1 ? 'N' : i % 3 === 2 ? 'D' : 'E',
"priority": i < 4 ? '1' : '2',
"manager" : nowUserId
});
} else {
noChange = true;
Expand Down
67 changes: 58 additions & 9 deletions src/main/resources/static/JavaScript/deleteCancelBtn.js
Original file line number Diff line number Diff line change
@@ -1,27 +1,76 @@
function deleteCancelBtn() {
let button = document.getElementById("cancel_btn") //로그인 버튼을 비활성화 하기 위한 태그 가져오기
let button = document.getElementById("delete_cancel") //로그인 버튼을 비활성화 하기 위한 태그 가져오기
let nowUser = null;
button.disabled = true; // 버튼 비활성화
button.style.opacity = 0.5; // 투명도를 0.5로 설정
loadingOn();

//최초 사용자(운영자) 이미 카카오 로그인이 되어있는지 판단.
Kakao.Auth.getStatusInfo(function(statusObj) {
// 만약 사용자가 로그인이 되어 있는 경우
if (statusObj.status === 'connected') {
nowUser = statusObj.user.kakao_account.email; // 사용자 카카오 id
alert("취소되었습니다.")
loadingOff();
button.disabled = false; // 버튼 활성화
button.style.opacity = 1; // 투명도를 1로 설정
window.location.href = "/admin?id=" + nowUser + "&first=" + "true"; //Getmapping

let delete_xhr = new XMLHttpRequest();
delete_xhr.open("GET", "/removeModify?id=" + nowUser, true);
delete_xhr.send();

// Timeout 설정 (예: 5초)
delete_xhr.timeout = 5000;

delete_xhr.onload = function () {
if (delete_xhr.status === 200) {
if (delete_xhr.responseText === "true") {
alert("취소되었습니다.")
loadingOff();
button.disabled = false; // 버튼 활성화
button.style.opacity = 1; // 투명도를 1로 설정
window.location.href = "admin?id="+nowUser;
}
else {
alert("취소에 실패했습니다.\n삭제 페이지에서 cancel버튼을 다시 눌러주세요!")
loadingOff();
button.disabled = false; // 버튼 활성화
button.style.opacity = 1; // 투명도를 1로 설정
window.location.href = "/";
}

} else {
alert("취소에 실패했습니다.\n삭제 페이지에서 cancel버튼을 다시 눌러주세요!")
loadingOff();
button.disabled = false; // 버튼 활성화
button.style.opacity = 1; // 투명도를 1로 설정
window.location.href = "/";
}
};

// 서버에서 일정시간 응답이 없을 때,
delete_xhr.ontimeout = function () {
alert("서버 응답 시간이 느립니다.\n삭제 페이지에서 cancel버튼을 다시 눌러주세요!")
loadingOff();
button.disabled = false; // 버튼 활성화
button.style.opacity = 1; // 투명도를 1로 설정
window.location.href = "/";
};

// 넷웤이 없는데 요청할때 실행
delete_xhr.onerror = function () {
alert("네트워크가 끊겨있습니다.\n삭제 페이지에서 cancel버튼을 다시 눌러주세요!")
loadingOff();
button.disabled = false; // 버튼 활성화
button.style.opacity = 1; // 투명도를 1로 설정
window.location.href = "/";
};

}

// 사용자가 현재 브라우저에 카카오 로그인이 안되어 있는 경우
else {
alert("로그인 세션이 만료되었습니다. 다시 로그인 해주세요")
loadingOff();
button.disabled = false; // 버튼 활성화
button.style.opacity = 1; // 투명도를 1로 설정
window.location.href = "/"
}
});



}
Loading

0 comments on commit 255cde5

Please sign in to comment.