Я разрабатываю свой тестовый проект, который представляет библиотеку.Что касается его разработки, я постоянно отвечаю на вопросы.
Не могли бы вы помочь мне с одним из них?
Мой дизайн модели включает в себя сущности User и LeasingHistory, поэтому, когда пользователь заимствует книгу LeasingHistory tableзаполняется соответствующей записью.
create table USER
(
ID BIGINT not null serial primary key,
ADDRESS VARCHAR(255) not null,
DOCUMENT_ID VARCHAR(255) not null,
FIRST_NAME VARCHAR(255) not null,
SUR_NAME VARCHAR(255) not null
);
create table LEASING_HISTORY
(
ID BIGINT not null serial primary key,
BOOK_INSTANCE_ID BIGINT not null,
USER_ID BIGINT not null,
START_DATE DATE(10),
ARRANGED_END_DATE DATE(10),
ACTUAL_END_DATE DATE(10),
foreign key (BOOK_INSTANCE_ID) references BOOK_INSTANCE,
foreign key (USER_ID) references USER
);
Теперь я должен реализовать удаление пользователя.Как я должен это делать?Как это реализовано в Google, Facebook или в StackOverFlow?
Я не думаю, что удаление сирот является подходящей стратегией в этом случае, потому что история не должна быть очищена.
Я полагаю, яМожно добавить поле isActive в таблицу пользователей.В этом случае я могу очистить личную информацию и назначить isActive = false
, когда пользователь нажимает кнопку «Удалить учетную запись».
Что вы думаете об этом?
ОБНОВЛЕНИЕ: Я думаю, что пользователь должен иметьвозможность восстановить свой аккаунт, таким образом, в этом случае вариант @killjoy лучше.Можете ли вы проверить меня, правильно ли я понимаю?Я ввел дополнительную таблицу UserInternalData
, и в случае удаления пользователя я очищу все данные (кроме id
) от сущности User
и установлю isDeleted
в true и dateStamp
в текущую дату в 'UserInternalData'
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@NoArgsConstructor
@AllArgsConstructor
@Getter
@EqualsAndHashCode
@ToString
class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String firstName;
private String surName;
@JsonFormat(pattern="yyyy-MM-dd")
private LocalDate dateOfBirth;
}
@Entity
@NoArgsConstructor
@Getter
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public final class User extends Person {
@Builder
public User(Long id, String firstName, String surName, LocalDate dateOfBirth, String documentId, String address) {
super(id, firstName, surName, dateOfBirth);
this.documentId = documentId;
this.address = address;
}
private String documentId;
private String address;
}
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Getter
@EqualsAndHashCode
@ToString
public final class UserInternalData {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne
private User user;
boolean isDeleted;
@JsonFormat(pattern="yyyy-MM-dd")
private LocalDate dateStamp;
}
Я прав?