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,61 @@
package com.project.InsightPrep.domain.auth.controller;

import com.project.InsightPrep.global.auth.domain.CustomUserDetails;
import com.project.InsightPrep.domain.member.entity.Member;
import com.project.InsightPrep.global.auth.util.SecurityUtil;
import jakarta.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping
@RequiredArgsConstructor
public class TestController {

private final SecurityUtil securityUtil;

/*
- 컨트롤러에서 사용자 ID 등을 사용할 경우, "@AuthenticationPrincipal CustomUserDetails userDetails" 추가. 단, Service 단의 코드의 매개변수로 넘겨야됨.
- Service에서 SecurityUtil 사용 (이거 적용) - Controller에 @AuthenticationPrincipal CustomUserDetails userDetails 없어도 됨.
*/

@PreAuthorize("hasAnyRole('USER', 'ADMIN')")
@GetMapping("/debug/session")
public ResponseEntity<?> debugSession(@AuthenticationPrincipal CustomUserDetails userDetails, HttpSession session) { //
String sessionId = session.getId();
int sessionExpires = session.getMaxInactiveInterval();
Long memberId = (userDetails != null) ? userDetails.getMember().getId() : null;

Map<String, Object> debugInfo = new HashMap<>();
debugInfo.put("sessionId", sessionId);
debugInfo.put("sessionExpires", sessionExpires);
debugInfo.put("loginMemberId", memberId);

return ResponseEntity.ok(debugInfo);
}

@PreAuthorize("hasRole('USER')")
@GetMapping("/test/secure")
public String testSecure(@AuthenticationPrincipal CustomUserDetails userDetails) {
return "로그인한 사용자 ID: " + userDetails.getMember().getId();
}

@PreAuthorize("hasRole('USER')")
@GetMapping("/test/me")
public ResponseEntity<?> getMe() {
Member member = securityUtil.getAuthenticatedMember();
Map<String, Object> info = new HashMap<>();
info.put("id", member.getId());
info.put("email", member.getEmail());
info.put("nickname", member.getNickname());
info.put("role", member.getRole());
return ResponseEntity.ok(info);
}
}

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.project.InsightPrep.domain.coupon.entity;

import com.project.InsightPrep.global.common.entity.BaseTimeEntity;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Table(name = "coupon_event")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
public class CouponEvent extends BaseTimeEntity {

// 쿠폰 정의

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

private String name;
private int totalCount;
private int issuedCount;
private LocalDateTime startTime;
private LocalDateTime endTime;

@OneToMany(mappedBy = "couponEvent")
private List<CouponIssue> issues = new ArrayList<>();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.project.InsightPrep.domain.coupon.entity;

import com.project.InsightPrep.domain.member.entity.Member;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import java.time.LocalDateTime;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Table(name = "coupon_issue")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
public class CouponIssue {

// 발급 내역
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "coupon_event_id")
private CouponEvent couponEvent;

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

private LocalDateTime issuedAt;
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,7 @@ public class Member extends BaseTimeEntity {
@Column(nullable = false, length = 20)
private Role role; // USER / ADMIN

@Column(nullable = false)
private int dailyLimit = 10;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.project.InsightPrep.domain.member.entity;

import com.project.InsightPrep.global.common.entity.BaseTimeEntity;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Entity
@Table(name = "member_daily_limit")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Builder
public class MemberDailyLimit extends BaseTimeEntity {

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

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

private int questionCount;
}
Loading