Skip to content

Commit 59a764a

Browse files
authored
Merge pull request #10 from Dugout-Developers/feat/#8
[FEAT] 직관 신청, 취소 기능 개발
2 parents 04bd3b5 + 9ea90b3 commit 59a764a

File tree

14 files changed

+296
-11
lines changed

14 files changed

+296
-11
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.back.catchmate.domain.board.dto;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Builder;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
8+
public abstract class BoardResponse {
9+
@Getter
10+
@Builder
11+
@NoArgsConstructor
12+
@AllArgsConstructor
13+
public static class BoardInfo {
14+
String title;
15+
}
16+
}

src/main/java/com/back/catchmate/domain/board/entity/Board.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,8 @@ public class Board extends BaseTimeEntity {
4040
@Builder.Default
4141
@OneToMany(mappedBy = "board")
4242
private List<Notification> notificationList = new ArrayList<>();
43+
44+
public boolean isWriterSameAsLoginUser(User user) {
45+
return this.user.equals(user);
46+
}
4347
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.back.catchmate.domain.board.repository;
2+
3+
import com.back.catchmate.domain.board.entity.Board;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
public interface BoardRepository extends JpaRepository<Board, Long> {
7+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.back.catchmate.domain.enroll.controller;
2+
3+
import com.back.catchmate.domain.enroll.dto.EnrollRequest.CreateEnrollRequest;
4+
import com.back.catchmate.domain.enroll.dto.EnrollResponse.CancelEnrollInfo;
5+
import com.back.catchmate.domain.enroll.dto.EnrollResponse.CreateEnrollInfo;
6+
import com.back.catchmate.domain.enroll.service.EnrollService;
7+
import com.back.catchmate.global.jwt.JwtValidation;
8+
import io.swagger.v3.oas.annotations.Operation;
9+
import io.swagger.v3.oas.annotations.tags.Tag;
10+
import jakarta.validation.Valid;
11+
import lombok.RequiredArgsConstructor;
12+
import org.springframework.web.bind.annotation.DeleteMapping;
13+
import org.springframework.web.bind.annotation.PathVariable;
14+
import org.springframework.web.bind.annotation.PostMapping;
15+
import org.springframework.web.bind.annotation.RequestBody;
16+
import org.springframework.web.bind.annotation.RequestMapping;
17+
import org.springframework.web.bind.annotation.RestController;
18+
19+
import java.io.IOException;
20+
21+
@Tag(name = "직관 신청 관련 API")
22+
@RestController
23+
@RequestMapping("/enroll")
24+
@RequiredArgsConstructor
25+
public class EnrollController {
26+
private final EnrollService enrollService;
27+
28+
@PostMapping("/{boardId}")
29+
@Operation(summary = "직관 신청 API", description = "직관 신청을 요청하는 API 입니다.")
30+
public CreateEnrollInfo createEnroll(@Valid @RequestBody CreateEnrollRequest createEnrollRequest,
31+
@PathVariable Long boardId,
32+
@JwtValidation Long userId) throws IOException {
33+
return enrollService.createEnroll(createEnrollRequest, boardId, userId);
34+
}
35+
36+
@DeleteMapping("/cancel/{enrollId}")
37+
@Operation(summary = "직관 신청 취소 API", description = "직관 신청을 취소하는 API 입니다.")
38+
public CancelEnrollInfo cancelEnroll(@PathVariable Long enrollId,
39+
@JwtValidation Long userId) {
40+
return enrollService.cancelEnroll(enrollId, userId);
41+
}
42+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.back.catchmate.domain.enroll.converter;
2+
3+
import com.back.catchmate.domain.board.entity.Board;
4+
import com.back.catchmate.domain.enroll.dto.EnrollRequest.CreateEnrollRequest;
5+
import com.back.catchmate.domain.enroll.dto.EnrollResponse;
6+
import com.back.catchmate.domain.enroll.dto.EnrollResponse.CancelEnrollInfo;
7+
import com.back.catchmate.domain.enroll.dto.EnrollResponse.CreateEnrollInfo;
8+
import com.back.catchmate.domain.enroll.entity.AcceptStatus;
9+
import com.back.catchmate.domain.enroll.entity.Enroll;
10+
import com.back.catchmate.domain.user.entity.User;
11+
import org.springframework.stereotype.Component;
12+
13+
import java.time.LocalDateTime;
14+
15+
@Component
16+
public class EnrollConverter {
17+
public Enroll toEntity(CreateEnrollRequest createEnrollRequest, User user, Board board) {
18+
return Enroll.builder()
19+
.user(user)
20+
.board(board)
21+
.acceptStatus(AcceptStatus.PENDING)
22+
.description(createEnrollRequest.getDescription())
23+
.isNew(true)
24+
.build();
25+
}
26+
27+
public CreateEnrollInfo toCreateEnrollInfo(Enroll enroll) {
28+
return CreateEnrollInfo.builder()
29+
.enrollId(enroll.getId())
30+
.requestAt(enroll.getCreatedAt())
31+
.build();
32+
}
33+
34+
public CancelEnrollInfo toCancelEnrollInfo(Enroll enroll) {
35+
return CancelEnrollInfo.builder()
36+
.enrollId(enroll.getId())
37+
.deletedAt(enroll.getUpdatedAt())
38+
.build();
39+
}
40+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.back.catchmate.domain.enroll.dto;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import jakarta.validation.constraints.NotNull;
5+
import lombok.AllArgsConstructor;
6+
import lombok.Builder;
7+
import lombok.Getter;
8+
import lombok.NoArgsConstructor;
9+
10+
public abstract class EnrollRequest {
11+
@Getter
12+
@Builder
13+
@NoArgsConstructor
14+
@AllArgsConstructor
15+
public static class CreateEnrollRequest {
16+
@NotNull
17+
private String description;
18+
}
19+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package com.back.catchmate.domain.enroll.dto;
2+
3+
import com.back.catchmate.domain.board.dto.BoardResponse.BoardInfo;
4+
import com.back.catchmate.domain.enroll.entity.AcceptStatus;
5+
import com.back.catchmate.domain.user.dto.UserResponse.UserInfo;
6+
import lombok.AllArgsConstructor;
7+
import lombok.Builder;
8+
import lombok.Getter;
9+
import lombok.NoArgsConstructor;
10+
11+
import java.time.LocalDateTime;
12+
13+
public abstract class EnrollResponse {
14+
@Getter
15+
@Builder
16+
@NoArgsConstructor
17+
@AllArgsConstructor
18+
public static class EnrollInfo {
19+
private Long enrollId;
20+
private AcceptStatus acceptStatus;
21+
private String description;
22+
private LocalDateTime requestDate;
23+
private boolean isNew;
24+
private UserInfo userInfo;
25+
private BoardInfo boardInfo;
26+
}
27+
28+
@Getter
29+
@Builder
30+
@NoArgsConstructor
31+
@AllArgsConstructor
32+
public static class NewEnrollCountInfo {
33+
private int newEnrollCount;
34+
}
35+
36+
@Getter
37+
@Builder
38+
@NoArgsConstructor
39+
@AllArgsConstructor
40+
public static class UpdateEnrollInfo {
41+
private Long enrollId;
42+
private AcceptStatus acceptStatus;
43+
}
44+
45+
@Getter
46+
@Builder
47+
@NoArgsConstructor
48+
@AllArgsConstructor
49+
public static class CreateEnrollInfo {
50+
private Long enrollId;
51+
private LocalDateTime requestAt;
52+
}
53+
54+
@Getter
55+
@Builder
56+
@NoArgsConstructor
57+
@AllArgsConstructor
58+
public static class CancelEnrollInfo {
59+
private Long enrollId;
60+
private LocalDateTime deletedAt;
61+
}
62+
}

src/main/java/com/back/catchmate/domain/enroll/entity/Enroll.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,8 @@ public class Enroll extends BaseTimeEntity {
5050

5151
@Column(nullable = false)
5252
private boolean isNew;
53+
54+
public boolean isDifferentFromLoginUser(User user) {
55+
return !this.user.equals(user);
56+
}
5357
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.back.catchmate.domain.enroll.repository;
2+
3+
import com.back.catchmate.domain.enroll.entity.Enroll;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
import java.util.Optional;
7+
8+
public interface EnrollRepository extends JpaRepository<Enroll, Long> {
9+
Optional<Enroll> findByUserIdAndBoardId(Long userId, Long boardId);
10+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.back.catchmate.domain.enroll.service;
2+
3+
import com.back.catchmate.domain.enroll.dto.EnrollRequest.CreateEnrollRequest;
4+
import com.back.catchmate.domain.enroll.dto.EnrollResponse.CancelEnrollInfo;
5+
import com.back.catchmate.domain.enroll.dto.EnrollResponse.CreateEnrollInfo;
6+
7+
import java.io.IOException;
8+
9+
public interface EnrollService {
10+
CreateEnrollInfo createEnroll(CreateEnrollRequest request, Long boardId, Long userId) throws IOException;
11+
12+
CancelEnrollInfo cancelEnroll(Long enrollId, Long userId);
13+
}

0 commit comments

Comments
 (0)