Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.sosaw.sosaw.domain.basicsound.entity;

import com.sosaw.sosaw.domain.basicsound.entity.enums.BasicSoundType;
import com.sosaw.sosaw.domain.soundsetting.entity.SoundSetting;
import com.sosaw.sosaw.domain.user.entity.User;
import com.sosaw.sosaw.global.entity.BaseEntity;
import jakarta.persistence.*;
import lombok.*;

@Entity
@Getter
@Builder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "Basic_Sound")
public class BasicSound extends BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="basic_id")
private Long id; // pk

@Enumerated(EnumType.STRING)
@Column(name = "sound_type", nullable = false, length = 30)
private BasicSoundType soundType; // ๊ธฐ๋ณธ์Œ ์†Œ๋ฆฌ ์ข…๋ฅ˜๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•จ
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.sosaw.sosaw.domain.basicsound.entity.enums;

public enum BasicSoundType {
DOG_BARK, // ๊ฐ•์•„์ง€ ์ง“๋Š” ์†Œ๋ฆฌ
CAT_MEOW, // ๊ณ ์–‘์ด ์†Œ๋ฆฌ
HUMAN_LAUGH, // ์‚ฌ๋žŒ ์›ƒ๋Š” ์†Œ๋ฆฌ
BABY_CRY, // ์•„๊ธฐ ์šฐ๋Š” ์†Œ๋ฆฌ
PHONE_RING, // ์ „ํ™”๋ฒจ ์†Œ๋ฆฌ
DOORBELL, // ์ดˆ์ธ์ข… ์†Œ๋ฆฌ
DOOR_OPEN_CLOSE, // ๋ฌธ ์—ฌ๋‹ซ๋Š” ์†Œ๋ฆฌ
KNOCK, // ๋…ธํฌ ์†Œ๋ฆฌ
FIRE_ALARM, // ํ™”์žฌ ๊ฒฝ๋ณด๊ธฐ ์†Œ๋ฆฌ
MICROWAVE, // ์ „์ž๋ ˆ์ธ์ง€ ์†Œ๋ฆฌ
CAR_HORN, // ๊ฒฝ์  ์†Œ๋ฆฌ
SIREN // ๋น„์ƒ ๊ฒฝ๋ณด์Œ ์†Œ๋ฆฌ
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.sosaw.sosaw.domain.basicsound.repository;

import com.sosaw.sosaw.domain.basicsound.entity.BasicSound;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface BasicSoundRepository extends JpaRepository<BasicSound, Long> {

}
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public void upload(SoundUploadReq req, User user) {
CustomSound sound = CustomSound.toEntity(user, req, mfcc);

// ์ปค์Šคํ…€ ์†Œ๋ฆฌ๋ฅผ ์ƒ์„ฑํ• ๋•Œ, SoundSetting ๋ถ€๋ถ„๋„ ๊ฐ™์ด ์ƒ๊ธฐ๊ฒŒ ํ•จ
SoundSetting.createForCustom(sound);
SoundSetting.createForCustom(user,sound);

customSoundRepository.save(sound);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.sosaw.sosaw.domain.soundsetting.entity;

import com.sosaw.sosaw.domain.basicsound.entity.BasicSound;
import com.sosaw.sosaw.domain.customsound.entity.CustomSound;
import com.sosaw.sosaw.domain.soundsetting.entity.enums.SoundKind;
import com.sosaw.sosaw.domain.user.entity.User;
import com.sosaw.sosaw.global.entity.BaseEntity;
import jakarta.persistence.*;
import lombok.*;
Expand All @@ -19,6 +21,10 @@ public class SoundSetting extends BaseEntity {
@Column(name="setting_id")
private Long id;

@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "user_id", nullable = false)
private User user;

// ์•Œ๋žŒ ์œ ๋ฌด
@Column(name = "alarm_enabled", nullable = false)
private boolean alarmEnabled=true;
Expand All @@ -33,7 +39,9 @@ public class SoundSetting extends BaseEntity {
private CustomSound customSound;

// ๊ธฐ๋ณธ ์†Œ๋ฆฌ (๋‚˜์ค‘์— ์ถ”๊ฐ€)

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "basic_id")
private BasicSound basicSound;

// ์†Œ๋ฆฌ ํƒ€์ž… (์ปค์Šคํ…€ or ๊ธฐ๋ณธ)
@Enumerated(EnumType.STRING)
Expand All @@ -42,31 +50,45 @@ public class SoundSetting extends BaseEntity {

public void setCustomSound(CustomSound customSound) {
this.customSound = customSound;

// ์–‘๋ฐฉํ–ฅ ๋™๊ธฐํ™”
if (customSound != null && customSound.getSoundSetting() != this) {
customSound.setSoundSetting(this);
}
this.basicSound = null;
this.soundKind = SoundKind.CUSTOM;
}

// ์ปค์Šคํ…€ ์—ฐ๊ด€์ด๋ฉด KIND๋Š” CUSTOM
if (this.soundKind == null || this.soundKind != SoundKind.CUSTOM) {
this.soundKind = SoundKind.CUSTOM;
}
public void setBasicSound(BasicSound basicSound) {
this.basicSound = basicSound;
this.customSound = null;
this.soundKind = SoundKind.DEFAULT;
}

// ๋ณ€๊ฒฝ ๋ฉ”์†Œ๋“œ
public void changeAlarmEnabled(boolean enabled) {
this.alarmEnabled = enabled;
}

public void changeVibrationType(int vibrationLevel) { this.vibrationLevel = vibrationLevel; }

public static SoundSetting createForCustom(CustomSound customSound) {
public static SoundSetting createForCustom(User user, CustomSound customSound) {
SoundSetting setting = SoundSetting.builder()
.user(user)
.alarmEnabled(true) // ๊ธฐ๋ณธ๊ฐ’
.vibrationLevel(1) // ๊ธฐ๋ณธ๊ฐ’
.soundKind(SoundKind.CUSTOM)
.build();
setting.setCustomSound(customSound); // ์–‘๋ฐฉํ–ฅ ์„ธํŒ…
return setting;
}

public static SoundSetting createForBasic(User user, BasicSound basicSound) {
SoundSetting setting = SoundSetting.builder()
.user(user)
.alarmEnabled(true)
.vibrationLevel(1)
.soundKind(SoundKind.DEFAULT)
.build();
setting.setBasicSound(basicSound);
return setting;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,8 @@ public interface SoundSettingRepository extends JpaRepository<SoundSetting, Long

// CustomSound id๋กœ SoundSetting ์กฐํšŒ
Optional<SoundSetting> findByCustomSoundId(Long customId);

Optional<SoundSetting> findByUserUserIdAndCustomSoundId(Long userId, Long customId);
Optional<SoundSetting> findByUserUserIdAndBasicSoundId(Long userId, Long basicId);

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.sosaw.sosaw.domain.soundsetting.service;

import com.sosaw.sosaw.domain.basicsound.entity.BasicSound;
import com.sosaw.sosaw.domain.basicsound.repository.BasicSoundRepository;
import com.sosaw.sosaw.domain.customsound.exception.NotFoundSoundException;
import com.sosaw.sosaw.domain.customsound.entity.CustomSound;
import com.sosaw.sosaw.domain.customsound.repository.CustomSoundRepository;
Expand All @@ -16,6 +18,7 @@
@RequiredArgsConstructor
public class SoundSettingServiceImpl implements SoundSettingService {

private final BasicSoundRepository basicSoundRepository;
private final CustomSoundRepository customSoundRepository;
private final SoundSettingRepository soundSettingRepository;

Expand Down Expand Up @@ -48,7 +51,7 @@ public void updateCustomAlarm(User user, SoundAlarmUpdateReq req) {
// 2) ์„ค์ • ์กฐํšŒ or ์ƒ์„ฑ
SoundSetting setting = soundSettingRepository
.findByCustomSoundId(customSound.getId())
.orElseGet(() -> SoundSetting.createForCustom(customSound));
.orElseGet(() -> SoundSetting.createForCustom(user, customSound));

// 3) ์•Œ๋žŒ ์œ ๋ฌด ๋ฐ˜์˜
setting.changeAlarmEnabled(req.isAlarmEnabled());
Expand All @@ -68,7 +71,7 @@ public void updateCustomVibration(User user, SoundVibrationUpdateReq req) {
// 2) ์„ค์ • ์กฐํšŒ or ์ƒ์„ฑ
SoundSetting setting = soundSettingRepository
.findByCustomSoundId(customSound.getId())
.orElseGet(() -> SoundSetting.createForCustom(customSound));
.orElseGet(() -> SoundSetting.createForCustom(user, customSound));

// 3) ์ง„๋™ ์ข…๋ฅ˜ ๋ฐ˜์˜ (1~5)
setting.changeVibrationType(req.getVibrationType());
Expand All @@ -79,12 +82,38 @@ public void updateCustomVibration(User user, SoundVibrationUpdateReq req) {

@Override
public void updateDefaultAlarm(User user, SoundAlarmUpdateReq req) {
throw new UnsupportedOperationException("DEFAULT ์‚ฌ์šด๋“œ๋Š” ์•„์ง ๋ฏธ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค.");
// 1) ๊ธฐ๋ณธ ์‚ฌ์šด๋“œ ๊ฒ€์ฆ
BasicSound basicSound = basicSoundRepository.findById(req.getSoundId())
.orElseThrow(NotFoundSoundException::new);

// 2) ์„ค์ • ์กฐํšŒ or ์ƒ์„ฑ
SoundSetting setting = soundSettingRepository
.findByUserUserIdAndBasicSoundId(user.getUserId(), basicSound.getId())
.orElseGet(() -> SoundSetting.createForBasic(user, basicSound));

// 3) ์•Œ๋žŒ ๋ฐ˜์˜
setting.changeAlarmEnabled(req.isAlarmEnabled());

// 4) ์ €์žฅ
soundSettingRepository.save(setting);
}

@Override
public void updateDefaultVibration(User user, SoundVibrationUpdateReq req) {
throw new UnsupportedOperationException("DEFAULT ์‚ฌ์šด๋“œ๋Š” ์•„์ง ๋ฏธ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค.");
// 1) ๊ธฐ๋ณธ ์‚ฌ์šด๋“œ ๊ฒ€์ฆ
BasicSound basicSound = basicSoundRepository.findById(req.getSoundId())
.orElseThrow(NotFoundSoundException::new);

// 2) ์„ค์ • ์กฐํšŒ or ์ƒ์„ฑ
SoundSetting setting = soundSettingRepository
.findByUserUserIdAndBasicSoundId(user.getUserId(), basicSound.getId())
.orElseGet(() -> SoundSetting.createForBasic(user, basicSound));

// 3) ์ง„๋™ ์ข…๋ฅ˜ ๋ฐ˜์˜ (1~5)
setting.changeVibrationType(req.getVibrationType());

// 4) ์ €์žฅ
soundSettingRepository.save(setting);
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package com.sosaw.sosaw.domain.user.service;

import com.sosaw.sosaw.domain.basicsound.entity.BasicSound;
import com.sosaw.sosaw.domain.basicsound.repository.BasicSoundRepository;
import com.sosaw.sosaw.domain.soundsetting.entity.SoundSetting;
import com.sosaw.sosaw.domain.soundsetting.repository.SoundSettingRepository;
import com.sosaw.sosaw.domain.user.entity.User;
import com.sosaw.sosaw.domain.user.exception.PasswordMismatchException;
import com.sosaw.sosaw.domain.user.exception.UserAlreadyExistException;
Expand All @@ -14,11 +18,15 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@RequiredArgsConstructor
@Service
public class UserServiceImpl implements UserService {

private final UserRepository userRepository;
private final BasicSoundRepository basicSoundRepository;
private final SoundSettingRepository soundSettingRepository;
private final PasswordEncoder passwordEncoder;
private final JwtTokenProvider jwtTokenProvider;

Expand All @@ -39,6 +47,13 @@ public void signUp(SignUpReq signUpReq) {

// Repository์— User ์ €์žฅ
userRepository.save(user);

// ๊ธฐ๋ณธ ์‚ฌ์šด๋“œ ์„ธํŒ… ์ƒ์„ฑ
List<BasicSound> basics = basicSoundRepository.findAll();
for (BasicSound basic : basics) {
SoundSetting setting = SoundSetting.createForBasic(user, basic);
soundSettingRepository.save(setting);
}
}

// ํšŒ์›๊ฐ€์ž…์‹œ, ์•„์ด๋”” ์ค‘๋ณต ํ™•์ธ
Expand Down