Skip to content
This repository was archived by the owner on Jul 6, 2025. It is now read-only.
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
Expand Up @@ -10,6 +10,7 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

@Slf4j
Expand Down Expand Up @@ -42,6 +43,21 @@ public ResponseEntity<AuthResponse> login(@RequestBody LoginUserRequest loginReq
}
}

@PutMapping("/{id}/register")
@PreAuthorize("hasRole('ADMIN') or #id == authentication.principal.id")
public ResponseEntity<AuthResponse> registerGuest(@PathVariable Long id, @RequestBody RegisterUserRequest request) {
try {
authenticationService.convertGuestToUser(id, request);

UserDTO authenticatedUser = authenticationService.authenticate(new LoginUserRequest(request.email(), request.password()));
String jwtToken = jwtService.generateToken(authenticatedUser);
return ResponseEntity.ok(AuthResponse.UserAuthenticated(authenticatedUser, jwtToken, jwtService.getExpirationTime()));
} catch (Exception e) {
log.error("Error converting guest to a user: {}", e.getMessage());
return ResponseEntity.badRequest().body(AuthResponse.AuthenticationFailed(e.getMessage()));
}
}

@GetMapping("/me")
public ResponseEntity<UserDTO> getAuthenticatedUser(@RequestHeader("Authorization") String authHeader) {
try {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.zenfulcode.commercify.commercify.controller;


import com.zenfulcode.commercify.commercify.api.requests.RegisterUserRequest;
import com.zenfulcode.commercify.commercify.dto.AddressDTO;
import com.zenfulcode.commercify.commercify.dto.UserDTO;
import com.zenfulcode.commercify.commercify.service.UserManagementService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
Expand All @@ -16,6 +16,7 @@
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

@Slf4j
@RestController
@RequestMapping("/api/v1/users")
@RequiredArgsConstructor
Expand Down Expand Up @@ -51,20 +52,6 @@ public ResponseEntity<UserDTO> updateUser(@PathVariable Long id, @RequestBody Us
return ResponseEntity.ok(userManagementService.updateUser(id, userDTO));
}

@PutMapping("/{id}/register")
@PreAuthorize("hasRole('ADMIN') or #id == authentication.principal.id")
public ResponseEntity<UserDTO> registerGuest(@PathVariable Long id, @RequestBody RegisterUserRequest request) {
System.out.println("Registering guest");
System.out.println(request);

try {
return ResponseEntity.ok(userManagementService.updateGuest(id, request));
} catch (Exception e) {
System.out.println("error: " + e.getMessage());
return ResponseEntity.badRequest().build();
}
}

@DeleteMapping("/{id}")
@PreAuthorize("hasRole('ADMIN')")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public class AuthenticationService {
private final UserMapper mapper;
private final JwtService jwtService;
private final PasswordEncoder passwordEncoder;
private final UserManagementService usersService;

@Transactional
public UserDTO registerUser(RegisterUserRequest registerRequest) {
Expand Down Expand Up @@ -68,6 +69,20 @@ public UserDTO registerUser(RegisterUserRequest registerRequest) {
return mapper.apply(savedUser);
}

@Transactional
public void convertGuestToUser(Long id, RegisterUserRequest request) {
usersService.updateUser(id, request.toUserDTO());

UserEntity user = userRepository.findById(id)
.orElseThrow(() -> new RuntimeException("User not found"));

user.setPassword(passwordEncoder.encode(request.password()));
user.removeRole("GUEST");
user.addRole("USER");

userRepository.save(user);
}

public UserDTO registerGuest() {
String firstName = "Guest";
String lastName = String.valueOf(new Date().toInstant().toEpochMilli());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.zenfulcode.commercify.commercify.service;


import com.zenfulcode.commercify.commercify.api.requests.RegisterUserRequest;
import com.zenfulcode.commercify.commercify.dto.AddressDTO;
import com.zenfulcode.commercify.commercify.dto.UserDTO;
import com.zenfulcode.commercify.commercify.dto.mapper.AddressMapper;
Expand All @@ -13,7 +12,6 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand All @@ -27,7 +25,6 @@ public class UserManagementService {
private final UserRepository userRepository;
private final UserMapper mapper;
private final AddressMapper addressMapper;
private final BCryptPasswordEncoder passwordEncoder;

@Transactional(readOnly = true)
public UserDTO getUserById(Long id) {
Expand Down Expand Up @@ -59,27 +56,6 @@ public UserDTO updateUser(Long id, UserDTO userDTO) throws RuntimeException { /
return mapper.apply(userRepository.save(user));
}

@Transactional
public UserDTO updateGuest(Long id, RegisterUserRequest request) {
try {
updateUser(id, request.toUserDTO());

UserEntity user = userRepository.findById(id)
.orElseThrow(() -> new RuntimeException("User not found"));

user.setPassword(passwordEncoder.encode(request.password()));
user.removeRole("GUEST");
user.addRole("USER");

UserEntity updatedUser = userRepository.save(user);
return mapper.apply(updatedUser);
} catch (RuntimeException e) {
// Log the error
log.error("Failed to update guest user: {}", e.getMessage(), e);
throw e; // Re-throw the exception instead of swallowing it
}
}

@Transactional
public void deleteUser(Long id) {
if (!userRepository.existsById(id)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -261,8 +261,6 @@ private OrderDetailsDTO buildOrderDetailsDTO(OrderEntity order) {

OrderShippingInfo shippingInfo = order.getOrderShippingInfo();

System.out.println("shippingInfo = " + shippingInfo);

CustomerDetailsDTO customerDetails = CustomerDetailsDTO.builder()
.email(shippingInfo.getCustomerEmail())
.firstName(shippingInfo.getCustomerFirstName())
Expand Down
Loading