Мне нужно создать несколько объектов, которые будут создавать резервные копии моего приложения, которые будут включать разговоры между пользователями. А пока представьте, что он имеет схожую функциональность с Tinder. Будут пользователи, и эти пользователи могут общаться с другими пользователями. Разговор никогда не будет состоять из более чем двух пользователей.
Я пытался создать сущность Пользователь, Разговор и Сообщение. Пользователь будет просто хранить основную информацию о пользователе. Диалог будет отслеживать двух участников, а объект сообщения будет содержать фактическое сообщение и метку времени. Я хочу использовать эту временную метку, чтобы при рендеринге открытых бесед пользователя я мог отсортировать их по беседе с самым последним отправленным сообщением. Может быть, я хочу метку времени в объекте Разговор?
У меня сейчас проблемы с компиляцией, но мне все равно не нравится мой подход. Я был бы очень признателен за любую помощь. Спасибо! Я также готов полностью изменить подход, если кто-то думает, что может быть лучший подход к этой сущности.
Пользователь:
@Entity
@Table(name = "users")
data class User (
@Id
var id: UUID = UUID.randomUUID(),
@Column(nullable = false)
var firstName: String,
@Column(nullable = false)
var lastName: String,
@Column(nullable = false, unique = true)
var username: String,
@Column(nullable = false)
var password: String,
@Transient
var confirmPassword: String,
@Column(nullable = false)
var zipCode: String,
@Column(nullable=true)
var bio: String?,
@Column(nullable=true)
var imageUrl: String //path to profile picture url
)
Объект беседы:
@Entity
data class Conversation (
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(nullable = false)
val convoId: Long,
@OneToMany
@JoinColumn(name = "user_id")
var particapants: List<User>,
@OneToMany
@JoinColumn(name = "message_id")
var messages: List<Message>
)
Сообщение:
@Entity
data class Message (
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(nullable = false)
val messageId: Long,
@ManyToOne
@JoinColumn(name = "user_id")
val user: User,
var message: String,
@LastModifiedDate
@Column(name = "last_modified_date")
var lastModifiedDate: Date
)