// Path: src/main/java/com/monkeyk/sos/service/dto/UserFormDto.java
// public class UserFormDto extends UserDto {
//     private static final long serialVersionUID = 7959857016962260738L;
// 
// 
//     private String password;
// 
//     public UserFormDto() {
//     }
// 
// 
//     public Privilege[] getAllPrivileges() {
//         return new Privilege[]{Privilege.MOBILE, Privilege.UNITY};
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public void setPassword(String password) {
//         this.password = password;
//     }
// 
//     public User newUser() {
//         final User user = new User()
//                 .username(getUsername())
//                 .phone(getPhone())
//                 .email(getEmail())
//                 .password(PasswordHandler.encode(getPassword()));
//         user.privileges().addAll(getPrivileges());
//         return user;
//     }
// }
// 
// Path: src/main/java/com/monkeyk/sos/service/dto/UserJsonDto.java
// public class UserJsonDto implements Serializable {
// 
// 
//     private String guid;
//     private boolean archived;
// 
//     private String username;
//     private String phone;
//     private String email;
// 
//     private List<String> privileges = new ArrayList<>();
// 
//     public UserJsonDto() {
//     }
// 
//     public UserJsonDto(User user) {
//         this.guid = user.guid();
//         this.archived = user.archived();
//         this.username = user.username();
// 
//         this.phone = user.phone();
//         this.email = user.email();
// 
//         final List<Privilege> privilegeList = user.privileges();
//         for (Privilege privilege : privilegeList) {
//             this.privileges.add(privilege.name());
//         }
//     }
// 
//     public boolean isArchived() {
//         return archived;
//     }
// 
//     public void setArchived(boolean archived) {
//         this.archived = archived;
//     }
// 
//     public String getGuid() {
//         return guid;
//     }
// 
//     public void setGuid(String guid) {
//         this.guid = guid;
//     }
// 
//     public String getUsername() {
//         return username;
//     }
// 
//     public void setUsername(String username) {
//         this.username = username;
//     }
// 
//     public String getPhone() {
//         return phone;
//     }
// 
//     public void setPhone(String phone) {
//         this.phone = phone;
//     }
// 
//     public String getEmail() {
//         return email;
//     }
// 
//     public void setEmail(String email) {
//         this.email = email;
//     }
// 
//     public List<String> getPrivileges() {
//         return privileges;
//     }
// 
//     public void setPrivileges(List<String> privileges) {
//         this.privileges = privileges;
//     }
// }
// 
// Path: src/main/java/com/monkeyk/sos/service/dto/UserOverviewDto.java
// public class UserOverviewDto implements Serializable {
//     private static final long serialVersionUID = 2023379587030489248L;
// 
// 
//     private String username;
// 
// 
//     private List<UserDto> userDtos = new ArrayList<>();
// 
// 
//     public UserOverviewDto() {
//     }
// 
//     public int getSize() {
//         return userDtos.size();
//     }
// 
//     public String getUsername() {
//         return username;
//     }
// 
//     public void setUsername(String username) {
//         this.username = username;
//     }
// 
//     public List<UserDto> getUserDtos() {
//         return userDtos;
//     }
// 
//     public void setUserDtos(List<UserDto> userDtos) {
//         this.userDtos = userDtos;
//     }
// }


import com.monkeyk.sos.service.dto.UserFormDto;
import com.monkeyk.sos.service.dto.UserJsonDto;
import com.monkeyk.sos.service.dto.UserOverviewDto;
import org.springframework.security.core.userdetails.UserDetailsService;
package com.monkeyk.sos.service;


/**
 * @author Shengzhao Li
 */
public interface UserService extends UserDetailsService {

    UserJsonDto loadCurrentUserJsonDto();

    UserOverviewDto loadUserOverviewDto(UserOverviewDto overviewDto);

    boolean isExistedUsername(String username);

// Path: src/main/java/com/monkeyk/sos/service/dto/UserFormDto.java
// public class UserFormDto extends UserDto {
//     private static final long serialVersionUID = 7959857016962260738L;
// 
// 
//     private String password;
// 
//     public UserFormDto() {
//     }
// 
// 
//     public Privilege[] getAllPrivileges() {
//         return new Privilege[]{Privilege.MOBILE, Privilege.UNITY};
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public void setPassword(String password) {
//         this.password = password;
//     }
// 
//     public User newUser() {
//         final User user = new User()
//                 .username(getUsername())
//                 .phone(getPhone())
//                 .email(getEmail())
//                 .password(PasswordHandler.encode(getPassword()));
//         user.privileges().addAll(getPrivileges());
//         return user;
//     }
// }
// 
// Path: src/main/java/com/monkeyk/sos/service/dto/UserJsonDto.java
// public class UserJsonDto implements Serializable {
// 
// 
//     private String guid;
//     private boolean archived;
// 
//     private String username;
//     private String phone;
//     private String email;
// 
//     private List<String> privileges = new ArrayList<>();
// 
//     public UserJsonDto() {
//     }
// 
//     public UserJsonDto(User user) {
//         this.guid = user.guid();
//         this.archived = user.archived();
//         this.username = user.username();
// 
//         this.phone = user.phone();
//         this.email = user.email();
// 
//         final List<Privilege> privilegeList = user.privileges();
//         for (Privilege privilege : privilegeList) {
//             this.privileges.add(privilege.name());
//         }
//     }
// 
//     public boolean isArchived() {
//         return archived;
//     }
// 
//     public void setArchived(boolean archived) {
//         this.archived = archived;
//     }
// 
//     public String getGuid() {
//         return guid;
//     }
// 
//     public void setGuid(String guid) {
//         this.guid = guid;
//     }
// 
//     public String getUsername() {
//         return username;
//     }
// 
//     public void setUsername(String username) {
//         this.username = username;
//     }
// 
//     public String getPhone() {
//         return phone;
//     }
// 
//     public void setPhone(String phone) {
//         this.phone = phone;
//     }
// 
//     public String getEmail() {
//         return email;
//     }
// 
//     public void setEmail(String email) {
//         this.email = email;
//     }
// 
//     public List<String> getPrivileges() {
//         return privileges;
//     }
// 
//     public void setPrivileges(List<String> privileges) {
//         this.privileges = privileges;
//     }
// }
// 
// Path: src/main/java/com/monkeyk/sos/service/dto/UserOverviewDto.java
// public class UserOverviewDto implements Serializable {
//     private static final long serialVersionUID = 2023379587030489248L;
// 
// 
//     private String username;
// 
// 
//     private List<UserDto> userDtos = new ArrayList<>();
// 
// 
//     public UserOverviewDto() {
//     }
// 
//     public int getSize() {
//         return userDtos.size();
//     }
// 
//     public String getUsername() {
//         return username;
//     }
// 
//     public void setUsername(String username) {
//         this.username = username;
//     }
// 
//     public List<UserDto> getUserDtos() {
//         return userDtos;
//     }
// 
//     public void setUserDtos(List<UserDto> userDtos) {
//         this.userDtos = userDtos;
//     }
// }


// Path: src/main/java/com/monkeyk/sos/service/UserService.java
import com.monkeyk.sos.service.dto.UserFormDto;
import com.monkeyk.sos.service.dto.UserJsonDto;
import com.monkeyk.sos.service.dto.UserOverviewDto;
import org.springframework.security.core.userdetails.UserDetailsService;

package com.monkeyk.sos.service;


/**
 * @author Shengzhao Li
 */
public interface UserService extends UserDetailsService {

    UserJsonDto loadCurrentUserJsonDto();

    UserOverviewDto loadUserOverviewDto(UserOverviewDto overviewDto);

    boolean isExistedUsername(String username);

    String saveUser(UserFormDto formDto);