From c497852ca5d94ad2ccbcd77d6b89e236e210f0b6 Mon Sep 17 00:00:00 2001 From: LocKey Date: Sat, 29 Aug 2026 22:44:14 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90=20=EB=B0=8F?= =?UTF-8?q?=20=EC=95=8C=EB=A6=BC=20=EC=84=A4=EC=A0=95=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/domain/NotificationChannel.java | 7 +++ .../user/domain/NotificationPreference.java | 55 +++++++++++++++++++ .../notification/user/domain/Platform.java | 6 ++ .../notification/user/domain/User.java | 36 ++++++++++++ .../notification/user/domain/UserDevice.java | 53 ++++++++++++++++++ 5 files changed, 157 insertions(+) create mode 100644 src/main/java/com/backendsystemdesignlab/notification/user/domain/NotificationChannel.java create mode 100644 src/main/java/com/backendsystemdesignlab/notification/user/domain/NotificationPreference.java create mode 100644 src/main/java/com/backendsystemdesignlab/notification/user/domain/Platform.java create mode 100644 src/main/java/com/backendsystemdesignlab/notification/user/domain/User.java create mode 100644 src/main/java/com/backendsystemdesignlab/notification/user/domain/UserDevice.java diff --git a/src/main/java/com/backendsystemdesignlab/notification/user/domain/NotificationChannel.java b/src/main/java/com/backendsystemdesignlab/notification/user/domain/NotificationChannel.java new file mode 100644 index 0000000..2804af5 --- /dev/null +++ b/src/main/java/com/backendsystemdesignlab/notification/user/domain/NotificationChannel.java @@ -0,0 +1,7 @@ +package com.backendsystemdesignlab.notification.user.domain; + +public enum NotificationChannel { + PUSH, + SMS, + EMAIL +} diff --git a/src/main/java/com/backendsystemdesignlab/notification/user/domain/NotificationPreference.java b/src/main/java/com/backendsystemdesignlab/notification/user/domain/NotificationPreference.java new file mode 100644 index 0000000..04b6d12 --- /dev/null +++ b/src/main/java/com/backendsystemdesignlab/notification/user/domain/NotificationPreference.java @@ -0,0 +1,55 @@ +package com.backendsystemdesignlab.notification.user.domain; + +import jakarta.persistence.*; + +@Entity +@Table( + name = "notification_preferences", + uniqueConstraints = { + @UniqueConstraint( + name = "uk_user_channel", + columnNames = {"user_id", "channel"} + ) + } +) +public class NotificationPreference { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(name = "user_id") + private User user; + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private NotificationChannel channel; + + @Column(nullable = false) + private boolean enabled; + + protected NotificationPreference() {} + + public NotificationPreference(User user, NotificationChannel channel, boolean enabled) { + this.user = user; + this.channel = channel; + this.enabled = enabled; + } + + public Long getId() { + return id; + } + + public User getUser() { + return user; + } + + public NotificationChannel getChannel() { + return channel; + } + + public boolean isEnabled() { + return enabled; + } +} diff --git a/src/main/java/com/backendsystemdesignlab/notification/user/domain/Platform.java b/src/main/java/com/backendsystemdesignlab/notification/user/domain/Platform.java new file mode 100644 index 0000000..a219475 --- /dev/null +++ b/src/main/java/com/backendsystemdesignlab/notification/user/domain/Platform.java @@ -0,0 +1,6 @@ +package com.backendsystemdesignlab.notification.user.domain; + +public enum Platform { + IOS, + ANDROID +} diff --git a/src/main/java/com/backendsystemdesignlab/notification/user/domain/User.java b/src/main/java/com/backendsystemdesignlab/notification/user/domain/User.java new file mode 100644 index 0000000..34a0376 --- /dev/null +++ b/src/main/java/com/backendsystemdesignlab/notification/user/domain/User.java @@ -0,0 +1,36 @@ +package com.backendsystemdesignlab.notification.user.domain; + +import jakarta.persistence.*; + +@Entity +@Table(name = "users") +public class User { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(length = 255) + private String email; + + @Column(length = 30) + private String phoneNumber; + + protected User() {} + + public User(String email, String phoneNumber) { + this.email = email; + this.phoneNumber = phoneNumber; + } + + public Long getId() { + return id; + } + + public String getEmail() { + return email; + } + public String getPhoneNumber() { + return phoneNumber; + } +} diff --git a/src/main/java/com/backendsystemdesignlab/notification/user/domain/UserDevice.java b/src/main/java/com/backendsystemdesignlab/notification/user/domain/UserDevice.java new file mode 100644 index 0000000..6bfe963 --- /dev/null +++ b/src/main/java/com/backendsystemdesignlab/notification/user/domain/UserDevice.java @@ -0,0 +1,53 @@ +package com.backendsystemdesignlab.notification.user.domain; + +import jakarta.persistence.*; + +@Entity +@Table(name = "user_devices") +public class UserDevice { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(name = "user_id") + private User user; + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private Platform platform; + + @Column(nullable = false, unique = true, length = 512) + private String deviceToken; + + @Column(nullable = false) + private boolean active; + + protected UserDevice() {} + + public UserDevice(User user, Platform platform, String deviceToken) { + this.user = user; + this.platform = platform; + this.deviceToken = deviceToken; + } + + public Long getId() { + return id; + } + + public User getUser() { + return user; + } + public Platform getPlatform() { + return platform; + } + + public String getDeviceToken() { + return deviceToken; + } + + public boolean isActive() { + return active; + } +}