// Path: spat-services/src/main/java/com/pcalouche/spat/api/dto/UserDto.java
// @Data
// @Builder
// @NoArgsConstructor
// @AllArgsConstructor
// public class UserDto {
//     @EqualsAndHashCode.Exclude
//     private Integer id;
//     private String username;
//     @Builder.Default
//     private boolean accountNonExpired = true;
//     @Builder.Default
//     private boolean accountNonLocked = true;
//     @Builder.Default
//     private boolean credentialsNonExpired = true;
//     @Builder.Default
//     private boolean enabled = true;
//     @JsonProperty("roles")
//     @Builder.Default
//     private Set<RoleDto> roleDtos = new HashSet<>();
// 
//     public static UserDto map(User user) {
//         return UserDto.builder()
//                 .id(user.getId())
//                 .username(user.getUsername())
//                 .accountNonExpired(user.isAccountNonExpired())
//                 .accountNonLocked(user.isAccountNonLocked())
//                 .credentialsNonExpired(user.isCredentialsNonExpired())
//                 .enabled(user.isEnabled())
//                 .roleDtos(
//                         user.getRoles().stream()
//                                 .map(RoleDto::map)
//                                 .collect(Collectors.toSet())
//                 )
//                 .build();
//     }
// }
// 
// Path: spat-services/src/main/java/com/pcalouche/spat/api/dto/UserEditRequest.java
// @Data
// @Builder
// @NoArgsConstructor
// @AllArgsConstructor
// public class UserEditRequest {
//     @NotEmpty
//     private String username;
//     @Builder.Default
//     private boolean accountNonExpired = true;
//     @Builder.Default
//     private boolean accountNonLocked = true;
//     @Builder.Default
//     private boolean credentialsNonExpired = true;
//     @Builder.Default
//     private boolean enabled = true;
//     @Builder.Default
//     @JsonProperty("roles")
//     private Set<RoleDto> roleDtos = new HashSet<>();
// }


import com.pcalouche.spat.api.dto.UserDto;
import com.pcalouche.spat.api.dto.UserEditRequest;
import java.util.List;
import java.util.Optional;
package com.pcalouche.spat.service;



public interface UserService {
    Optional<UserDto> findById(Integer id);

    Optional<UserDto> findByUsername(String username);

    List<UserDto> findAll();

// Path: spat-services/src/main/java/com/pcalouche/spat/api/dto/UserDto.java
// @Data
// @Builder
// @NoArgsConstructor
// @AllArgsConstructor
// public class UserDto {
//     @EqualsAndHashCode.Exclude
//     private Integer id;
//     private String username;
//     @Builder.Default
//     private boolean accountNonExpired = true;
//     @Builder.Default
//     private boolean accountNonLocked = true;
//     @Builder.Default
//     private boolean credentialsNonExpired = true;
//     @Builder.Default
//     private boolean enabled = true;
//     @JsonProperty("roles")
//     @Builder.Default
//     private Set<RoleDto> roleDtos = new HashSet<>();
// 
//     public static UserDto map(User user) {
//         return UserDto.builder()
//                 .id(user.getId())
//                 .username(user.getUsername())
//                 .accountNonExpired(user.isAccountNonExpired())
//                 .accountNonLocked(user.isAccountNonLocked())
//                 .credentialsNonExpired(user.isCredentialsNonExpired())
//                 .enabled(user.isEnabled())
//                 .roleDtos(
//                         user.getRoles().stream()
//                                 .map(RoleDto::map)
//                                 .collect(Collectors.toSet())
//                 )
//                 .build();
//     }
// }
// 
// Path: spat-services/src/main/java/com/pcalouche/spat/api/dto/UserEditRequest.java
// @Data
// @Builder
// @NoArgsConstructor
// @AllArgsConstructor
// public class UserEditRequest {
//     @NotEmpty
//     private String username;
//     @Builder.Default
//     private boolean accountNonExpired = true;
//     @Builder.Default
//     private boolean accountNonLocked = true;
//     @Builder.Default
//     private boolean credentialsNonExpired = true;
//     @Builder.Default
//     private boolean enabled = true;
//     @Builder.Default
//     @JsonProperty("roles")
//     private Set<RoleDto> roleDtos = new HashSet<>();
// }


// Path: spat-services/src/main/java/com/pcalouche/spat/service/UserService.java
import com.pcalouche.spat.api.dto.UserDto;
import com.pcalouche.spat.api.dto.UserEditRequest;
import java.util.List;
import java.util.Optional;

package com.pcalouche.spat.service;



public interface UserService {
    Optional<UserDto> findById(Integer id);

    Optional<UserDto> findByUsername(String username);

    List<UserDto> findAll();

    UserDto create(UserEditRequest userEditRequest);