Skip to content

Commit

Permalink
[J2KB-3rd-Season#26]feat: 관심사 생성 기능 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
enjay27 committed Jun 11, 2021
1 parent 9b8aabc commit 1c815d5
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.devin.dev.controller.subject;

import com.devin.dev.model.DefaultResponse;
import com.devin.dev.service.SubjectService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import javax.servlet.http.HttpServletRequest;

@Controller
@RequiredArgsConstructor
public class SubjectController {

private final SubjectService subjectService;

@PostMapping("/tags")
public DefaultResponse<?> addSubject(@RequestBody SubjectForm form, HttpServletRequest request) {
return subjectService.addSubject(form, request);
}

}
11 changes: 11 additions & 0 deletions src/main/java/com/devin/dev/controller/subject/SubjectForm.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.devin.dev.controller.subject;

import lombok.Data;

import java.util.List;

@Data
public class SubjectForm {

private List<String> subjects;
}
39 changes: 39 additions & 0 deletions src/main/java/com/devin/dev/service/SubjectService.java
Original file line number Diff line number Diff line change
@@ -1,21 +1,60 @@
package com.devin.dev.service;

import com.devin.dev.controller.subject.SubjectForm;
import com.devin.dev.entity.post.Subject;
import com.devin.dev.entity.user.User;
import com.devin.dev.entity.user.UserStatus;
import com.devin.dev.model.DefaultResponse;
import com.devin.dev.repository.post.PostTagRepository;
import com.devin.dev.repository.subject.SubjectRepository;
import com.devin.dev.repository.user.UserInterestRepository;
import com.devin.dev.repository.user.UserRepository;
import com.devin.dev.security.JwtAuthTokenProvider;
import com.devin.dev.utils.ResponseMessage;
import com.devin.dev.utils.StatusCode;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

@Service
@RequiredArgsConstructor
public class SubjectService {

private final SubjectRepository subjectRepository;
private final PostTagRepository postTagRepository;
private final UserRepository userRepository;
private final UserInterestRepository userInterestRepository;
private final JwtAuthTokenProvider tokenProvider;

@Transactional
public DefaultResponse<?> addSubject(SubjectForm form, HttpServletRequest request) {
String token = tokenProvider.parseToken(request);
Long userId;
if (tokenProvider.validateToken(token)) {
userId = tokenProvider.getUserId(token);
} else {
return new DefaultResponse<>(StatusCode.FAIL_AUTH, ResponseMessage.NOT_FOUND_USER);
}
Optional<User> userOptional = userRepository.findById(userId);
if (userOptional.isEmpty()) {
return new DefaultResponse<>(StatusCode.NOT_EXIST, ResponseMessage.NOT_FOUND_USER);
}
User user = userOptional.get();

if (user.getStatus() != UserStatus.ADMIN) {
return new DefaultResponse<>(StatusCode.CONDITION_FAIL, ResponseMessage.NO_AUTHORITY);
}

List<Subject> subjects = form.getSubjects().stream().map(Subject::new).collect(Collectors.toList());
subjectRepository.saveAll(subjects);

return new DefaultResponse<>(StatusCode.SUCCESS, ResponseMessage.CREATED_SUBJECT);
}

@Transactional
public DefaultResponse<?> addSubject(String name) {
Expand Down

0 comments on commit 1c815d5

Please sign in to comment.