// Path: src/main/java/com/yyqian/imagine/dto/PasswordRestForm.java
// public class PasswordRestForm {
// 
//   @NotEmpty
//   @Size(min = 6, max = 20)
//   private String password = "";
// 
//   public PasswordRestForm() {
//   }
// 
//   public String getPassword() {
//     return password;
//   }
// 
//   public void setPassword(String password) {
//     this.password = password;
//   }
// 
// }
// 
// Path: src/main/java/com/yyqian/imagine/dto/UserCreateForm.java
// public class UserCreateForm {
// 
//   @NotEmpty
//   private String username = "";
// 
//   @NotEmpty
//   private String password = "";
// 
//   @NotEmpty
//   private String passwordRepeated = "";
// 
//   public UserCreateForm() {
//   }
// 
//   public String getUsername() {
//     return username;
//   }
// 
//   public void setUsername(String username) {
//     this.username = username.trim();
//   }
// 
//   public String getPassword() {
//     return password;
//   }
// 
//   public void setPassword(String password) {
//     this.password = password.trim();
//   }
// 
//   public String getPasswordRepeated() {
//     return passwordRepeated;
//   }
// 
//   public void setPasswordRepeated(String passwordRepeated) {
//     this.passwordRepeated = passwordRepeated.trim();
//   }
// 
// }
// 
// Path: src/main/java/com/yyqian/imagine/dto/UserUpdateForm.java
// public class UserUpdateForm {
// 
//   private String email = "";
// 
//   private String about = "";
// 
//   public UserUpdateForm() {
//   }
// 
//   public String getEmail() {
//     return email;
//   }
// 
//   public void setEmail(String email) {
//     this.email = email.trim();
//   }
// 
//   public String getAbout() {
//     return about;
//   }
// 
//   public void setAbout(String about) {
//     this.about = about.trim();
//   }
// 
// }
// 
// Path: src/main/java/com/yyqian/imagine/po/User.java
// @Entity
// @Table(name = "user")
// public class User extends Base {
// 
//   @Column(name = "username", nullable = false, unique = true)
//   private String username;
// 
//   @Column(name = "password_hash", nullable = false)
//   private String passwordHash;
// 
//   @Column(name = "email", unique = true)
//   private String email;
// 
//   @Column(name = "role", nullable = false)
//   @Enumerated(EnumType.STRING)
//   private Role role = Role.USER;
// 
//   @Lob
//   @Column(name = "about")
//   private String about;
// 
//   @Column(name = "point", nullable = false)
//   private Integer point = 0;
// 
//   public enum Role {
//     USER, ADMIN
//   }
// 
//   public User() {
//   }
// 
//   public User(String username, String passwordHash) {
//     this.username = username;
//     this.passwordHash = passwordHash;
//   }
// 
//   @Override
//   public String toString() {
//     return id.toString();
//   }
// 
//   public String getUsername() {
//     return username;
//   }
// 
//   public String getEmail() {
//     return email;
//   }
// 
//   public Role getRole() {
//     return role;
//   }
// 
//   public String getPasswordHash() {
//     return passwordHash;
//   }
// 
//   public void setPasswordHash(String passwordHash) {
//     this.passwordHash = passwordHash;
//   }
// 
//   public void setRole(Role role) {
//     this.role = role;
//   }
// 
//   public void setUsername(String username) {
//     this.username = username;
//   }
// 
//   public void setEmail(String email) {
//     this.email = email;
//   }
// 
//   public String getAbout() {
//     return about;
//   }
// 
//   public void setAbout(String about) {
//     this.about = about;
//   }
// 
//   public Integer getPoint() {
//     return point;
//   }
// 
//   public void setPoint(Integer point) {
//     this.point = point;
//   }
// }


import com.yyqian.imagine.dto.PasswordRestForm;
import com.yyqian.imagine.dto.UserCreateForm;
import com.yyqian.imagine.dto.UserUpdateForm;
import com.yyqian.imagine.po.User;
import java.util.Collection;
import java.util.Optional;
package com.yyqian.imagine.service;



/**
 * Created on 12/15/15.
 *
 * @author Yinyin Qian
 */
public interface UserService {

  Optional<User> getUserById(long id);

  Optional<User> getUserByUsername(String username);

  Collection<User> getAllUsers();

// Path: src/main/java/com/yyqian/imagine/dto/PasswordRestForm.java
// public class PasswordRestForm {
// 
//   @NotEmpty
//   @Size(min = 6, max = 20)
//   private String password = "";
// 
//   public PasswordRestForm() {
//   }
// 
//   public String getPassword() {
//     return password;
//   }
// 
//   public void setPassword(String password) {
//     this.password = password;
//   }
// 
// }
// 
// Path: src/main/java/com/yyqian/imagine/dto/UserCreateForm.java
// public class UserCreateForm {
// 
//   @NotEmpty
//   private String username = "";
// 
//   @NotEmpty
//   private String password = "";
// 
//   @NotEmpty
//   private String passwordRepeated = "";
// 
//   public UserCreateForm() {
//   }
// 
//   public String getUsername() {
//     return username;
//   }
// 
//   public void setUsername(String username) {
//     this.username = username.trim();
//   }
// 
//   public String getPassword() {
//     return password;
//   }
// 
//   public void setPassword(String password) {
//     this.password = password.trim();
//   }
// 
//   public String getPasswordRepeated() {
//     return passwordRepeated;
//   }
// 
//   public void setPasswordRepeated(String passwordRepeated) {
//     this.passwordRepeated = passwordRepeated.trim();
//   }
// 
// }
// 
// Path: src/main/java/com/yyqian/imagine/dto/UserUpdateForm.java
// public class UserUpdateForm {
// 
//   private String email = "";
// 
//   private String about = "";
// 
//   public UserUpdateForm() {
//   }
// 
//   public String getEmail() {
//     return email;
//   }
// 
//   public void setEmail(String email) {
//     this.email = email.trim();
//   }
// 
//   public String getAbout() {
//     return about;
//   }
// 
//   public void setAbout(String about) {
//     this.about = about.trim();
//   }
// 
// }
// 
// Path: src/main/java/com/yyqian/imagine/po/User.java
// @Entity
// @Table(name = "user")
// public class User extends Base {
// 
//   @Column(name = "username", nullable = false, unique = true)
//   private String username;
// 
//   @Column(name = "password_hash", nullable = false)
//   private String passwordHash;
// 
//   @Column(name = "email", unique = true)
//   private String email;
// 
//   @Column(name = "role", nullable = false)
//   @Enumerated(EnumType.STRING)
//   private Role role = Role.USER;
// 
//   @Lob
//   @Column(name = "about")
//   private String about;
// 
//   @Column(name = "point", nullable = false)
//   private Integer point = 0;
// 
//   public enum Role {
//     USER, ADMIN
//   }
// 
//   public User() {
//   }
// 
//   public User(String username, String passwordHash) {
//     this.username = username;
//     this.passwordHash = passwordHash;
//   }
// 
//   @Override
//   public String toString() {
//     return id.toString();
//   }
// 
//   public String getUsername() {
//     return username;
//   }
// 
//   public String getEmail() {
//     return email;
//   }
// 
//   public Role getRole() {
//     return role;
//   }
// 
//   public String getPasswordHash() {
//     return passwordHash;
//   }
// 
//   public void setPasswordHash(String passwordHash) {
//     this.passwordHash = passwordHash;
//   }
// 
//   public void setRole(Role role) {
//     this.role = role;
//   }
// 
//   public void setUsername(String username) {
//     this.username = username;
//   }
// 
//   public void setEmail(String email) {
//     this.email = email;
//   }
// 
//   public String getAbout() {
//     return about;
//   }
// 
//   public void setAbout(String about) {
//     this.about = about;
//   }
// 
//   public Integer getPoint() {
//     return point;
//   }
// 
//   public void setPoint(Integer point) {
//     this.point = point;
//   }
// }


// Path: src/main/java/com/yyqian/imagine/service/UserService.java
import com.yyqian.imagine.dto.PasswordRestForm;
import com.yyqian.imagine.dto.UserCreateForm;
import com.yyqian.imagine.dto.UserUpdateForm;
import com.yyqian.imagine.po.User;
import java.util.Collection;
import java.util.Optional;

package com.yyqian.imagine.service;



/**
 * Created on 12/15/15.
 *
 * @author Yinyin Qian
 */
public interface UserService {

  Optional<User> getUserById(long id);

  Optional<User> getUserByUsername(String username);

  Collection<User> getAllUsers();

  User create(UserCreateForm form);