Skip to content
Open
Show file tree
Hide file tree
Changes from 3 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
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,15 @@
import java.util.Collection;
import java.util.Map;
import java.util.Objects;

import lombok.Getter;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.oauth2.core.user.OAuth2User;

@Getter

public class CustomOAuth2User implements OAuth2User, Serializable {

private final Long id;
Expand Down Expand Up @@ -70,4 +74,6 @@ public String toString() {
.append("[OAuth2UserInfo]")
.toString();
}


}
Original file line number Diff line number Diff line change
@@ -1,12 +1,31 @@
package com.sequence.anonymous.user.application;

import com.sequence.anonymous.security.CustomOAuth2User;
import com.sequence.anonymous.user.domain.repository.UserRepository;
import com.sequence.anonymous.user.domain.user.Gender;
import com.sequence.anonymous.user.domain.user.User;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.stereotype.Service;

import java.util.Optional;

@RequiredArgsConstructor
@Service
public class UserService {

private final UserRepository userRepository;


public User findById(Long userId) {
return userRepository.findById(userId)
.orElseThrow(() -> new IllegalArgumentException("not found : " + userId));
}

public User findByName(String userName) {
return userRepository.findByName(userName)
.orElseThrow(() -> new IllegalArgumentException("not found : " + userName));
}


}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.sequence.anonymous.user.domain.repository;

import com.sequence.anonymous.user.domain.user.User;

import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
Expand All @@ -9,4 +10,7 @@
public interface UserRepository extends JpaRepository<User, Long> {

Optional<User> findByEmailAndProviderId(String email, String providerId);

Optional<User> findByName(String name);

}
35 changes: 35 additions & 0 deletions src/main/java/com/sequence/anonymous/user/dto/UserResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.sequence.anonymous.user.dto;

import com.sequence.anonymous.user.domain.user.Gender;
import com.sequence.anonymous.user.domain.user.OAuth2Provider;
import com.sequence.anonymous.user.domain.user.Role;
import com.sequence.anonymous.user.domain.user.User;
import lombok.Getter;


@Getter

public class UserResponse {

private final Long id;
private final String providerId;
private final OAuth2Provider provider;
private final String name;
private final Integer age;
private final Gender gender;
private final String email;
private final Role role;
private final Boolean withdrawal;

public UserResponse(User user){
this.id = user.getId();
this.providerId = user.getProviderId();
this.provider = user.getProvider();
this.name = user.getName();
this.age = user.getAge();
this.gender = user.getGender();
this.email = user.getEmail();
this.role = user.getRole();
this.withdrawal = user.getWithdrawal();
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,57 @@
package com.sequence.anonymous.user.presentation;

import com.sequence.anonymous.security.CustomOAuth2User;
import com.sequence.anonymous.user.application.UserService;
import com.sequence.anonymous.user.domain.user.Gender;
import com.sequence.anonymous.user.domain.user.User;
import com.sequence.anonymous.user.dto.UserResponse;
import jakarta.transaction.Transactional;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;

import org.springframework.web.bind.annotation.*;

@Transactional
@RequiredArgsConstructor
@RestController
@RequestMapping("/users")
public class UserController {

private final UserService userService;

@GetMapping("/me")
public ResponseEntity<UserResponse> findMyInfo(@AuthenticationPrincipal CustomOAuth2User user){
Long currentUserId = user.getId();
User currentUser = userService.findById(currentUserId);

return ResponseEntity.ok(new UserResponse((User) currentUser));

}

@GetMapping
public ResponseEntity<UserResponse> findUser(@RequestParam(name = "id", required = false) Long id,
@RequestParam(name = "name", required = false) String name) {
if (id != null) {
User user = userService.findById(id);
return ResponseEntity.ok(new UserResponse(user));
}

else if (name != null) {
User user = userService.findByName(name);
return ResponseEntity.ok(new UserResponse(user));
}

else {
throw new IllegalArgumentException("Unexpected user");
}
}



@PostMapping("/profiles")
public void initializeProfile(User user, String name, Integer age, Gender gender) {
user.initializeProfile(name, age, gender);
}

}