Skip to content

Commit

Permalink
Merge pull request #93 from Codiary-UMC-6th/feature/#92-techstack
Browse files Browse the repository at this point in the history
Feature/#92 techstack
  • Loading branch information
yumzen authored Aug 5, 2024
2 parents fbab204 + 9fbc432 commit c4eb871
Show file tree
Hide file tree
Showing 9 changed files with 99 additions and 11 deletions.
19 changes: 19 additions & 0 deletions src/main/java/com/codiary/backend/global/config/WebConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.codiary.backend.global.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(final CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:3000")
.allowedMethods("GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS") // 허용할 HTTP 메소드
.allowedHeaders("*") // 허용할 헤더
.allowCredentials(true); // 자격 증명 허용
}
}


Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import com.codiary.backend.global.domain.entity.Follow;
import com.codiary.backend.global.domain.entity.Member;
import com.codiary.backend.global.domain.entity.mapping.MemberCategory;
import com.codiary.backend.global.web.dto.Bookmark.BookmarkResponseDTO;
import com.codiary.backend.global.domain.entity.mapping.TechStacks;
import com.codiary.backend.global.web.dto.Member.FollowResponseDto;
import com.codiary.backend.global.web.dto.Member.MemberResponseDTO;
import com.codiary.backend.global.web.dto.Member.MemberSumResponseDto;
Expand Down Expand Up @@ -36,6 +36,16 @@ public MemberSumResponseDto toFollowResponseDto(Member member) {
.build();
}

public MemberResponseDTO.TechStacksDTO toTechStacksResponseDto(Member member) {
return MemberResponseDTO.TechStacksDTO.builder()
.memberId(member.getMemberId())
.techStackList(member.getTechStackList()
.stream()
.map(TechStacks::getName)
.collect(Collectors.toList()))
.build();
}



// 회원별 북마크 리스트 조회
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.codiary.backend.global.domain.entity.mapping;

import com.codiary.backend.global.domain.entity.Member;
import com.codiary.backend.global.domain.entity.Post;
import com.codiary.backend.global.domain.enums.TechStack;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Getter;
Expand All @@ -16,11 +16,17 @@ public class TechStacks {
@Column(name = "tech_stack_id", nullable = false, columnDefinition = "bigint")
private Long techStackId;

//우선 String으로 설정, techStack 나오면 enum으로 변경 필요
@Enumerated(EnumType.STRING)
@Column(name = "name", nullable = false, columnDefinition = "varchar(50)")
private String name;
private TechStack name;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id")
private Member member;

// 생성자 추가
public TechStacks(TechStack name, Member member) {
this.name = name;
this.member = member;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.codiary.backend.global.domain.enums;

public enum TechStack {
JAVA,
SPRING,
JAVA_SCRIPT,
REACT,
CSS,
HTML,
NODE_JS,
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,9 @@ public interface MemberRepository extends JpaRepository<Member, Long> {

@Query("SELECT m FROM Member m LEFT JOIN FETCH m.followers WHERE m.memberId = :toId")
Optional<Member> findByToIdWithFollowers(@Param("toId") long id);

@Query("SELECT m FROM Member m LEFT JOIN FETCH m.techStackList WHERE m.memberId = :memberId")
Member findMemberWithTechStacks(@Param("memberId") Long memberId);


}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.codiary.backend.global.apiPayload.ApiResponse;
import com.codiary.backend.global.domain.entity.Member;
import com.codiary.backend.global.domain.entity.mapping.MemberCategory;
import com.codiary.backend.global.domain.enums.TechStack;
import com.codiary.backend.global.web.dto.Member.MemberRequestDTO;
import com.codiary.backend.global.web.dto.Member.MemberResponseDTO;

Expand All @@ -21,4 +22,5 @@ public interface MemberCommandService {

public ApiResponse<MemberResponseDTO.MemberImageDTO> setProfileImage(Member member, MemberRequestDTO.MemberProfileImageRequestDTO request);

public Member setTechStacks(Long memberId, TechStack techstack);
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
import com.codiary.backend.global.apiPayload.code.status.SuccessStatus;
import com.codiary.backend.global.apiPayload.exception.GeneralException;
import com.codiary.backend.global.apiPayload.exception.handler.MemberHandler;
import com.codiary.backend.global.converter.PostFileConverter;
import com.codiary.backend.global.domain.entity.Member;
import com.codiary.backend.global.domain.entity.MemberImage;
import com.codiary.backend.global.domain.entity.PostFile;
import com.codiary.backend.global.domain.entity.Uuid;
import com.codiary.backend.global.domain.entity.mapping.MemberCategory;
import com.codiary.backend.global.domain.entity.mapping.TechStacks;
import com.codiary.backend.global.domain.enums.TechStack;
import com.codiary.backend.global.jwt.JwtTokenProvider;
import com.codiary.backend.global.jwt.SecurityUtil;
import com.codiary.backend.global.jwt.TokenInfo;
Expand All @@ -29,6 +29,7 @@
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

Expand Down Expand Up @@ -134,4 +135,22 @@ public ApiResponse<MemberResponseDTO.MemberImageDTO> setProfileImage(Member memb
return ApiResponse.onSuccess(SuccessStatus.MEMBER_OK, response);
}

@Override
public Member setTechStacks(Long memberId, TechStack techstack) {
Member member = memberRepository.findMemberWithTechStacks(memberId);

List<TechStacks> techStackList = member.getTechStackList();
if (techStackList == null) {
techStackList = new ArrayList<>();
}

TechStacks newTechStack = new TechStacks(techstack, member);
techStackList.add(newTechStack);

member.setTechStackList(techStackList);

memberRepository.save(member);

return member;
}
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
package com.codiary.backend.global.web.controller;

import com.codiary.backend.global.apiPayload.ApiResponse;
import com.codiary.backend.global.converter.BookmarkConverter;
import com.codiary.backend.global.converter.MemberConverter;
import com.codiary.backend.global.converter.PostConverter;
import com.codiary.backend.global.domain.entity.Member;
import com.codiary.backend.global.domain.entity.Post;
import com.codiary.backend.global.domain.entity.Bookmark;
import com.codiary.backend.global.domain.entity.mapping.MemberCategory;
import com.codiary.backend.global.domain.enums.TechStack;
import com.codiary.backend.global.service.MemberService.MemberCommandService;
import com.codiary.backend.global.service.MemberService.MemberCommandServiceImpl;
import com.codiary.backend.global.service.MemberService.MemberQueryService;
import com.codiary.backend.global.web.dto.Bookmark.BookmarkResponseDTO;
import com.codiary.backend.global.web.dto.Member.MemberRequestDTO;
import com.codiary.backend.global.web.dto.Member.MemberResponseDTO;
import com.codiary.backend.global.web.dto.Post.PostResponseDTO;
Expand Down Expand Up @@ -44,6 +42,7 @@ public class MemberController {
private final MemberCommandService memberCommandService;
private final FollowService followService;
private final MemberQueryService memberQueryService;
private final MemberConverter memberConverter;

@PostMapping("/sign-up")
@Operation(
Expand Down Expand Up @@ -183,4 +182,12 @@ public ApiResponse<MemberResponseDTO.UserProfileDTO> getUserProfile(@PathVariabl
Member member = memberCommandService.getRequester();
return ApiResponse.onSuccess(SuccessStatus.MEMBER_OK, memberQueryService.getUserProfile(userId, member));
}

@PostMapping(path = "/techstacks")
@Operation(summary = "기술 스택 추가하기", description = "기술 스택 하나씩 추가")
public ApiResponse<MemberResponseDTO.TechStacksDTO> setTechStacks(@RequestParam(value = "techstack") TechStack techstack) {
Member member = memberCommandService.getRequester();
member = memberCommandService.setTechStacks(member.getMemberId(), techstack);
return ApiResponse.onSuccess(SuccessStatus.MEMBER_OK, memberConverter.toTechStacksResponseDto(member));
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.codiary.backend.global.web.dto.Member;

import com.codiary.backend.global.domain.enums.TechStack;
import com.codiary.backend.global.jwt.TokenInfo;
import lombok.*;

Expand All @@ -20,7 +21,6 @@ public static class MemberTokenResponseDTO {
}



// 회원별 북마크 리스트 조회
@Builder
@Getter
Expand Down Expand Up @@ -94,9 +94,18 @@ public static class UserProfileDTO {
String linkedinUrl;
String discordUrl;
String introduction;
List<String> techStacksList;
List<TechStack> techStacksList;
List<String> teamList;
Boolean myPage;
}

@Builder
@AllArgsConstructor
@NoArgsConstructor // 기본 생성자 추가
@Getter
@Setter
public static class TechStacksDTO {
private Long memberId;
private List<TechStack> techStackList;
}
}

0 comments on commit c4eb871

Please sign in to comment.