Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

πŸ”€ :: 곡지사항 λΆˆλŸ¬μ˜€λŠ” api #81

Merged
merged 8 commits into from
Apr 17, 2024
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@

import com.mindway.server.v2.domain.notice.entity.Notice;
import com.mindway.server.v2.domain.notice.presentation.dto.request.NoticeAddRequestDto;
import com.mindway.server.v2.domain.notice.presentation.dto.response.NoticeGetResponseDto;
import com.mindway.server.v2.domain.user.entity.User;

public interface NoticeConverter {
Notice toEntity(NoticeAddRequestDto noticeAddRequestDto, User user);

NoticeGetResponseDto toDto(Notice notice);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.mindway.server.v2.domain.notice.converter.NoticeConverter;
import com.mindway.server.v2.domain.notice.entity.Notice;
import com.mindway.server.v2.domain.notice.presentation.dto.request.NoticeAddRequestDto;
import com.mindway.server.v2.domain.notice.presentation.dto.response.NoticeGetResponseDto;
import com.mindway.server.v2.domain.user.entity.User;
import org.springframework.stereotype.Component;

Expand All @@ -16,4 +17,11 @@ public Notice toEntity(NoticeAddRequestDto noticeAddRequestDto, User user) {
.user(user)
.build();
}

public NoticeGetResponseDto toDto(Notice notice) {
return NoticeGetResponseDto.builder()
.title(notice.getTitle())
.content(notice.getContent())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.mindway.server.v2.domain.notice.exception;

import com.mindway.server.v2.global.exception.ErrorCode;
import com.mindway.server.v2.global.exception.MindWayException;

public class NotFoundNoticeException extends MindWayException {
public NotFoundNoticeException() {
super(ErrorCode.NOT_FOUND_NOTICE);
}
}
Original file line number Diff line number Diff line change
@@ -1,27 +1,33 @@
package com.mindway.server.v2.domain.notice.presentation;

import com.mindway.server.v2.domain.notice.presentation.dto.request.NoticeAddRequestDto;
import com.mindway.server.v2.domain.notice.presentation.dto.response.NoticeGetResponseDto;
import com.mindway.server.v2.domain.notice.service.NoticeAddService;
import com.mindway.server.v2.domain.notice.service.NoticeGetService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v2/notice")
public class NoticeController {

private final NoticeAddService noticeAddService;
private final NoticeGetService noticeGetService;

@PostMapping
public ResponseEntity<Void> addNotice(@Valid @RequestBody NoticeAddRequestDto noticeAddRequestDto) {
noticeAddService.execute(noticeAddRequestDto);
return ResponseEntity.status(HttpStatus.CREATED).build();
}

@GetMapping
public ResponseEntity<NoticeGetResponseDto> getNotice() {
NoticeGetResponseDto response = noticeGetService.execute();
return ResponseEntity.ok(response);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.mindway.server.v2.domain.notice.presentation.dto.response;

import lombok.Builder;
import lombok.Getter;

@Getter
@Builder
public class NoticeGetResponseDto {
private String title;
private String content;
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@

import com.mindway.server.v2.domain.notice.entity.Notice;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

public interface NoticeRepository extends JpaRepository<Notice, Long> {

@Query("SELECT n FROM Notice n WHERE n.id = (SELECT MAX(n2.id) FROM Notice n2)")
Notice findNoticeWithMaxN();

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.mindway.server.v2.domain.notice.service;

import com.mindway.server.v2.domain.notice.presentation.dto.response.NoticeGetResponseDto;

public interface NoticeGetService {
NoticeGetResponseDto execute();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.mindway.server.v2.domain.notice.service.impl;

import com.mindway.server.v2.domain.notice.converter.NoticeConverter;
import com.mindway.server.v2.domain.notice.entity.Notice;
import com.mindway.server.v2.domain.notice.exception.NotFoundNoticeException;
import com.mindway.server.v2.domain.notice.presentation.dto.response.NoticeGetResponseDto;
import com.mindway.server.v2.domain.notice.repository.NoticeRepository;
import com.mindway.server.v2.domain.notice.service.NoticeGetService;
import com.mindway.server.v2.global.annotation.ServiceWithReadOnlyTransaction;
import lombok.RequiredArgsConstructor;

@ServiceWithReadOnlyTransaction
@RequiredArgsConstructor
public class NoticeGetServiceImpl implements NoticeGetService {

private final NoticeRepository noticeRepository;
private final NoticeConverter noticeConverter;

public NoticeGetResponseDto execute() {
Notice latestNotice = noticeRepository.findNoticeWithMaxN();

if (latestNotice == null) {
throw new NotFoundNoticeException();
}

return noticeConverter.toDto(latestNotice);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
import com.mindway.server.v2.domain.user.entity.User;
import lombok.AllArgsConstructor;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.ArrayList;
import java.util.Collection;

@AllArgsConstructor
Expand All @@ -13,7 +15,11 @@ public class AuthDetails implements UserDetails {

@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return null;
SimpleGrantedAuthority simpleGrantedAuthority = new SimpleGrantedAuthority(user.getAuthority().name());

Collection<GrantedAuthority> authorities = new ArrayList<>();
authorities.add(simpleGrantedAuthority);
return authorities;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,10 @@ public enum ErrorCode {

/* goal */
EXIST_ALREADY_GOAL(400, "이미 λͺ©ν‘œ 섀정이 λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€."),
NOT_EXIST_GOAL(404, "μœ μ €κ°€ μ„€μ •ν•œ λͺ©ν‘œκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€");
NOT_EXIST_GOAL(404, "μœ μ €κ°€ μ„€μ •ν•œ λͺ©ν‘œκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€"),

/* notice */
NOT_FOUND_NOTICE(404, "λ“±λ‘λœ 곡지가 μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.");

private final int status;
private final String message;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {

// notice
.requestMatchers(HttpMethod.POST, "/api/v2/notice").hasAnyAuthority(Authority.ROLE_TEACHER.name(), Authority.ROLE_HELPER.name())
.requestMatchers(HttpMethod.GET, "/api/v2/notice").authenticated()

.anyRequest().authenticated()
)
Expand Down
Loading