application.yml
spring:
data:
mongodb:
uri: mongodb+srv://{ID}:{PASSWORD}@{CLUSTERNAME1}.{CLUSTERNAME2}.mongodb.net/?retryWrites=true&w=majority
database: {NAME}
Entity 만들기
package sanga.spring.study.entity;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.*;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "member")
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Member {
@Id
private String userId;
private String username;
@JsonIgnore
private String password;
private String nickname;
@JsonIgnore
private boolean activated;
}
Repository 만들기
package sanga.spring.study.repository;
import org.springframework.data.mongodb.repository.MongoRepository;
import sanga.spring.study.entity.Member;
import java.util.Optional;
public interface MemberRepository extends MongoRepository<Member, Long> {
Optional<Member> findByUsername(String username);
}
Service 만들기
package sanga.spring.study.service;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import sanga.spring.study.dto.UserDto;
import sanga.spring.study.entity.Member;
import sanga.spring.study.repository.MemberRepository;
import sanga.spring.study.util.SecurityUtil;
import java.util.Optional;
@Service
public class MemberService {
private final MemberRepository memberRepository;
private final PasswordEncoder passwordEncoder;
public MemberService(MemberRepository userRepository, PasswordEncoder passwordEncoder) {
this.memberRepository = userRepository;
this.passwordEncoder = passwordEncoder;
}
@Transactional
public Member signup(UserDto userDto) {
if(memberRepository.findByUsername(userDto.getUsername()).orElse(null) != null) {
throw new RuntimeException("Already join");
}
Member member = Member.builder()
.username(userDto.getUsername())
.password(passwordEncoder.encode(userDto.getPassword()))
.nickname(userDto.getNickname())
.activated(true)
.build();
return memberRepository.save(member);
}
@Transactional(readOnly = true)
public Optional<Member> getUser(String username) {
return memberRepository.findByUsername(username);
}
@Transactional(readOnly = true)
public Optional<Member> getMyUserWithAuthorities() {
return SecurityUtil.getCurrentUsername().flatMap(memberRepository::findByUsername);
}
}