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
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.back.domain.mybar.controller;

import com.back.domain.mybar.dto.MyBarListResponseDto;
import com.back.domain.mybar.service.MyBarService;
import com.back.global.rsData.RsData;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/me/bar")
@RequiredArgsConstructor
@Validated
public class MyBarController {

private final MyBarService myBarService;

@GetMapping
public RsData<MyBarListResponseDto> getMyBarList(
@AuthenticationPrincipal(expression = "id") Long userId,
@RequestParam(defaultValue = "0") @Min(0) int page,
@RequestParam(defaultValue = "20") @Min(1) @Max(100) int pageSize
) {
MyBarListResponseDto body = myBarService.getMyBar(userId, page, pageSize);
return RsData.successOf(body); // code=200, message="success"
}
}
27 changes: 27 additions & 0 deletions src/main/java/com/back/domain/mybar/dto/MyBarItemResponseDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.back.domain.mybar.dto;

import com.back.domain.mybar.entity.MyBar;
import lombok.Builder;
import lombok.Getter;

import java.time.LocalDateTime;

@Getter
@Builder
public class MyBarItemResponseDto {
private Long id;
private Long cocktailId;
private String cocktailName;
private String imageUrl;
private LocalDateTime createdAt;

public static MyBarItemResponseDto from(MyBar m) {
return MyBarItemResponseDto.builder()
.id(m.getId())
.cocktailId(m.getCocktail().getCocktailId())
.cocktailName(m.getCocktail().getCocktailName())
.imageUrl(m.getCocktail().getImageUrl())
.createdAt(m.getCreatedAt())
.build();
}
}
14 changes: 14 additions & 0 deletions src/main/java/com/back/domain/mybar/dto/MyBarListResponseDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.back.domain.mybar.dto;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.List;

@Getter
@AllArgsConstructor
public class MyBarListResponseDto {
private List<MyBarItemResponseDto> items;
private boolean hasNext; // 다음 페이지 존재 여부
private Integer nextPage; // 다음 페이지 번호(없으면 null)
}
47 changes: 47 additions & 0 deletions src/main/java/com/back/domain/mybar/entity/MyBar.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.back.domain.mybar.entity;

import com.back.domain.cocktail.entity.Cocktail;
import com.back.domain.mybar.enums.KeepStatus;
import com.back.domain.user.entity.User;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import java.time.LocalDateTime;

@Entity
@Getter
@Setter
@NoArgsConstructor
@EntityListeners(AuditingEntityListener.class)
public class MyBar {

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

/** 킵 생성 시각 */
@CreatedDate
private LocalDateTime createdAt;

/** 킵 해제 시각 (ACTIVE일 때는 null) */
private LocalDateTime deletedAt;

/** 킵한 사용자 */
@ManyToOne
private User user;

/** 킵한 칵테일 */
@ManyToOne
private Cocktail cocktail;

/** 킵 상태 */
@Enumerated(EnumType.STRING)
@Column(nullable = false)
// 기본값은 ACTIVE (활성 상태)
// ACTIVE: 킵한 상태, DELETED: 킵 해제한 상태 (Soft Delete)
private KeepStatus status = KeepStatus.ACTIVE;
}
9 changes: 9 additions & 0 deletions src/main/java/com/back/domain/mybar/enums/KeepStatus.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.back.domain.mybar.enums;

import lombok.Getter;

@Getter
public enum KeepStatus {
ACTIVE,
DELETED
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.back.domain.mybar.repository;

import com.back.domain.mybar.entity.MyBar;
import com.back.domain.mybar.enums.KeepStatus;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface MyBarRepository extends JpaRepository<MyBar, Long> {
/** 나만의 bar(킵) 목록: ACTIVE만, id desc */
Page<MyBar> findByUserIdAndStatusOrderByIdDesc(Long userId, KeepStatus status, Pageable pageable);

/** 프로필/요약용: ACTIVE 개수 */
long countByUserIdAndStatus(Long userId, KeepStatus status);
}
36 changes: 36 additions & 0 deletions src/main/java/com/back/domain/mybar/service/MyBarService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.back.domain.mybar.service;

import com.back.domain.mybar.dto.MyBarItemResponseDto;
import com.back.domain.mybar.dto.MyBarListResponseDto;
import com.back.domain.mybar.entity.MyBar;
import com.back.domain.mybar.enums.KeepStatus;
import com.back.domain.mybar.repository.MyBarRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

@Service
@RequiredArgsConstructor
public class MyBarService {

private final MyBarRepository myBarRepository;

@Transactional(readOnly = true)
public MyBarListResponseDto getMyBar(Long userId, int page, int pageSize) {
Page<MyBar> myBarPage = myBarRepository.findByUserIdAndStatusOrderByIdDesc(userId, KeepStatus.ACTIVE, PageRequest.of(page, pageSize));

List<MyBar> myBars = myBarPage.getContent();
List<MyBarItemResponseDto> items = new ArrayList<>();
for (MyBar myBar : myBars) items.add(MyBarItemResponseDto.from(myBar));

boolean hasNext = myBarPage.hasNext();
Integer nextPage = hasNext ? myBarPage.getNumber() + 1 : null;

return new MyBarListResponseDto(items, hasNext, nextPage);
}
}
22 changes: 0 additions & 22 deletions src/main/java/com/back/domain/wishlist/dto/WishlistRequestDto.java

This file was deleted.

This file was deleted.

37 changes: 0 additions & 37 deletions src/main/java/com/back/domain/wishlist/entity/Wishlist.java

This file was deleted.

This file was deleted.

This file was deleted.