Skip to content

Commit c6c93c2

Browse files
authored
Merge pull request #72 from SemtleApp/feature/#71
[feat/#71] : 영수증 업로드 기능 추가
2 parents 15dd02c + 829824a commit c6c93c2

File tree

9 files changed

+115
-9
lines changed

9 files changed

+115
-9
lines changed

src/main/java/com/semtleapp/semtleapp/file/entity/PhotoType.java

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public enum PhotoType {
1616
BOOK("BOOK", "/BOOK"),
1717
ANY("ANY", "/ANY"),
1818
USER("USER", "/USER"),
19+
DUES("DUES", "DUES"),
1920

2021
;
2122

src/main/java/com/semtleapp/semtleapp/semtledues/controller/SemtleDuesController.java

+10-3
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package com.semtleapp.semtleapp.semtledues.controller;
22

33
import com.semtleapp.semtleapp.global.entity.ApiResponse;
4-
import com.semtleapp.semtleapp.semtledues.dto.GetDuesResDto;
5-
import com.semtleapp.semtleapp.semtledues.dto.ModifyDuesReqDto;
6-
import com.semtleapp.semtleapp.semtledues.dto.ModifyDuesResDto;
4+
import com.semtleapp.semtleapp.semtledues.dto.*;
75
import com.semtleapp.semtleapp.semtledues.service.SemtleDuesService;
86
import io.swagger.annotations.Api;
97
import io.swagger.annotations.ApiOperation;
108
import lombok.RequiredArgsConstructor;
119
import org.springframework.security.access.prepost.PreAuthorize;
1210
import org.springframework.web.bind.annotation.*;
11+
import org.springframework.web.multipart.MultipartFile;
1312

1413
import java.util.List;
1514

@@ -34,4 +33,12 @@ public ApiResponse<List<GetDuesResDto.DuesList>> getDues() throws Exception {
3433
public ApiResponse<ModifyDuesResDto> modifyDuesStatus(@PathVariable String studentId, @RequestBody ModifyDuesReqDto modifyDuesReqDto) throws Exception{
3534
return new ApiResponse<>(semtleDuesService.modifyDuesStatus(studentId, modifyDuesReqDto));
3635
}
36+
37+
@ApiOperation(value = "영수증 업로드", notes = "영수증 업로드")
38+
@PreAuthorize("hasAnyRole('ADMIN', 'ASEM', 'BSEM', 'CSEM')")
39+
@PostMapping("/receipt")
40+
public ApiResponse<ReceiptDuesPostResDto> receiptDuesPost(@RequestPart(value = "file", required = false)List<MultipartFile> files,
41+
@RequestPart(value = "receiptDuesPostReqDto")ReceiptDuesPostReqDto receiptDuesPostReqDto) throws Exception {
42+
return new ApiResponse<>(semtleDuesService.receiptDuesPost(receiptDuesPostReqDto, files));
43+
}
3744
}

src/main/java/com/semtleapp/semtleapp/semtledues/convertor/SemtleDuesConvertor.java

+8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.semtleapp.semtleapp.semtledues.convertor;
22

33
import com.semtleapp.semtleapp.semtledues.dto.GetDuesResDto;
4+
import com.semtleapp.semtleapp.semtledues.dto.ReceiptDuesPostReqDto;
5+
import com.semtleapp.semtleapp.semtledues.entity.SemtleDuesReceiptPost;
46
import com.semtleapp.semtleapp.semtleuser.entity.SemtleUserInfo;
57

68
public class SemtleDuesConvertor {
@@ -11,4 +13,10 @@ public static GetDuesResDto.DuesList getDues(SemtleUserInfo result) {
1113
.status(result.getStatus())
1214
.build();
1315
}
16+
17+
public static SemtleDuesReceiptPost receiptDuesPost(ReceiptDuesPostReqDto receiptDuesPostReqDto) {
18+
return SemtleDuesReceiptPost.builder()
19+
.memo(receiptDuesPostReqDto.getMemo())
20+
.build();
21+
}
1422
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.semtleapp.semtleapp.semtledues.dto;
2+
3+
import com.semtleapp.semtleapp.file.entity.PhotoDto;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Builder;
6+
import lombok.Getter;
7+
import lombok.NoArgsConstructor;
8+
9+
import java.util.List;
10+
11+
@Getter
12+
@Builder
13+
@AllArgsConstructor
14+
@NoArgsConstructor
15+
public class ReceiptDuesPostReqDto {
16+
private String memo;
17+
private List<PhotoDto> photoDtoList;
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.semtleapp.semtleapp.semtledues.dto;
2+
3+
import lombok.Builder;
4+
import lombok.Getter;
5+
6+
@Getter
7+
@Builder
8+
public class ReceiptDuesPostResDto {
9+
private String message;
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.semtleapp.semtleapp.semtledues.entity;
2+
3+
import com.semtleapp.semtleapp.global.entity.BaseTimeEntity;
4+
import lombok.*;
5+
import org.hibernate.annotations.DynamicInsert;
6+
import org.hibernate.annotations.DynamicUpdate;
7+
8+
import javax.persistence.*;
9+
10+
@DynamicInsert
11+
@DynamicUpdate
12+
@Setter
13+
@Getter
14+
@Builder
15+
@NoArgsConstructor
16+
@AllArgsConstructor
17+
@Entity
18+
@Table(name = "semtle_dues_receipt")
19+
public class SemtleDuesReceiptPost extends BaseTimeEntity {
20+
21+
@Id
22+
@GeneratedValue(strategy = GenerationType.IDENTITY)
23+
@Column(name = "receipt_id", unique = true, nullable = false)
24+
private Long receiptId;
25+
26+
@Column(name = "memo")
27+
private String memo;
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.semtleapp.semtleapp.semtledues.repository;
2+
3+
import com.semtleapp.semtleapp.semtledues.entity.SemtleDuesReceiptPost;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
public interface SemtleDuesPostRepository extends JpaRepository<SemtleDuesReceiptPost, Long> {
7+
}
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
package com.semtleapp.semtleapp.semtledues.service;
22

3-
import com.semtleapp.semtleapp.semtledues.dto.GetDuesResDto;
4-
import com.semtleapp.semtleapp.semtledues.dto.ModifyDuesReqDto;
5-
import com.semtleapp.semtleapp.semtledues.dto.ModifyDuesResDto;
3+
import com.semtleapp.semtleapp.semtledues.dto.*;
4+
import org.springframework.web.multipart.MultipartFile;
65

76
import java.util.List;
87

@@ -11,4 +10,6 @@ public interface SemtleDuesService {
1110
List<GetDuesResDto.DuesList> getDues();
1211

1312
ModifyDuesResDto modifyDuesStatus(String studentId, ModifyDuesReqDto modifyDuesReqDto);
13+
14+
ReceiptDuesPostResDto receiptDuesPost(ReceiptDuesPostReqDto receiptDuesPostReqDto, List<MultipartFile> files);
1415
}

src/main/java/com/semtleapp/semtleapp/semtledues/service/SemtleDuesServiceImpl.java

+29-3
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
package com.semtleapp.semtleapp.semtledues.service;
22

3+
import com.semtleapp.semtleapp.file.entity.PhotoType;
4+
import com.semtleapp.semtleapp.file.service.FileUserService;
35
import com.semtleapp.semtleapp.semtledues.convertor.SemtleDuesConvertor;
4-
import com.semtleapp.semtleapp.semtledues.dto.GetDuesResDto;
5-
import com.semtleapp.semtleapp.semtledues.dto.ModifyDuesReqDto;
6-
import com.semtleapp.semtleapp.semtledues.dto.ModifyDuesResDto;
6+
import com.semtleapp.semtleapp.semtledues.dto.*;
7+
import com.semtleapp.semtleapp.semtledues.entity.SemtleDuesReceiptPost;
8+
import com.semtleapp.semtleapp.semtledues.repository.SemtleDuesPostRepository;
79
import com.semtleapp.semtleapp.semtledues.repository.SemtleDuesRepository;
810
import com.semtleapp.semtleapp.semtleuser.entity.SemtleUserInfo;
911
import lombok.RequiredArgsConstructor;
1012
import org.springframework.stereotype.Service;
13+
import org.springframework.web.multipart.MultipartFile;
1114

15+
import javax.imageio.IIOException;
1216
import javax.transaction.Transactional;
17+
import java.io.IOException;
1318
import java.util.ArrayList;
1419
import java.util.List;
1520

@@ -19,6 +24,8 @@
1924
public class SemtleDuesServiceImpl implements SemtleDuesService {
2025

2126
private final SemtleDuesRepository semtleDuesRepository;
27+
private final SemtleDuesPostRepository semtleDuesPostRepository;
28+
private final FileUserService fileUserService;
2229

2330
@Override
2431
public List<GetDuesResDto.DuesList> getDues() {
@@ -40,4 +47,23 @@ public ModifyDuesResDto modifyDuesStatus(String studentId, ModifyDuesReqDto modi
4047

4148
return ModifyDuesResDto.builder().message("회비 납부 상태가 수정되었습니다.").build();
4249
}
50+
51+
@Override
52+
public ReceiptDuesPostResDto receiptDuesPost(ReceiptDuesPostReqDto receiptDuesPostReqDto, List<MultipartFile> files) {
53+
SemtleDuesReceiptPost semtleDuesReceiptPost = SemtleDuesConvertor.receiptDuesPost(receiptDuesPostReqDto);
54+
SemtleDuesReceiptPost saveSemtleDuesPost = semtleDuesPostRepository.save(semtleDuesReceiptPost);
55+
uploadPhotos(files, saveSemtleDuesPost);
56+
return ReceiptDuesPostResDto.builder().message("영수증이 업로드 되었습니다.").build();
57+
58+
}
59+
60+
private void uploadPhotos(List<MultipartFile> files, SemtleDuesReceiptPost saveSemtleDuesPost) {
61+
if(files != null) {
62+
try {
63+
fileUserService.saveFiles(files, PhotoType.DUES, saveSemtleDuesPost.getReceiptId());
64+
} catch (IOException e) {
65+
e.printStackTrace();
66+
}
67+
}
68+
}
4369
}

0 commit comments

Comments
 (0)