diff --git a/src/main/java/com/ajou/hertz/common/entity/Address.java b/src/main/java/com/ajou/hertz/common/entity/Address.java new file mode 100644 index 0000000..0a8f2a5 --- /dev/null +++ b/src/main/java/com/ajou/hertz/common/entity/Address.java @@ -0,0 +1,44 @@ +package com.ajou.hertz.common.entity; + +import java.util.Objects; + +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Getter +@Embeddable +public class Address { + + @Column(nullable = false) + private String sido; + + @Column(nullable = false) + private String sgg; + + @Column(nullable = false) + private String emd; + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof Address address)) { + return false; + } + return Objects.equals(getSido(), address.getSido()) + && Objects.equals(getSgg(), address.getSgg()) + && Objects.equals(getEmd(), address.getEmd()); + } + + @Override + public int hashCode() { + return Objects.hash(getSido(), getSgg(), getEmd()); + } +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/constant/AcousticAndClassGuitarBrand.java b/src/main/java/com/ajou/hertz/domain/instrument/constant/AcousticAndClassGuitarBrand.java new file mode 100644 index 0000000..4f5a6e6 --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/constant/AcousticAndClassGuitarBrand.java @@ -0,0 +1,29 @@ +package com.ajou.hertz.domain.instrument.constant; + +import static com.ajou.hertz.domain.instrument.constant.ProductOrigin.*; + +import lombok.AllArgsConstructor; + +@AllArgsConstructor +public enum AcousticAndClassGuitarBrand { + + PRAYTON(DOMESTIC), + CRAFTER(DOMESTIC), + GOPHERWOOD(DOMESTIC), + HEX(DOMESTIC), + BENTIVOGLIO(DOMESTIC), + PARKWOOD(DOMESTIC), + ORANGEWOOD(DOMESTIC), + CORT(DOMESTIC), + MARTIN(FOREIGN), + TAYLOR(FOREIGN), + GIBSON(FOREIGN), + SEAGULL(FOREIGN), + EASTMAN(FOREIGN), + SIGMA(FOREIGN), + YAMAHA(FOREIGN), + LAVA(FOREIGN), + ETC(null); + + private final ProductOrigin origin; +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/constant/AcousticAndClassGuitarModel.java b/src/main/java/com/ajou/hertz/domain/instrument/constant/AcousticAndClassGuitarModel.java new file mode 100644 index 0000000..1d82f53 --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/constant/AcousticAndClassGuitarModel.java @@ -0,0 +1,11 @@ +package com.ajou.hertz.domain.instrument.constant; + +public enum AcousticAndClassGuitarModel { + + DREADNOUGHT, + CUTAWAY, + JUMBO_BODY, + SLIM_BODY, + PARLOR_BODY, + OM_BODY +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/constant/AcousticAndClassGuitarPickUp.java b/src/main/java/com/ajou/hertz/domain/instrument/constant/AcousticAndClassGuitarPickUp.java new file mode 100644 index 0000000..4f6887b --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/constant/AcousticAndClassGuitarPickUp.java @@ -0,0 +1,13 @@ +package com.ajou.hertz.domain.instrument.constant; + +import lombok.AllArgsConstructor; + +@AllArgsConstructor +public enum AcousticAndClassGuitarPickUp { + + VIBRATION_SENSING("진동감지형"), + MAGNETIC("마그네틱"), + MICROPHONE("마이크"); + + private final String description; +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/constant/AcousticAndClassGuitarWood.java b/src/main/java/com/ajou/hertz/domain/instrument/constant/AcousticAndClassGuitarWood.java new file mode 100644 index 0000000..945cb5e --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/constant/AcousticAndClassGuitarWood.java @@ -0,0 +1,8 @@ +package com.ajou.hertz.domain.instrument.constant; + +public enum AcousticAndClassGuitarWood { + + PLYWOOD, + SOLID_WOOD, + PLYWOOD_AND_SOLID_WOOD +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/constant/AmplifierBrand.java b/src/main/java/com/ajou/hertz/domain/instrument/constant/AmplifierBrand.java new file mode 100644 index 0000000..dd98eba --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/constant/AmplifierBrand.java @@ -0,0 +1,16 @@ +package com.ajou.hertz.domain.instrument.constant; + +public enum AmplifierBrand { + + FENDER, + MARSHALL, + VOX, + ORANGE, + MESA_BOOGIE, + PEAVEY, + EVH, + BOGNER, + BLACKSTAR, + YAMAHA, + ETC +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/constant/AmplifierType.java b/src/main/java/com/ajou/hertz/domain/instrument/constant/AmplifierType.java new file mode 100644 index 0000000..f98c091 --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/constant/AmplifierType.java @@ -0,0 +1,7 @@ +package com.ajou.hertz.domain.instrument.constant; + +public enum AmplifierType { + + GUITAR, + BASS +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/constant/AmplifierUsage.java b/src/main/java/com/ajou/hertz/domain/instrument/constant/AmplifierUsage.java new file mode 100644 index 0000000..46c6316 --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/constant/AmplifierUsage.java @@ -0,0 +1,12 @@ +package com.ajou.hertz.domain.instrument.constant; + +import lombok.AllArgsConstructor; + +@AllArgsConstructor +public enum AmplifierUsage { + + HOME("가정용"), + PERFORMANCE("공연용"); + + private final String description; +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/constant/AudioEquipmentType.java b/src/main/java/com/ajou/hertz/domain/instrument/constant/AudioEquipmentType.java new file mode 100644 index 0000000..0114f55 --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/constant/AudioEquipmentType.java @@ -0,0 +1,8 @@ +package com.ajou.hertz.domain.instrument.constant; + +public enum AudioEquipmentType { + + AUDIO_EQUIPMENT, + ACCESSORY, + ETC +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/constant/BassGuitarBrand.java b/src/main/java/com/ajou/hertz/domain/instrument/constant/BassGuitarBrand.java new file mode 100644 index 0000000..ed5adc9 --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/constant/BassGuitarBrand.java @@ -0,0 +1,21 @@ +package com.ajou.hertz.domain.instrument.constant; + +public enum BassGuitarBrand { + + FENDER, + IBANEZ, + SPECTOR, + MUSIC_MAN, + SCHETOR, + ESP, + WARWICK, + DINGWALL, + YAMAHA, + NA, + SADOWSKY, + SANDBERG, + SQUIER, + LAKLAND, + SIRE, + ETC +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/constant/BassGuitarPickUp.java b/src/main/java/com/ajou/hertz/domain/instrument/constant/BassGuitarPickUp.java new file mode 100644 index 0000000..fa90351 --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/constant/BassGuitarPickUp.java @@ -0,0 +1,10 @@ +package com.ajou.hertz.domain.instrument.constant; + +public enum BassGuitarPickUp { + + JAZZ, + PRECISION, + PJ, + HUMBUCKER, + ETC +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/constant/BassGuitarPreAmplifier.java b/src/main/java/com/ajou/hertz/domain/instrument/constant/BassGuitarPreAmplifier.java new file mode 100644 index 0000000..7ecf76d --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/constant/BassGuitarPreAmplifier.java @@ -0,0 +1,8 @@ +package com.ajou.hertz.domain.instrument.constant; + +public enum BassGuitarPreAmplifier { + + ACTIVE, + PASSIVE, + SWITCHABLE +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/constant/EffectorFeature.java b/src/main/java/com/ajou/hertz/domain/instrument/constant/EffectorFeature.java new file mode 100644 index 0000000..4093946 --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/constant/EffectorFeature.java @@ -0,0 +1,38 @@ +package com.ajou.hertz.domain.instrument.constant; + +import static com.ajou.hertz.domain.instrument.constant.EffectorType.*; + +import lombok.AllArgsConstructor; + +@AllArgsConstructor +public enum EffectorFeature { + + GUITAR_WAH(GUITAR, "와우"), + GUITAR_EQ(GUITAR, "Eq"), + GUITAR_VOLUME(GUITAR, "볼륨"), + GUITAR_COMPRESSOR(GUITAR, "컴프레서"), + GUITAR_OVER(GUITAR, "오버"), + GUITAR_DISTORTION(GUITAR, "디스토션"), + GUITAR_BOOST(GUITAR, "부스트"), + GUITAR_SPATIOTEMPORAL_EFFECT(GUITAR, "공간계"), + GUITAR_MODULATION(GUITAR, "모듈레이션"), + GUITAR_AMPLIFIER_SIMULATOR(GUITAR, "앰프시뮬"), + GUITAR_MULTI(GUITAR, "멀티"), + GUITAR_BOARD_PARTS(GUITAR, "보드용부품"), + + BASS_COMPRESSOR(BASS, "컴프레서"), + BASS_LIMITER(BASS, "리미터"), + BASS_DRIVE(BASS, "드라이브"), + + MULTI_MULTI(MULTI, "멀티"), + + PEDAL_BOARD_BOARD(PEDAL_BOARD, "보드"), + PEDAL_BOARD_POWER_SUPPLY(PEDAL_BOARD, "파워서플라이"), + PEDAL_BOARD_BUFFER(PEDAL_BOARD, "버퍼"), + PEDAL_BOARD_PARALLEL_MIXER(PEDAL_BOARD, "병렬 믹서"), + + ETC(null, "그 외"); + + private final EffectorType effectorType; + private final String description; +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/constant/EffectorType.java b/src/main/java/com/ajou/hertz/domain/instrument/constant/EffectorType.java new file mode 100644 index 0000000..6023e8c --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/constant/EffectorType.java @@ -0,0 +1,8 @@ +package com.ajou.hertz.domain.instrument.constant; + +public enum EffectorType { + GUITAR, + BASS, + MULTI, + PEDAL_BOARD +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/constant/ElectricGuitarBrand.java b/src/main/java/com/ajou/hertz/domain/instrument/constant/ElectricGuitarBrand.java new file mode 100644 index 0000000..69d65d3 --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/constant/ElectricGuitarBrand.java @@ -0,0 +1,20 @@ +package com.ajou.hertz.domain.instrument.constant; + +public enum ElectricGuitarBrand { + + FENDER_USA, + FENDER_JAPAN, + FENDER_MEXICO, + GIBSON, + IBANEZ, + PRS, + SCHECTER, + EPIPHONE, + ESP_LTD, + SQUIER, + JACKSON, + ESP, + CUSTOM, + HIGH_END, + ETC +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/constant/ElectricGuitarModel.java b/src/main/java/com/ajou/hertz/domain/instrument/constant/ElectricGuitarModel.java new file mode 100644 index 0000000..ba8b9d5 --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/constant/ElectricGuitarModel.java @@ -0,0 +1,14 @@ +package com.ajou.hertz.domain.instrument.constant; + +public enum ElectricGuitarModel { + + TELECASTER, + STRATOCASTER, + LESS, + SUPERSTRAT, + SEMI_HOLLOW, + HEAVY_SHAPE, + JAZZMASTER_JAGUAR, + PRS, + ETC +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/constant/GuitarColor.java b/src/main/java/com/ajou/hertz/domain/instrument/constant/GuitarColor.java new file mode 100644 index 0000000..4f7ea99 --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/constant/GuitarColor.java @@ -0,0 +1,15 @@ +package com.ajou.hertz.domain.instrument.constant; + +public enum GuitarColor { + + RED, + ORANGE, + YELLOW, + GREEN, + BLUE, + NAVY, + VIOLET, + WHITE, + BLACK, + ETC +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/constant/InstrumentCategory.java b/src/main/java/com/ajou/hertz/domain/instrument/constant/InstrumentCategory.java new file mode 100644 index 0000000..daa73e2 --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/constant/InstrumentCategory.java @@ -0,0 +1,11 @@ +package com.ajou.hertz.domain.instrument.constant; + +public enum InstrumentCategory { + + ELECTRIC_GUITAR, + BASS_GUITAR, + ACOUSTIC_AND_CLASSIC_GUITAR, + AMPLIFIER, + EFFECTOR, + AUDIO_EQUIPMENT +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/constant/InstrumentProgressStatus.java b/src/main/java/com/ajou/hertz/domain/instrument/constant/InstrumentProgressStatus.java new file mode 100644 index 0000000..202f9af --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/constant/InstrumentProgressStatus.java @@ -0,0 +1,15 @@ +package com.ajou.hertz.domain.instrument.constant; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +@Getter +public enum InstrumentProgressStatus { + + SELLING("판매중"), + RESERVED("예약중"), + SOLD_OUT("판매 완료"); + + private final String description; +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/constant/ProductOrigin.java b/src/main/java/com/ajou/hertz/domain/instrument/constant/ProductOrigin.java new file mode 100644 index 0000000..6170fbf --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/constant/ProductOrigin.java @@ -0,0 +1,12 @@ +package com.ajou.hertz.domain.instrument.constant; + +import lombok.AllArgsConstructor; + +@AllArgsConstructor +public enum ProductOrigin { + + DOMESTIC("국내"), + FOREIGN("국외"); + + private final String description; +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/entity/AcousticAndClassGuitar.java b/src/main/java/com/ajou/hertz/domain/instrument/entity/AcousticAndClassGuitar.java new file mode 100644 index 0000000..aaab2b3 --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/entity/AcousticAndClassGuitar.java @@ -0,0 +1,82 @@ +package com.ajou.hertz.domain.instrument.entity; + +import com.ajou.hertz.common.entity.Address; +import com.ajou.hertz.domain.instrument.constant.AcousticAndClassGuitarBrand; +import com.ajou.hertz.domain.instrument.constant.AcousticAndClassGuitarModel; +import com.ajou.hertz.domain.instrument.constant.AcousticAndClassGuitarPickUp; +import com.ajou.hertz.domain.instrument.constant.AcousticAndClassGuitarWood; +import com.ajou.hertz.domain.instrument.constant.InstrumentProgressStatus; +import com.ajou.hertz.domain.user.entity.User; + +import jakarta.persistence.Column; +import jakarta.persistence.DiscriminatorValue; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Getter +@DiscriminatorValue("ACOUSTIC_AND_CLASS_GUITAR") +@Entity +public class AcousticAndClassGuitar extends Instrument { + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private AcousticAndClassGuitarBrand brand; + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private AcousticAndClassGuitarModel model; + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private AcousticAndClassGuitarWood wood; + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private AcousticAndClassGuitarPickUp pickUp; + + private AcousticAndClassGuitar( + Long id, + User seller, + String title, + InstrumentProgressStatus progressStatus, + Address tradeAddress, + Short qualityStatus, + Integer price, + Boolean hasAnomaly, + String description, + AcousticAndClassGuitarBrand brand, + AcousticAndClassGuitarModel model, + AcousticAndClassGuitarWood wood, + AcousticAndClassGuitarPickUp pickUp + ) { + super(id, seller, title, progressStatus, tradeAddress, qualityStatus, price, hasAnomaly, description); + this.brand = brand; + this.model = model; + this.wood = wood; + this.pickUp = pickUp; + } + + public static AcousticAndClassGuitar create( + User seller, + String title, + Address tradeAddress, + Short qualityStatus, + Integer price, + Boolean hasAnomaly, + String description, + AcousticAndClassGuitarBrand brand, + AcousticAndClassGuitarModel model, + AcousticAndClassGuitarWood wood, + AcousticAndClassGuitarPickUp pickUp + ) { + return new AcousticAndClassGuitar( + null, seller, title, InstrumentProgressStatus.SELLING, tradeAddress, + qualityStatus, price, hasAnomaly, description, brand, model, wood, pickUp + ); + } +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/entity/Amplifier.java b/src/main/java/com/ajou/hertz/domain/instrument/entity/Amplifier.java new file mode 100644 index 0000000..ebaf785 --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/entity/Amplifier.java @@ -0,0 +1,74 @@ +package com.ajou.hertz.domain.instrument.entity; + +import com.ajou.hertz.common.entity.Address; +import com.ajou.hertz.domain.instrument.constant.AmplifierBrand; +import com.ajou.hertz.domain.instrument.constant.AmplifierType; +import com.ajou.hertz.domain.instrument.constant.AmplifierUsage; +import com.ajou.hertz.domain.instrument.constant.InstrumentProgressStatus; +import com.ajou.hertz.domain.user.entity.User; + +import jakarta.persistence.Column; +import jakarta.persistence.DiscriminatorValue; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Getter +@DiscriminatorValue("AMPLIFIER") +@Entity +public class Amplifier extends Instrument { + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private AmplifierType type; + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private AmplifierBrand brand; + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private AmplifierUsage ampUsage; + + private Amplifier( + Long id, + User seller, + String title, + InstrumentProgressStatus progressStatus, + Address tradeAddress, + Short qualityStatus, + Integer price, + Boolean hasAnomaly, + String description, + AmplifierType type, + AmplifierBrand brand, + AmplifierUsage ampUsage + ) { + super(id, seller, title, progressStatus, tradeAddress, qualityStatus, price, hasAnomaly, description); + this.type = type; + this.brand = brand; + this.ampUsage = ampUsage; + } + + public static Amplifier create( + User seller, + String title, + Address tradeAddress, + Short qualityStatus, + Integer price, + Boolean hasAnomaly, + String description, + AmplifierType type, + AmplifierBrand brand, + AmplifierUsage usage + ) { + return new Amplifier( + null, seller, title, InstrumentProgressStatus.SELLING, tradeAddress, + qualityStatus, price, hasAnomaly, description, type, brand, usage + ); + } +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/entity/AudioEquipment.java b/src/main/java/com/ajou/hertz/domain/instrument/entity/AudioEquipment.java new file mode 100644 index 0000000..368e2bb --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/entity/AudioEquipment.java @@ -0,0 +1,58 @@ +package com.ajou.hertz.domain.instrument.entity; + +import com.ajou.hertz.common.entity.Address; +import com.ajou.hertz.domain.instrument.constant.AudioEquipmentType; +import com.ajou.hertz.domain.instrument.constant.InstrumentProgressStatus; +import com.ajou.hertz.domain.user.entity.User; + +import jakarta.persistence.Column; +import jakarta.persistence.DiscriminatorValue; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Getter +@DiscriminatorValue("AUDIO_EQUIPMENT") +@Entity +public class AudioEquipment extends Instrument { + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private AudioEquipmentType type; + + private AudioEquipment( + Long id, + User seller, + String title, + InstrumentProgressStatus progressStatus, + Address tradeAddress, + Short qualityStatus, + Integer price, + Boolean hasAnomaly, + String description, + AudioEquipmentType type + ) { + super(id, seller, title, progressStatus, tradeAddress, qualityStatus, price, hasAnomaly, description); + this.type = type; + } + + public static AudioEquipment create( + User seller, + String title, + Address tradeAddress, + Short qualityStatus, + Integer price, + Boolean hasAnomaly, + String description, + AudioEquipmentType type + ) { + return new AudioEquipment( + null, seller, title, InstrumentProgressStatus.SELLING, tradeAddress, + qualityStatus, price, hasAnomaly, description, type + ); + } +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/entity/BassGuitar.java b/src/main/java/com/ajou/hertz/domain/instrument/entity/BassGuitar.java new file mode 100644 index 0000000..b0207d7 --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/entity/BassGuitar.java @@ -0,0 +1,82 @@ +package com.ajou.hertz.domain.instrument.entity; + +import com.ajou.hertz.common.entity.Address; +import com.ajou.hertz.domain.instrument.constant.BassGuitarBrand; +import com.ajou.hertz.domain.instrument.constant.BassGuitarPickUp; +import com.ajou.hertz.domain.instrument.constant.BassGuitarPreAmplifier; +import com.ajou.hertz.domain.instrument.constant.GuitarColor; +import com.ajou.hertz.domain.instrument.constant.InstrumentProgressStatus; +import com.ajou.hertz.domain.user.entity.User; + +import jakarta.persistence.Column; +import jakarta.persistence.DiscriminatorValue; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Getter +@DiscriminatorValue("BASS_GUITAR") +@Entity +public class BassGuitar extends Instrument { + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private BassGuitarBrand brand; + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private BassGuitarPickUp pickUp; + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private BassGuitarPreAmplifier preAmplifier; + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private GuitarColor color; + + private BassGuitar( + Long id, + User seller, + String title, + InstrumentProgressStatus progressStatus, + Address tradeAddress, + Short qualityStatus, + Integer price, + Boolean hasAnomaly, + String description, + BassGuitarBrand brand, + BassGuitarPickUp pickUp, + BassGuitarPreAmplifier preAmplifier, + GuitarColor color + ) { + super(id, seller, title, progressStatus, tradeAddress, qualityStatus, price, hasAnomaly, description); + this.brand = brand; + this.pickUp = pickUp; + this.preAmplifier = preAmplifier; + this.color = color; + } + + public static BassGuitar create( + User seller, + String title, + Address tradeAddress, + Short qualityStatus, + Integer price, + Boolean hasAnomaly, + String description, + BassGuitarBrand brand, + BassGuitarPickUp pickUp, + BassGuitarPreAmplifier preAmplifier, + GuitarColor color + ) { + return new BassGuitar( + null, seller, title, InstrumentProgressStatus.SELLING, tradeAddress, + qualityStatus, price, hasAnomaly, description, brand, pickUp, preAmplifier, color + ); + } +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/entity/Effector.java b/src/main/java/com/ajou/hertz/domain/instrument/entity/Effector.java new file mode 100644 index 0000000..d0915c1 --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/entity/Effector.java @@ -0,0 +1,66 @@ +package com.ajou.hertz.domain.instrument.entity; + +import com.ajou.hertz.common.entity.Address; +import com.ajou.hertz.domain.instrument.constant.EffectorFeature; +import com.ajou.hertz.domain.instrument.constant.EffectorType; +import com.ajou.hertz.domain.instrument.constant.InstrumentProgressStatus; +import com.ajou.hertz.domain.user.entity.User; + +import jakarta.persistence.Column; +import jakarta.persistence.DiscriminatorValue; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Getter +@DiscriminatorValue("EFFECTOR") +@Entity +public class Effector extends Instrument { + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private EffectorType type; + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private EffectorFeature feature; + + private Effector( + Long id, + User seller, + String title, + InstrumentProgressStatus progressStatus, + Address tradeAddress, + Short qualityStatus, + Integer price, + Boolean hasAnomaly, + String description, + EffectorType type, + EffectorFeature feature + ) { + super(id, seller, title, progressStatus, tradeAddress, qualityStatus, price, hasAnomaly, description); + this.type = type; + this.feature = feature; + } + + public static Effector create( + User seller, + String title, + Address tradeAddress, + Short qualityStatus, + Integer price, + Boolean hasAnomaly, + String description, + EffectorType type, + EffectorFeature feature + ) { + return new Effector( + null, seller, title, InstrumentProgressStatus.SELLING, tradeAddress, + qualityStatus, price, hasAnomaly, description, type, feature + ); + } +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/entity/ElectricGuitar.java b/src/main/java/com/ajou/hertz/domain/instrument/entity/ElectricGuitar.java new file mode 100644 index 0000000..0fe47af --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/entity/ElectricGuitar.java @@ -0,0 +1,80 @@ +package com.ajou.hertz.domain.instrument.entity; + +import com.ajou.hertz.common.entity.Address; +import com.ajou.hertz.domain.instrument.constant.ElectricGuitarBrand; +import com.ajou.hertz.domain.instrument.constant.ElectricGuitarModel; +import com.ajou.hertz.domain.instrument.constant.GuitarColor; +import com.ajou.hertz.domain.instrument.constant.InstrumentProgressStatus; +import com.ajou.hertz.domain.user.entity.User; + +import jakarta.persistence.Column; +import jakarta.persistence.DiscriminatorValue; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Getter +@DiscriminatorValue("ELECTRIC_GUITAR") +@Entity +public class ElectricGuitar extends Instrument { + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private ElectricGuitarBrand brand; + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private ElectricGuitarModel model; + + @Column(nullable = false) + private Short productionYear; + + @Enumerated(EnumType.STRING) + @Column(nullable = false) + private GuitarColor color; + + private ElectricGuitar( + Long id, + User seller, + String title, + InstrumentProgressStatus progressStatus, + Address tradeAddress, + Short qualityStatus, + Integer price, + Boolean hasAnomaly, + String description, + ElectricGuitarBrand brand, + ElectricGuitarModel model, + Short productionYear, + GuitarColor color + ) { + super(id, seller, title, progressStatus, tradeAddress, qualityStatus, price, hasAnomaly, description); + this.brand = brand; + this.model = model; + this.productionYear = productionYear; + this.color = color; + } + + public static ElectricGuitar create( + User seller, + String title, + Address tradeAddress, + Short qualityStatus, + Integer price, + Boolean hasAnomaly, + String description, + ElectricGuitarBrand brand, + ElectricGuitarModel model, + Short productionYear, + GuitarColor color + ) { + return new ElectricGuitar( + null, seller, title, InstrumentProgressStatus.SELLING, tradeAddress, + qualityStatus, price, hasAnomaly, description, brand, model, productionYear, color + ); + } +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/entity/Instrument.java b/src/main/java/com/ajou/hertz/domain/instrument/entity/Instrument.java new file mode 100644 index 0000000..4f98e4b --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/entity/Instrument.java @@ -0,0 +1,65 @@ +package com.ajou.hertz.domain.instrument.entity; + +import com.ajou.hertz.common.entity.Address; +import com.ajou.hertz.common.entity.TimeTrackedBaseEntity; +import com.ajou.hertz.domain.instrument.constant.InstrumentProgressStatus; +import com.ajou.hertz.domain.user.entity.User; + +import jakarta.persistence.Column; +import jakarta.persistence.DiscriminatorColumn; +import jakarta.persistence.Embedded; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Inheritance; +import jakarta.persistence.InheritanceType; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@AllArgsConstructor(access = AccessLevel.PROTECTED) +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Getter +@DiscriminatorColumn(name = "category") +@Inheritance(strategy = InheritanceType.JOINED) +@Entity +public abstract class Instrument extends TimeTrackedBaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "instrument_id", nullable = false) + private Long id; + + @JoinColumn(name = "seller_id", nullable = false) + @ManyToOne(fetch = FetchType.LAZY) + private User seller; + + @Column(nullable = false) + private String title; + + @Column(nullable = false) + @Enumerated(EnumType.STRING) + private InstrumentProgressStatus progressStatus; + + @Embedded + private Address tradeAddress; + + @Column(nullable = false) + private Short qualityStatus; + + @Column(nullable = false) + private Integer price; + + @Column(nullable = false) + private Boolean hasAnomaly; + + @Column(length = 1000, nullable = false) + private String description; +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/entity/InstrumentHashtag.java b/src/main/java/com/ajou/hertz/domain/instrument/entity/InstrumentHashtag.java new file mode 100644 index 0000000..1c9bcc8 --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/entity/InstrumentHashtag.java @@ -0,0 +1,35 @@ +package com.ajou.hertz.domain.instrument.entity; + +import com.ajou.hertz.common.entity.BaseEntity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Getter +@Entity +public class InstrumentHashtag extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "instrument_hashtag_id", nullable = false) + private Long id; + + @JoinColumn(name = "instrument_id", nullable = false) + @ManyToOne(fetch = FetchType.LAZY) + private Instrument instrument; + + @Column(length = 10, nullable = false) + private String content; +} diff --git a/src/main/java/com/ajou/hertz/domain/instrument/entity/InstrumentImage.java b/src/main/java/com/ajou/hertz/domain/instrument/entity/InstrumentImage.java new file mode 100644 index 0000000..a90a75f --- /dev/null +++ b/src/main/java/com/ajou/hertz/domain/instrument/entity/InstrumentImage.java @@ -0,0 +1,32 @@ +package com.ajou.hertz.domain.instrument.entity; + +import com.ajou.hertz.common.entity.FileEntity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@Getter +@Entity +public class InstrumentImage extends FileEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "instrument_image_id", nullable = false) + private Long id; + + @JoinColumn(name = "instrument_id", nullable = false) + @ManyToOne(fetch = FetchType.LAZY) + private Instrument instrument; +}