Skip to content

Commit 6ea5534

Browse files
authored
Merge pull request #8 from DocGrid/feature/7
[Feat] McpAccessToken 엔티티 및 Flyway 마이그레이션 추가
2 parents 6f751e9 + 1d2d1bb commit 6ea5534

2 files changed

Lines changed: 81 additions & 0 deletions

File tree

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package com.opensource.docgrid.domain.user.entity;
2+
3+
import java.time.LocalDateTime;
4+
5+
import jakarta.persistence.Column;
6+
import jakarta.persistence.Entity;
7+
import jakarta.persistence.FetchType;
8+
import jakarta.persistence.GeneratedValue;
9+
import jakarta.persistence.GenerationType;
10+
import jakarta.persistence.Id;
11+
import jakarta.persistence.Index;
12+
import jakarta.persistence.JoinColumn;
13+
import jakarta.persistence.ManyToOne;
14+
import jakarta.persistence.Table;
15+
import lombok.AccessLevel;
16+
import lombok.Builder;
17+
import lombok.Getter;
18+
import lombok.NoArgsConstructor;
19+
20+
@Getter
21+
@Entity
22+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
23+
@Table(
24+
name = "mcp_access_tokens",
25+
indexes = {
26+
@Index(name = "idx_mcp_access_tokens_user_id", columnList = "user_id")
27+
}
28+
)
29+
public class McpAccessToken {
30+
31+
@Id
32+
@GeneratedValue(strategy = GenerationType.IDENTITY)
33+
private Long id;
34+
35+
@ManyToOne(fetch = FetchType.LAZY)
36+
@JoinColumn(name = "user_id", nullable = false)
37+
private User user;
38+
39+
@Column(name = "token_hash", nullable = false, length = 255)
40+
private String tokenHash;
41+
42+
// BaseEntity 미사용 — updated_at 없는 스키마에 맞춰 직접 관리
43+
@Column(name = "created_at", nullable = false, updatable = false)
44+
private LocalDateTime createdAt;
45+
46+
@Column(name = "last_used_at")
47+
private LocalDateTime lastUsedAt;
48+
49+
@Column(name = "revoked_at")
50+
private LocalDateTime revokedAt;
51+
52+
@Builder
53+
public McpAccessToken(User user, String tokenHash) {
54+
this.user = user;
55+
this.tokenHash = tokenHash;
56+
this.createdAt = LocalDateTime.now();
57+
}
58+
59+
public void recordUsage(LocalDateTime usedAt) {
60+
this.lastUsedAt = usedAt;
61+
}
62+
63+
public void revoke(LocalDateTime revokedAt) {
64+
this.revokedAt = revokedAt;
65+
}
66+
67+
public boolean isRevoked() {
68+
return this.revokedAt != null;
69+
}
70+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
-- mcp_access_tokens: MCP API 접근 토큰 테이블
2+
CREATE TABLE mcp_access_tokens (
3+
id BIGSERIAL PRIMARY KEY,
4+
user_id BIGINT NOT NULL REFERENCES users(id),
5+
token_hash VARCHAR(255) NOT NULL,
6+
created_at TIMESTAMP NOT NULL DEFAULT now(),
7+
last_used_at TIMESTAMP,
8+
revoked_at TIMESTAMP
9+
);
10+
11+
CREATE INDEX idx_mcp_access_tokens_user_id ON mcp_access_tokens (user_id);

0 commit comments

Comments
 (0)