diff --git a/backend/src/main/java/middle_point_search/backend/domains/Room/controller/RoomController.java b/backend/src/main/java/middle_point_search/backend/domains/Room/controller/RoomController.java index 9c48848..59bc5a5 100644 --- a/backend/src/main/java/middle_point_search/backend/domains/Room/controller/RoomController.java +++ b/backend/src/main/java/middle_point_search/backend/domains/Room/controller/RoomController.java @@ -1,6 +1,5 @@ -package middle_point_search.backend.domains.Room.controller; +package middle_point_search.backend.domains.room.controller; -import static middle_point_search.backend.domains.Room.dto.RoomDTO.*; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; @@ -11,7 +10,9 @@ import lombok.RequiredArgsConstructor; import middle_point_search.backend.common.dto.DataResponse; -import middle_point_search.backend.domains.Room.service.RoomService; +import middle_point_search.backend.domains.room.dto.RoomDTO.RoomCreateResponse; +import middle_point_search.backend.domains.room.dto.RoomDTO.RoomExistenceCheckResponse; +import middle_point_search.backend.domains.room.service.RoomService; @RestController @RequestMapping("/api/rooms") diff --git a/backend/src/main/java/middle_point_search/backend/domains/Room/domain/Room.java b/backend/src/main/java/middle_point_search/backend/domains/Room/domain/Room.java index 1541f4a..1dd1ec4 100644 --- a/backend/src/main/java/middle_point_search/backend/domains/Room/domain/Room.java +++ b/backend/src/main/java/middle_point_search/backend/domains/Room/domain/Room.java @@ -16,6 +16,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import middle_point_search.backend.domains.member.domain.Member; +import middle_point_search.backend.domains.place.domain.Place; @Entity @Getter @@ -32,9 +33,13 @@ public class Room { private LocalDateTime createDate; - @OneToMany(mappedBy = "member", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @OneToMany(mappedBy = "room", cascade = CascadeType.ALL, fetch = FetchType.LAZY) private List members = new ArrayList<>(); + @OneToMany(mappedBy = "room", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + private List places + = new ArrayList<>(); + public Room(String identityNumber) { this.identityNumber = identityNumber; this.createDate = LocalDateTime.now(); diff --git a/backend/src/main/java/middle_point_search/backend/domains/Room/dto/RoomDTO.java b/backend/src/main/java/middle_point_search/backend/domains/Room/dto/RoomDTO.java index 40a71f3..b243655 100644 --- a/backend/src/main/java/middle_point_search/backend/domains/Room/dto/RoomDTO.java +++ b/backend/src/main/java/middle_point_search/backend/domains/Room/dto/RoomDTO.java @@ -1,4 +1,4 @@ -package middle_point_search.backend.domains.Room.dto; +package middle_point_search.backend.domains.room.dto; import lombok.AccessLevel; import lombok.AllArgsConstructor; diff --git a/backend/src/main/java/middle_point_search/backend/domains/Room/repository/RoomRepository.java b/backend/src/main/java/middle_point_search/backend/domains/Room/repository/RoomRepository.java index 1920daf..4b67249 100644 --- a/backend/src/main/java/middle_point_search/backend/domains/Room/repository/RoomRepository.java +++ b/backend/src/main/java/middle_point_search/backend/domains/Room/repository/RoomRepository.java @@ -1,8 +1,8 @@ -package middle_point_search.backend.domains.Room.repository; +package middle_point_search.backend.domains.room.repository; import org.springframework.data.jpa.repository.JpaRepository; -import middle_point_search.backend.domains.Room.domain.Room; +import middle_point_search.backend.domains.room.domain.Room; public interface RoomRepository extends JpaRepository { diff --git a/backend/src/main/java/middle_point_search/backend/domains/Room/service/RoomService.java b/backend/src/main/java/middle_point_search/backend/domains/Room/service/RoomService.java index 60e1798..ce942ba 100644 --- a/backend/src/main/java/middle_point_search/backend/domains/Room/service/RoomService.java +++ b/backend/src/main/java/middle_point_search/backend/domains/Room/service/RoomService.java @@ -1,6 +1,4 @@ -package middle_point_search.backend.domains.Room.service; - -import static middle_point_search.backend.domains.Room.dto.RoomDTO.*; +package middle_point_search.backend.domains.room.service; import java.util.UUID; @@ -8,8 +6,10 @@ import org.springframework.transaction.annotation.Transactional; import lombok.RequiredArgsConstructor; -import middle_point_search.backend.domains.Room.domain.Room; -import middle_point_search.backend.domains.Room.repository.RoomRepository; +import middle_point_search.backend.domains.room.domain.Room; +import middle_point_search.backend.domains.room.dto.RoomDTO.RoomCreateResponse; +import middle_point_search.backend.domains.room.dto.RoomDTO.RoomExistenceCheckResponse; +import middle_point_search.backend.domains.room.repository.RoomRepository; @Service @Transactional(readOnly = true) diff --git a/backend/src/main/java/middle_point_search/backend/domains/member/domain/Member.java b/backend/src/main/java/middle_point_search/backend/domains/member/domain/Member.java index 1e24346..bffbcf1 100644 --- a/backend/src/main/java/middle_point_search/backend/domains/member/domain/Member.java +++ b/backend/src/main/java/middle_point_search/backend/domains/member/domain/Member.java @@ -1,28 +1,27 @@ package middle_point_search.backend.domains.member.domain; +import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToOne; import jakarta.persistence.Table; import jakarta.persistence.UniqueConstraint; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.NonNull; -import lombok.RequiredArgsConstructor; +import lombok.Setter; +import middle_point_search.backend.domains.place.domain.Place; import middle_point_search.backend.domains.room.domain.Room; @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) -@RequiredArgsConstructor(access = AccessLevel.PRIVATE) @Table(uniqueConstraints = {@UniqueConstraint(name = "NAME_ROOM_UNIQUE", columnNames = {"NAME", "ROOM"})}) public class Member { @@ -31,48 +30,31 @@ public class Member { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @NonNull @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "ROOM_ID") private Room room; - @NonNull @Column(nullable = false) private String name; - @NonNull @Column(nullable = false) private String pw; - @NonNull - @Enumerated(EnumType.STRING) - private Transport transport; + @Setter + @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) + @JoinColumn(name = "PLACE_ID") + private Place place; - @NonNull - @Column(nullable = false) - private String siDo; - - @NonNull - @Column(nullable = false) - private String siGunGu; - - @NonNull - @Column(nullable = false) - private String roadNameAddress; - - @NonNull - @Column(nullable = false) - private Double addressLatitude; - - @NonNull - @Column(nullable = false) - private Double addressLongitude; + public Member(Room room, String name, String pw) { + this.room = room; + this.name = name; + this.pw = pw; + } - public Member from(Room room, String name, String pw, Transport transport, String siDo, String siGunGu, - String roadNameAddress, Double addressLatitude, Double addressLongitude) { + public Member from(Room room, String name, String pw) { addRoom(room); - return new Member(room, name, pw, transport, siDo, siGunGu, roadNameAddress, addressLatitude, addressLongitude); + return new Member(room, name, pw); } public void addRoom(Room room) { diff --git a/backend/src/main/java/middle_point_search/backend/domains/place/domain/Place.java b/backend/src/main/java/middle_point_search/backend/domains/place/domain/Place.java new file mode 100644 index 0000000..c7f1879 --- /dev/null +++ b/backend/src/main/java/middle_point_search/backend/domains/place/domain/Place.java @@ -0,0 +1,97 @@ +package middle_point_search.backend.domains.place.domain; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToOne; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import middle_point_search.backend.domains.member.domain.Member; +import middle_point_search.backend.domains.member.domain.Transport; +import middle_point_search.backend.domains.room.domain.Room; + +@Entity +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Place { + + @Id + @Column(name = "PLACE_ID") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Enumerated(EnumType.STRING) + private Transport transport; + + @Column(nullable = false) + private String siDo; + + @Column(nullable = false) + private String siGunGu; + + @Column(nullable = false) + private String roadNameAddress; + + @Column(nullable = false) + private Double addressLatitude; + + @Column(nullable = false) + private Double addressLongitude; + + @ManyToOne + @JoinColumn(name = "ROOM_ID") + private Room room; + + @OneToOne(mappedBy = "place") + private Member member; + + public Place(Transport transport, String siDo, String siGunGu, String roadNameAddress, Double addressLatitude, + Double addressLongitude, Room room) { + this.transport = transport; + this.siDo = siDo; + this.siGunGu = siGunGu; + this.roadNameAddress = roadNameAddress; + this.addressLatitude = addressLatitude; + this.addressLongitude = addressLongitude; + addRoom(room); + } + + public Place(Transport transport, String siDo, String siGunGu, String roadNameAddress, Double addressLatitude, + Double addressLongitude, Room room, Member member) { + this.transport = transport; + this.siDo = siDo; + this.siGunGu = siGunGu; + this.roadNameAddress = roadNameAddress; + this.addressLatitude = addressLatitude; + this.addressLongitude = addressLongitude; + addRoom(room); + addMember(member); + } + + public static Place of(Transport transport, String siDo, String siGunGu, String roadNameAddress, + Double addressLatitude, Double addressLongitude, Room room) { + return new Place(transport, siDo, siGunGu, roadNameAddress, addressLatitude, addressLongitude, room); + } + + public static Place of(Transport transport, String siDo, String siGunGu, String roadNameAddress, + Double addressLatitude, Double addressLongitude, Room room, Member member) { + return new Place(transport, siDo, siGunGu, roadNameAddress, addressLatitude, addressLongitude, room, member); + } + + private void addRoom(Room room) { + this.room = room; + room.getPlaces().add(this); + } + + private void addMember(Member member) { + this.member = member; + member.setPlace(this); + } +}