Skip to content

Commit c6ef775

Browse files
authored
Merge pull request #88 from studio-recoding/fix-category-all
[🔧fix] 카테고리 관련 로직 수정
2 parents 7540e68 + 59333c8 commit c6ef775

13 files changed

+193
-21
lines changed

src/main/java/Ness/Backend/domain/category/entity/Category.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
package Ness.Backend.domain.category.entity;
22

33
import Ness.Backend.domain.member.entity.Member;
4+
import Ness.Backend.domain.member.entity.MemberRole;
45
import Ness.Backend.domain.schedule.entity.Schedule;
56
import jakarta.persistence.*;
7+
import lombok.Builder;
68
import lombok.Getter;
9+
import lombok.NoArgsConstructor;
710

811
import java.util.ArrayList;
912
import java.util.List;
13+
import java.util.Objects;
1014

1115
@Entity
1216
@Getter
17+
@NoArgsConstructor
1318
public class Category {
1419
@Id
1520
@GeneratedValue(strategy = GenerationType.IDENTITY)
@@ -27,4 +32,11 @@ public class Category {
2732

2833
@OneToMany(mappedBy = "category")
2934
private List<Schedule> schedules = new ArrayList<>();
35+
36+
@Builder
37+
public Category(Member member, String name, String color){
38+
this.member = member;
39+
this.name = name;
40+
this.color = color;
41+
}
3042
}

src/main/java/Ness/Backend/domain/chat/ChatRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public interface ChatRepository extends JpaRepository<Chat, Long>{
1414
// 특정 맴버의 일주일치 데이터만 반환
1515
@Query( value = "SELECT * FROM chat " +
1616
"WHERE member_id = :memberId " +
17-
"AND created_date >= DATE_SUB(NOW(), INTERVAL 1 WEEK) " +
17+
"AND CONVERT_TZ(created_date, '+00:00', '+09:00') >= DATE_SUB(CONVERT_TZ(NOW(), '+00:00', '+09:00'), INTERVAL 1 WEEK) " +
1818
//"AND created_date BETWEEN DATE_ADD(NOW(), INTERVAL -1 WEEK) AND NOW() " +
1919
"ORDER BY created_date ASC",
2020
nativeQuery = true)

src/main/java/Ness/Backend/domain/chat/ChatService.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ public PostFastApiAiChatDto postNewAiChat(Long memberId, String text, ChatType c
104104
persona = "easy";
105105
}
106106

107-
//TODO: member_id 전달하는 로직 만들어야 하지 않을까?(RAG를 위해)
108107
PostFastApiUserChatDto userDto = PostFastApiUserChatDto.builder()
109108
.persona(persona)
110109
.chatType(chatType) // 유저가 키보드로 친 채팅인지, 아니면 STT를 썼는지 구분

src/main/java/Ness/Backend/domain/member/MemberService.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package Ness.Backend.domain.member;
22

3+
import Ness.Backend.domain.category.CategoryRepository;
4+
import Ness.Backend.domain.category.entity.Category;
35
import Ness.Backend.domain.member.entity.Member;
46
import Ness.Backend.domain.profile.ProfileRepository;
57
import Ness.Backend.domain.profile.entity.PersonaType;
@@ -16,6 +18,7 @@ public class MemberService {
1618
private final MemberRepository memberRepository;
1719
private final ProfileRepository profileRepository;
1820
private final BCryptPasswordEncoder bCryptPasswordEncoder;
21+
private final CategoryRepository categoryRepository;
1922
public void deleteMember(Member member) {
2023
profileRepository.delete(member.getProfile());
2124
/* 소프트 삭제 */
@@ -38,7 +41,15 @@ public Member createMember(String email, String password, String picture, String
3841
.personaType(PersonaType.NESS) //디폴트로 NESS를 저장해줌, 나중에 개인 페이지에서 변경 가능
3942
.build();
4043

44+
//디폴트 미분류 카테고리가 있어야 함, 맴버 생성시 자동 만들어주기
45+
Category category = Category.builder()
46+
.member(member)
47+
.name("\uD83C\uDF40미분류")
48+
.color("#D9D9D9")
49+
.build();
50+
4151
profileRepository.save(profile);
52+
categoryRepository.save(category);
4253
return memberRepository.save(member);
4354
}
4455
}

src/main/java/Ness/Backend/domain/schedule/ScheduleController.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,15 @@ public ResponseEntity<GetScheduleListDto> postOneSchedule(@AuthUser Member membe
4040
description =
4141
"하나의 스케쥴의 정보를 변경하는 API로 스케쥴, 위치, 사람, 시간 모두 PUT으로 처리합니다." +
4242
"&day=2024-01-01과 같은 형식으로 데이터가 전달됩니다.")
43-
public ResponseEntity<GetScheduleListDto> putOneSchedule(@AuthUser Member member, @RequestParam String day, @RequestBody PutScheduleDto putScheduleDto){
44-
GetScheduleListDto oneUserOneDaySchedules = scheduleService.changeSchedule(member.getId(), putScheduleDto, day);
43+
public ResponseEntity<GetScheduleListDto> putOneSchedule(@AuthUser Member member, @RequestBody PutScheduleDto putScheduleDto){
44+
GetScheduleListDto oneUserOneDaySchedules = scheduleService.changeSchedule(member.getId(), putScheduleDto);
4545
return new ResponseEntity<>(oneUserOneDaySchedules, HttpStatusCode.valueOf(200));
4646
}
4747

4848
@DeleteMapping("")
4949
@Operation(summary = "하나의 스케쥴 삭제", description = "하나의 스케쥴을 삭제하는 API 입니다.")
5050
public ResponseEntity<GetScheduleListDto> deleteOneSchedule(@AuthUser Member member, @RequestParam Long id){
51-
GetScheduleListDto oneUserOneDaySchedules = scheduleService.deleteSchedule(id);
51+
GetScheduleListDto oneUserOneDaySchedules = scheduleService.deleteSchedule(member.getId(), id);
5252
return new ResponseEntity<>(oneUserOneDaySchedules, HttpStatusCode.valueOf(200));
5353
}
5454

src/main/java/Ness/Backend/domain/schedule/ScheduleService.java

Lines changed: 62 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@
99
import Ness.Backend.domain.chat.entity.ChatType;
1010
import Ness.Backend.domain.member.MemberRepository;
1111
import Ness.Backend.domain.member.entity.Member;
12-
import Ness.Backend.domain.schedule.dto.request.PostFastApiScheduleDto;
13-
import Ness.Backend.domain.schedule.dto.request.PostScheduleDto;
14-
import Ness.Backend.domain.schedule.dto.request.PutScheduleDto;
12+
import Ness.Backend.domain.schedule.dto.request.*;
1513
import Ness.Backend.domain.schedule.dto.response.GetScheduleListDto;
1614
import Ness.Backend.domain.schedule.dto.response.GetScheduleDetailDto;
1715
import Ness.Backend.domain.schedule.dto.response.GetScheduleDto;
1816
import Ness.Backend.domain.schedule.entity.Schedule;
19-
import Ness.Backend.global.fastApi.FastApiScheduleApi;
17+
import Ness.Backend.global.fastApi.FastApiDeleteScheduleApi;
18+
import Ness.Backend.global.fastApi.FastApiPostScheduleApi;
19+
import Ness.Backend.global.fastApi.FastApiPutScheduleApi;
2020
import com.fasterxml.jackson.databind.JsonNode;
2121
import lombok.RequiredArgsConstructor;
2222
import lombok.extern.slf4j.Slf4j;
@@ -39,7 +39,9 @@ public class ScheduleService {
3939
private final CategoryRepository categoryRepository;
4040
private final ChatRepository chatRepository;
4141
private final ChatService chatService;
42-
private final FastApiScheduleApi fastApiScheduleApi;
42+
private final FastApiPostScheduleApi fastApiPostScheduleApi;
43+
private final FastApiDeleteScheduleApi fastApiDeleteScheduleApi;
44+
private final FastApiPutScheduleApi fastApiPutScheduleApi;
4345

4446
// 한 달치 스케쥴 가져오는 로직
4547
@Transactional(readOnly = true)
@@ -64,9 +66,11 @@ public GetScheduleListDto getOneDayUserSchedule(Long memberId, ZonedDateTime dat
6466
}
6567

6668
/* 사용자가 직접 변경한 스케쥴 RDB에 저장하는 로직 */
67-
public GetScheduleListDto changeSchedule(Long memberId, PutScheduleDto putScheduleDto, String date){
69+
public GetScheduleListDto changeSchedule(Long memberId, PutScheduleDto putScheduleDto){
6870
Schedule schedule = scheduleRepository.findScheduleById(putScheduleDto.getId());
6971
Category category = categoryRepository.findCategoryById(putScheduleDto.getCategoryNum());
72+
73+
//RDB에서 변경
7074
schedule.changeSchedule(
7175
putScheduleDto.getInfo(),
7276
putScheduleDto.getLocation(),
@@ -75,15 +79,57 @@ public GetScheduleListDto changeSchedule(Long memberId, PutScheduleDto putSchedu
7579
putScheduleDto.getEndTime(),
7680
category);
7781

78-
return getOneDayUserSchedule(memberId, schedule.getStartTime().withZoneSameInstant(ZoneId.of("Asia/Seoul")));
82+
//VectorDB에서 변경
83+
ZonedDateTime endTime = putScheduleDto.getEndTime();
84+
if(endTime == null){
85+
endTime = putScheduleDto.getStartTime();
86+
}
87+
88+
PutFastApiScheduleDto dto = PutFastApiScheduleDto.builder()
89+
.info(putScheduleDto.getInfo())
90+
.location(putScheduleDto.getLocation())
91+
.person(putScheduleDto.getPerson())
92+
.startTime(putScheduleDto.getStartTime())
93+
.endTime(endTime)
94+
.category(category.getName())
95+
.category_id(category.getId())
96+
.member_id(memberId)
97+
.schedule_id(putScheduleDto.getId())
98+
.build();
99+
100+
ResponseEntity<JsonNode> responseNode = fastApiPutScheduleApi.putFastApiSchedule(dto);
101+
102+
if (responseNode.getStatusCode() == HttpStatusCode.valueOf(201)) {
103+
log.info("Succeed to put data in Vector DB");
104+
} else {
105+
log.error("Failed to put data in Vector DB");
106+
}
107+
108+
return getOneDayUserSchedule(memberId, putScheduleDto.getOriginalTime().withZoneSameInstant(ZoneId.of("Asia/Seoul")));
79109
}
80110

81111
/* 사용자가 직접 삭제한 스케쥴 */
82-
public GetScheduleListDto deleteSchedule(Long memberId){
83-
Schedule schedule = scheduleRepository.findScheduleById(memberId);
112+
public GetScheduleListDto deleteSchedule(Long memberId, Long scheduleId){
113+
Schedule schedule = scheduleRepository.findScheduleById(scheduleId);
114+
ZonedDateTime scheduleTime = schedule.getStartTime().withZoneSameInstant(ZoneId.of("Asia/Seoul"));
115+
116+
//VectorDB에서 삭제
117+
DeleteFastApiScheduleDto dto = DeleteFastApiScheduleDto.builder()
118+
.member_id(memberId)
119+
.schedule_id(scheduleId)
120+
.build();
121+
122+
ResponseEntity<JsonNode> responseNode = fastApiDeleteScheduleApi.deleteFastApiSchedule(dto);
123+
if (responseNode.getStatusCode() == HttpStatusCode.valueOf(204)) {
124+
log.info("Succeed to delete data in Vector DB");
125+
} else {
126+
log.error("Failed to delete data in Vector DB");
127+
}
128+
129+
//RDB에서 삭제
84130
scheduleRepository.delete(schedule);
85131

86-
return getOneDayUserSchedule(memberId, schedule.getStartTime().withZoneSameInstant(ZoneId.of("Asia/Seoul")));
132+
return getOneDayUserSchedule(memberId, scheduleTime);
87133
}
88134

89135
/* 사용자가 AI가 생성한 스케쥴을 Accept/Deny한 여부에 따라서 채팅 및 스케쥴 저장 */
@@ -144,17 +190,19 @@ public GetScheduleListDto postNewUserSchedule(Long memberId, PostScheduleDto pos
144190
postScheduleDto.getPerson(),
145191
postScheduleDto.getStartTime(),
146192
postScheduleDto.getEndTime(),
147-
postScheduleDto.getCategoryNum(),
193+
category.getName(),
194+
category.getId(),
148195
newSchedule.getMember().getId(),
149196
newSchedule.getId());
150197

198+
log.info("Succeed to save user created schedule data in RDB & VectorDB");
151199
return getOneDayUserSchedule(memberId, newSchedule.getStartTime().withZoneSameInstant(ZoneId.of("Asia/Seoul")));
152200
}
153201

154202
/* 새로운 스케쥴을 VectorDB에 저장하는 API 호출 */
155203
public void postNewAiSchedule(String info, String location, String person,
156204
ZonedDateTime startTime, ZonedDateTime endTime,
157-
Long category, Long memberId, Long scheduleId){
205+
String category, Long category_id, Long memberId, Long scheduleId){
158206

159207
if(endTime == null){
160208
endTime = startTime;
@@ -167,11 +215,12 @@ public void postNewAiSchedule(String info, String location, String person,
167215
.startTime(startTime)
168216
.endTime(endTime)
169217
.category(category)
218+
.category_id(category_id)
170219
.member_id(memberId)
171220
.schedule_id(scheduleId)
172221
.build();
173222

174-
ResponseEntity<JsonNode> responseNode = fastApiScheduleApi.creatFastApiSchedule(dto);
223+
ResponseEntity<JsonNode> responseNode = fastApiPostScheduleApi.creatFastApiSchedule(dto);
175224
if (responseNode.getStatusCode() == HttpStatusCode.valueOf(201)) {
176225
log.info("Succeed to save data in Vector DB");
177226
} else {
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package Ness.Backend.domain.schedule.dto.request;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Builder;
6+
import lombok.Data;
7+
import lombok.NoArgsConstructor;
8+
9+
@Data
10+
@NoArgsConstructor
11+
@AllArgsConstructor
12+
@Builder
13+
public class DeleteFastApiScheduleDto {
14+
@JsonProperty("schedule_id")
15+
private Long schedule_id;
16+
17+
@JsonProperty("member_id")
18+
private Long member_id;
19+
}

src/main/java/Ness/Backend/domain/schedule/dto/request/PostFastApiScheduleDto.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,8 @@ public class PostFastApiScheduleDto {
3939
private ZonedDateTime endTime;
4040

4141
@JsonProperty("category")
42-
private Long category;
42+
private String category;
43+
44+
@JsonProperty("category_id")
45+
private Long category_id;
4346
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package Ness.Backend.domain.schedule.dto.request;
2+
3+
import com.fasterxml.jackson.annotation.JsonFormat;
4+
import com.fasterxml.jackson.annotation.JsonProperty;
5+
import io.swagger.v3.oas.annotations.media.Schema;
6+
import lombok.AllArgsConstructor;
7+
import lombok.Builder;
8+
import lombok.Data;
9+
import lombok.NoArgsConstructor;
10+
11+
import java.time.ZonedDateTime;
12+
13+
@Data
14+
@NoArgsConstructor
15+
@AllArgsConstructor
16+
@Builder
17+
public class PutFastApiScheduleDto {
18+
@JsonProperty("schedule_id")
19+
private Long schedule_id;
20+
21+
@JsonProperty("member_id")
22+
private Long member_id;
23+
24+
@JsonProperty("data")
25+
private String info;
26+
27+
@JsonProperty("location")
28+
private String location;
29+
30+
@JsonProperty("person")
31+
private String person;
32+
33+
@JsonProperty("schedule_datetime_start")
34+
@JsonFormat(shape = JsonFormat.Shape.STRING)
35+
private ZonedDateTime startTime;
36+
37+
@JsonProperty("schedule_datetime_end")
38+
@JsonFormat(shape = JsonFormat.Shape.STRING)
39+
private ZonedDateTime endTime;
40+
41+
@JsonProperty("category")
42+
private String category;
43+
44+
@JsonProperty("category_id")
45+
private Long category_id;
46+
}

src/main/java/Ness/Backend/domain/schedule/dto/request/PutScheduleDto.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package Ness.Backend.domain.schedule.dto.request;
22

33

4+
import com.fasterxml.jackson.annotation.JsonFormat;
45
import com.fasterxml.jackson.annotation.JsonProperty;
56
import io.swagger.v3.oas.annotations.media.Schema;
67
import lombok.AllArgsConstructor;
@@ -39,4 +40,7 @@ public class PutScheduleDto {
3940

4041
@Schema(description = "스케쥴 카테고리 DB 넘버", example = "0")
4142
private Long categoryNum;
43+
44+
@JsonProperty("originalTime")
45+
private ZonedDateTime originalTime;
4246
}

0 commit comments

Comments
 (0)