Skip to content

Commit 8c68bda

Browse files
authoredJan 25, 2024··
✨ [FEATURE] 공고 작성 기능 개발 (#43)
1 parent afbf475 commit 8c68bda

File tree

4 files changed

+72
-5
lines changed

4 files changed

+72
-5
lines changed
 

‎src/main/java/com/sponus/sponusbe/domain/announcement/controller/AnnouncementController.java

+7-3
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,14 @@
99
import org.springframework.web.bind.annotation.RequestParam;
1010
import org.springframework.web.bind.annotation.RestController;
1111

12+
import com.sponus.sponusbe.auth.annotation.AuthOrganization;
1213
import com.sponus.sponusbe.domain.announcement.dto.AnnouncementBriefResponse;
1314
import com.sponus.sponusbe.domain.announcement.dto.AnnouncementCreateRequest;
15+
import com.sponus.sponusbe.domain.announcement.dto.AnnouncementCreateResponse;
1416
import com.sponus.sponusbe.domain.announcement.dto.AnnouncementResponse;
1517
import com.sponus.sponusbe.domain.announcement.service.AnnouncementQueryService;
1618
import com.sponus.sponusbe.domain.announcement.service.AnnouncementService;
19+
import com.sponus.sponusbe.domain.organization.entity.Organization;
1720
import com.sponus.sponusbe.global.common.ApiResponse;
1821

1922
import lombok.RequiredArgsConstructor;
@@ -48,9 +51,10 @@ public ApiResponse<AnnouncementResponse> searchAnnouncement(@RequestParam String
4851
return ApiResponse.onSuccess(announcementQueryService.searchAnnouncement(search));
4952
}
5053

51-
@PostMapping
52-
public ApiResponse<AnnouncementBriefResponse> createAnnouncement(AnnouncementCreateRequest request) {
53-
return ApiResponse.onSuccess(announcementQueryService.createAnnouncement(request));
54+
@PostMapping("/")
55+
public ApiResponse<AnnouncementCreateResponse> createAnnouncement(@AuthOrganization Organization authOrganization,
56+
AnnouncementCreateRequest request) {
57+
return ApiResponse.onSuccess(announcementService.createAnnouncement(authOrganization, request));
5458
}
5559

5660
@DeleteMapping("/{announcementId}")

‎src/main/java/com/sponus/sponusbe/domain/announcement/dto/AnnouncementCreateRequest.java

+17-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package com.sponus.sponusbe.domain.announcement.dto;
22

3+
import com.sponus.sponusbe.domain.announcement.entity.Announcement;
34
import com.sponus.sponusbe.domain.announcement.entity.enums.AnnouncementCategory;
5+
import com.sponus.sponusbe.domain.announcement.entity.enums.AnnouncementStatus;
46
import com.sponus.sponusbe.domain.announcement.entity.enums.AnnouncementType;
7+
import com.sponus.sponusbe.domain.organization.entity.Organization;
58

69
import jakarta.validation.constraints.NotBlank;
710
import jakarta.validation.constraints.NotNull;
@@ -14,6 +17,19 @@ public record AnnouncementCreateRequest(
1417
@NotNull(message = "[ERROR] 카테코리 입력은 필수 입니다.")
1518
AnnouncementCategory category,
1619
@NotBlank(message = "[ERROR] 내용 입력은 필수 입니다.")
17-
String content
20+
String content,
21+
22+
AnnouncementStatus status
1823
) {
24+
25+
public Announcement toEntity(Organization writer) {
26+
return Announcement.builder()
27+
.writer(writer)
28+
.title(title)
29+
.type(type)
30+
.category(category)
31+
.content(content)
32+
.status(status)
33+
.build();
34+
}
1935
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.sponus.sponusbe.domain.announcement.dto;
2+
3+
import com.sponus.sponusbe.domain.announcement.entity.Announcement;
4+
import com.sponus.sponusbe.domain.announcement.entity.enums.AnnouncementCategory;
5+
import com.sponus.sponusbe.domain.announcement.entity.enums.AnnouncementStatus;
6+
import com.sponus.sponusbe.domain.announcement.entity.enums.AnnouncementType;
7+
8+
import lombok.Builder;
9+
10+
@Builder
11+
public record AnnouncementCreateResponse(
12+
Long id,
13+
Long writerId,
14+
String title,
15+
AnnouncementType type,
16+
AnnouncementCategory category,
17+
String content,
18+
AnnouncementStatus status,
19+
Long viewCount
20+
) {
21+
public static AnnouncementCreateResponse from(Announcement announcement) {
22+
return AnnouncementCreateResponse.builder()
23+
.id(announcement.getId())
24+
.writerId(announcement.getWriter().getId())
25+
.title(announcement.getTitle())
26+
.type(announcement.getType())
27+
.category(announcement.getCategory())
28+
.content(announcement.getContent())
29+
.status(AnnouncementStatus.POSTED)
30+
.viewCount(announcement.getViewCount())
31+
.build();
32+
}
33+
}

‎src/main/java/com/sponus/sponusbe/domain/announcement/service/AnnouncementService.java

+15-1
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,26 @@
33
import org.springframework.stereotype.Service;
44
import org.springframework.transaction.annotation.Transactional;
55

6+
import com.sponus.sponusbe.domain.announcement.dto.AnnouncementCreateRequest;
7+
import com.sponus.sponusbe.domain.announcement.dto.AnnouncementCreateResponse;
8+
import com.sponus.sponusbe.domain.announcement.entity.Announcement;
9+
import com.sponus.sponusbe.domain.announcement.repository.AnnouncementRepository;
10+
import com.sponus.sponusbe.domain.organization.entity.Organization;
11+
612
import lombok.RequiredArgsConstructor;
713
import lombok.extern.slf4j.Slf4j;
814

915
@Slf4j
1016
@RequiredArgsConstructor
11-
@Transactional(readOnly = true)
17+
@Transactional
1218
@Service
1319
public class AnnouncementService {
20+
21+
private final AnnouncementRepository announcementRepository;
22+
23+
public AnnouncementCreateResponse createAnnouncement(Organization authOrganization,
24+
AnnouncementCreateRequest request) {
25+
final Announcement announcement = announcementRepository.save(request.toEntity(authOrganization));
26+
return AnnouncementCreateResponse.from(announcement);
27+
}
1428
}

0 commit comments

Comments
 (0)
Please sign in to comment.