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; + } +}