Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.muji_backend.kw_muji.team.controller;

import com.muji_backend.kw_muji.common.entity.ProjectEntity;
import com.muji_backend.kw_muji.team.dto.request.ApplicantRequestDTO;
import com.muji_backend.kw_muji.team.dto.request.ProjectDetailRequestDTO;
import com.muji_backend.kw_muji.team.dto.request.ProjectStartRequestDTO;
import com.muji_backend.kw_muji.team.dto.response.MyCreatedProjectResponseDTO;
import com.muji_backend.kw_muji.team.dto.response.MyProjectResponseDTO;
import com.muji_backend.kw_muji.team.dto.response.ProjectDetailResponseDTO;
Expand All @@ -14,7 +14,6 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

Expand Down Expand Up @@ -61,20 +60,6 @@ public ResponseEntity<Map<String, Object>> getApplicants(@AuthenticationPrincipa
}
}

@PatchMapping("/select")
public ResponseEntity<Map<String, Object>> selectMember(@RequestBody ApplicantRequestDTO dto, BindingResult bindingResult) {
try {
myTeamService.validation(bindingResult, "id");
myTeamService.selectApplicant(dto.getId());

return org.springframework.http.ResponseEntity.ok().body(Map.of("code", 200, "data", true));
} catch (IllegalArgumentException e) {
return ResponseEntity.badRequest().body(Map.of("code", 400, "data", e.getMessage()));
} catch (RuntimeException e) {
return ResponseEntity.status(500).body(Map.of("code", 500, "data", "팀원 선택 오류. 잠시 후 다시 시도해주세요."));
}
}

@DeleteMapping("/delete/{projectId}")
public ResponseEntity<Map<String, Object>> deleteProject(@AuthenticationPrincipal UserEntity userInfo, @PathVariable Long projectId) {
try {
Expand Down Expand Up @@ -139,13 +124,13 @@ else if (dto.isDeleteImage()) // 팀 프로젝트 사진 삭제를 요청한 경
}
}

@PatchMapping("/start/{projectId}")
public ResponseEntity<Map<String, Object>> startProject(@AuthenticationPrincipal UserEntity userInfo, @PathVariable Long projectId) {
@PatchMapping("/start")
public ResponseEntity<Map<String, Object>> startProject(@AuthenticationPrincipal UserEntity userInfo, @RequestBody ProjectStartRequestDTO dto) {
try {
if(!myTeamService.isMyProject(projectId, userInfo))
if(!myTeamService.isMyProject(dto.getProjectId(), userInfo))
throw new IllegalArgumentException("내가 생성한 프로젝트가 아님");

myTeamService.updateStart(projectId);
myTeamService.updateStart(dto);

return org.springframework.http.ResponseEntity.ok().body(Map.of("code", 200, "data", true));
} catch (IllegalArgumentException e) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
package com.muji_backend.kw_muji.team.dto.request;

import jakarta.validation.constraints.NotEmpty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ApplicantRequestDTO {
@NotEmpty(message = "지원자 아이디가 비어있습니다.")
private Long id;
public class ProjectStartRequestDTO {
private Long projectId;
private List<Long> memberIdList; // 지원자 id 리스트
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.muji_backend.kw_muji.common.entity.UserEntity;
import com.muji_backend.kw_muji.common.entity.enums.ProjectRole;
import com.muji_backend.kw_muji.team.dto.request.ProjectDetailRequestDTO;
import com.muji_backend.kw_muji.team.dto.request.ProjectStartRequestDTO;
import com.muji_backend.kw_muji.team.dto.response.ApplicantResponseDTO;
import com.muji_backend.kw_muji.team.dto.response.MemberResponseDTO;
import com.muji_backend.kw_muji.team.dto.response.MyCreatedProjectResponseDTO;
Expand All @@ -32,6 +33,7 @@ public class MyTeamService {
private final RoleRepository roleRepo;
private final TeamRepository teamRepo;
private final AmazonS3 amazonS3;
private final TeamMailSendService teamMailSendService;

@Value("${cloud.aws.s3.bucket}")
private String bucket;
Expand Down Expand Up @@ -103,21 +105,6 @@ public void validation(BindingResult bindingResult, String fieldName) {
throw new IllegalArgumentException(Objects.requireNonNull(bindingResult.getFieldError(fieldName)).getDefaultMessage());
}

public void selectApplicant(final Long memberId) {
final Optional<ParticipationEntity> applicant = roleRepo.findById(memberId);

if(!applicant.isPresent() || applicant.get().getRole().equals(ProjectRole.CREATOR))
throw new IllegalArgumentException("확인되지 않은 유저입니다.");

if(applicant.get().getRole().equals(ProjectRole.MEMBER))
throw new IllegalArgumentException("이미 선택한 유저입니다.");

if(applicant.get().getRole().equals(ProjectRole.APPLICANT))
applicant.get().setRole(ProjectRole.MEMBER);

roleRepo.save(applicant.get());
}

public void deleteProject(final Long projectId, final UserEntity user) {
if (!roleRepo.findByProjectIdAndUsers(projectId, user).getRole().equals(ProjectRole.CREATOR))
throw new IllegalArgumentException("삭제 권한 없음");
Expand Down Expand Up @@ -184,19 +171,40 @@ else if(dto.isDeleteImage())
project.setImage(null);

if(dto.getDeadlineAt() != null)
project.setDeadlineAt(project.getDeadlineAt());
project.setDeadlineAt(dto.getDeadlineAt().atStartOfDay());

teamRepo.save(project);
}

public void updateStart(final Long projectId) {
final ProjectEntity project = teamRepo.findById(projectId).get();
public void selectApplicant(final List<Long> memberIdList) {
for (Long memberId : memberIdList) {
final Optional<ParticipationEntity> applicant = roleRepo.findById(memberId);

if(applicant.isEmpty() || applicant.get().getRole().equals(ProjectRole.CREATOR))
throw new IllegalArgumentException("확인되지 않은 유저입니다.");

if(applicant.get().getRole().equals(ProjectRole.MEMBER))
throw new IllegalArgumentException("이미 선택한 유저입니다.");

if(applicant.get().getRole().equals(ProjectRole.APPLICANT))
applicant.get().setRole(ProjectRole.MEMBER);

roleRepo.save(applicant.get());
teamMailSendService.joinEmail(applicant.get().getUsers().getEmail());
}
}

public void updateStart(final ProjectStartRequestDTO dto) {
final ProjectEntity project = teamRepo.findById(dto.getProjectId()).get();

if(!project.isStart())
project.setStart(true);
else
throw new IllegalArgumentException("이미 시작한 프로젝트");

// 팀원 선택 & 이메일 전송
selectApplicant(dto.getMemberIdList());

teamRepo.save(project);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.muji_backend.kw_muji.team.service;

import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import java.io.UnsupportedEncodingException;

@RequiredArgsConstructor
@Slf4j
@Service
public class TeamMailSendService {
private final JavaMailSender mailSender;

@Value("${spring.mail.username}")
private String username;

public void joinEmail(String email) {
String setFrom = username; // email-config에 설정한 자신의 이메일 주소를 입력
String title = "팀플 시작 알림 이메일"; // 이메일 제목
String content =
"광운 대학 생활 도우미입니다." + //html 형식으로 작성 !
"<br><br>" +
"신청하신 팀프로젝트가 시작되었습니다." +
"<br>" +
"마이페이지에서 확인 가능합니다."; //이메일 내용 삽입
mailSend(setFrom, email, title, content);
}

public void mailSend(String setFrom, String toMail, String title, String content) {
MimeMessage message = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(message,true,"utf-8");

helper.setFrom(setFrom, "광운 대학 생활 도우미");
helper.setTo(toMail);
helper.setSubject(title);
helper.setText(content,true);
mailSender.send(message);
} catch (MessagingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
}