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
4 changes: 1 addition & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,11 @@ dependencies {
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'

// ===== QueryDSL (jakarta, Boot 3.x / Hibernate 6.x 호환) =====
// QueryDSL
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta'
// 메타모델 생성용 (annotation processor 경로에 필요)
annotationProcessor 'jakarta.persistence:jakarta.persistence-api:3.1.0'
annotationProcessor 'jakarta.annotation:jakarta.annotation-api:2.1.1'
// ============================================================

// MySQL
runtimeOnly 'com.mysql:mysql-connector-j'
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.project.dorumdorum.domain.message.domain.entity;

import jakarta.persistence.Id;
import lombok.*;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

import java.time.LocalDateTime;

@Getter
@Builder
@Document
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Message {

@Id
@Field(name = "message_no")
private Long messageNo;

@Field(name = "sender_no")
private Long senderNo;

@Field(name = "content")
private String content;

@Field(name = "message_type")
private MessageType messageType;

@Field(name = "attachment")
private Attachment attachment;

@Field(name = "is_read")
private Boolean isRead;

@Field("sent_at")
private LocalDateTime sentAt;
}

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
class Attachment {
private String url;
private String name;
private long size;
private String mimeType;
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.project.dorumdorum.domain.message.domain.entity;

import com.project.dorumdorum.global.common.BaseEntity;
import io.hypersistence.utils.hibernate.id.Tsid;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import lombok.*;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@Builder
public class MessageRequest extends BaseEntity {

@Id @Tsid
private Long messageRequestNo;

@Column(nullable = false)
private Long userNo;

@Column(nullable = false)
private Long roomNo;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.project.dorumdorum.domain.message.domain.entity;

import com.project.dorumdorum.global.common.BaseEntity;
import io.hypersistence.utils.hibernate.id.Tsid;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.Id;
import lombok.*;

import java.time.LocalDateTime;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@Builder
public class MessageRoom extends BaseEntity {

@Id @Tsid
private Long messageRoomNo;

@Enumerated(EnumType.STRING)
private MessageRoomType roomType;

private String lastMessage;

private LocalDateTime lastMessageAt;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.project.dorumdorum.domain.message.domain.entity;

public enum MessageRoomType {
DIRECT, GROUP
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.project.dorumdorum.domain.message.domain.entity;

public enum MessageType {
TEXT, IMAGE, FILE
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.project.dorumdorum.domain.message.domain.entity;

import com.project.dorumdorum.domain.user.domain.entity.Role;
import com.project.dorumdorum.domain.user.domain.entity.User;
import com.project.dorumdorum.global.common.BaseEntity;
import io.hypersistence.utils.hibernate.id.Tsid;
import jakarta.persistence.*;
import lombok.*;

import java.time.LocalDateTime;

@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@Builder
public class Participant extends BaseEntity {

@Id @Tsid
private String participantNo;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_no", nullable = false)
private User user;

private Role role;

private LocalDateTime joinedAt;

private LocalDateTime leftAt;

private String lastReadMessageId;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.project.dorumdorum.domain.message.domain.repository;

import com.project.dorumdorum.domain.message.domain.entity.MessageRequest;
import org.springframework.data.jpa.repository.JpaRepository;

public interface MessageRequestRepository extends JpaRepository<MessageRequest, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.project.dorumdorum.domain.message.domain.repository;

import com.project.dorumdorum.domain.message.domain.entity.MessageRoom;
import org.springframework.data.jpa.repository.JpaRepository;

public interface MessageRoomRepository extends JpaRepository<MessageRoom, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.project.dorumdorum.domain.message.domain.repository;

import com.project.dorumdorum.domain.message.domain.entity.Participant;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ParticipantRepository extends JpaRepository<Participant, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.project.dorumdorum.domain.message.ui;

public class LeaveMessageRoomController {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.project.dorumdorum.domain.message.ui;

public class LoadMessageRoomsController {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.project.dorumdorum.domain.message.ui;

public class LoadMessagesController {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.project.dorumdorum.domain.message.ui;

public class RejectMessageRequestController {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.project.dorumdorum.domain.message.ui;

public class SendMessageController {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.project.dorumdorum.domain.message.ui;

public class SendMessageRequestController {
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.project.dorumdorum.domain.room.application.dto.request;

import jakarta.validation.constraints.NotBlank;

public record InviteRoomRequest(
String introduction
@NotBlank String introduction
) {}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.project.dorumdorum.domain.room.domain.entity;

import com.project.dorumdorum.global.common.BaseEntity;
import io.hypersistence.utils.hibernate.id.Tsid;
import jakarta.persistence.*;
import lombok.*;
Expand All @@ -9,7 +10,7 @@
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@Builder
public class RoomRequest {
public class RoomRequest extends BaseEntity {

@Id @Tsid
private Long roomRequestNo;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.project.dorumdorum.domain.room.domain.entity;

import com.project.dorumdorum.global.common.BaseEntity;
import io.hypersistence.utils.hibernate.id.Tsid;
import jakarta.persistence.*;
import lombok.*;
Expand All @@ -9,7 +10,7 @@
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@Builder
public class Roommate {
public class Roommate extends BaseEntity {

@Id @Tsid
private Long roommateNo;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,21 @@

import com.project.dorumdorum.domain.room.application.dto.request.RoomCreateRequest;
import com.project.dorumdorum.domain.room.application.dto.usecase.CreateRoomUseCase;
import com.project.dorumdorum.domain.room.ui.spec.CreateRoomApiSpec;
import com.project.dorumdorum.global.annotation.CurrentUser;
import com.project.dorumdorum.global.common.BaseResponse;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
public class CreateRoomController {
public class CreateRoomController implements CreateRoomApiSpec {

private final CreateRoomUseCase createRoomUseCase;

@PostMapping("/api/rooms")
@Override
public BaseResponse<Void> create(
@CurrentUser Long userNo,
@RequestBody @Valid RoomCreateRequest request
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
package com.project.dorumdorum.domain.room.ui;

import com.project.dorumdorum.domain.room.application.dto.usecase.DecideInviteRoomRequestUseCase;
import com.project.dorumdorum.domain.room.ui.spec.DecideInviteRoomRequestApiSpec;
import com.project.dorumdorum.global.annotation.CurrentUser;
import com.project.dorumdorum.global.common.BaseResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
public class DecideInviteRoomRequestController {
public class DecideInviteRoomRequestController implements DecideInviteRoomRequestApiSpec {

private final DecideInviteRoomRequestUseCase decideInviteRoomRequestUseCase;

@PostMapping("/api/rooms/{roomNo}/invite-request/{requestNo}/approve")
@Override
public BaseResponse<Void> approve(
@CurrentUser Long userNo,
@PathVariable Long requestNo,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
package com.project.dorumdorum.domain.room.ui;

import com.project.dorumdorum.domain.room.application.dto.usecase.DecideJoinRoomRequestUseCase;
import com.project.dorumdorum.domain.room.ui.spec.DecideJoinRoomRequestApiSpec;
import com.project.dorumdorum.global.annotation.CurrentUser;
import com.project.dorumdorum.global.common.BaseResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
public class DecideJoinRoomRequestController {
public class DecideJoinRoomRequestController implements DecideJoinRoomRequestApiSpec {

private final DecideJoinRoomRequestUseCase decideJoinRoomRequestUseCase;

@PostMapping("/api/rooms/{roomNo}/join-request/{requestNo}/approve")
@Override
public BaseResponse<Void> approve(
@CurrentUser Long userNo,
@PathVariable Long roomNo,
Expand All @@ -24,7 +24,7 @@ public BaseResponse<Void> approve(
return BaseResponse.onSuccess();
}

@PostMapping("/api/join-request/{requestNo}/reject")
@Override
public BaseResponse<Void> reject(
@CurrentUser Long userNo,
@PathVariable Long requestNo
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
package com.project.dorumdorum.domain.room.ui;

import com.project.dorumdorum.domain.room.application.dto.usecase.DecideRoomConfirmationUseCase;
import com.project.dorumdorum.domain.room.ui.spec.DecideRoomConfirmationApiSpec;
import com.project.dorumdorum.global.annotation.CurrentUser;
import com.project.dorumdorum.global.common.BaseResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
public class DecideRoomConfirmationController {
public class DecideRoomConfirmationController implements DecideRoomConfirmationApiSpec {

private final DecideRoomConfirmationUseCase decideRoomConfirmationUseCase;

@PostMapping("/api/rooms/{roomNo}/confirm/approve")
@Override
public BaseResponse<Void> approve(
@CurrentUser Long userNo,
@PathVariable Long roomNo
Expand All @@ -23,7 +23,7 @@ public BaseResponse<Void> approve(
return BaseResponse.onSuccess();
}

@PostMapping("/api/rooms/{roomNo}/confirm/reject")
@Override
public BaseResponse<Void> reject(
@CurrentUser Long userNo,
@PathVariable Long roomNo
Expand Down
Loading