fix(auth): add auto-init hardware shortcuts and voice commands on user register
This commit is contained in:
parent
2617ccacb2
commit
cdb578c834
@ -3,13 +3,19 @@ package com.walkguide.service;
|
|||||||
import com.walkguide.dto.request.LoginRequest;
|
import com.walkguide.dto.request.LoginRequest;
|
||||||
import com.walkguide.dto.request.RegisterRequest;
|
import com.walkguide.dto.request.RegisterRequest;
|
||||||
import com.walkguide.dto.response.AuthDataResponse;
|
import com.walkguide.dto.response.AuthDataResponse;
|
||||||
|
import com.walkguide.entity.HardwareShortcut;
|
||||||
import com.walkguide.entity.RefreshToken;
|
import com.walkguide.entity.RefreshToken;
|
||||||
import com.walkguide.entity.User;
|
import com.walkguide.entity.User;
|
||||||
import com.walkguide.entity.UserSettings;
|
import com.walkguide.entity.UserSettings;
|
||||||
|
import com.walkguide.entity.VoiceCommandConfig;
|
||||||
import com.walkguide.enums.ActivityLogType;
|
import com.walkguide.enums.ActivityLogType;
|
||||||
|
import com.walkguide.enums.HardwareShortcutKey;
|
||||||
|
import com.walkguide.enums.VoiceCommandKey;
|
||||||
|
import com.walkguide.repository.HardwareShortcutRepository;
|
||||||
import com.walkguide.repository.RefreshTokenRepository;
|
import com.walkguide.repository.RefreshTokenRepository;
|
||||||
import com.walkguide.repository.UserRepository;
|
import com.walkguide.repository.UserRepository;
|
||||||
import com.walkguide.repository.UserSettingsRepository;
|
import com.walkguide.repository.UserSettingsRepository;
|
||||||
|
import com.walkguide.repository.VoiceCommandConfigRepository;
|
||||||
import com.walkguide.security.JwtUtil;
|
import com.walkguide.security.JwtUtil;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
@ -18,6 +24,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
|
|
||||||
import java.security.SecureRandom;
|
import java.security.SecureRandom;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@ -26,6 +33,8 @@ public class AuthService {
|
|||||||
private final UserRepository userRepository;
|
private final UserRepository userRepository;
|
||||||
private final RefreshTokenRepository refreshTokenRepository;
|
private final RefreshTokenRepository refreshTokenRepository;
|
||||||
private final UserSettingsRepository userSettingsRepository;
|
private final UserSettingsRepository userSettingsRepository;
|
||||||
|
private final HardwareShortcutRepository hardwareShortcutRepository;
|
||||||
|
private final VoiceCommandConfigRepository voiceCommandConfigRepository;
|
||||||
private final ActivityLogService activityLogService;
|
private final ActivityLogService activityLogService;
|
||||||
private final JwtUtil jwtUtil;
|
private final JwtUtil jwtUtil;
|
||||||
private final PasswordEncoder passwordEncoder;
|
private final PasswordEncoder passwordEncoder;
|
||||||
@ -33,6 +42,23 @@ public class AuthService {
|
|||||||
private static final String CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
private static final String CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
||||||
private static final int ID_LENGTH = 12;
|
private static final int ID_LENGTH = 12;
|
||||||
|
|
||||||
|
private static final Map<VoiceCommandKey, String> DEFAULT_PHRASES = Map.ofEntries(
|
||||||
|
Map.entry(VoiceCommandKey.OPEN_WALKGUIDE, "buka walkguide"),
|
||||||
|
Map.entry(VoiceCommandKey.START_WALKGUIDE, "mulai walkguide"),
|
||||||
|
Map.entry(VoiceCommandKey.STOP_WALKGUIDE, "hentikan walkguide"),
|
||||||
|
Map.entry(VoiceCommandKey.CALL_GUARDIAN, "telepon guardian"),
|
||||||
|
Map.entry(VoiceCommandKey.OPEN_NOTIFICATION, "buka notifikasi"),
|
||||||
|
Map.entry(VoiceCommandKey.READ_ALL_NOTIF, "baca notifikasi"),
|
||||||
|
Map.entry(VoiceCommandKey.OPEN_SOS, "buka sos"),
|
||||||
|
Map.entry(VoiceCommandKey.SEND_SOS, "kirim sos"),
|
||||||
|
Map.entry(VoiceCommandKey.WHERE_AM_I, "di mana saya"),
|
||||||
|
Map.entry(VoiceCommandKey.OPEN_ACTIVITY, "buka aktivitas"),
|
||||||
|
Map.entry(VoiceCommandKey.OPEN_NAVIGATION, "buka navigasi"),
|
||||||
|
Map.entry(VoiceCommandKey.OPEN_SETTINGS, "buka pengaturan"),
|
||||||
|
Map.entry(VoiceCommandKey.REPEAT_LAST, "ulangi"),
|
||||||
|
Map.entry(VoiceCommandKey.STOP_TTS, "berhenti")
|
||||||
|
);
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public AuthDataResponse register(RegisterRequest req) {
|
public AuthDataResponse register(RegisterRequest req) {
|
||||||
if (userRepository.existsByEmail(req.getEmail())) {
|
if (userRepository.existsByEmail(req.getEmail())) {
|
||||||
@ -57,11 +83,30 @@ public class AuthService {
|
|||||||
|
|
||||||
user = userRepository.save(user);
|
user = userRepository.save(user);
|
||||||
|
|
||||||
// Buat default settings untuk user baru
|
|
||||||
if ("ROLE_USER".equals(role)) {
|
if ("ROLE_USER".equals(role)) {
|
||||||
|
// 1. Default settings
|
||||||
userSettingsRepository.save(UserSettings.builder()
|
userSettingsRepository.save(UserSettings.builder()
|
||||||
.userId(user.getId())
|
.userId(user.getId())
|
||||||
.build());
|
.build());
|
||||||
|
|
||||||
|
// 2. Default hardware shortcuts
|
||||||
|
for (HardwareShortcutKey key : HardwareShortcutKey.values()) {
|
||||||
|
hardwareShortcutRepository.save(HardwareShortcut.builder()
|
||||||
|
.userId(user.getId())
|
||||||
|
.shortcutKey(key)
|
||||||
|
.enabled(true)
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. Default voice commands
|
||||||
|
for (VoiceCommandKey key : VoiceCommandKey.values()) {
|
||||||
|
voiceCommandConfigRepository.save(VoiceCommandConfig.builder()
|
||||||
|
.userId(user.getId())
|
||||||
|
.commandKey(key)
|
||||||
|
.triggerPhrase(DEFAULT_PHRASES.getOrDefault(key, key.name().toLowerCase()))
|
||||||
|
.enabled(true)
|
||||||
|
.build());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return buildAuthResponse(user);
|
return buildAuthResponse(user);
|
||||||
@ -76,9 +121,7 @@ public class AuthService {
|
|||||||
throw new RuntimeException("Password salah");
|
throw new RuntimeException("Password salah");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hapus refresh token lama
|
|
||||||
refreshTokenRepository.deleteByUserId(user.getId());
|
refreshTokenRepository.deleteByUserId(user.getId());
|
||||||
|
|
||||||
activityLogService.createLog(user, ActivityLogType.LOGIN, "User login", null);
|
activityLogService.createLog(user, ActivityLogType.LOGIN, "User login", null);
|
||||||
|
|
||||||
return buildAuthResponse(user);
|
return buildAuthResponse(user);
|
||||||
@ -102,7 +145,7 @@ public class AuthService {
|
|||||||
|
|
||||||
return AuthDataResponse.builder()
|
return AuthDataResponse.builder()
|
||||||
.accessToken(newAccessToken)
|
.accessToken(newAccessToken)
|
||||||
.refreshToken(token) // refresh token tetap sama
|
.refreshToken(token)
|
||||||
.role(user.getRole())
|
.role(user.getRole())
|
||||||
.userId(user.getId())
|
.userId(user.getId())
|
||||||
.displayName(user.getDisplayName())
|
.displayName(user.getDisplayName())
|
||||||
@ -125,14 +168,11 @@ public class AuthService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// ========== PRIVATE HELPERS ==========
|
|
||||||
|
|
||||||
private AuthDataResponse buildAuthResponse(User user) {
|
private AuthDataResponse buildAuthResponse(User user) {
|
||||||
String accessToken = jwtUtil.generateAccessToken(
|
String accessToken = jwtUtil.generateAccessToken(
|
||||||
user.getEmail(), user.getRole(), user.getId());
|
user.getEmail(), user.getRole(), user.getId());
|
||||||
String refreshTokenStr = jwtUtil.generateRefreshToken();
|
String refreshTokenStr = jwtUtil.generateRefreshToken();
|
||||||
|
|
||||||
// Simpan refresh token ke DB (berlaku 30 hari)
|
|
||||||
refreshTokenRepository.save(RefreshToken.builder()
|
refreshTokenRepository.save(RefreshToken.builder()
|
||||||
.userId(user.getId())
|
.userId(user.getId())
|
||||||
.token(refreshTokenStr)
|
.token(refreshTokenStr)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user