feat(db): 迁移 manage-db Java 源代码(任务 T1.2)
- 删除原有 Java 源代码 - 从 gym-manage 复制 Java 源代码 - 批量替换包名:cn.novalon.gym.manage → cn.novalon.manage - 编译验证通过 相关文档: docs/superpowers/specs/2026-04-27-migration-phase-1.json
This commit is contained in:
+5
-4
@@ -2,6 +2,7 @@ package cn.novalon.manage.db.converter;
|
||||
|
||||
import cn.novalon.manage.sys.audit.domain.AuditLog;
|
||||
import cn.novalon.manage.db.entity.AuditLogEntity;
|
||||
import io.r2dbc.postgresql.codec.Json;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@@ -28,8 +29,8 @@ public class AuditLogConverter {
|
||||
domain.setOperationType(entity.getOperationType());
|
||||
domain.setOperator(entity.getOperator());
|
||||
domain.setOperationTime(entity.getOperationTime());
|
||||
domain.setBeforeData(entity.getBeforeData());
|
||||
domain.setAfterData(entity.getAfterData());
|
||||
domain.setBeforeData(entity.getBeforeData() != null ? entity.getBeforeData().asString() : null);
|
||||
domain.setAfterData(entity.getAfterData() != null ? entity.getAfterData().asString() : null);
|
||||
domain.setChangedFields(entity.getChangedFields());
|
||||
domain.setIpAddress(entity.getIpAddress());
|
||||
domain.setUserAgent(entity.getUserAgent());
|
||||
@@ -53,8 +54,8 @@ public class AuditLogConverter {
|
||||
entity.setOperationType(domain.getOperationType());
|
||||
entity.setOperator(domain.getOperator());
|
||||
entity.setOperationTime(domain.getOperationTime());
|
||||
entity.setBeforeData(domain.getBeforeData());
|
||||
entity.setAfterData(domain.getAfterData());
|
||||
entity.setBeforeData(domain.getBeforeData() != null ? Json.of(domain.getBeforeData()) : null);
|
||||
entity.setAfterData(domain.getAfterData() != null ? Json.of(domain.getAfterData()) : null);
|
||||
entity.setChangedFields(domain.getChangedFields());
|
||||
entity.setIpAddress(domain.getIpAddress());
|
||||
entity.setUserAgent(domain.getUserAgent());
|
||||
|
||||
+7
-6
@@ -1,5 +1,6 @@
|
||||
package cn.novalon.manage.db.entity;
|
||||
|
||||
import io.r2dbc.postgresql.codec.Json;
|
||||
import org.springframework.data.relational.core.mapping.Column;
|
||||
import org.springframework.data.relational.core.mapping.Table;
|
||||
|
||||
@@ -28,10 +29,10 @@ public class AuditLogEntity extends BaseEntity {
|
||||
private java.time.LocalDateTime operationTime;
|
||||
|
||||
@Column("before_data")
|
||||
private String beforeData;
|
||||
private Json beforeData;
|
||||
|
||||
@Column("after_data")
|
||||
private String afterData;
|
||||
private Json afterData;
|
||||
|
||||
@Column("changed_fields")
|
||||
private String[] changedFields;
|
||||
@@ -85,19 +86,19 @@ public class AuditLogEntity extends BaseEntity {
|
||||
this.operationTime = operationTime;
|
||||
}
|
||||
|
||||
public String getBeforeData() {
|
||||
public Json getBeforeData() {
|
||||
return beforeData;
|
||||
}
|
||||
|
||||
public void setBeforeData(String beforeData) {
|
||||
public void setBeforeData(Json beforeData) {
|
||||
this.beforeData = beforeData;
|
||||
}
|
||||
|
||||
public String getAfterData() {
|
||||
public Json getAfterData() {
|
||||
return afterData;
|
||||
}
|
||||
|
||||
public void setAfterData(String afterData) {
|
||||
public void setAfterData(Json afterData) {
|
||||
this.afterData = afterData;
|
||||
}
|
||||
|
||||
|
||||
+13
-11
@@ -5,17 +5,12 @@ import org.springframework.data.annotation.CreatedDate;
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.annotation.LastModifiedBy;
|
||||
import org.springframework.data.annotation.LastModifiedDate;
|
||||
import org.springframework.data.annotation.Transient;
|
||||
import org.springframework.data.domain.Persistable;
|
||||
import org.springframework.data.relational.core.mapping.Column;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 数据库实体基类
|
||||
*
|
||||
* @author 张翔
|
||||
* @date 2026-03-13
|
||||
*/
|
||||
public abstract class BaseEntity implements Persistable<Long> {
|
||||
|
||||
@Id
|
||||
@@ -40,6 +35,9 @@ public abstract class BaseEntity implements Persistable<Long> {
|
||||
@Column("deleted_at")
|
||||
private LocalDateTime deletedAt;
|
||||
|
||||
@Transient
|
||||
private boolean newEntity = true;
|
||||
|
||||
@Override
|
||||
public Long getId() {
|
||||
return id;
|
||||
@@ -89,12 +87,16 @@ public abstract class BaseEntity implements Persistable<Long> {
|
||||
this.deletedAt = deletedAt;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断实体是否为新的
|
||||
* 如果createdAt为null,则认为是新实体
|
||||
*/
|
||||
@Override
|
||||
public boolean isNew() {
|
||||
return createdAt == null;
|
||||
return newEntity;
|
||||
}
|
||||
|
||||
public void markNotNew() {
|
||||
this.newEntity = false;
|
||||
}
|
||||
|
||||
public void markNew() {
|
||||
this.newEntity = true;
|
||||
}
|
||||
}
|
||||
|
||||
+10
-1
@@ -7,6 +7,7 @@ import cn.novalon.manage.db.dao.AuditLogDao;
|
||||
import cn.novalon.manage.db.entity.AuditLogEntity;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.data.r2dbc.core.R2dbcEntityTemplate;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
@@ -26,10 +27,12 @@ public class AuditLogRepository implements IAuditLogRepository {
|
||||
|
||||
private final AuditLogDao auditLogDao;
|
||||
private final AuditLogConverter auditLogConverter;
|
||||
private final R2dbcEntityTemplate r2dbcEntityTemplate;
|
||||
|
||||
public AuditLogRepository(AuditLogDao auditLogDao, AuditLogConverter auditLogConverter) {
|
||||
public AuditLogRepository(AuditLogDao auditLogDao, AuditLogConverter auditLogConverter, R2dbcEntityTemplate r2dbcEntityTemplate) {
|
||||
this.auditLogDao = auditLogDao;
|
||||
this.auditLogConverter = auditLogConverter;
|
||||
this.r2dbcEntityTemplate = r2dbcEntityTemplate;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -41,6 +44,12 @@ public class AuditLogRepository implements IAuditLogRepository {
|
||||
@Override
|
||||
public Mono<AuditLog> save(AuditLog auditLog) {
|
||||
AuditLogEntity entity = auditLogConverter.toEntity(auditLog);
|
||||
if (entity.isNew()) {
|
||||
return r2dbcEntityTemplate.insert(AuditLogEntity.class)
|
||||
.using(entity)
|
||||
.doOnNext(e -> e.markNotNew())
|
||||
.map(auditLogConverter::toDomain);
|
||||
}
|
||||
return auditLogDao.save(entity)
|
||||
.map(auditLogConverter::toDomain);
|
||||
}
|
||||
|
||||
+6
@@ -49,6 +49,12 @@ public class OperationLogRepository implements IOperationLogRepository {
|
||||
@Override
|
||||
public Mono<OperationLog> save(OperationLog operationLog) {
|
||||
OperationLogEntity entity = operationLogConverter.toEntity(operationLog);
|
||||
if (entity.isNew()) {
|
||||
return r2dbcEntityTemplate.insert(OperationLogEntity.class)
|
||||
.using(entity)
|
||||
.doOnNext(e -> e.markNotNew())
|
||||
.map(operationLogConverter::toDomain);
|
||||
}
|
||||
return operationLogDao.save(entity)
|
||||
.map(operationLogConverter::toDomain);
|
||||
}
|
||||
|
||||
+14
@@ -60,6 +60,20 @@ public class SysMenuRepository implements ISysMenuRepository {
|
||||
@Override
|
||||
public Mono<SysMenu> save(SysMenu sysMenu) {
|
||||
SysMenuEntity entity = sysMenuConverter.toEntity(sysMenu);
|
||||
if (entity.isNew()) {
|
||||
return r2dbcEntityTemplate.insert(SysMenuEntity.class)
|
||||
.using(entity)
|
||||
.doOnNext(e -> e.markNotNew())
|
||||
.map(sysMenuConverter::toDomain);
|
||||
}
|
||||
return sysMenuDao.save(entity)
|
||||
.map(sysMenuConverter::toDomain);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<SysMenu> update(SysMenu sysMenu) {
|
||||
SysMenuEntity entity = sysMenuConverter.toEntity(sysMenu);
|
||||
entity.markNotNew();
|
||||
return sysMenuDao.save(entity)
|
||||
.map(sysMenuConverter::toDomain);
|
||||
}
|
||||
|
||||
+13
-2
@@ -4,7 +4,9 @@ import cn.novalon.manage.sys.core.domain.SysPermission;
|
||||
import cn.novalon.manage.sys.core.repository.ISysPermissionRepository;
|
||||
import cn.novalon.manage.db.converter.SysPermissionConverter;
|
||||
import cn.novalon.manage.db.dao.SysPermissionDao;
|
||||
import cn.novalon.manage.db.entity.SysPermissionEntity;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.r2dbc.core.R2dbcEntityTemplate;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
@@ -20,10 +22,12 @@ public class SysPermissionRepository implements ISysPermissionRepository {
|
||||
|
||||
private final SysPermissionDao sysPermissionDao;
|
||||
private final SysPermissionConverter sysPermissionConverter;
|
||||
private final R2dbcEntityTemplate r2dbcEntityTemplate;
|
||||
|
||||
public SysPermissionRepository(SysPermissionDao sysPermissionDao, SysPermissionConverter sysPermissionConverter) {
|
||||
public SysPermissionRepository(SysPermissionDao sysPermissionDao, SysPermissionConverter sysPermissionConverter, R2dbcEntityTemplate r2dbcEntityTemplate) {
|
||||
this.sysPermissionDao = sysPermissionDao;
|
||||
this.sysPermissionConverter = sysPermissionConverter;
|
||||
this.r2dbcEntityTemplate = r2dbcEntityTemplate;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -40,7 +44,14 @@ public class SysPermissionRepository implements ISysPermissionRepository {
|
||||
|
||||
@Override
|
||||
public Mono<SysPermission> save(SysPermission sysPermission) {
|
||||
return sysPermissionDao.save(sysPermissionConverter.toEntity(sysPermission))
|
||||
SysPermissionEntity entity = sysPermissionConverter.toEntity(sysPermission);
|
||||
if (entity.isNew()) {
|
||||
return r2dbcEntityTemplate.insert(SysPermissionEntity.class)
|
||||
.using(entity)
|
||||
.doOnNext(e -> e.markNotNew())
|
||||
.map(sysPermissionConverter::toDomain);
|
||||
}
|
||||
return sysPermissionDao.save(entity)
|
||||
.map(sysPermissionConverter::toDomain);
|
||||
}
|
||||
|
||||
|
||||
+13
-2
@@ -4,6 +4,8 @@ import cn.novalon.manage.sys.core.domain.SysRolePermission;
|
||||
import cn.novalon.manage.sys.core.repository.ISysRolePermissionRepository;
|
||||
import cn.novalon.manage.db.converter.SysRolePermissionConverter;
|
||||
import cn.novalon.manage.db.dao.SysRolePermissionDao;
|
||||
import cn.novalon.manage.db.entity.SysRolePermissionEntity;
|
||||
import org.springframework.data.r2dbc.core.R2dbcEntityTemplate;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
@@ -19,15 +21,24 @@ public class SysRolePermissionRepository implements ISysRolePermissionRepository
|
||||
|
||||
private final SysRolePermissionDao sysRolePermissionDao;
|
||||
private final SysRolePermissionConverter sysRolePermissionConverter;
|
||||
private final R2dbcEntityTemplate r2dbcEntityTemplate;
|
||||
|
||||
public SysRolePermissionRepository(SysRolePermissionDao sysRolePermissionDao, SysRolePermissionConverter sysRolePermissionConverter) {
|
||||
public SysRolePermissionRepository(SysRolePermissionDao sysRolePermissionDao, SysRolePermissionConverter sysRolePermissionConverter, R2dbcEntityTemplate r2dbcEntityTemplate) {
|
||||
this.sysRolePermissionDao = sysRolePermissionDao;
|
||||
this.sysRolePermissionConverter = sysRolePermissionConverter;
|
||||
this.r2dbcEntityTemplate = r2dbcEntityTemplate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<SysRolePermission> save(SysRolePermission rolePermission) {
|
||||
return sysRolePermissionDao.save(sysRolePermissionConverter.toEntity(rolePermission))
|
||||
SysRolePermissionEntity entity = sysRolePermissionConverter.toEntity(rolePermission);
|
||||
if (entity.isNew()) {
|
||||
return r2dbcEntityTemplate.insert(SysRolePermissionEntity.class)
|
||||
.using(entity)
|
||||
.doOnNext(e -> e.markNotNew())
|
||||
.map(sysRolePermissionConverter::toDomain);
|
||||
}
|
||||
return sysRolePermissionDao.save(entity)
|
||||
.map(sysRolePermissionConverter::toDomain);
|
||||
}
|
||||
|
||||
|
||||
+7
@@ -53,6 +53,12 @@ public class SysRoleRepository implements ISysRoleRepository {
|
||||
@Override
|
||||
public Mono<SysRole> save(SysRole sysRole) {
|
||||
SysRoleEntity entity = sysRoleConverter.toEntity(sysRole);
|
||||
if (entity.isNew()) {
|
||||
return r2dbcEntityTemplate.insert(SysRoleEntity.class)
|
||||
.using(entity)
|
||||
.doOnNext(e -> e.markNotNew())
|
||||
.map(sysRoleConverter::toDomain);
|
||||
}
|
||||
return sysRoleDao.save(entity)
|
||||
.map(sysRoleConverter::toDomain);
|
||||
}
|
||||
@@ -156,6 +162,7 @@ public class SysRoleRepository implements ISysRoleRepository {
|
||||
@Override
|
||||
public Mono<SysRole> updateRole(SysRole role) {
|
||||
SysRoleEntity entity = sysRoleConverter.toEntity(role);
|
||||
entity.markNotNew();
|
||||
return sysRoleDao.save(entity)
|
||||
.map(sysRoleConverter::toDomain);
|
||||
}
|
||||
|
||||
+16
@@ -70,6 +70,20 @@ public class SysUserRepository implements ISysUserRepository {
|
||||
@Override
|
||||
public Mono<SysUser> save(SysUser sysUser) {
|
||||
SysUserEntity entity = sysUserConverter.toEntity(sysUser);
|
||||
if (entity.isNew()) {
|
||||
return r2dbcEntityTemplate.insert(SysUserEntity.class)
|
||||
.using(entity)
|
||||
.doOnNext(e -> e.markNotNew())
|
||||
.map(sysUserConverter::toDomain);
|
||||
}
|
||||
return sysUserDao.save(entity)
|
||||
.map(sysUserConverter::toDomain);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<SysUser> update(SysUser sysUser) {
|
||||
SysUserEntity entity = sysUserConverter.toEntity(sysUser);
|
||||
entity.markNotNew();
|
||||
return sysUserDao.save(entity)
|
||||
.map(sysUserConverter::toDomain);
|
||||
}
|
||||
@@ -176,6 +190,7 @@ public class SysUserRepository implements ISysUserRepository {
|
||||
public Mono<Void> logicalDeleteById(Long id) {
|
||||
return sysUserDao.findById(id)
|
||||
.flatMap(entity -> {
|
||||
entity.markNotNew();
|
||||
entity.setDeletedAt(java.time.LocalDateTime.now());
|
||||
return sysUserDao.save(entity).then();
|
||||
});
|
||||
@@ -192,6 +207,7 @@ public class SysUserRepository implements ISysUserRepository {
|
||||
public Mono<Void> restoreById(Long id) {
|
||||
return sysUserDao.findById(id)
|
||||
.flatMap(entity -> {
|
||||
entity.markNotNew();
|
||||
entity.setDeletedAt(null);
|
||||
return sysUserDao.save(entity).then();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user