Skip to content

Commit 4867eb0

Browse files
authored
Merge pull request #33 from prgrms-web-devcourse-final-project/feature/EA3-74-calender-api
[EA3-74] feature: 캘린더 엔티티 및 스웨거 작성
2 parents 59c7658 + e5fa766 commit 4867eb0

11 files changed

+350
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package grep.neogul_coder.domain.calender.controller;
2+
3+
import grep.neogul_coder.domain.calender.controller.dto.PersonalCalenderRequest;
4+
import grep.neogul_coder.domain.calender.controller.dto.PersonalCalenderResponse;
5+
import io.swagger.v3.oas.annotations.Operation;
6+
import io.swagger.v3.oas.annotations.tags.Tag;
7+
import grep.neogul_coder.global.response.ApiResponse;
8+
9+
import java.time.LocalDateTime;
10+
import java.util.List;
11+
import org.springframework.web.bind.annotation.*;
12+
13+
@RestController
14+
@RequestMapping("/api/calendar/personal")
15+
public class PersonalCalenderController implements PersonalCalenderSpecification {
16+
17+
@PostMapping
18+
public ApiResponse<Void> create(@RequestBody PersonalCalenderRequest request) {
19+
return ApiResponse.success(null);
20+
}
21+
22+
@GetMapping
23+
public ApiResponse<List<PersonalCalenderResponse>> findAll() {
24+
return ApiResponse.success(List.of(
25+
PersonalCalenderResponse.builder().build()
26+
));
27+
}
28+
29+
@GetMapping("/{scheduleId}")
30+
public ApiResponse<PersonalCalenderResponse> findOne(@PathVariable Long scheduleId) {
31+
return ApiResponse.success(
32+
PersonalCalenderResponse.builder().build());
33+
}
34+
35+
@PutMapping("/{scheduleId}")
36+
public ApiResponse<Void> update(@PathVariable Long scheduleId, @RequestBody PersonalCalenderRequest request) {
37+
return ApiResponse.success(null);
38+
}
39+
40+
@DeleteMapping("/{scheduleId}")
41+
public ApiResponse<Void> delete(@PathVariable Long scheduleId) {
42+
return ApiResponse.success(null);
43+
}
44+
}
45+
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package grep.neogul_coder.domain.calender.controller;
2+
3+
import grep.neogul_coder.domain.calender.controller.dto.PersonalCalenderRequest;
4+
import grep.neogul_coder.domain.calender.controller.dto.PersonalCalenderResponse;
5+
import grep.neogul_coder.global.response.ApiResponse;
6+
import io.swagger.v3.oas.annotations.Operation;
7+
import io.swagger.v3.oas.annotations.tags.Tag;
8+
import org.springframework.web.bind.annotation.PathVariable;
9+
import org.springframework.web.bind.annotation.RequestBody;
10+
11+
import java.util.List;
12+
13+
@Tag(name = "개인 캘린더", description = "개인 캘린더 API (Swagger 인터페이스)")
14+
public interface PersonalCalenderSpecification {
15+
16+
@Operation(summary = "개인 일정 생성", description = "사용자의 개인 일정을 생성합니다.")
17+
ApiResponse<Void> create(@RequestBody PersonalCalenderRequest request);
18+
19+
@Operation(summary = "개인 일정 전체 조회", description = "모든 개인 일정을 조회합니다.")
20+
ApiResponse<List<PersonalCalenderResponse>> findAll();
21+
22+
@Operation(summary = "개인 일정 상세 조회", description = "개별 일정 상세정보를 조회합니다.")
23+
ApiResponse<PersonalCalenderResponse> findOne(@PathVariable Long scheduleId);
24+
25+
@Operation(summary = "개인 일정 수정", description = "개별 일정을 수정합니다.")
26+
ApiResponse<Void> update(@PathVariable Long scheduleId, @RequestBody PersonalCalenderRequest request);
27+
28+
@Operation(summary = "개인 일정 삭제", description = "개별 일정을 삭제합니다.")
29+
ApiResponse<Void> delete(@PathVariable Long scheduleId);
30+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package grep.neogul_coder.domain.calender.controller;
2+
3+
import grep.neogul_coder.domain.calender.controller.dto.PersonalCalenderResponse;
4+
import grep.neogul_coder.domain.calender.controller.dto.TeamCalenderRequest;
5+
import grep.neogul_coder.domain.calender.controller.dto.TeamCalenderResponse;
6+
import io.swagger.v3.oas.annotations.Operation;
7+
import io.swagger.v3.oas.annotations.tags.Tag;
8+
import grep.neogul_coder.global.response.ApiResponse;
9+
10+
import org.springframework.web.bind.annotation.*;
11+
12+
import java.time.LocalDateTime;
13+
import java.util.List;
14+
15+
@RestController
16+
@RequestMapping("/api/calendar/team")
17+
public class TeamCalenderController implements TeamCalenderSpecification {
18+
19+
@PostMapping
20+
public ApiResponse<Void> create(@RequestBody TeamCalenderRequest request) {
21+
return ApiResponse.success(null);
22+
}
23+
24+
@GetMapping
25+
public ApiResponse<List<TeamCalenderResponse>> findAll() {
26+
return ApiResponse.success(List.of(
27+
TeamCalenderResponse.builder().build()
28+
));
29+
}
30+
31+
@GetMapping("/{scheduleId}")
32+
public ApiResponse<TeamCalenderResponse> findOne(@PathVariable Long scheduleId) {
33+
return ApiResponse.success(
34+
TeamCalenderResponse.builder().build());
35+
}
36+
37+
@PutMapping("/{scheduleId}")
38+
public ApiResponse<Void> update(@PathVariable Long scheduleId, @RequestBody TeamCalenderRequest request) {
39+
return ApiResponse.success(null);
40+
}
41+
42+
@DeleteMapping("/{scheduleId}")
43+
public ApiResponse<Void> delete(@PathVariable Long scheduleId) {
44+
return ApiResponse.success(null);
45+
}
46+
}
47+
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package grep.neogul_coder.domain.calender.controller;
2+
3+
import grep.neogul_coder.domain.calender.controller.dto.TeamCalenderRequest;
4+
import grep.neogul_coder.domain.calender.controller.dto.TeamCalenderResponse;
5+
import grep.neogul_coder.global.response.ApiResponse;
6+
import io.swagger.v3.oas.annotations.Operation;
7+
import io.swagger.v3.oas.annotations.tags.Tag;
8+
import org.springframework.web.bind.annotation.PathVariable;
9+
import org.springframework.web.bind.annotation.RequestBody;
10+
11+
import java.util.List;
12+
13+
@Tag(name = "팀 캘린더", description = "팀 캘린더 API (Swagger 인터페이스)")
14+
public interface TeamCalenderSpecification {
15+
16+
@Operation(summary = "팀 일정 전체 조회", description = "모든 팀 일정을 조회합니다.")
17+
ApiResponse<List<TeamCalenderResponse>> findAll();
18+
19+
@Operation(summary = "팀 일정 상세 조회", description = "특정 팀 일정 상세정보를 조회합니다.")
20+
ApiResponse<TeamCalenderResponse> findOne(@PathVariable Long scheduleId);
21+
22+
@Operation(summary = "팀 일정 생성", description = "새로운 팀 일정을 생성합니다.")
23+
ApiResponse<Void> create(@RequestBody TeamCalenderRequest request);
24+
25+
@Operation(summary = "팀 일정 수정", description = "기존 팀 일정을 수정합니다.")
26+
ApiResponse<Void> update(@PathVariable Long scheduleId, @RequestBody TeamCalenderRequest request);
27+
28+
@Operation(summary = "팀 일정 삭제", description = "기존 팀 일정을 삭제합니다.")
29+
ApiResponse<Void> delete(@PathVariable Long scheduleId);
30+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package grep.neogul_coder.domain.calender.controller.dto;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import java.time.LocalDateTime;
5+
import lombok.Getter;
6+
7+
8+
@Schema(description = "개인 캘린더 요청 DTO")
9+
@Getter
10+
public class PersonalCalenderRequest {
11+
12+
@Schema(description = "일정 제목", example = "면접 준비")
13+
private String title;
14+
15+
@Schema(description = "일정 설명", example = "코테 대비 공부")
16+
private String description;
17+
18+
@Schema(description = "시작 시간", example = "2025-07-10T09:00:00")
19+
private LocalDateTime startTime;
20+
21+
@Schema(description = "종료 시간", example = "2025-07-10T10:00:00")
22+
private LocalDateTime endTime;
23+
24+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package grep.neogul_coder.domain.calender.controller.dto;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
5+
import java.time.LocalDateTime;
6+
import lombok.Builder;
7+
import lombok.Getter;
8+
9+
@Getter
10+
@Schema(description = "개인 캘린더 응답 DTO")
11+
public class PersonalCalenderResponse {
12+
13+
@Schema(description = "일정 ID", example = "1001")
14+
private Long scheduleId;
15+
16+
@Schema(description = "사용자 ID", example = "1")
17+
private Long userId;
18+
19+
@Schema(description = "일정 제목", example = "면접 준비")
20+
private String title;
21+
22+
@Schema(description = "일정 설명", example = "코테 대비 공부")
23+
private String description;
24+
25+
@Schema(description = "시작 시간", example = "2025-07-10T09:00:00")
26+
private LocalDateTime startTime;
27+
28+
@Schema(description = "종료 시간", example = "2025-07-10T10:00:00")
29+
private LocalDateTime endTime;
30+
31+
@Builder
32+
private PersonalCalenderResponse(Long scheduleId, Long userId, String title, String description, LocalDateTime startTime, LocalDateTime endTime) {
33+
this.scheduleId = scheduleId;
34+
this.userId = userId;
35+
this.title = title;
36+
this.description = description;
37+
this.startTime = startTime;
38+
this.endTime = endTime;
39+
}
40+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package grep.neogul_coder.domain.calender.controller.dto;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import java.time.LocalDateTime;
5+
import lombok.Getter;
6+
7+
@Getter
8+
@Schema(description = "팀 캘린더 요청 DTO")
9+
public class TeamCalenderRequest {
10+
11+
@Schema(description = "일정 제목", example = "주간 회의")
12+
private String title;
13+
14+
@Schema(description = "일정 설명", example = "스터디 진행 사항 공유")
15+
private String description;
16+
17+
@Schema(description = "시작 시간", example = "2025-07-12T14:00:00")
18+
private LocalDateTime startTime;
19+
20+
@Schema(description = "종료 시간", example = "2025-07-12T15:00:00")
21+
private LocalDateTime endTime;
22+
23+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package grep.neogul_coder.domain.calender.controller.dto;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import java.time.LocalDateTime;
5+
import lombok.Builder;
6+
import lombok.Getter;
7+
8+
@Getter
9+
@Schema(description = "팀 캘린더 응답 DTO")
10+
public class TeamCalenderResponse {
11+
12+
@Schema(description = "일정 ID", example = "2001")
13+
private Long scheduleId;
14+
15+
@Schema(description = "팀 ID", example = "101")
16+
private Long teamId;
17+
18+
@Schema(description = "일정 제목", example = "스터디A")
19+
private String title;
20+
21+
@Schema(description = "일정 설명", example = "기획 회의")
22+
private String description;
23+
24+
@Schema(description = "시작 시간", example = "2025-07-12T14:00:00")
25+
private LocalDateTime startTime;
26+
27+
@Schema(description = "종료 시간", example = "2025-07-12T15:00:00")
28+
private LocalDateTime endTime;
29+
30+
@Builder
31+
private TeamCalenderResponse(Long scheduleId, Long teamId, String title, String description, LocalDateTime startTime, LocalDateTime endTime) {
32+
this.scheduleId = scheduleId;
33+
this.teamId = teamId;
34+
this.title = title;
35+
this.description = description;
36+
this.startTime = startTime;
37+
this.endTime = endTime;
38+
}
39+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package grep.neogul_coder.domain.calender.entity;
2+
3+
import grep.neogul_coder.global.entity.BaseEntity;
4+
import jakarta.persistence.*;
5+
import java.time.LocalDateTime;
6+
import lombok.Getter;
7+
8+
@Entity
9+
@Getter
10+
public class Calender extends BaseEntity {
11+
12+
@Id
13+
@GeneratedValue(strategy = GenerationType.IDENTITY)
14+
private Long id;
15+
16+
@Column(nullable = false)
17+
private LocalDateTime scheduledStart;
18+
19+
@Column(nullable = false)
20+
private LocalDateTime scheduledEnd;
21+
22+
@Column(nullable = false)
23+
private String title;
24+
25+
private String content;
26+
27+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package grep.neogul_coder.domain.calender.entity;
2+
3+
import grep.neogul_coder.domain.users.entity.User;
4+
import grep.neogul_coder.global.entity.BaseEntity;
5+
import jakarta.persistence.*;
6+
import lombok.Getter;
7+
8+
@Entity
9+
@Getter
10+
public class PersonalCalender extends BaseEntity {
11+
12+
@Id
13+
@GeneratedValue(strategy = GenerationType.IDENTITY)
14+
private Long id;
15+
16+
@ManyToOne(fetch = FetchType.LAZY)
17+
private Calender calendar;
18+
19+
@ManyToOne(fetch = FetchType.LAZY)
20+
private User user;
21+
}
22+

0 commit comments

Comments
 (0)