Introduce pluggable email and image upload

This commit is contained in:
Tim
2025-07-01 09:58:40 +08:00
parent 9db69ba714
commit aa64ef5ee1
16 changed files with 266 additions and 9 deletions

View File

@@ -1,7 +1,7 @@
package com.openisle.controller;
import com.openisle.model.User;
import com.openisle.service.EmailService;
import com.openisle.service.EmailSender;
import com.openisle.service.JwtService;
import com.openisle.service.UserService;
import lombok.Data;
@@ -42,7 +42,7 @@ curl -X POST http://localhost:8080/api/auth/login \
public class AuthController {
private final UserService userService;
private final JwtService jwtService;
private final EmailService emailService;
private final EmailSender emailService;
@PostMapping("/register")
public ResponseEntity<?> register(@RequestBody RegisterRequest req) {

View File

@@ -0,0 +1,53 @@
package com.openisle.controller;
import com.openisle.model.User;
import com.openisle.service.ImageUploader;
import com.openisle.service.UserService;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.Map;
@RestController
@RequestMapping("/api/users")
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
private final ImageUploader imageUploader;
@GetMapping("/me")
public ResponseEntity<UserDto> me(Authentication auth) {
User user = userService.findByUsername(auth.getName()).orElseThrow();
return ResponseEntity.ok(toDto(user));
}
@PostMapping("/me/avatar")
public ResponseEntity<?> uploadAvatar(@RequestParam("file") MultipartFile file,
Authentication auth) throws IOException {
String url = imageUploader.upload(file.getBytes(), file.getOriginalFilename());
userService.updateAvatar(auth.getName(), url);
return ResponseEntity.ok(Map.of("url", url));
}
private UserDto toDto(User user) {
UserDto dto = new UserDto();
dto.setId(user.getId());
dto.setUsername(user.getUsername());
dto.setEmail(user.getEmail());
dto.setAvatar(user.getAvatar());
return dto;
}
@Data
private static class UserDto {
private Long id;
private String username;
private String email;
private String avatar;
}
}