diff --git a/.gitignore b/.gitignore
index 549e00a..a6bf458 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,9 @@ target/
!**/src/main/**/target/
!**/src/test/**/target/
+*.yaml
+*.zip
+
### STS ###
.apt_generated
.classpath
diff --git a/pom.xml b/pom.xml
index ef5396b..39a3f31 100644
--- a/pom.xml
+++ b/pom.xml
@@ -136,6 +136,30 @@
2.12.4
+
+
+ org.springframework.cloud
+ spring-cloud-starter-aws
+ 2.0.1.RELEASE
+
+
+ org.springframework.cloud
+ spring-cloud-aws-context
+ 1.2.1.RELEASE
+
+
+ org.springframework.cloud
+ spring-cloud-aws-autoconfigure
+ 1.2.1.RELEASE
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/hebe/AmazonS3Config.java b/src/main/java/com/hebe/AmazonS3Config.java
new file mode 100644
index 0000000..8ab8ade
--- /dev/null
+++ b/src/main/java/com/hebe/AmazonS3Config.java
@@ -0,0 +1,33 @@
+package com.hebe;
+
+import com.amazonaws.auth.AWSStaticCredentialsProvider;
+import com.amazonaws.auth.BasicAWSCredentials;
+import com.amazonaws.services.s3.AmazonS3Client;
+import com.amazonaws.services.s3.AmazonS3ClientBuilder;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+
+@Configuration
+public class AmazonS3Config {
+
+ @Value("${cloud.aws.credentials.access-key}")
+ private String accessKey;
+
+ @Value("${cloud.aws.credentials.secret-key}")
+ private String secretKey;
+
+ @Value("${cloud.aws.region.static}")
+ private String region;
+
+ @Bean
+ @Primary
+ public AmazonS3Client amazonS3Client() {
+ BasicAWSCredentials awsCreds = new BasicAWSCredentials(accessKey, secretKey);
+ return (AmazonS3Client) AmazonS3ClientBuilder.standard()
+ .withRegion(region)
+ .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
+ .build();
+ }
+}
diff --git a/src/main/java/com/hebe/controller/DiaryController.java b/src/main/java/com/hebe/controller/DiaryController.java
index fc45017..00ea440 100644
--- a/src/main/java/com/hebe/controller/DiaryController.java
+++ b/src/main/java/com/hebe/controller/DiaryController.java
@@ -1,5 +1,6 @@
package com.hebe.controller;
+import com.hebe.imgUpload.ImageManagerService;
import com.hebe.jwt.model.UserEntity;
import com.hebe.service.DiaryService;
import com.hebe.vo.*;
@@ -18,6 +19,9 @@ public class DiaryController {
@Autowired
private DiaryService DiaryService;
+ @Autowired
+ private ImageManagerService ImageManagerService;
+
// 특정 유저 게시글 조회
@PostMapping("/diary")
public List selUserDiary(UserEntity param) {
@@ -42,20 +46,18 @@ public UserEntity selUserInfo(UserEntity param) {
return userInfo;
}
- // 글쓰기 버튼 클릭 시 임의의 글 생성 (이미지 폴더 담아두기용)
- @PostMapping("/preWrite")
- public int preWriteDiary(DiaryEntity param) {
- return DiaryService.preWriteDiary(param);
- }
-
// 최신 글 iboard 가져오기
@PostMapping("/diary/recent")
public int getRecentIboard() { return DiaryService.getRecentIboard(); }
// 이미지 업로드
@PostMapping("/diaryImg")
- public String uploadImage(MultipartFile img, int iboard, int iuser) {
- return DiaryService.uploadImage(img, iboard, iuser); }
+ public String uploadImage(MultipartFile img, int iboard, int iuser) { // 기존엔 String 타입
+ String filePath = "img/" + iuser + "/" + iboard;
+ return ImageManagerService.createAndUploadFile(img, filePath);
+
+ // return DiaryService.uploadImage(img, iboard, iuser);
+ }
// 글 작성
@PostMapping("/write")
@@ -72,13 +74,27 @@ public int cancelDiary(DiaryEntity param) {
return DiaryService.cancelDiary(param);
}
+ // 글 수정
+ @PostMapping("/update")
+ public int updateDiary(DiaryEntity param) {
+ System.out.println("/api/update 작동");
+ // 수정할 때 기존에 있던 이미지 삭제 시 s3에서 이미지 삭제
+
+ return DiaryService.updateDiary(param);
+ }
+
// detail 조회
@PostMapping("/detail")
public DetailDomain detailDiary(DiaryEntity param) { return DiaryService.detailDiary(param); }
// 글 삭제
@PostMapping("/delete")
- public int deleteDiary(DiaryEntity param) { return DiaryService.deleteDiary(param); }
+ public int deleteDiary(DiaryEntity param) {
+ String filePath = "img/" + param.getIuser() + "/" + param.getIboard();
+ ImageManagerService.deleteFile(filePath); // 글 삭제 시 s3에 이미지 삭제
+
+ return DiaryService.deleteDiary(param);
+ }
// 댓글 리스트 조회
@PostMapping("/cmt/list")
diff --git a/src/main/java/com/hebe/controller/TodoController.java b/src/main/java/com/hebe/controller/TodoController.java
new file mode 100644
index 0000000..e163854
--- /dev/null
+++ b/src/main/java/com/hebe/controller/TodoController.java
@@ -0,0 +1,80 @@
+package com.hebe.controller;
+
+import com.hebe.service.TodoService;
+import com.hebe.vo.CalendarDTO;
+import com.hebe.vo.TodoDTO;
+import com.hebe.vo.TodoDTOList;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api")
+public class TodoController {
+
+ @Autowired
+ private TodoService TodoService;
+
+ // 접속유저의 전체 todolist 조회
+ // RequestBody는 post형식으로 json 받을 때 사용
+ @PostMapping("/todo")
+ public List selTodoList(TodoDTO param) {
+ List list = TodoService.selTodoList(param);
+ System.out.println("TodoList select : " + list);
+ return list;
+ }
+
+ // 접속유저의 날짜별 todolist 조회
+ @GetMapping("/todo")
+ public List dayTodoList(TodoDTO param) {
+ List list = TodoService.dayTodoList(param);
+ System.out.println("day : " + param.getRegdt());
+ for(int i = 0; i < list.toArray().length; i++) {
+ if (param.getRegdt().equals(list.get(i).getRegdt())) {
+ System.out.println("iuser : " + param.getIuser());
+ System.out.println(param.getRegdt() + " : " + list.get(i));
+ } else {
+ list.remove(i);
+ }
+ }
+ System.out.println(param.getRegdt() + "[list] : "+ list);
+ return list;
+ }
+
+ @PostMapping("/todo/regdt")
+ public List monthData(CalendarDTO param) {
+ System.out.println(param.getMonth());
+ return TodoService.monthData(param);
+ }
+
+// @PostMapping("/todo/cal") // 안쓰는ㄷ...듯?
+// public String[] calAllList(TodoDTO param){
+// List list = TodoService.calAllList(param);
+// String[] strArr = new String[20];
+// for(int i=0; i < TodoService.calAllList(param).toArray().length; i++){
+// strArr[i] = list.get(i).getRegdt();
+// System.out.println(list.get(i).getRegdt());
+// };
+// return strArr;
+// }
+
+ // 접속유저의 todoList 작성
+ @PostMapping("/todo/insert")
+ public void insTodoList(@RequestBody TodoDTOList param) {
+ System.out.println(param);
+ TodoService.insTodoList(param);
+ }
+
+ // 접속유저의 todoList 수정
+ @PostMapping("/todo/update")
+ public void update(@RequestBody TodoDTO param) {
+ TodoService.updTodoList(param);
+ }
+
+ // 접속유저의 todoList 삭제
+ @PostMapping("/todo/delete")
+ public void delTodoList(@RequestBody TodoDTOList param) {
+ TodoService.delTodoList(param);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/hebe/imgUpload/FileManager.java b/src/main/java/com/hebe/imgUpload/FileManager.java
new file mode 100644
index 0000000..a8252d9
--- /dev/null
+++ b/src/main/java/com/hebe/imgUpload/FileManager.java
@@ -0,0 +1,24 @@
+package com.hebe.imgUpload;
+
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Optional;
+
+@Component
+public class FileManager {
+ // MultipartFile을 File로 변형 후 로컬로 저장, 파일 객체를 리턴
+ public Optional convertMultipartFileToFile(MultipartFile file) throws IOException {
+ File convertFile = new File(file.getOriginalFilename());
+ if (convertFile.createNewFile()) {
+ try (FileOutputStream fos = new FileOutputStream(convertFile)) {
+ fos.write(file.getBytes());
+ }
+ return Optional.of(convertFile);
+ }
+ return Optional.empty();
+ }
+}
diff --git a/src/main/java/com/hebe/imgUpload/ImageManagerService.java b/src/main/java/com/hebe/imgUpload/ImageManagerService.java
new file mode 100644
index 0000000..a6b781b
--- /dev/null
+++ b/src/main/java/com/hebe/imgUpload/ImageManagerService.java
@@ -0,0 +1,61 @@
+package com.hebe.imgUpload;
+
+import com.amazonaws.AmazonServiceException;
+import com.amazonaws.SdkClientException;
+import com.amazonaws.services.s3.AmazonS3;
+import com.amazonaws.services.s3.model.DeleteObjectRequest;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.io.FilenameUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Optional;
+import java.util.UUID;
+
+@Service
+@RequiredArgsConstructor
+public class ImageManagerService {
+
+ @Autowired
+ private FileManager fileManager;
+
+ @Autowired
+ private UploadImageS3 uploadImageS3;
+
+ // 임시 파일 생성 & 업데이트 & 임시 파일 삭제
+ public String createAndUploadFile(MultipartFile mf, String filePath) {
+ String ext = FilenameUtils.getExtension(mf.getOriginalFilename());
+ String saveFileName = UUID.randomUUID().toString() + "." + ext;
+
+ // 파일 생성
+ File uploadFile = null;
+ try {
+ Optional uploadFileOpt = fileManager.convertMultipartFileToFile(mf);
+ if (uploadFileOpt.isEmpty()) {
+ System.out.println("파일 변환에 실패했습니다.");
+ }
+ uploadFile = uploadFileOpt.get();
+
+ // 파일 업로드
+ uploadImageS3.upload(uploadFile, filePath, saveFileName);
+ } catch (IOException e) {
+ e.printStackTrace();
+ System.out.println("파일을 업로드 하던 중 에러가 발생했습니다.");
+ } finally {
+ // 파일 삭제
+ if (uploadFile != null) {
+ uploadFile.delete();
+ }
+ }
+ return saveFileName;
+ }
+
+ // 글 삭제 시 해당 글에 있는 s3 이미지 삭제
+ public void deleteFile(String filePath) {
+ uploadImageS3.delete(filePath);
+ }
+}
diff --git a/src/main/java/com/hebe/imgUpload/UploadImageS3.java b/src/main/java/com/hebe/imgUpload/UploadImageS3.java
new file mode 100644
index 0000000..203c991
--- /dev/null
+++ b/src/main/java/com/hebe/imgUpload/UploadImageS3.java
@@ -0,0 +1,46 @@
+package com.hebe.imgUpload;
+
+import com.amazonaws.AmazonServiceException;
+import com.amazonaws.SdkClientException;
+import com.amazonaws.services.s3.AmazonS3;
+import com.amazonaws.services.s3.AmazonS3Client;
+import com.amazonaws.services.s3.model.CannedAccessControlList;
+import com.amazonaws.services.s3.model.DeleteObjectRequest;
+import com.amazonaws.services.s3.model.PutObjectRequest;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+
+@Component
+@RequiredArgsConstructor
+public class UploadImageS3 {
+
+ private final AmazonS3Client amazonS3;
+
+ @Value("${cloud.aws.s3.bucket}")
+ private String bucket;
+
+ public String upload(File uploadFile, String filePath, String saveFileName) {
+ String fileName = filePath + "/" + saveFileName;
+ amazonS3.putObject(new PutObjectRequest(bucket, fileName, uploadFile)
+ .withCannedAcl(CannedAccessControlList.PublicRead));
+
+ return fileName;
+ }
+
+ public void delete(String filePath) {
+ try {
+ //Delete 객체 생성
+ DeleteObjectRequest deleteObjectRequest = new DeleteObjectRequest(bucket, filePath);
+ //Delete
+ amazonS3.deleteObject(deleteObjectRequest);
+ System.out.println(String.format("[%s] deletion complete", filePath));
+ } catch (AmazonServiceException e) {
+ e.printStackTrace();
+ } catch (SdkClientException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/main/java/com/hebe/jwt/config/SecurityConfig.java b/src/main/java/com/hebe/jwt/config/SecurityConfig.java
index d739e78..44cdc1f 100644
--- a/src/main/java/com/hebe/jwt/config/SecurityConfig.java
+++ b/src/main/java/com/hebe/jwt/config/SecurityConfig.java
@@ -58,8 +58,18 @@ protected void configure(HttpSecurity http) throws Exception {
.httpBasic().disable(); // 기본 인증 방식 사용 x
http.authorizeRequests()
- .antMatchers("/api/main/**", "/api/user/**", "/api/oauth/**").permitAll()
- .anyRequest().authenticated();
+// .antMatchers(
+// "/api/main/**"
+// , "/api/user/**"
+// , "/api/oauth/**"
+// , "/api/detail"
+// , "/api/cmt/list"
+// , "/api/search"
+// , "/api/diary"
+// , "/api/diary/**"
+// ).permitAll()
+// .anyRequest().authenticated();
+ .antMatchers("/api/**").permitAll();
http.formLogin().disable();
diff --git a/src/main/java/com/hebe/jwt/controller/UserController.java b/src/main/java/com/hebe/jwt/controller/UserController.java
index 83d3a90..d7916cd 100644
--- a/src/main/java/com/hebe/jwt/controller/UserController.java
+++ b/src/main/java/com/hebe/jwt/controller/UserController.java
@@ -2,8 +2,8 @@
import com.hebe.jwt.model.UserDTO;
import com.hebe.jwt.model.UserEntity;
-import com.hebe.jwt.service.MailSendService;
import com.hebe.jwt.service.UserService;
+import com.hebe.jwt.service.MailSendService;
import com.hebe.jwt.util.CookieUtil;
import com.hebe.jwt.util.JwtUtil;
import org.springframework.beans.factory.annotation.Autowired;
@@ -27,65 +27,41 @@ public class UserController {
@PostMapping("/joinAuth")
public String joinAuth(@RequestBody UserDTO param) {
String authKey = "1";
-
- System.out.println("username : " + param.getUsername());
-
int result = userService.selUsername(param.getUsername());
-
- System.out.println("username result : " + result);
-
if(result == 0) {
- authKey = mailSendService.sendMail(param.getUsername());
- return authKey;
+ return mailSendService.sendMail(param.getUsername());
}
return authKey;
}
@PostMapping("/nickname")
public int nickname(@RequestBody UserEntity userEntity) {
- System.out.println("nickname : " + userEntity.getNickname());
-
- int result = userService.selNickname(userEntity.getNickname());
-
- System.out.println("nickname result : " + result);
-
- return result;
+ return userService.selNickname(userEntity.getNickname());
}
@PostMapping("/join")
public void join(@RequestBody UserEntity userEntity){
- System.out.println(userEntity.getUsername());
- System.out.println(userEntity.getPassword());
- System.out.println(userEntity.getNickname());
userService.join(userEntity);
}
@PostMapping("/login")
- public ResponseEntity> login(@RequestBody UserDTO param, HttpServletResponse res) {
- System.out.println("로그인 컨트롤러 진입!");
-
+ public ResponseEntity> login(@RequestBody UserEntity param, HttpServletResponse res) {
authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(param.getUsername(), param.getPassword()));
-
UserEntity userEntity = userService.login(param, res);
-
userEntity.setPassword(null);
-
- System.out.println("로그인 정보 : " + userEntity);
-
+ System.out.println("로그인");
return ResponseEntity.ok(userEntity);
}
@PostMapping("/logout")
public void logout(HttpServletResponse res) {
- System.out.println("로그아웃 컨트롤러 진입!");
-
Cookie accessToken = cookieUtil.createCookie(JwtUtil.ACCESS_TOKEN_NAME, null);
accessToken.setMaxAge(0);
Cookie refreshToken = cookieUtil.createCookie(JwtUtil.REFRESH_TOKEN_NAME, null);
refreshToken.setMaxAge(0);
-
res.addCookie(accessToken);
res.addCookie(refreshToken);
+ System.out.println("로그아웃");
}
@PostMapping("/profileMod")
@@ -100,10 +76,16 @@ public ResponseEntity> profileMod(@RequestParam(value="profileimg", required =
user.setProfileimg(img);
}
- System.out.println(user);
userService.profileMod(user);
user.setPassword("");
return ResponseEntity.ok(user);
}
+
+ @PostMapping(value = "/oauth")
+ public ResponseEntity> apiLogin(@RequestBody UserEntity param, HttpServletResponse res) {
+ UserEntity user = userService.apiLogin(param, res);
+ user.setPassword(null);
+ return ResponseEntity.ok(user);
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/hebe/jwt/mapper/UserMapper.java b/src/main/java/com/hebe/jwt/mapper/UserMapper.java
index 9c35d59..08cee40 100644
--- a/src/main/java/com/hebe/jwt/mapper/UserMapper.java
+++ b/src/main/java/com/hebe/jwt/mapper/UserMapper.java
@@ -1,5 +1,6 @@
package com.hebe.jwt.mapper;
+import com.hebe.jwt.model.UserDTO;
import com.hebe.jwt.model.UserEntity;
import org.apache.ibatis.annotations.Mapper;
@@ -8,4 +9,5 @@ public interface UserMapper {
int selUsername(String username);
int selNickname(String nickname);
int updUser(UserEntity user);
+ UserEntity selNameProvider(UserEntity user);
}
\ No newline at end of file
diff --git a/src/main/java/com/hebe/jwt/model/UserDTO.java b/src/main/java/com/hebe/jwt/model/UserDTO.java
index 729cd4b..03a083e 100644
--- a/src/main/java/com/hebe/jwt/model/UserDTO.java
+++ b/src/main/java/com/hebe/jwt/model/UserDTO.java
@@ -6,4 +6,5 @@
public class UserDTO {
private String username;
private String password;
+ private String provider;
}
diff --git a/src/main/java/com/hebe/jwt/model/UserEntity.java b/src/main/java/com/hebe/jwt/model/UserEntity.java
index 5d67d60..48caab6 100644
--- a/src/main/java/com/hebe/jwt/model/UserEntity.java
+++ b/src/main/java/com/hebe/jwt/model/UserEntity.java
@@ -4,6 +4,7 @@
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
+import org.hibernate.annotations.ColumnDefault;
import javax.persistence.*;
@@ -28,11 +29,12 @@ public class UserEntity {
@Column(length = 10, unique = true, nullable = false)
private String nickname;
+ @Column(length = 100, nullable = false)
private String profileimg;
- @Column(length = 100)
+ @Column(length = 100, nullable = false)
private String introduction;
- @Column
+ @Column(length = 10, nullable = false)
private String provider;
}
diff --git a/src/main/java/com/hebe/jwt/service/PrincipalDetailService.java b/src/main/java/com/hebe/jwt/service/PrincipalDetailService.java
index 793dc0a..25f7a41 100644
--- a/src/main/java/com/hebe/jwt/service/PrincipalDetailService.java
+++ b/src/main/java/com/hebe/jwt/service/PrincipalDetailService.java
@@ -17,9 +17,7 @@ public class PrincipalDetailService implements UserDetailsService {
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
- System.out.println("PrincipalDetailService의 loadUserByUsername 실행");
UserEntity userEntity = userRepository.findByUsername(username);
- System.out.println("userEntity : " + userEntity);
return new PrincipalDetails(userEntity);
}
}
\ No newline at end of file
diff --git a/src/main/java/com/hebe/jwt/service/UserService.java b/src/main/java/com/hebe/jwt/service/UserService.java
index 30c25b7..5a6a0ef 100644
--- a/src/main/java/com/hebe/jwt/service/UserService.java
+++ b/src/main/java/com/hebe/jwt/service/UserService.java
@@ -1,20 +1,23 @@
package com.hebe.jwt.service;
import com.hebe.jwt.mapper.UserMapper;
-import com.hebe.jwt.model.UserDTO;
import com.hebe.jwt.model.UserEntity;
import com.hebe.jwt.repository.UserRepository;
import com.hebe.jwt.util.CookieUtil;
import com.hebe.jwt.util.JwtUtil;
import com.hebe.jwt.util.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
+import java.util.UUID;
@Service
public class UserService {
@@ -23,6 +26,8 @@ public class UserService {
@Autowired private JwtUtil jwtUtil;
@Autowired private CookieUtil cookieUtil;
@Autowired private RedisUtil redisUtil;
+ @Autowired private AuthenticationManager authenticationManager;
+ @Autowired private PasswordEncoder passwordEncoder;
public int selUsername(String username) {
int result = userMapper.selUsername(username);
@@ -44,9 +49,39 @@ public void join(UserEntity user) {
userRepository.save(user);
}
- public UserEntity login(UserDTO user, HttpServletResponse res) {
- System.out.println("AuthService 진입!");
- UserEntity userEntity = userRepository.findByUsername(user.getUsername());
+ public UserEntity login(UserEntity user, HttpServletResponse res) {
+ UserEntity userEntity = userMapper.selNameProvider(user);
+ jwtCookie(userEntity, res);
+ return userEntity;
+ }
+
+ public UserEntity apiLogin(UserEntity user, HttpServletResponse res) {
+ UserEntity userEntity = userMapper.selNameProvider(user);
+
+ if (userEntity == null && !user.getProvider().equals(userEntity.getProvider())) {
+ String uuid = UUID.randomUUID().toString().toUpperCase();
+ String nickname = uuid.substring(uuid.length() - 6);
+
+ UserEntity newUser = new UserEntity();
+ newUser.setUsername(user.getUsername());
+ newUser.setPassword(passwordEncoder.encode(user.getPassword()));
+ newUser.setProfileimg(user.getProfileimg());
+ newUser.setNickname(nickname);
+ newUser.setIntroduction("한 줄 소개");
+ newUser.setProvider(user.getProvider());
+
+ userRepository.save(newUser);
+ userEntity = newUser;
+ }
+
+ authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(user.getUsername(), user.getPassword()));
+
+ jwtCookie(userEntity, res);
+
+ return userEntity;
+ }
+
+ public void jwtCookie(UserEntity userEntity, HttpServletResponse res) {
String token = jwtUtil.generateToken(userEntity);
String refreshJwt = jwtUtil.generateRefreshToken(userEntity);
Cookie accessToken = cookieUtil.createCookie(JwtUtil.ACCESS_TOKEN_NAME, token);
@@ -54,21 +89,15 @@ public UserEntity login(UserDTO user, HttpServletResponse res) {
redisUtil.setDataExpire(refreshJwt, userEntity.getUsername(), JwtUtil.REFRESH_TOKEN_VALIDATION_SECOND);
res.addCookie(accessToken);
res.addCookie(refreshToken);
- return userEntity;
}
public String fileToString(MultipartFile file, int iuser) {
- String path = "C:\\study\\practice\\springboot\\HEBE-prac\\real\\HEBE-app_9\\public\\img\\user\\" + iuser + "\\profile";
-
+ String path = "C:\\study\\practice\\springboot\\HEBE-prac\\real\\HEBE-app_10\\public\\img\\user\\" + iuser + "\\profile";
File dir = new File(path);
-
if(!dir.exists()) { dir.mkdirs(); }
-
File target = new File(path + "/" + iuser + ".jpg");
-
try { file.transferTo(target); }
catch (Exception e) { e.printStackTrace(); }
-
return "/img/user/" + iuser + "/profile/" + iuser + ".jpg";
}
diff --git a/src/main/java/com/hebe/mapper/DiaryMapper.java b/src/main/java/com/hebe/mapper/DiaryMapper.java
index 8b6124b..877d72b 100644
--- a/src/main/java/com/hebe/mapper/DiaryMapper.java
+++ b/src/main/java/com/hebe/mapper/DiaryMapper.java
@@ -22,6 +22,9 @@ public interface DiaryMapper {
// 글 작성
int writeDiary(DiaryEntity param);
+ // 글 수정
+ int updateDiary(DiaryEntity param);
+
// 글쓰기 버튼 클릭 시 임의의 글 생성 (이미지 폴더 담아두기용)
int preWriteDiary(DiaryEntity param);
diff --git a/src/main/java/com/hebe/mapper/TodoMapper.java b/src/main/java/com/hebe/mapper/TodoMapper.java
new file mode 100644
index 0000000..9308ee0
--- /dev/null
+++ b/src/main/java/com/hebe/mapper/TodoMapper.java
@@ -0,0 +1,31 @@
+package com.hebe.mapper;
+
+import com.hebe.vo.CalendarDTO;
+import com.hebe.vo.TodoDTO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface TodoMapper {
+
+ // 접속유저의 전체 todolist 조회
+ List selTodoList(TodoDTO param);
+
+ // 접속유저의 날짜별 todolist 조회
+ List dayTodoList(TodoDTO param);
+
+ List monthData(CalendarDTO param);
+
+ List calAllList(TodoDTO param);
+
+ // 접속유저의 todoList 작성
+ void insTodoList(TodoDTO param);
+
+ // 접속유저의 todoList 수정
+ void updTodoList(TodoDTO param);
+
+ // 접속유저의 todoList 삭제
+ void delTodoList(TodoDTO param);
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/hebe/service/DiaryService.java b/src/main/java/com/hebe/service/DiaryService.java
index f3e5be3..20173f9 100644
--- a/src/main/java/com/hebe/service/DiaryService.java
+++ b/src/main/java/com/hebe/service/DiaryService.java
@@ -1,16 +1,13 @@
package com.hebe.service;
+import com.hebe.imgUpload.UploadImageS3;
import com.hebe.jwt.model.UserEntity;
import com.hebe.mapper.DiaryMapper;
import com.hebe.vo.*;
-import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
-import java.io.File;
import java.util.List;
-import java.util.UUID;
@Service
public class DiaryService {
@@ -18,6 +15,9 @@ public class DiaryService {
@Autowired
private DiaryMapper DiaryMapper;
+ @Autowired
+ private UploadImageS3 UploadImageS3;
+
// 특정 유저 게시글 조회
public List selUserDiary(UserEntity param) { return DiaryMapper.selUserDiary(param); }
@@ -27,61 +27,19 @@ public class DiaryService {
// 검색한 유저 정보 가져오기
public UserEntity selUserInfo(UserEntity param) { return DiaryMapper.selUserInfo(param); }
- // 글쓰기 버튼 클릭 시 임의의 글 생성 (이미지 폴더 담아두기용)
- public int preWriteDiary(DiaryEntity param) {
- // 임의의 글 생성, 결과 담아둠
- int result = DiaryMapper.preWriteDiary(param);
- System.out.println("result : " + result);
-
- // 유저 - iboard 이미지 폴더 생성
- int recentIboard = DiaryMapper.getMostRecent().getIboard();
-
- final String PATH = "C:/Users/82109/Desktop/project/hebe-react/public/img/" + param.getIuser() + "/" + recentIboard;
- File folder = new File(PATH);
- folder.mkdirs();
-
- return result;
- }
-
// 최신 글 iboard 가져오기
public int getRecentIboard() { return DiaryMapper.getMostRecent().getIboard(); }
- // 이미지 업로드 - 글쓰기 (write)
- public String uploadImage(MultipartFile img, int iboard, int iuser) {
- String ext = FilenameUtils.getExtension(img.getOriginalFilename());
- String fileNm = UUID.randomUUID().toString() + "." + ext;
-
- int temp = iboard; // 기존 글에 새로 이미지를 추가할 경우 => 기존 폴더(iboard)에 추가
- if (iboard == 0) { // 수정이 아닌 새로 글 작성할 경우
- temp = DiaryMapper.getMostRecent().getIboard();
- }
-
- // 나중에 로그인, 회원가입 완성하면 1 대신에 유저 토큰으로 iuser 값을 가지고 와야 함
- File target = new File("C:/Users/82109/Desktop/project/hebe-react/public/img/" + iuser + "/" + temp + "/" + fileNm);
- try { img.transferTo(target); } catch (Exception e) { e.printStackTrace(); }
-
- return fileNm;
- }
-
// 글 작성
public int writeDiary(DiaryEntity param) { return DiaryMapper.writeDiary(param); }
+ // 글 수정
+ public int updateDiary(DiaryEntity param) { return DiaryMapper.updateDiary(param); }
+
// 글 작성 취소
public int cancelDiary(DiaryEntity param) {
- File target = new File("C:/Users/82109/Desktop/project/hebe-react/public/img/" + param.getIuser() + "/" + param.getIboard());
- if (target.exists()) {
- File[] imgList = target.listFiles();
- for (int i = 0; i< imgList.length; i++) {
- imgList[i].delete();
- }
- if (target.delete()) {
- System.out.println("폴더 삭제 성공");
- } else {
- System.out.println("폴더 삭제 실패");
- }
- } else {
- System.out.println("폴더가 존재하지 않습니다.");
- }
+ String dirPath = "img/" + param.getIuser() + "/" + param.getIboard();
+ // 작성 취소 시 업로드한 이미지 삭제시키기
return DiaryMapper.deleteDiary(param);
}
@@ -90,7 +48,9 @@ public int cancelDiary(DiaryEntity param) {
public DetailDomain detailDiary(DiaryEntity param) { return DiaryMapper.detailDiary(param); }
// 글 삭제
- public int deleteDiary(DiaryEntity param) { return DiaryMapper.deleteDiary(param); }
+ public int deleteDiary(DiaryEntity param) {
+ return DiaryMapper.deleteDiary(param);
+ }
// 댓글 리스트 조회
public List cmtList(DiaryEntity param) { return DiaryMapper.cmtList(param); }
diff --git a/src/main/java/com/hebe/service/ImageService.java b/src/main/java/com/hebe/service/ImageService.java
new file mode 100644
index 0000000..f534f53
--- /dev/null
+++ b/src/main/java/com/hebe/service/ImageService.java
@@ -0,0 +1,74 @@
+package com.hebe.service;
+
+import com.amazonaws.AmazonServiceException;
+import com.amazonaws.SdkClientException;
+import com.amazonaws.auth.AWSCredentials;
+import com.amazonaws.auth.AWSStaticCredentialsProvider;
+import com.amazonaws.auth.BasicAWSCredentials;
+import com.amazonaws.regions.Regions;
+import com.amazonaws.services.s3.AmazonS3;
+import com.amazonaws.services.s3.AmazonS3ClientBuilder;
+import com.amazonaws.services.s3.model.DeleteObjectRequest;
+import com.amazonaws.services.s3.model.PutObjectRequest;
+import lombok.experimental.Delegate;
+import org.springframework.beans.factory.annotation.Value;
+
+import java.io.File;
+
+public class ImageService {
+
+ // Amazon-s3-sdk
+ private AmazonS3 s3Client;
+
+ @Value("${cloud.aws.credentials.access-key}")
+ private String accessKey;
+
+ @Value("${cloud.aws.credentials.secret-key}")
+ private String secretKey;
+
+ @Value("${cloud.aws.region.static}")
+ private String region;
+
+ @Value("${aws.s3.image.bucket}")
+ private String bucket;
+
+ // aws S3 client 생성
+ private void createS3Client() {
+ AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
+ this.s3Client = AmazonS3ClientBuilder
+ .standard()
+ .withCredentials(new AWSStaticCredentialsProvider(credentials))
+ .build();
+ }
+
+ private void uploadToS3(PutObjectRequest putObjectRequest) {
+ try {
+ this.s3Client.putObject(putObjectRequest);
+ System.out.println(String.format("[%s] upload complete", putObjectRequest.getKey()));
+ } catch (AmazonServiceException e) {
+ e.printStackTrace();
+ } catch (SdkClientException e) {
+ e.printStackTrace();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void upload(File file, String key) {
+ uploadToS3(new PutObjectRequest(this.bucket, key, file));
+ }
+
+ public void delete(String key) {
+ try {
+ // delete 객체 생성
+ DeleteObjectRequest deleteObjectRequest = new DeleteObjectRequest(this.bucket, key);
+ // delete
+ this.s3Client.deleteObject(deleteObjectRequest);
+ System.out.println(String.format("[%s] deletion complete", key));
+ } catch (AmazonServiceException e) {
+ e.printStackTrace();
+ } catch (SdkClientException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/main/java/com/hebe/service/TodoService.java b/src/main/java/com/hebe/service/TodoService.java
new file mode 100644
index 0000000..11c12e6
--- /dev/null
+++ b/src/main/java/com/hebe/service/TodoService.java
@@ -0,0 +1,56 @@
+package com.hebe.service;
+
+import com.hebe.mapper.TodoMapper;
+import com.hebe.vo.CalendarDTO;
+import com.hebe.vo.TodoDTO;
+import com.hebe.vo.TodoDTOList;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class TodoService {
+
+ @Autowired
+ private TodoMapper TodoMapper;
+
+ // 접속유저의 전체 todolist 조회
+ public List selTodoList(TodoDTO param) {
+ return TodoMapper.selTodoList(param);
+ }
+
+ // 접속유저의 날짜별 todolist 조회
+ public List dayTodoList(TodoDTO param) {
+ return TodoMapper.dayTodoList(param);
+ }
+
+ public List monthData(CalendarDTO param) { return TodoMapper.monthData(param); }
+
+// public List calAllList(TodoDTO param) { return TodoMapper.calAllList(param);}
+
+
+ // 접속유저의 todoList 작성
+ public void insTodoList(TodoDTOList param) {
+// if(param.getList().get(0) != null) {
+ for(int i=0; i list;
+
+}
diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml
index a17f2cd..0cdc80f 100644
--- a/src/main/resources/application.yaml
+++ b/src/main/resources/application.yaml
@@ -1,6 +1,6 @@
spring:
datasource:
- url: jdbc:mysql://hebe-db.cok6p3wjd2e5.ap-northeast-2.rds.amazonaws.com:3306/hebe
+ url: jdbc:mariadb://hebe-db.cok6p3wjd2e5.ap-northeast-2.rds.amazonaws.com:3306/hebe
username: admin
password: sweetgirl3!
driver-class-name: org.mariadb.jdbc.Driver
@@ -22,7 +22,7 @@ spring:
google:
client-id: 1032001853934-78dmac7kurqos5r8bpvs9hen0afa8bgv.apps.googleusercontent.com
client-secret: oPRqiNcXKA9nUfMxMRYkLRe7
- scope : email, profile
+ scope: email, profile
kakao:
authorization-grant-type: authorization_code
@@ -70,7 +70,9 @@ spring:
# https://github.com/microsoftarchive/redis/releases/tag/win-3.2.100
# Redis-x64-3.2.100.msi install
redis:
- host: hebe-db.cok6p3wjd2e5.ap-northeast-2.rds.amazonaws.com
+ # host: localhost
+ # host: hebe-db.cok6p3wjd2e5.ap-northeast-2.rds.amazonaws.com
+ host: ec2-15-164-202-112.ap-northeast-2.compute.amazonaws.com
port: 6379
mybatis:
@@ -79,3 +81,15 @@ mybatis:
server:
port: 8080
+
+cloud:
+ aws:
+ credentials:
+ accessKey: AKIAXJCTAAUDILUQ2MRI
+ secretKey: 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
+ s3:
+ bucket: hebe-bucket
+ region:
+ static: ap-northeast-2
+ stack:
+ auto: false
diff --git a/src/main/resources/mybatis-mapper/DiaryMapper.xml b/src/main/resources/mybatis-mapper/DiaryMapper.xml
index 4e6206a..be8f860 100644
--- a/src/main/resources/mybatis-mapper/DiaryMapper.xml
+++ b/src/main/resources/mybatis-mapper/DiaryMapper.xml
@@ -42,23 +42,23 @@
where iuser = #{iuser}
-
- insert into diarydb
- (title, content, iuser)
- values
- (#{title}, #{content}, #{iuser});
-
-
-
+
update diarydb
set iuser = #{iuser}, title = #{title}, content = #{content}, thumbnail = #{thumbnail}
where iboard = #{iboard}
+
+ insert into diarydb
+ (iuser, title, content, thumbnail)
+ values
+ (#{iuser}, #{title}, #{content}, #{thumbnail})
+
+
delete from diarydb
where iboard = #{iboard} and iuser = #{iuser}
diff --git a/src/main/resources/mybatis-mapper/TodoListMapper.xml b/src/main/resources/mybatis-mapper/TodoListMapper.xml
new file mode 100644
index 0000000..a6d0fdb
--- /dev/null
+++ b/src/main/resources/mybatis-mapper/TodoListMapper.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ update tododb set t_text = #{t_text} where t_board =#{t_board} AND iuser = #{iuser};
+
+
+
+ insert into tododb (iuser,t_num,t_text,done,regdt) values (#{iuser},#{t_num},#{t_text},#{done},#{regdt});
+
+
+
+ DELETE FROM tododb where iuser = #{iuser} and regdt = #{regdt};
+
+
\ No newline at end of file
diff --git a/src/main/resources/mybatis-mapper/UserMapper.xml b/src/main/resources/mybatis-mapper/UserMapper.xml
index ad8252d..bd7a05e 100644
--- a/src/main/resources/mybatis-mapper/UserMapper.xml
+++ b/src/main/resources/mybatis-mapper/UserMapper.xml
@@ -4,7 +4,7 @@
+
+