From bd1f2441f3845577de14f674140b70bde156f744 Mon Sep 17 00:00:00 2001 From: zihluwang Date: Thu, 9 Apr 2026 13:28:28 +0800 Subject: [PATCH] feat: add calibre, fire rate, armour damage, and body damage fields to Firearm model and update related response and migration scripts --- .../domain/dto/FirearmResponse.java | 8 +++ .../domain/entity/Firearm.java | 44 ++++++++++++++ .../db/migration/V3__bullet_and_damages.sql | 60 +++++++++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 src/main/resources/db/migration/V3__bullet_and_damages.sql diff --git a/src/main/java/com/onixbyte/deltaforceguide/domain/dto/FirearmResponse.java b/src/main/java/com/onixbyte/deltaforceguide/domain/dto/FirearmResponse.java index fc62d43..eb5b1ac 100644 --- a/src/main/java/com/onixbyte/deltaforceguide/domain/dto/FirearmResponse.java +++ b/src/main/java/com/onixbyte/deltaforceguide/domain/dto/FirearmResponse.java @@ -8,6 +8,10 @@ public record FirearmResponse( String name, FirearmType type, String level, + String calibre, + Integer fireRate, + Integer armourDamage, + Integer bodyDamage, String review ) { public static FirearmResponse from(Firearm firearm) { @@ -16,6 +20,10 @@ public record FirearmResponse( firearm.getName(), firearm.getType(), firearm.getLevel(), + firearm.getCalibre(), + firearm.getFireRate(), + firearm.getArmourDamage(), + firearm.getBodyDamage(), firearm.getReview() ); } diff --git a/src/main/java/com/onixbyte/deltaforceguide/domain/entity/Firearm.java b/src/main/java/com/onixbyte/deltaforceguide/domain/entity/Firearm.java index 9db6dc4..c38173f 100644 --- a/src/main/java/com/onixbyte/deltaforceguide/domain/entity/Firearm.java +++ b/src/main/java/com/onixbyte/deltaforceguide/domain/entity/Firearm.java @@ -36,6 +36,18 @@ public class Firearm { @Column(name = "review", columnDefinition = "TEXT") private String review; + @Column(name = "calibre") + private String calibre; + + @Column(name = "fire_rate") + private Integer fireRate; + + @Column(name = "armour_damage") + private Integer armourDamage; + + @Column(name = "body_damage") + private Integer bodyDamage; + @OneToMany(mappedBy = "firearm", cascade = CascadeType.ALL, orphanRemoval = true) private List modifications = new ArrayList<>(); @@ -79,6 +91,38 @@ public class Firearm { this.review = review; } + public String getCalibre() { + return calibre; + } + + public void setCalibre(String calibre) { + this.calibre = calibre; + } + + public Integer getFireRate() { + return fireRate; + } + + public void setFireRate(Integer fireRate) { + this.fireRate = fireRate; + } + + public Integer getArmourDamage() { + return armourDamage; + } + + public void setArmourDamage(Integer armourDamage) { + this.armourDamage = armourDamage; + } + + public Integer getBodyDamage() { + return bodyDamage; + } + + public void setBodyDamage(Integer bodyDamage) { + this.bodyDamage = bodyDamage; + } + public List getModifications() { return modifications; } diff --git a/src/main/resources/db/migration/V3__bullet_and_damages.sql b/src/main/resources/db/migration/V3__bullet_and_damages.sql new file mode 100644 index 0000000..97ac135 --- /dev/null +++ b/src/main/resources/db/migration/V3__bullet_and_damages.sql @@ -0,0 +1,60 @@ +-- 创建新表 +CREATE TABLE firearm_new +( + id BIGSERIAL NOT NULL, + name VARCHAR(64) NOT NULL, + type INTEGER NOT NULL, + level VARCHAR(10) NOT NULL, + calibre VARCHAR(20) NOT NULL, + fire_rate INTEGER NOT NULL, + armour_damage INTEGER NOT NULL, + body_damage INTEGER NOT NULL, + review TEXT NULL, + CONSTRAINT firearm_new_pkey PRIMARY KEY (id) +); + +-- 迁移数据 +INSERT INTO firearm_new(id, name, type, level, calibre, fire_rate, armour_damage, body_damage, + review) +SELECT id, + name, + type, + level, + calibre, + 0, + armour_damage, + body_damage, + review +FROM firearm; + +-- 处理外键(关键步骤) +-- 先删除指向旧表的外键约束 +ALTER TABLE modification + DROP CONSTRAINT fk_modification_firearm; + +-- 重命名旧表和索引 +ALTER TABLE firearm + RENAME TO firearm_legacy; +ALTER INDEX firearm_pkey RENAME TO firearm_legacy_pkey; + +-- 重命名新表和索引 +ALTER TABLE firearm_new + RENAME TO firearm; +ALTER INDEX firearm_new_pkey RENAME TO firearm_pkey; + +-- 重新建立外键,指向新的 firearm 表 +ALTER TABLE modification + ADD CONSTRAINT fk_modification_firearm + FOREIGN KEY (firearm_id) REFERENCES firearm (id); + +-- 序列所有权与名称修正 +ALTER SEQUENCE firearm_id_seq RENAME TO firearm_legacy_id_seq; +ALTER SEQUENCE firearm_new_id_seq RENAME TO firearm_id_seq; +ALTER SEQUENCE firearm_id_seq OWNED BY firearm.id; + +-- 更新序列计数器 +SELECT setval('firearm_id_seq', coalesce(max(id), 1)) +FROM firearm; + +-- 删除旧表 +DROP TABLE IF EXISTS firearm_legacy CASCADE; \ No newline at end of file