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
1 change: 1 addition & 0 deletions .github/workflows/CICD.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ on:
push:
branches:
- main
- develop

permissions:
contents: read
Expand Down
4 changes: 4 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ dependencies {
annotationProcessor 'org.projectlombok:lombok'

testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
implementation 'org.junit.platform:junit-platform-launcher'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'mysql:mysql-connector-java:8.0.33'
implementation 'org.springframework.boot:spring-boot-starter-validation'
Expand All @@ -37,6 +38,9 @@ dependencies {

implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'

implementation 'org.springdoc:springdoc-openapi-ui:1.6.14'

}

tasks.named('test') {
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/kw/zeropick/common/LoginUser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package kw.zeropick.common;

import lombok.Getter;

@Getter
public class LoginUser {

private Long id;
private static final LoginUser LOGIN_USER = new LoginUser(1L);

public LoginUser(Long id) {
this.id = id;
}

public static LoginUser get() {
return LOGIN_USER;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package kw.zeropick.common.domain.exception;

public class ResourceNotFoundException extends RuntimeException{
public ResourceNotFoundException(String dataSource, long id) {
super(dataSource + "에서 ID " + id + "를 찾을 수 없습니다.");
}
}
89 changes: 87 additions & 2 deletions src/main/java/kw/zeropick/member/controller/MemberController.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,92 @@
package kw.zeropick.member.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import kw.zeropick.common.LoginUser;
import kw.zeropick.member.controller.response.CreateMemberResponse;
import kw.zeropick.member.controller.response.MemberFieldResponse;
import kw.zeropick.member.controller.response.MemberInfoResponse;
import kw.zeropick.member.domain.Member;
import kw.zeropick.member.dto.MemberFieldDto;
import kw.zeropick.member.dto.MemberInfoChangeDto;
import kw.zeropick.member.dto.MemberJoinDto;
import kw.zeropick.member.service.MemberService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@Tag(name = "member", description = "회원 관리 API")
@RestController
@RequestMapping("/member")
@RequiredArgsConstructor
public class MemberController {

private final MemberService memberService;

@Operation(
summary = "회원가입 요청",
description = "회원가입 요청을 받아 성공/실패 여부를 반환합니다.")
@PostMapping
public ResponseEntity<CreateMemberResponse> saveMember(@RequestBody @Valid MemberJoinDto memberJoinDto) {
Member joinMember = memberService.join(memberJoinDto);

return ResponseEntity
.status(HttpStatus.CREATED)
.body(new CreateMemberResponse(joinMember.getId(), "Member created successfully"));
}

@Operation(
summary = "내 정보 조회",
description = "마이페이지에서 내 정보들을 가져옵니다.")
@GetMapping("/myPage/info")
public ResponseEntity<MemberInfoResponse> getInfo() {
Long loginUser = LoginUser.get().getId();
MemberInfoResponse memberInfoResponse = memberService.getMemberInfo(loginUser);
return ResponseEntity
.status(HttpStatus.OK)
.body(memberInfoResponse);
}

@Operation(
summary = "내 정보 수정",
description = "내 정보 수정 요청을 받아 성공/실패를 반환합니다.")
@PutMapping("/myPage/info")
public ResponseEntity<Boolean> changeMemberInfo(@RequestBody @Valid MemberInfoChangeDto memberInfoChangeDto) {
Long loginUser = LoginUser.get().getId();
memberService.updateMemberInfo(loginUser, memberInfoChangeDto);
return ResponseEntity.ok(Boolean.TRUE);
}

@Operation(
summary = "관심분야 조회",
description = "마이페이지에서 관심분야를 조회합니다.")
@GetMapping("/myPage/field")
public ResponseEntity<MemberFieldResponse> getField() {
Long loginUser = LoginUser.get().getId();
List<String> memberField = memberService.getMemberField(loginUser);
return ResponseEntity.ok().body(new MemberFieldResponse(memberField));
}

@Operation(
summary = "관심분야 등록/수정",
description = "초기/마이페이지에서 관심분야를 등록/수정합니다.")
@PostMapping({"/field", "/myPage/field"})
public ResponseEntity<Boolean> postField(@RequestBody MemberFieldDto memberFieldDto) {

Long loginUserId = LoginUser.get().getId();
memberService.updateMemberField(loginUserId, memberFieldDto);
return ResponseEntity.ok(Boolean.TRUE);
}

}






Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package kw.zeropick.member.controller.response;

import lombok.Data;

@Data
public class CreateMemberResponse {
private Long id;
private String message;

public CreateMemberResponse(String message) {
this.message = message;
}
public CreateMemberResponse(Long id, String message){
this.id = id;
this.message = message;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package kw.zeropick.member.controller.response;


import lombok.Data;

import java.util.List;

@Data
public class MemberFieldResponse{
private List<String> field;

public MemberFieldResponse(){

}

public MemberFieldResponse(List<String> field) {
this.field = field;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package kw.zeropick.member.controller.response;


import lombok.Builder;
import lombok.Data;

import java.time.LocalDate;

@Data
public class MemberInfoResponse {
private String email;
private String name;
private String phoneNumber;
private LocalDate birthDate;

public MemberInfoResponse() {
}

@Builder
public MemberInfoResponse(String email, String name, String phoneNumber, LocalDate birthDate) {
this.email = email;
this.name = name;
this.phoneNumber = phoneNumber;
this.birthDate = birthDate;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package kw.zeropick.member.controller.response;


import lombok.Data;

@Data
public class ResultResponse{
private String message;

public ResultResponse(){
}

public ResultResponse(String message) {
this.message = message;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package kw.zeropick.member.converter;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.persistence.AttributeConverter;
import jakarta.persistence.Converter;

import java.util.List;

@Converter
public class StringListConverter implements AttributeConverter<List<String>, String> {

private final ObjectMapper mapper = new ObjectMapper();


@Override
public String convertToDatabaseColumn(List<String> entityData) {
try {
return mapper.writeValueAsString(entityData);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}

@Override
public List<String> convertToEntityAttribute(String dbData) {
try {
return mapper.readValue(dbData, List.class);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
}
21 changes: 0 additions & 21 deletions src/main/java/kw/zeropick/member/domain/Bookmark.java

This file was deleted.

11 changes: 11 additions & 0 deletions src/main/java/kw/zeropick/member/domain/MarketingAgree.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package kw.zeropick.member.domain;

public enum MarketingAgree {
BOTH,

EMAIL,

SMS,

NONE
}
46 changes: 37 additions & 9 deletions src/main/java/kw/zeropick/member/domain/Member.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
package kw.zeropick.member.domain;


import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import kw.zeropick.common.converter.StringListToStringConverter;
import kw.zeropick.common.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.*;

import java.time.LocalDate;
import java.util.List;
Expand All @@ -17,9 +14,9 @@
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Member extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public class Member {

@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "member_id")
private Long id;

Expand All @@ -29,18 +26,49 @@ public class Member extends BaseEntity {
@NotNull
private String name;

@NotNull
private String phoneNumber;

@NotNull
private LocalDate birthDate;

@NotNull
private String password;


@Convert(converter = StringListToStringConverter.class)
private List<String> memberPositiveTag;
private List<String> field;

@NotNull
@Enumerated(EnumType.STRING)
private MarketingAgree marketingAgree;

@NotNull
@Enumerated(EnumType.STRING)
private State userState;

private LocalDate deleteDate;


public Member( String email, String name, String phoneNumber, LocalDate birthDate, String password, MarketingAgree marketingAgree, State userState) {
this.email = email;
this.name = name;
this.phoneNumber = phoneNumber;
this.birthDate = birthDate;
this.password = password;
this.marketingAgree = marketingAgree;
this.userState = userState;
}

public void changeFieldInfo(List<String> field){
this.field = field;
}

public void changeMemberInfo(String phoneNumber, LocalDate birthDate, MarketingAgree marketingAgree){
this.phoneNumber = phoneNumber;
this.birthDate = birthDate;
this.marketingAgree = marketingAgree;
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package kw.zeropick.member.domain.exception;

public class ConfirmPasswordMismatchException extends RuntimeException {
public ConfirmPasswordMismatchException() {
super("Passwords do not match");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package kw.zeropick.member.domain.exception;

public class FieldUpdateException extends RuntimeException{
public FieldUpdateException() {super("Field update fail.");
}
}
Loading