Skip to content

Commit

Permalink
Merge pull request #847 from woowacourse-teams/dev
Browse files Browse the repository at this point in the history
release: v.1.5.0
  • Loading branch information
xrabcde authored Aug 28, 2022
2 parents d9e1ccd + 466a58b commit d9668a6
Show file tree
Hide file tree
Showing 132 changed files with 4,081 additions and 1,830 deletions.
8 changes: 7 additions & 1 deletion backend/src/docs/asciidoc/map.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,10 @@ include::{snippets}/map/slackPost/http-response.adoc[]
==== Request
include::{snippets}/map/slackGet/http-request.adoc[]
==== Response
include::{snippets}/map/slackGet/http-response.adoc[]
include::{snippets}/map/slackGet/http-response.adoc[]

=== 맵별 공지사항 등록
==== Request
include::{snippets}/map/noticePost/http-request.adoc[]
==== Response
include::{snippets}/map/noticePost/http-response.adoc[]
99 changes: 50 additions & 49 deletions backend/src/main/java/com/woowacourse/zzimkkong/DataLoader.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
package com.woowacourse.zzimkkong;

import com.woowacourse.zzimkkong.domain.*;
import com.woowacourse.zzimkkong.repository.MapRepository;
import com.woowacourse.zzimkkong.repository.MemberRepository;
import com.woowacourse.zzimkkong.repository.ReservationRepository;
import com.woowacourse.zzimkkong.repository.SpaceRepository;
import com.woowacourse.zzimkkong.repository.*;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
Expand All @@ -20,16 +17,19 @@ public class DataLoader implements CommandLineRunner {
private final MapRepository maps;
private final SpaceRepository spaces;
private final ReservationRepository reservations;
private final SettingRepository settings;

public DataLoader(
final MemberRepository memberRepository,
final MapRepository mapRepository,
final SpaceRepository spaceRepository,
final ReservationRepository reservationRepository) {
final ReservationRepository reservationRepository,
final SettingRepository settings) {
this.members = memberRepository;
this.maps = mapRepository;
this.spaces = spaceRepository;
this.reservations = reservationRepository;
this.settings = settings;
}

@Override
Expand All @@ -52,112 +52,102 @@ public void run(String... args) {
pobi)
);

Setting defaultSetting = Setting.builder()
.availableStartTime(LocalTime.of(9, 0))
.availableEndTime(LocalTime.of(22, 00))
.reservationTimeUnit(10)
.reservationMinimumTimeUnit(10)
.reservationMaximumTimeUnit(700)
.reservationEnable(true)
.enabledDayOfWeek("monday,tuesday,wednesday,thursday,friday,saturday,sunday")
.build();

Space be = Space.builder()
.name("백엔드 강의실")
.color(lectureRoomColor)
.map(luther)
.setting(defaultSetting)
.reservationEnable(true)
.build();

Space fe1 = Space.builder()
.name("프론트엔드 강의실1")
.color(lectureRoomColor)
.map(luther)
.setting(defaultSetting)
.reservationEnable(true)
.build();

Space fe2 = Space.builder()
.name("프론트엔드 강의실2")
.color(lectureRoomColor)
.map(luther)
.setting(defaultSetting)
.reservationEnable(true)
.build();

Space meetingRoom1 = Space.builder()
.name("회의실1")
.color(meetingRoomColor)
.map(luther)
.setting(defaultSetting)
.reservationEnable(true)
.build();

Space meetingRoom2 = Space.builder()
.name("회의실2")
.color(meetingRoomColor)
.map(luther)
.setting(defaultSetting)
.reservationEnable(true)
.build();

Space meetingRoom3 = Space.builder()
.name("회의실3")
.color(meetingRoomColor)
.map(luther)
.setting(defaultSetting)
.reservationEnable(true)
.build();

Space meetingRoom4 = Space.builder()
.name("회의실4")
.color(meetingRoomColor)
.map(luther)
.setting(defaultSetting)
.reservationEnable(true)
.build();

Space meetingRoom5 = Space.builder()
.name("회의실5")
.color(meetingRoomColor)
.map(luther)
.setting(defaultSetting)
.reservationEnable(true)
.build();

Space pairRoom1 = Space.builder()
.name("페어룸1")
.color(pairRoomColor)
.map(luther)
.setting(defaultSetting)
.reservationEnable(true)
.build();

Space pairRoom2 = Space.builder()
.name("페어룸2")
.color(pairRoomColor)
.map(luther)
.setting(defaultSetting)
.reservationEnable(true)
.build();

Space pairRoom3 = Space.builder()
.name("페어룸3")
.color(pairRoomColor)
.map(luther)
.setting(defaultSetting)
.reservationEnable(true)
.build();

Space pairRoom4 = Space.builder()
.name("페어룸4")
.color(pairRoomColor)
.map(luther)
.setting(defaultSetting)
.reservationEnable(true)
.build();

Space pairRoom5 = Space.builder()
.name("페어룸5")
.color(pairRoomColor)
.map(luther)
.setting(defaultSetting)
.reservationEnable(true)
.build();

Space trackRoom = Space.builder()
.name("트랙방")
.color("#D8FBCC")
.map(luther)
.setting(defaultSetting)
.reservationEnable(true)
.build();

List<Space> sampleSpaces = List.of(
Expand All @@ -170,59 +160,70 @@ public void run(String... args) {

for (Space space : sampleSpaces) {
spaces.save(space);
settings.save(Setting.builder()
.space(space)
.settingTimeSlot(
TimeSlot.of(
LocalTime.of(9, 0),
LocalTime.of(22, 0)))
.reservationTimeUnit(TimeUnit.from(10))
.reservationMinimumTimeUnit(TimeUnit.from(10))
.reservationMaximumTimeUnit(TimeUnit.from(700))
.enabledDayOfWeek("monday,tuesday,wednesday,thursday,friday,saturday,sunday")
.build());
}

LocalDate targetDate = LocalDate.now().plusDays(1L);

Reservation reservationBackEndTargetDate0To1 = Reservation.builder()
.date(targetDate)
.startTime(targetDate.atStartOfDay())
.endTime(targetDate.atTime(1, 0, 0))
.date(targetDate)
.reservationTime(
ReservationTime.ofDefaultServiceZone(
targetDate.atStartOfDay(),
targetDate.atTime(1, 0, 0)))
.description("찜꽁 1차 회의")
.userName("찜꽁")
.password("1234")
.space(be)
.build();

Reservation reservationBackEndTargetDate13To14 = Reservation.builder()
.date(targetDate)
.startTime(targetDate.atTime(13, 0, 0))
.endTime(targetDate.atTime(14, 0, 0))
.date(targetDate)
.reservationTime(
ReservationTime.ofDefaultServiceZone(
targetDate.atTime(13, 0, 0),
targetDate.atTime(14, 0, 0)))
.description("찜꽁 2차 회의")
.userName("찜꽁")
.password("1234")
.space(be)
.build();

Reservation reservationBackEndTargetDate18To23 = Reservation.builder()
.date(targetDate)
.startTime(targetDate.atTime(18, 0, 0))
.endTime(targetDate.atTime(23, 59, 59))
.date(targetDate)
.reservationTime(
ReservationTime.ofDefaultServiceZone(
targetDate.atTime(18, 0, 0),
targetDate.atTime(23, 0, 0)))
.description("찜꽁 3차 회의")
.userName("찜꽁")
.password("6789")
.space(be)
.build();

Reservation reservationBackEndTheDayAfterTargetDate = Reservation.builder()
.date(targetDate)
.startTime(targetDate.plusDays(1L).atStartOfDay())
.endTime(targetDate.plusDays(1L).atTime(1, 0, 0))
.date(targetDate)
.reservationTime(
ReservationTime.ofDefaultServiceZone(
targetDate.plusDays(1L).atStartOfDay(),
targetDate.plusDays(1L).atTime(1, 0, 0)))
.description("찜꽁 4차 회의")
.userName("찜꽁")
.password("1234")
.space(be)
.build();

Reservation reservationFrontEnd1TargetDate0to1 = Reservation.builder()
.date(targetDate)
.startTime(targetDate.atStartOfDay())
.endTime(targetDate.atTime(1, 0, 0))
.date(targetDate)
.reservationTime(
ReservationTime.ofDefaultServiceZone(
targetDate.atStartOfDay(),
targetDate.atTime(1, 0, 0)))
.description("찜꽁 5차 회의")
.userName("찜꽁")
.password("1234")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ public ResponseEntity<MapsResponse> maps(@PageableDefault(value = 20) Pageable p
return ResponseEntity.ok(mapsResponse);
}

// TODO: API Response 변경됨 프론트 쪽 변경 필요하면 찾아서 변경할 것
@GetMapping("/spaces")
public ResponseEntity<SpacesResponse> spaces(@PageableDefault(value = 20) Pageable pageable) {
SpacesResponse spacesResponse = adminService.findSpaces(pageable);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,15 @@ public ResponseEntity<Void> delete(@PathVariable final Long mapId, @LoginEmail f
return ResponseEntity.noContent().build();
}

@PostMapping("/{mapId}/notice")
public ResponseEntity<Void> createNotice(
@PathVariable final Long mapId,
@Valid @RequestBody final NoticeCreateRequest noticeCreateRequest,
@LoginEmail final LoginEmailDto loginEmailDto) {
mapService.saveNotice(mapId, noticeCreateRequest, loginEmailDto);
return ResponseEntity.ok().build();
}

@PostMapping("/{mapId}/slack")
public ResponseEntity<Void> createSlackUrl(
@PathVariable final Long mapId,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.woowacourse.zzimkkong.domain;

import com.woowacourse.zzimkkong.exception.setting.NoSuchEnabledDayOfWeekException;
import lombok.extern.slf4j.Slf4j;

import java.util.Arrays;
import java.util.Locale;
import java.util.stream.Collectors;

@Slf4j
public enum EnabledDayOfWeek {
MONDAY("월"),
TUESDAY("화"),
WEDNESDAY("수"),
THURSDAY("목"),
FRIDAY("금"),
SATURDAY("토"),
SUNDAY("일");

private final String displayName;

EnabledDayOfWeek(final String displayName) {
this.displayName = displayName;
}

public static String getDisplayNames(String enabledDayOfWeek) {
return Arrays.stream(enabledDayOfWeek.split(Space.DELIMITER))
.map(String::trim)
.map(EnabledDayOfWeek::from)
.map(dayOfWeek -> dayOfWeek.displayName)
.collect(Collectors.joining(Space.DELIMITER));
}

public static EnabledDayOfWeek from(String dayOfWeek) {
return Arrays.stream(values())
.filter(enabledDayOfWeek -> enabledDayOfWeek.name().equals(dayOfWeek.toUpperCase(Locale.ROOT)))
.findFirst()
.orElseThrow(() -> {
log.warn("존재하지 않는 요일입니다. {}", dayOfWeek);
throw new NoSuchEnabledDayOfWeekException();
});
}
}

31 changes: 25 additions & 6 deletions backend/src/main/java/com/woowacourse/zzimkkong/domain/Map.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,7 @@
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.*;

@Getter
@NoArgsConstructor
Expand All @@ -31,14 +28,28 @@ public class Map {
@Lob
private String slackUrl;

@Lob
private String notice;

@ManyToOne
@JoinColumn(name = "member_id", foreignKey = @ForeignKey(name = "fk_map_member"), nullable = false)
private Member member;

@OneToMany(mappedBy = "map", cascade = CascadeType.REMOVE, fetch = FetchType.LAZY, orphanRemoval = true)
private List<Space> spaces = new ArrayList<>();

public Map(final String name, final String mapDrawing, final String thumbnail, final Member member) {
/**
* The default Zzimkkong service zone (Asia/Seoul)
* 추후 timezone 관련 확장성을 고려한다면 Map Table에 Column으로 추가 될 수도 있음
* 일단은 transient field 로 구현
*/
@Transient
private final ServiceZone serviceZone = ServiceZone.KOREA;

public Map(final String name,
final String mapDrawing,
final String thumbnail,
final Member member) {
this.name = name;
this.mapDrawing = mapDrawing;
this.thumbnail = thumbnail;
Expand All @@ -49,7 +60,11 @@ public Map(final String name, final String mapDrawing, final String thumbnail, f
}
}

public Map(final Long id, final String name, final String mapDrawing, final String thumbnail, final Member member) {
public Map(final Long id,
final String name,
final String mapDrawing,
final String thumbnail,
final Member member) {
this(name, mapDrawing, thumbnail, member);
this.id = id;
}
Expand Down Expand Up @@ -82,6 +97,10 @@ public void updateSlackUrl(final String slackUrl) {
this.slackUrl = slackUrl;
}

public void updateNotice(final String notice) {
this.notice = notice;
}

public void addSpace(final Space space) {
spaces.add(space);
}
Expand Down
Loading

0 comments on commit d9668a6

Please sign in to comment.