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
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,5 @@ public class GetDayEventResponseDto {

private String endTime;

private Long colorId;
}
private String color;
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,6 @@ public class GetMonthlyCalendarResponseDto {
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate date;

@Schema(description = "해당 날짜에 포함된 일정의 색상 ID 리스트", example = "[1, 2]")
private List<Long> colorIds;
}
@Schema(description = "해당 날짜에 포함된 일정의 색상 코드 리스트", example = "[\"#FF0000\", \"#00FF00\"]")
private List<String> colors;
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,22 +39,21 @@ public List<GetMonthlyCalendarResponseDto> getMonthlyCalendar(int year, int mont

List<Event> events = eventRepository.findByUserIdAndEventDateBetween(userId, startDate, endDate);

Map<LocalDate, List<Long>> dateColorIdsMap = events.stream()
Map<LocalDate, List<String>> dateColorsMap = events.stream()
.collect(Collectors.groupingBy(
Event::getEventDate,
Collectors.mapping(event -> event.getColor().getId(), Collectors.toList())
Collectors.mapping(Event::getColorCode, Collectors.toList())
));

return Stream.iterate(startDate, date -> date.plusDays(1))
.limit(yearMonth.lengthOfMonth())
.map(date -> {
List<Long> colorIds = dateColorIdsMap.getOrDefault(date, Collections.emptyList());
List<String> colors = dateColorsMap.getOrDefault(date, Collections.emptyList());
return GetMonthlyCalendarResponseDto.builder()
.date(date)
.colorIds(colorIds)
.colors(colors)
.build();
})
.collect(Collectors.toList());
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,9 @@
import com.indayvidual.server.domain.event.dto.request.CreateEventRequestDto;
import com.indayvidual.server.domain.event.dto.request.UpdateEventRequestDto;
import com.indayvidual.server.domain.event.dto.response.CreateEventResponseDto;
import com.indayvidual.server.domain.event.dto.response.UpdateEventResponseDto;
import com.indayvidual.server.domain.calendar.dto.response.GetDayEventResponseDto;
import com.indayvidual.server.domain.event.dto.response.UpdateEventResponseDto;
import com.indayvidual.server.domain.event.entity.Event;
import com.indayvidual.server.domain.event.exception.EventException;
import com.indayvidual.server.domain.todo.entity.Color;
import com.indayvidual.server.domain.todo.repository.ColorRepository;
import com.indayvidual.server.global.api.code.status.ErrorStatus;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

Expand All @@ -20,16 +16,10 @@
public class EventConverter {

private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm");
private static final Long DEFAULT_COLOR_ID = 1L;
private static final String DEFAULT_COLOR = "#CD7AFB";
private static final LocalTime ALL_DAY_START_TIME = LocalTime.of(0, 0);
private static final LocalTime ALL_DAY_END_TIME = LocalTime.of(23, 59);

private final ColorRepository colorRepository;

public EventConverter(ColorRepository colorRepository) {
this.colorRepository = colorRepository;
}

public Event toEntity(CreateEventRequestDto request, Long userId) {
LocalTime startTime;
LocalTime endTime;
Expand All @@ -42,22 +32,36 @@ public Event toEntity(CreateEventRequestDto request, Long userId) {
endTime = request.getEndTime();
}

Long colorId = request.getColorId() != null ? request.getColorId() : DEFAULT_COLOR_ID;
Color color = colorRepository.findById(colorId)
.orElseThrow(() -> new EventException(ErrorStatus.EVENT_INVALID_COLOR_ID));

return Event.builder()
.userId(userId)
.title(request.getTitle().trim())
.eventDate(request.getDate())
.startTime(startTime)
.endTime(endTime)
.color(color)
.colorCode(StringUtils.hasText(request.getColor()) ? request.getColor() : DEFAULT_COLOR)
.userEndTime(endTime != null)
.isAllDay(Boolean.TRUE.equals(request.getIsAllDay()))
.build();
}

public CreateEventResponseDto toCreateResponse(Event entity) {
return CreateEventResponseDto.builder()
.eventId(entity.getId())
.build();
}

public UpdateEventResponseDto toUpdateResponse(Event entity) {
return UpdateEventResponseDto.builder()
.eventId(entity.getId())
.date(entity.getEventDate())
.title(entity.getTitle())
.startTime(entity.getStartTime())
.endTime(entity.getEndTime())
.color(entity.getColorCode())
.isAllDay(entity.getIsAllDay())
.build();
}

public void updateEntityFromRequest(Event entity, UpdateEventRequestDto request) {
if (request.getDate() != null) {
entity.setEventDate(request.getDate());
Expand Down Expand Up @@ -93,39 +97,20 @@ public void updateEntityFromRequest(Event entity, UpdateEventRequestDto request)
}
}

if (request.getColorId() != null) {
Color color = colorRepository.findById(request.getColorId())
.orElseThrow(() -> new EventException(ErrorStatus.EVENT_INVALID_COLOR_ID));
entity.setColor(color);
if (StringUtils.hasText(request.getColor())) {
entity.setColorCode(request.getColor());
}
}

public CreateEventResponseDto toCreateResponse(Event entity) {
return CreateEventResponseDto.builder()
.eventId(entity.getId())
.build();
}

public UpdateEventResponseDto toUpdateResponse(Event entity) {
return UpdateEventResponseDto.builder()
.eventId(entity.getId())
.date(entity.getEventDate())
.title(entity.getTitle())
.startTime(entity.getStartTime())
.endTime(entity.getEndTime())
.colorId(entity.getColor().getId())
.isAllDay(entity.getIsAllDay())
.build();
}

public GetDayEventResponseDto toGetDayEventResponse(Event event) {
return GetDayEventResponseDto.builder()
.eventId(event.getId())
.type("event")
.title(event.getTitle())
.startTime(event.getStartTime().format(TIME_FORMATTER))
.endTime(event.getEndTime() != null ? event.getEndTime().format(TIME_FORMATTER) : null)
.colorId(event.getColor().getId())
.color(event.getColorCode())
.build();
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,11 @@ public class CreateEventRequestDto {
@JsonFormat(pattern = "HH:mm")
private LocalTime endTime;

@Schema(description = "색상 ID", example = "1")
private Long colorId;
@Schema(description = "색상 코드", example = "#CD7AFB")
@Pattern(regexp = "^#[0-9A-F]{6}$", message = "색상은 #RRGGBB 형식이어야 합니다.")
private String color;

@Schema(description = "하루종일 여부", example = "false")
@Builder.Default
private Boolean isAllDay = false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,10 @@ public class UpdateEventRequestDto {
@JsonFormat(pattern = "HH:mm")
private LocalTime endTime;

@Schema(description = "색상 ID", example = "1")
private Long colorId;
@Schema(description = "색상 코드", example = "#CD7AFB")
@Pattern(regexp = "^#[0-9A-F]{6}$", message = "색상은 #RRGGBB 형식이어야 합니다.")
private String color;

@Schema(description = "하루종일 여부", example = "false")
private Boolean isAllDay;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ public class UpdateEventResponseDto {
@JsonFormat(pattern = "HH:mm")
private LocalTime endTime;

@Schema(description = "색상 ID", example = "1")
private Long colorId;
@Schema(description = "색상 코드", example = "#CD7AFB")
private String color;

@Schema(description = "하루종일 여부", example = "false")
private Boolean isAllDay;
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.indayvidual.server.domain.event.entity;

import com.indayvidual.server.common.BaseEntity;
import com.indayvidual.server.domain.todo.entity.Color;
import jakarta.persistence.*;
import lombok.*;

Expand Down Expand Up @@ -35,10 +34,9 @@ public class Event extends BaseEntity {
@Column(name = "end_time", nullable = true)
private LocalTime endTime;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "color_id", nullable = false)
@Column(name = "color_code", nullable = false, length = 7)
@Builder.Default
private Color color = null;
private String colorCode = "#CD7AFB";

@Column(name = "user_end_time", nullable = false)
@Builder.Default
Expand All @@ -47,4 +45,4 @@ public class Event extends BaseEntity {
@Column(name = "is_all_day", nullable = false)
@Builder.Default
private Boolean isAllDay = false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@ public enum ErrorStatus implements BaseErrorCode {
EVENT_GET_BY_DATE_FAILED(HttpStatus.BAD_REQUEST, "EVENT4006", "특정 날짜 일정 조회에 실패했습니다."),
EVENT_INVALID_TIME_ORDER(HttpStatus.BAD_REQUEST, "EVENT4007", "시작 시간은 종료 시간보다 빨라야 합니다."),
EVENT_INVALID_DATE_FORMAT(HttpStatus.BAD_REQUEST, "EVENT4008", "날짜 형식이 올바르지 않습니다."),
EVENT_INVALID_COLOR_ID(HttpStatus.BAD_REQUEST, "EVENT4009", "유효하지 않은 색상 ID입니다."),

// ===== 시간표 관련 에러 (TIMETABLE) =====
TIMETABLE_CREATE_FAILED(HttpStatus.BAD_REQUEST, "TIMETABLE4001", "시간표 등록에 실패했습니다."),
Expand Down