Code: Select all
{
"id": 12345,
"name": "steve123",
"emailData": [
"steve@gmail.com",
"steve@outlook.com"
]
}
< /code>
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
public class UserRequestDto {
private Long id;
private String name;
private List emailData;
}
< /code>
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Entity
@Getter
@Setter
@Table(name = "\"user\"")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List emailData;
}
< /code>
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.Setter;
@Entity
@Getter
@Setter
@Table(name = "email_data")
public class EmailData {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
private String email;
}
< /code>
-- schema.sql
CREATE TABLE IF NOT EXISTS "user"
(
id BIGINT GENERATED BY DEFAULT AS IDENTITY,
name VARCHAR(500) UNIQUE NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE IF NOT EXISTS email_data
(
id BIGINT GENERATED BY DEFAULT AS IDENTITY,
user_id BIGINT NOT NULL REFERENCES "user"(id),
email VARCHAR(200) UNIQUE NOT NULL,
PRIMARY KEY (id)
);
< /code>
import com.example.pixel_user_api.data.dto.request.UserRequestDto;
import com.example.pixel_user_api.data.dto.response.UserResponseDto;
import com.example.pixel_user_api.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/user")
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
@PutMapping
public ResponseEntity updateUser(@RequestBody UserRequestDto userRequestDto) {
UserResponseDto userResponseDto = userService.update(userRequestDto);
return ResponseEntity.ok(userResponseDto);
}
}
< /code>
Stellen Sie sich auch vor, Steves aktueller Zustand entspricht diesem: < /p>
{
"id": 12345,
"name": "steve123",
"emailData": [
"steve@gmail.com",
"steve@yahoo.com"
]
}
Halten Sie steve@gmail.com NIEMALS, es in E -Mail -_data -. Wenn es nicht von einem anderen Benutzer besetzt ist, geben Sie eine Fehlerantwort zurück (ich kann einen Rat schreiben, der die Fehler des DB in meinem spezifischen (einfachen) Szenario (einfach) Szenario mein Userservice < /code> kann: < /p>
alle STEVE -E -Mails (a db hit). Manipulieren Sie seine E-Mail-Data -Liste, damit nur Steve@gmail.com erhalten bleibt, Steve@outlook.com hinzugefügt wird (mit einer Null-ID und nicht null Benutzer ). Unverschämt.
Code: Select all
@Entity
@Getter
@Setter
@Table(name = "phone_data")
public class PhoneData {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
private String phone;
}
< /code>
Objektdiagramm könnte auch viel komplexer sein. Ein Value -Wrapper, wie EmailData
Code: Select all
@Entity
@Getter
@Setter
@Table(name = "domain_data")
public class DomainData {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String domain; // outlook.com, gmail.com, etc.
}
Code: Select all
import com.example.pixel_user_api.data.dto.request.UserRequestDto;
import com.example.pixel_user_api.data.dto.response.UserResponseDto;
public interface UserService {
UserResponseDto update(UserRequestDto userRequestDto);
}
< /code>
import com.example.pixel_user_api.data.dto.request.UserRequestDto;
import com.example.pixel_user_api.data.dto.response.UserResponseDto;
import com.example.pixel_user_api.data.entity.User;
import com.example.pixel_user_api.mapper.UserMapper;
import com.example.pixel_user_api.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class UserServiceImpl implements UserService {
private final UserRepository repository;
private final UserMapper mapper;
@Override
@Transactional(readOnly = false)
public UserResponseDto update(UserRequestDto userRequestDto) {
User user = mapper.toUser(userRequestDto);
User updatedUser = repository.save(user);
return mapper.toResponseDto(updatedUser);
}
}
< /code>
import com.example.pixel_user_api.data.dto.request.UserRequestDto;
import com.example.pixel_user_api.data.dto.response.UserResponseDto;
import com.example.pixel_user_api.data.entity.User;
import org.mapstruct.Mapper;
@Mapper(uses = EmailMapper.class, componentModel = "spring")
public interface UserMapper {
User toUser(UserRequestDto userRequestDto);
UserResponseDto toResponseDto(User user);
}
< /code>
import com.example.pixel_user_api.data.entity.EmailData;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
@Mapper(componentModel = "spring")
public interface EmailMapper {
default String toString(EmailData emailData) {
return emailData == null ? null : emailData.getEmail();
}
@Mapping(source = ".", target = "email")
EmailData toEmailData(String email);
}