Skip to content

Commit

Permalink
Merge pull request #9 from 7th-UMC-Hackathon-TeamV/feat/login
Browse files Browse the repository at this point in the history
로그인 구현
  • Loading branch information
bikooju authored Jan 11, 2025
2 parents a3d5b51 + a70cec8 commit 581a6be
Show file tree
Hide file tree
Showing 14 changed files with 139 additions and 29 deletions.
4 changes: 4 additions & 0 deletions src/main/java/banban/springboot/domain/entity/Group.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package banban.springboot.domain.entity;

public class Group {
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,18 @@
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
public class Member {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(nullable = false, length = 10)
private String username;

@Column(nullable = false, length = 20)
private String name;
private String password;

@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
@OneToMany(mappedBy = "member", cascade = CascadeType.ALL)
private List<News> NewsList = new ArrayList<>();
}
6 changes: 5 additions & 1 deletion src/main/java/banban/springboot/domain/entity/News.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class News {
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(nullable = false, length = 30)
@Column(nullable = false, length = 20)
private String headline;;

@Column(nullable = false, length = 1000)
Expand All @@ -42,4 +42,8 @@ public class News {
@Column(nullable = false)
private LocalDateTime createdAt = LocalDateTime.now();

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

}
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package banban.springboot.repository;

import banban.springboot.domain.entity.Member;
import org.apache.catalina.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByUsername(String userId);
public interface MemberRepository extends JpaRepository<Member, Long> {
Optional<Member> findByUsername(String userId);
}
55 changes: 55 additions & 0 deletions src/main/java/banban/springboot/service/MemberService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package banban.springboot.service;

import banban.springboot.domain.entity.Member;
import banban.springboot.repository.MemberRepository;
import banban.springboot.web.dto.request.MemberRequestDTO;
import banban.springboot.web.dto.response.MemberResponseDTO;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.Optional;

@Service
@RequiredArgsConstructor
public class MemberService {
private final MemberRepository memberRepository;

public MemberResponseDTO createUser(MemberRequestDTO memberRequestDTO) {
//DTO to Entity
Member member = Member.builder()
.username(memberRequestDTO.getUsername())
.password(memberRequestDTO.getPassword())
.build();

//saved to repository
Member savedMember = memberRepository.save(member);

// Entity to ResponseDTO
return MemberResponseDTO.builder()
.id(savedMember.getId())
.username(savedMember.getUsername())
.build();
}

//ID로 사용자 조회
public MemberResponseDTO findMemberById(Long id) {
Member member = memberRepository.findById(id)
.orElseThrow(() -> new RuntimeException("사용자 조회를 할 수 없습니다."));

return MemberResponseDTO.builder()
.id(member.getId())
.username(member.getUsername())
.build();
}

//Username으로 사용자 조회
public MemberResponseDTO getMemberByUsername(String username) {
Member member = memberRepository.findByUsername(username)
.orElseThrow(() -> new RuntimeException("사용자 조회를 할 수 없습니다."));

return MemberResponseDTO.builder()
.id(member.getId())
.username(member.getUsername())
.build();
}
}
8 changes: 0 additions & 8 deletions src/main/java/banban/springboot/service/UserService.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package banban.springboot.web.controller;

import banban.springboot.apiPayload.ApiResponse;
import banban.springboot.service.MemberService;
import banban.springboot.web.dto.request.MemberRequestDTO;
import banban.springboot.web.dto.response.MemberResponseDTO;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api")
@RequiredArgsConstructor
public class MemberController {

private final MemberService memberService;

/**
* 사용자 생성 API
*/
@PostMapping("/users/login")
public ApiResponse<MemberResponseDTO> createUser(@RequestBody @Valid MemberRequestDTO memberRequestDTO) {
MemberResponseDTO MemberResponseDTO = memberService.createUser(memberRequestDTO);
return ApiResponse.onSuccess(MemberResponseDTO);
}

/**
* ID로 사용자 조회 API
*/
@GetMapping("/users/login/{memberId}")
public ApiResponse<MemberResponseDTO> getUserById(@PathVariable Long memberId) {
MemberResponseDTO MemberResponseDTO = memberService.findMemberById(memberId);
return ApiResponse.onSuccess(MemberResponseDTO);
}

/**
* Username으로 사용자 조회 API
*/
@GetMapping("/users/login/username")
public ApiResponse<MemberResponseDTO> getUserByUsername(@RequestParam String username) {
MemberResponseDTO MemberResponseDTO = memberService.getMemberByUsername(username);
return ApiResponse.onSuccess(MemberResponseDTO);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package banban.springboot.web.dto.request;

public class GroupRequestDTO {
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
package banban.springboot.web.dto.request;

import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Size;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Builder
public class UserRequestDTO {
private String id;
@Max(20)
public class MemberRequestDTO {

@Size(max=10)
private String username;

@Max(20)
@Size(max=20)
private String password;
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package banban.springboot.web.dto.request;

import banban.springboot.domain.enums.NewsCategories;
import jakarta.persistence.GeneratedValue;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
Expand All @@ -16,7 +15,7 @@
@Setter
public class NewsRequestDTO {
@NotBlank
@Size(max = 30, message = "뉴스 헤드라인은 최대 30자입니다.")
@Size(max = 20, message = "뉴스 헤드라인은 최대 20자입니다.")
private String headline;

@NotBlank
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package banban.springboot.web.dto.response;

public class GroupResponseDTO {
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class UserResponseDTO {
private String userId;
private String password;
public class MemberResponseDTO {
private Long id;
private String username;
}
2 changes: 1 addition & 1 deletion src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ spring:
format_sql: true
use_sql_comments: true
hbm2ddl:
auto: update
auto: create
default_batch_fetch_size: 1000

cloud:
Expand Down

0 comments on commit 581a6be

Please sign in to comment.