Skip to content

Commit

Permalink
[feat] 즐겨찾기 생성, 조회 api
Browse files Browse the repository at this point in the history
  • Loading branch information
MinchoGreenT committed Nov 11, 2023
1 parent 5483883 commit b6b1cb0
Show file tree
Hide file tree
Showing 8 changed files with 151 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
package com.garam.garam_e_spring.domain.user.controller;

import com.garam.garam_e_spring.domain.user.dto.req.BookmarkRequestDto;
import com.garam.garam_e_spring.domain.user.dto.req.UserRequestDto;
import com.garam.garam_e_spring.domain.user.dto.res.BookmarkCreateResponseDto;
import com.garam.garam_e_spring.domain.user.dto.res.UserResponseDto;
import com.garam.garam_e_spring.global.jwt.JwtTokenProvider;
import com.garam.garam_e_spring.global.response.BaseResponseDto;
import com.garam.garam_e_spring.global.response.ErrorMessage;
import com.garam.garam_e_spring.domain.user.service.EmailService;
import com.garam.garam_e_spring.domain.user.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.*;

@RequiredArgsConstructor

@RestController
@RequestMapping("/api/user")
public class UserController {
Expand Down Expand Up @@ -72,4 +77,17 @@ public BaseResponseDto<UserResponseDto.UpdateLanguage> updateLanguage(
return userService.updateLanguage(request.getLanguage(), request.getUserId());
}

@PostMapping("/bookmark")
public BaseResponseDto<BookmarkCreateResponseDto> createBookmark(
@RequestBody BookmarkRequestDto request
) {
return userService.createBookmark(request.getUserId(), request.getMessage());
}

@GetMapping("/bookmark/{userId}")
public BaseResponseDto<?> getBookmarks(
@PathVariable String userId
) {
return userService.getBookmark(userId);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.garam.garam_e_spring.domain.user.dto.req;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
@AllArgsConstructor
public class BookmarkRequestDto {

private String message;
private String userId;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.garam.garam_e_spring.domain.user.dto.res;


import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;


@Getter
@NoArgsConstructor
@AllArgsConstructor(staticName = "of")
public class BookmarkCreateResponseDto {

private String result;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.garam.garam_e_spring.domain.user.dto.res;


import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
@AllArgsConstructor(staticName = "of")
public class BookmarkResponseDto {

private String message;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.garam.garam_e_spring.domain.user.entity;

import com.garam.garam_e_spring.global.BaseEntity;
import lombok.*;
import lombok.experimental.SuperBuilder;

import javax.persistence.*;

@Getter
@SuperBuilder
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class Bookmark extends BaseEntity {

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

@Column
private String message;

@ManyToOne
@JoinColumn(name = "id")
private User user;

public static Bookmark createBookmark(String message, User user) {
Bookmark bookmark = Bookmark.builder()
.message(message)
.user(user)
.build();

user.addBookmark(bookmark);
return bookmark;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@ public class User extends BaseEntity implements UserDetails {
@Column
private String language;

@Column
@OneToMany(mappedBy = "user")
@Builder.Default
private List<Bookmark> bookmarks = new ArrayList<>();

@Column
@ElementCollection(fetch = FetchType.EAGER)
@Builder.Default
Expand Down Expand Up @@ -74,4 +79,8 @@ public boolean isCredentialsNonExpired() {
public boolean isEnabled() {
return true;
}

public void addBookmark(Bookmark bookmark){
this.bookmarks.add(bookmark);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.garam.garam_e_spring.domain.user.repository;

import com.garam.garam_e_spring.domain.user.entity.Bookmark;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface BookmarkRepository extends JpaRepository<Bookmark, Long> {
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package com.garam.garam_e_spring.domain.user.service;


import com.garam.garam_e_spring.domain.user.dto.res.BookmarkCreateResponseDto;
import com.garam.garam_e_spring.domain.user.entity.Bookmark;
import com.garam.garam_e_spring.domain.user.entity.User;
import com.garam.garam_e_spring.domain.user.repository.BookmarkRepository;
import com.garam.garam_e_spring.domain.user.repository.UserRepository;
import com.garam.garam_e_spring.domain.user.dto.req.UserRequestDto;
import com.garam.garam_e_spring.domain.user.dto.res.UserResponseDto;
Expand All @@ -21,6 +24,7 @@
import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;

@Slf4j
@Transactional
Expand All @@ -29,6 +33,7 @@
public class UserService {

private final UserRepository userRepository;
private final BookmarkRepository bookmarkRepository;
private final JwtTokenProvider jwtTokenProvider;
private final RedisTemplate<String, Object> redisTemplate;
private final PasswordEncoder passwordEncoder;
Expand Down Expand Up @@ -116,4 +121,33 @@ public BaseResponseDto<UserResponseDto.UpdateLanguage> updateLanguage(
});
return new BaseResponseDto<>(new UserResponseDto.UpdateLanguage(true, "언어 변경 성공"));
}

@Transactional
public BaseResponseDto<BookmarkCreateResponseDto> createBookmark(String id, String message) {
User user = userRepository.findByUserId(id).orElse(null);
if (user == null) {
throw new IllegalArgumentException("존재하지 않는 유저입니다.");
}

Bookmark newBookmark = Bookmark.createBookmark(message, user);
bookmarkRepository.save(newBookmark);

return new BaseResponseDto<>(BookmarkCreateResponseDto.of("북마크 생성 성공"));
}

@Transactional
public BaseResponseDto<List<String>> getBookmark(String userId) {

User user = userRepository.findByUserId(userId).orElse(null);
if (user == null) {
throw new IllegalArgumentException("존재하지 않는 유저입니다.");
}

List<Bookmark> bookmarks = user.getBookmarks();
List<String> result = bookmarks.stream()
.map(Bookmark::getMessage)
.collect(Collectors.toList());

return new BaseResponseDto<>(result);
}
}

0 comments on commit b6b1cb0

Please sign in to comment.