diff --git a/private-resources b/private-resources index 68c1b04fa..ffba6c3d4 160000 --- a/private-resources +++ b/private-resources @@ -1 +1 @@ -Subproject commit 68c1b04faef504381476c3cbd2bfcd23b190aa25 +Subproject commit ffba6c3d4c63db23766c8a79842440602cd608aa diff --git a/src/main/java/peer/backend/config/jwt/JwtFilter.java b/src/main/java/peer/backend/config/jwt/JwtFilter.java index b5a612dbb..7279d00ff 100644 --- a/src/main/java/peer/backend/config/jwt/JwtFilter.java +++ b/src/main/java/peer/backend/config/jwt/JwtFilter.java @@ -21,7 +21,14 @@ public class JwtFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { - String token = tokenProvider.resolveAccessToken(request); + String requestURI = request.getRequestURI(); + String token; + // TODO: 일반 JwtFilter와 어드민 JwtFilter를 나누도록 리팩토링 하는게 좋을 것 같음. + if (requestURI.startsWith("/api/v1/admin")) { + token = this.tokenProvider.resolveAdminToken(request); + } else { + token = this.tokenProvider.resolveAccessToken(request); + } if (token == null) { filterChain.doFilter(request, response); return; diff --git a/src/main/java/peer/backend/config/jwt/TokenProvider.java b/src/main/java/peer/backend/config/jwt/TokenProvider.java index 2f66b07dc..515be293b 100644 --- a/src/main/java/peer/backend/config/jwt/TokenProvider.java +++ b/src/main/java/peer/backend/config/jwt/TokenProvider.java @@ -112,13 +112,16 @@ public String resolveAccessToken(HttpServletRequest req) { if (Objects.nonNull(bearerToken)) { return bearerToken; } + return bearerToken; + } + + public String resolveAdminToken(HttpServletRequest req) { Cookie[] cookies = req.getCookies(); Cookie cookie = this.utilService.getCookieByName(cookies, "adminToken"); if (Objects.nonNull(cookie)) { - log.info("cookie??"); - bearerToken = cookie.getValue(); + return cookie.getValue(); } - return bearerToken; + return null; } public boolean validateToken(String accessToken) { diff --git a/src/main/java/peer/backend/controller/board/RecruitController.java b/src/main/java/peer/backend/controller/board/RecruitController.java index 63cb4e598..b404cabf6 100644 --- a/src/main/java/peer/backend/controller/board/RecruitController.java +++ b/src/main/java/peer/backend/controller/board/RecruitController.java @@ -73,7 +73,7 @@ public void deleteRecruit(@PathVariable Long recruit_id) { @ApiOperation(value = "", notes = "모집에 지원한다.") @PostMapping("/interview/{recruit_id}") public void applyRecruit(@PathVariable Long recruit_id, - @RequestBody ApplyRecruitRequest request, Authentication auth) { + @RequestBody @Valid ApplyRecruitRequest request, Authentication auth) { recruitService.applyRecruit(recruit_id, request, auth); } diff --git a/src/main/java/peer/backend/controller/profile/ProfileController.java b/src/main/java/peer/backend/controller/profile/ProfileController.java index 759ecee32..ba9907f8a 100644 --- a/src/main/java/peer/backend/controller/profile/ProfileController.java +++ b/src/main/java/peer/backend/controller/profile/ProfileController.java @@ -26,6 +26,7 @@ import javax.persistence.LockModeType; import javax.validation.Valid; import java.io.IOException; +import java.io.UnsupportedEncodingException; import java.util.List; import java.util.NoSuchElementException; @@ -133,9 +134,15 @@ public ResponseEntity editProfile(Authentication auth, @GetMapping("/skill/search") public ResponseEntity getSkilsList(Authentication auth, @RequestParam("keyword") String keyword) { - if (keyword.length() > 15 || keyword.length() < 2) - return new ResponseEntity<>("검색 가능한 글자 수는 최소 2자부터 최대 15자까지 입니다.", HttpStatus.BAD_REQUEST); + if (keyword.length() > 15) + return new ResponseEntity<>("검색 가능한 글자 수는 최소 1자부터 최대 15자까지 입니다.", HttpStatus.BAD_REQUEST); + // TODO ; skill tag searching keyword converter + try { + keyword = this.profileService.convertSearchingKeyword(keyword); + } catch ( UnsupportedEncodingException e) { + return new ResponseEntity<>(e, HttpStatus.BAD_REQUEST); + } List result = this.profileService.searchTagsWithKeyword(keyword); if (result.isEmpty()) return new ResponseEntity<>("태그가 존재하지 않습니다.", HttpStatus.BAD_REQUEST); diff --git a/src/main/java/peer/backend/dto/announcement/CreateAnnouncementRequest.java b/src/main/java/peer/backend/dto/announcement/CreateAnnouncementRequest.java index 82b916262..1ad399034 100644 --- a/src/main/java/peer/backend/dto/announcement/CreateAnnouncementRequest.java +++ b/src/main/java/peer/backend/dto/announcement/CreateAnnouncementRequest.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat.Shape; import java.time.LocalDateTime; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; import lombok.Getter; import peer.backend.annotation.ValidEnum; import peer.backend.entity.announcement.AnnouncementNoticeStatus; @@ -12,12 +13,15 @@ public class CreateAnnouncementRequest { @NotBlank(message = "제목은 필수입니다.") + @Size(max = 30, message = "길이는 30 이하여야합니다.") private String title; @NotBlank(message = "작성자는 필수입니다.") + @Size(max = 10, message = "길이는 10 이하여야합니다.") private String writer; @NotBlank(message = "내용은 필수입니다.") + @Size(max = 10000, message = "길이는 10000 이하여야합니다.") private String content; @NotBlank(message = "이미지는 필수입니다.") diff --git a/src/main/java/peer/backend/dto/announcement/UpdateAnnouncementRequest.java b/src/main/java/peer/backend/dto/announcement/UpdateAnnouncementRequest.java index 4edc1cbb2..82ce48a20 100644 --- a/src/main/java/peer/backend/dto/announcement/UpdateAnnouncementRequest.java +++ b/src/main/java/peer/backend/dto/announcement/UpdateAnnouncementRequest.java @@ -5,6 +5,7 @@ import java.time.LocalDateTime; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; import lombok.Getter; import peer.backend.annotation.ValidEnum; import peer.backend.entity.announcement.AnnouncementNoticeStatus; @@ -13,12 +14,15 @@ public class UpdateAnnouncementRequest { @NotBlank(message = "제목은 필수입니다.") + @Size(max = 30, message = "길이는 30 이하여야합니다.") private String title; @NotBlank(message = "작성자는 필수입니다.") + @Size(max = 10, message = "길이는 10 이하여야합니다.") private String writer; @NotBlank(message = "내용은 필수입니다.") + @Size(max = 10000, message = "길이는 10000 이하여야합니다.") private String content; private String image; diff --git a/src/main/java/peer/backend/dto/banner/CreateBannerRequest.java b/src/main/java/peer/backend/dto/banner/CreateBannerRequest.java index 8d8c76478..c8ccacac6 100644 --- a/src/main/java/peer/backend/dto/banner/CreateBannerRequest.java +++ b/src/main/java/peer/backend/dto/banner/CreateBannerRequest.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat.Shape; import java.time.LocalDateTime; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; import lombok.Getter; import peer.backend.annotation.ValidEnum; import peer.backend.entity.banner.BannerReservationType; @@ -16,6 +17,7 @@ public class CreateBannerRequest { private BannerType bannerType; @NotBlank(message = "배너 제목을 필수입니다.") + @Size(max = 30, message = "길이는 30 이하여야합니다.") private String title; @NotBlank(message = "이미지는 필수입니다.") @@ -27,5 +29,6 @@ public class CreateBannerRequest { @JsonFormat(shape = Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm", timezone = "Asia/Seoul") private LocalDateTime reservationDate; + @Size(max = 1000, message = "길이는 1000 이하여야합니다.") private String announcementUrl; } diff --git a/src/main/java/peer/backend/dto/banner/UpdateBannerRequest.java b/src/main/java/peer/backend/dto/banner/UpdateBannerRequest.java index a96b52afd..2a361e4fb 100644 --- a/src/main/java/peer/backend/dto/banner/UpdateBannerRequest.java +++ b/src/main/java/peer/backend/dto/banner/UpdateBannerRequest.java @@ -5,6 +5,7 @@ import java.time.LocalDateTime; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; import lombok.Getter; import peer.backend.annotation.ValidEnum; import peer.backend.entity.banner.BannerReservationType; @@ -20,6 +21,7 @@ public class UpdateBannerRequest { private BannerType bannerType; @NotBlank(message = "배너 제목을 필수입니다.") + @Size(max = 30, message = "길이는 30 이하여야합니다.") private String title; private String image; @@ -30,5 +32,6 @@ public class UpdateBannerRequest { @JsonFormat(shape = Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm", timezone = "Asia/Seoul") private LocalDateTime reservationDate; + @Size(max = 1000, message = "길이는 1000 이하여야합니다.") private String announcementUrl; } diff --git a/src/main/java/peer/backend/dto/board/recruit/ApplyRecruitRequest.java b/src/main/java/peer/backend/dto/board/recruit/ApplyRecruitRequest.java index b54744534..dba231b29 100644 --- a/src/main/java/peer/backend/dto/board/recruit/ApplyRecruitRequest.java +++ b/src/main/java/peer/backend/dto/board/recruit/ApplyRecruitRequest.java @@ -5,12 +5,14 @@ import lombok.NoArgsConstructor; import lombok.Setter; +import javax.validation.constraints.NotNull; import java.util.List; @Getter @AllArgsConstructor @NoArgsConstructor public class ApplyRecruitRequest { + @NotNull private String role; private List answerList; } diff --git a/src/main/java/peer/backend/dto/board/recruit/RecruitCreateRequest.java b/src/main/java/peer/backend/dto/board/recruit/RecruitCreateRequest.java index 09e492ddf..301f6a236 100644 --- a/src/main/java/peer/backend/dto/board/recruit/RecruitCreateRequest.java +++ b/src/main/java/peer/backend/dto/board/recruit/RecruitCreateRequest.java @@ -25,7 +25,7 @@ public class RecruitCreateRequest { @NotNull private String image; @NotNull - @Size(min = 2, max = 30, message = "팀이름은 2글자 이상 30글자 이하로 작성해주세요.") + @Size(min = 2, max = 40, message = "팀이름은 2글자 이상 30글자 이하로 작성해주세요.") private String name; @NotNull(message = "제목이 반드시 필요합니다.") @Size(min = 1, max = 100, message = "제목은 1~100글자로 작성해주세요.") @@ -36,7 +36,7 @@ public class RecruitCreateRequest { private String place; @NotNull private String type; - @Size(min = 1, max = 1000, message = "") + @Size(min = 1, max = 20000, message = "") @NotNull @Lob private String content; diff --git a/src/main/java/peer/backend/dto/board/recruit/RecruitUpdateRequestDTO.java b/src/main/java/peer/backend/dto/board/recruit/RecruitUpdateRequestDTO.java index 3f6dfac7a..78fd0b194 100644 --- a/src/main/java/peer/backend/dto/board/recruit/RecruitUpdateRequestDTO.java +++ b/src/main/java/peer/backend/dto/board/recruit/RecruitUpdateRequestDTO.java @@ -16,7 +16,7 @@ @NoArgsConstructor public class RecruitUpdateRequestDTO { @NotNull - @Size(min = 2, max = 30, message = "팀 이름은 2글자 이상 30글자 이하로 작성해 주세요.") + @Size(min = 2, max = 40, message = "팀 이름은 2글자 이상 30글자 이하로 작성해 주세요.") private String name; @NotNull(message = "제목이 반드시 필요합니다.") @Size(min = 1, max = 100, message = "제목은 1~100글자로 작성해주세요.") diff --git a/src/main/java/peer/backend/dto/security/UserInfo.java b/src/main/java/peer/backend/dto/security/UserInfo.java index 78a3d133c..8c96e3afb 100644 --- a/src/main/java/peer/backend/dto/security/UserInfo.java +++ b/src/main/java/peer/backend/dto/security/UserInfo.java @@ -103,6 +103,7 @@ public User convertUser() { .messageAlarm(true) .nightAlarm(true) .teamAlarm(true) + .activated(true) .build(); } } diff --git a/src/main/java/peer/backend/dto/tag/CreateTagRequest.java b/src/main/java/peer/backend/dto/tag/CreateTagRequest.java index 27fb56d01..fe34ea070 100644 --- a/src/main/java/peer/backend/dto/tag/CreateTagRequest.java +++ b/src/main/java/peer/backend/dto/tag/CreateTagRequest.java @@ -1,14 +1,17 @@ package peer.backend.dto.tag; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; import lombok.Getter; @Getter public class CreateTagRequest { @NotBlank + @Size(max = 10, message = "길이는 10 이하여야 합니다.") private String name; @NotBlank + @Size(max = 7, message = "길이는 10 이하여야 합니다.") private String color; } \ No newline at end of file diff --git a/src/main/java/peer/backend/dto/user/UserShowcaseResponse.java b/src/main/java/peer/backend/dto/user/UserShowcaseResponse.java index 9839e9d9d..47cf15c8a 100644 --- a/src/main/java/peer/backend/dto/user/UserShowcaseResponse.java +++ b/src/main/java/peer/backend/dto/user/UserShowcaseResponse.java @@ -10,12 +10,14 @@ @Getter @RequiredArgsConstructor public class UserShowcaseResponse { + private Long id; private String image; private String nickname; private String role; public UserShowcaseResponse(TeamUser teamUser){ User user = teamUser.getUser(); + this.id = user.getId(); this.image = user.getImageUrl(); this.nickname = user.getNickname(); this.role = teamUser.getTeamUserJobs().get(0).getTeamJob().getName(); diff --git a/src/main/java/peer/backend/entity/announcement/Announcement.java b/src/main/java/peer/backend/entity/announcement/Announcement.java index ec3aeedb8..b9cec690a 100644 --- a/src/main/java/peer/backend/entity/announcement/Announcement.java +++ b/src/main/java/peer/backend/entity/announcement/Announcement.java @@ -39,10 +39,10 @@ public class Announcement extends BaseEntity { @Column(nullable = false) private String writer; - @Column(nullable = false) + @Column(nullable = false, columnDefinition = "LONGTEXT") private String content; - @Column(nullable = false) + @Column(nullable = false, columnDefinition = "TEXT") private String image; @Column(nullable = false) diff --git a/src/main/java/peer/backend/entity/banner/Banner.java b/src/main/java/peer/backend/entity/banner/Banner.java index 082a2b386..e62f67b1f 100644 --- a/src/main/java/peer/backend/entity/banner/Banner.java +++ b/src/main/java/peer/backend/entity/banner/Banner.java @@ -38,7 +38,7 @@ public class Banner extends BaseEntity { @Column(nullable = false) private String title; - @Column(nullable = false) + @Column(nullable = false, columnDefinition = "TEXT") private String imageUrl; @Column(nullable = false) @@ -48,7 +48,7 @@ public class Banner extends BaseEntity { @Column private LocalDateTime reservationDate; - @Column + @Column(columnDefinition = "TEXT") private String announcementUrl; public void setBannerStatus(BannerStatus bannerStatus) { diff --git a/src/main/java/peer/backend/entity/board/recruit/Recruit.java b/src/main/java/peer/backend/entity/board/recruit/Recruit.java index e0c958acc..6f63bf6bc 100644 --- a/src/main/java/peer/backend/entity/board/recruit/Recruit.java +++ b/src/main/java/peer/backend/entity/board/recruit/Recruit.java @@ -10,10 +10,12 @@ import peer.backend.entity.board.recruit.enums.RecruitStatus; import peer.backend.entity.tag.RecruitTag; import peer.backend.entity.team.Team; +import peer.backend.entity.team.enums.TeamType; import peer.backend.entity.user.User; import peer.backend.entity.user.UserPortfolio; import javax.persistence.*; +import javax.validation.constraints.Size; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -52,18 +54,23 @@ public class Recruit extends BaseEntity { @Column private Long hit = 0L; @Column(nullable = false) + @Size(max=100) private String title; @Column(nullable = false) @Lob private String content; + @Column private String link; + @Column(nullable = false) @Enumerated(EnumType.STRING) private RecruitStatus status; - @Column + + @Column(columnDefinition = "TEXT") private String thumbnailUrl; + @OneToMany(mappedBy = "recruit", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true) private List recruitTags = new ArrayList<>(); @Column diff --git a/src/main/java/peer/backend/entity/board/recruit/RecruitFile.java b/src/main/java/peer/backend/entity/board/recruit/RecruitFile.java index c09a4d525..fcb524178 100644 --- a/src/main/java/peer/backend/entity/board/recruit/RecruitFile.java +++ b/src/main/java/peer/backend/entity/board/recruit/RecruitFile.java @@ -20,6 +20,6 @@ public class RecruitFile { @JoinColumn(name = "recruit_id") private Recruit recruit; - @Column(nullable = false) + @Column(nullable = false, columnDefinition = "TEXT") private String url; } diff --git a/src/main/java/peer/backend/entity/board/team/Post.java b/src/main/java/peer/backend/entity/board/team/Post.java index 598a61730..a8b1c04b8 100644 --- a/src/main/java/peer/backend/entity/board/team/Post.java +++ b/src/main/java/peer/backend/entity/board/team/Post.java @@ -11,6 +11,7 @@ import javax.persistence.*; import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -42,6 +43,7 @@ public class Post extends BaseEntity{ private List postLike = new ArrayList<>(); @Column(nullable = false) + @Size(max=100) private String title; @Column @@ -53,8 +55,11 @@ public class Post extends BaseEntity{ @Lob @NotNull private String content; + @Column private int hit; + @Column(columnDefinition = "TEXT") private String image; + @Column private int liked; @OneToMany(mappedBy = "post", cascade = CascadeType.PERSIST, orphanRemoval = true) diff --git a/src/main/java/peer/backend/entity/board/team/PostFile.java b/src/main/java/peer/backend/entity/board/team/PostFile.java index 99d16e773..9202dec82 100644 --- a/src/main/java/peer/backend/entity/board/team/PostFile.java +++ b/src/main/java/peer/backend/entity/board/team/PostFile.java @@ -16,7 +16,7 @@ public class PostFile { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @Column(nullable = false) + @Column(nullable = false, columnDefinition = "TEXT") private String url; @ManyToOne(fetch = FetchType.LAZY) diff --git a/src/main/java/peer/backend/entity/team/Team.java b/src/main/java/peer/backend/entity/team/Team.java index ea00f7c3b..0a1b2d6cb 100644 --- a/src/main/java/peer/backend/entity/team/Team.java +++ b/src/main/java/peer/backend/entity/team/Team.java @@ -3,6 +3,7 @@ import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; +import java.util.NoSuchElementException; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; @@ -60,7 +61,7 @@ public class Team extends BaseEntity { private Long id; @Column(nullable = false) - @Size(min = 2, max = 30) + @Size(min = 2, max = 40) private String name; @Enumerated(EnumType.STRING) @@ -73,14 +74,14 @@ public class Team extends BaseEntity { @Column(nullable = false) private int dueValue; - @Column() + @Column(columnDefinition = "TEXT") private String teamPicturePath; @Enumerated(EnumType.STRING) @Column(nullable = false) private TeamOperationFormat operationFormat; - @Column() + @Column(columnDefinition = "TEXT") private String teamLogoPath; @Enumerated(EnumType.STRING) @@ -154,12 +155,13 @@ public void update(RecruitUpdateRequestDTO request) { this.region2 = request.getRegion2(); } this.operationFormat = TeamOperationFormat.from(request.getPlace()); - jobs.clear(); - if (request.getRoleList() != null && !request.getInterviewList().isEmpty()) { - request.getRoleList().forEach(this::addRole); + if (request.getType().equals(TeamType.STUDY.getValue())) + { + TeamJob data; +// this.jobs.stream().filter(job -> job.getName().equals("STUDY")).findFirst().get().setMax(request.getMax()); + data = this.jobs.stream().filter(job -> job.getName().equals("STUDY")).findFirst().orElseThrow(() -> new NoSuchElementException("업데이트 중 문제가 발생하였습니다.")); + data.setMax(request.getMax()); } - if (request.getMax() != null) - this.maxMember = request.getMax(); } public void addRole(TeamJobDto role) { diff --git a/src/main/java/peer/backend/entity/user/User.java b/src/main/java/peer/backend/entity/user/User.java index 49f184ebb..c03f62c00 100644 --- a/src/main/java/peer/backend/entity/user/User.java +++ b/src/main/java/peer/backend/entity/user/User.java @@ -13,7 +13,6 @@ import org.hibernate.annotations.DynamicInsert; import org.hibernate.annotations.DynamicUpdate; import org.springframework.security.core.Authentication; -import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import peer.backend.entity.BaseEntity; import peer.backend.entity.board.recruit.Recruit; @@ -45,6 +44,9 @@ public class User extends BaseEntity implements Login { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + @Column + private boolean activated = true; + @Column(length = 100, unique = true, nullable = false) private String email; @@ -75,7 +77,7 @@ public class User extends BaseEntity implements Login { @Column//(nullable = false) private String address; - @Column + @Column(columnDefinition = "TEXT") private String imageUrl; @Column//(nullable = false) diff --git a/src/main/java/peer/backend/repository/user/UserRepository.java b/src/main/java/peer/backend/repository/user/UserRepository.java index 7d8bf1dcf..76ef9932e 100644 --- a/src/main/java/peer/backend/repository/user/UserRepository.java +++ b/src/main/java/peer/backend/repository/user/UserRepository.java @@ -22,7 +22,7 @@ public interface UserRepository extends JpaRepository { @Query("SELECT u FROM User u LEFT JOIN FETCH u.peerOperation WHERE u.id = :id") Optional findById(Long id); - @Query("SELECT m FROM User m WHERE (m.nickname LIKE %:keyword%) ORDER BY m.nickname") + @Query("SELECT m FROM User m WHERE (m.nickname LIKE %:keyword% AND m.activated = true) ORDER BY m.nickname") Optional> findByKeyWord(String keyword); Optional> findByEmailOrNickname(String email, String nickname); diff --git a/src/main/java/peer/backend/service/board/recruit/HitchHikingService.java b/src/main/java/peer/backend/service/board/recruit/HitchHikingService.java index 6cdadbf26..d105516c3 100644 --- a/src/main/java/peer/backend/service/board/recruit/HitchHikingService.java +++ b/src/main/java/peer/backend/service/board/recruit/HitchHikingService.java @@ -17,6 +17,10 @@ import peer.backend.repository.board.recruit.RecruitRepository; import peer.backend.service.TagService; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; @Service @@ -26,6 +30,9 @@ public class HitchHikingService { private final RecruitRepository recruitRepository; private final TagService tagService; + private String excludeImageUrlFromContent(String origin){ + return origin.replaceAll("!\\[.*?\\]\\(.*?\\)", ""); + } @Transactional public Page getHitchList(int page, int pageSize, String type, Long userId){ @@ -53,7 +60,7 @@ public HitchResponse getHitch(Long hitchId){ Recruit recruit = recruitRepository.findById(hitchId) .orElseThrow(() -> new NotFoundException("존재하지 않는 모집글입니다.")); return HitchResponse.builder() - .content(recruit.getContent()) + .content(excludeImageUrlFromContent(recruit.getContent())) .memberImage(recruit.getTeam().getTeamUsers().stream().map( teamUser -> teamUser.getUser().getImageUrl()).collect(Collectors.toList())) .recruitmentQuota(recruit.getTeam().getMaxMember()) diff --git a/src/main/java/peer/backend/service/board/recruit/RecruitService.java b/src/main/java/peer/backend/service/board/recruit/RecruitService.java index 4d0e8c018..28fa55dea 100644 --- a/src/main/java/peer/backend/service/board/recruit/RecruitService.java +++ b/src/main/java/peer/backend/service/board/recruit/RecruitService.java @@ -279,8 +279,7 @@ public RecruitUpdateResponse getRecruitwithInterviewList(Long recruit_id) { .region1(team.getRegion1()) .region2(team.getRegion2()) .status(recruit.getStatus()) - .totalNumber(team.getType().equals(TeamType.STUDY) ? team.getMaxMember() - : teamJobs.stream().mapToInt(TeamJob::getMax).sum()) + .totalNumber(teamJobs.stream().mapToInt(TeamJob::getMax).sum()) .current(team.getTeamUsers().size()) .due(team.getDueTo().getLabel()) .link(recruit.getLink()) diff --git a/src/main/java/peer/backend/service/board/team/ShowcaseService.java b/src/main/java/peer/backend/service/board/team/ShowcaseService.java index 4f857b780..b0a1bccd4 100644 --- a/src/main/java/peer/backend/service/board/team/ShowcaseService.java +++ b/src/main/java/peer/backend/service/board/team/ShowcaseService.java @@ -58,13 +58,17 @@ private List getMembers(List teamUsers){ .collect(Collectors.toList()); } + private String excludeImageUrlFromContent(String origin){ + return origin.replaceAll("!\\[.*?\\]\\(.*?\\)", ""); + } + private ShowcaseListResponse convertToDto(Post post, Authentication auth) { Team team = post.getBoard().getTeam(); return ShowcaseListResponse.builder() .id(post.getId()) .image(post.getImage()) // showcase에서 대표이미지는 항상 첫번째인덱스에 있습니다. .name(post.getBoard().getTeam().getName()) - .description(post.getContent()) + .description(excludeImageUrlFromContent(post.getContent())) .skill( this.tagService.recruitTagListToTagResponseList(team.getRecruit().getRecruitTags())) .like(post.getLiked()) diff --git a/src/main/java/peer/backend/service/message/MessageMainService.java b/src/main/java/peer/backend/service/message/MessageMainService.java index dcde085af..a6a44247a 100644 --- a/src/main/java/peer/backend/service/message/MessageMainService.java +++ b/src/main/java/peer/backend/service/message/MessageMainService.java @@ -435,7 +435,7 @@ public void sendMessageFromExternalPage(Authentication auth, MsgContentDTO messa MessageIndex firstLetter = MessageIndex.builder() .user1(user) .user2(target) - .unreadMessageNumber1(1L) + .unreadMessageNumber1(0L) .unreadMessageNumber2(0L) .userIdx1(user.getId()) .user1delete(false) diff --git a/src/main/java/peer/backend/service/profile/ProfileService.java b/src/main/java/peer/backend/service/profile/ProfileService.java index 2cac94c8d..562942a59 100644 --- a/src/main/java/peer/backend/service/profile/ProfileService.java +++ b/src/main/java/peer/backend/service/profile/ProfileService.java @@ -27,6 +27,9 @@ import peer.backend.service.file.ObjectService; import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -106,8 +109,11 @@ public OtherProfileResponseDTO getOtherProfile(Long targetId) { } else { tagList = Collections.emptyList(); } + + Long id = user.isActivated() ? user.getId() : -1L; + return OtherProfileResponseDTO.builder() - .id(user.getId()) + .id(id) .email(user.getEmail()) .profileImageUrl(user.getImageUrl()) .nickname(user.getNickname()) @@ -242,4 +248,28 @@ public void setUserSkills(User user, List tagList) throws BadRequestEx }; this.userSkillsRepository.saveAll(skillList); } + + public String convertSearchingKeyword(String keyword) throws UnsupportedEncodingException { + String result = ""; + StringBuilder targetWord = new StringBuilder(); + + int firstPin; + + for (int i = 0; i < keyword.length(); i++) { + if (keyword.charAt(i) == '%') { + firstPin = i; + targetWord.append('%'); + while (keyword.charAt(i + 1) != '%') { + targetWord.append(keyword.charAt(i)); + i++; + } + String encodedString = targetWord.toString(); + String decodedString = URLDecoder.decode(encodedString, StandardCharsets.UTF_8); + keyword = keyword.replace(encodedString, decodedString); + i = firstPin + 1; + } + } + result = keyword; + return result; + } } diff --git a/src/main/java/peer/backend/service/team/TeamService.java b/src/main/java/peer/backend/service/team/TeamService.java index ae120a91d..83a40736c 100644 --- a/src/main/java/peer/backend/service/team/TeamService.java +++ b/src/main/java/peer/backend/service/team/TeamService.java @@ -151,15 +151,14 @@ public void updateTeamSetting(Long teamId, TeamSettingInfoDto teamSettingInfoDto String filePath = "TeamImage"; if (team.getTeamLogoPath() != null) { if (teamSettingInfoDto.getTeamImage() != null) { - if (team.getTeamLogoPath().equals(teamSettingInfoDto.getTeamImage())) { - return; + if (!team.getTeamLogoPath().equals(teamSettingInfoDto.getTeamImage())) { + String newImage = objectService.uploadObject( + filePath + "/" + team.getId().toString(), + teamSettingInfoDto.getTeamImage(), "image"); + objectService.deleteObject(team.getTeamLogoPath()); + team.setTeamLogoPath(newImage); + this.userPortfolioService.setTeamLogoPath(team.getId(), newImage); } - String newImage = objectService.uploadObject( - filePath + "/" + team.getId().toString(), - teamSettingInfoDto.getTeamImage(), "image"); - objectService.deleteObject(team.getTeamLogoPath()); - team.setTeamLogoPath(newImage); - this.userPortfolioService.setTeamLogoPath(team.getId(), newImage); } else { objectService.deleteObject(team.getTeamLogoPath()); team.setTeamLogoPath(null);