// Path: src/main/java/com/digag/domain/User.java
// @Entity
// public class User implements Serializable {
// 
//     private static final long serialVersionUID = 3L;
// 
//     @Id
//     @GeneratedValue(generator = "paymentableGenerator")
//     @GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
//     private String id;
// 
//     @Column(nullable = false, unique = true)
//     private String username;
// 
//     @JsonIgnore
//     @Column(nullable = false)
//     private String password;
// 
//     @Column(nullable = false, unique = true)
//     private String account;
// 
//     private Date lastPasswordResetDate;
// 
//     @JsonIgnore
//     @ManyToMany(targetEntity = Role.class, fetch = FetchType.EAGER)
//     @JoinTable(joinColumns = @JoinColumn(name = "ROLE_ID"),
//             inverseJoinColumns = @JoinColumn(name = "USER_ID"))
//     private List<Role> roles;
// 
//     public User() {
//     }
// 
//     public User(String id, String username, String password, String account, Date lastPasswordResetDate, List<Role> roles) {
//         this.id = id;
//         this.username = username;
//         this.password = password;
//         this.account = account;
//         this.lastPasswordResetDate = lastPasswordResetDate;
//         this.roles = roles;
//     }
// 
//     public String getId() {
//         return id;
//     }
// 
//     public void setId(String id) {
//         this.id = id;
//     }
// 
//     public String getUsername() {
//         return username;
//     }
// 
//     public void setUsername(String username) {
//         this.username = username;
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public void setPassword(String password) {
//         this.password = password;
//     }
// 
//     public String getAccount() {
//         return account;
//     }
// 
//     public void setAccount(String account) {
//         this.account = account;
//     }
// 
//     public Date getLastPasswordResetDate() {
//         return lastPasswordResetDate;
//     }
// 
//     public void setLastPasswordResetDate(Date lastPasswordResetDate) {
//         this.lastPasswordResetDate = lastPasswordResetDate;
//     }
// 
//     public List<Role> getRoles() {
//         return roles;
//     }
// 
//     public void setRoles(List<Role> roles) {
//         this.roles = roles;
//     }
// }
// 
// Path: src/main/java/com/digag/util/JsonResult.java
// public class JsonResult<T> {
// 
//     private final boolean success;
// 
//     private final T data;
// 
//     private final String error;
// 
//     private JsonResult(JsonResultBuilder<T> builder) {
//         this.success = builder.success;
//         this.data = builder.data;
//         this.error = builder.error;
//     }
// 
//     public static <T>JsonResult.JsonResultBuilder<T> builder(){
//         return new JsonResultBuilder<>();
//     }
// 
//     public boolean isSuccess() {
//         return success;
//     }
// 
//     public T getData() {
//         return data;
//     }
// 
//     public String getError() {
//         return error;
//     }
// 
//     @Override
//     public String toString() {
//         return "JsonResult{" +
//                 "success=" + success +
//                 ", data=" + data +
//                 ", error='" + error + '\'' +
//                 '}';
//     }
// 
//     public static final class JsonResultBuilder<T> {
// 
//         private boolean success;
// 
//         private T data;
// 
//         private String error;
// 
//         private JsonResultBuilder() {
// 
//         }
// 
//         public JsonResultBuilder error(String error) {
//             this.error = error;
//             this.success = false;
//             return this;
//         }
// 
//         public JsonResultBuilder data(T data) {
//             this.data = data;
//             this.success = true;
//             return this;
//         }
// 
//         public JsonResult build() {
//             return new JsonResult<>(this);
//         }
//     }
// 
//     public static void main(String[] args) {
//         System.out.print(JsonResult.<String>builder().data("asd").build().toString());
//     }
// 
// }


import com.digag.domain.User;
import com.digag.util.JsonResult;
package com.digag.service;


/**
 * Created by Yuicon on 2017/5/20.
 * https://segmentfault.com/u/yuicon
 */
public interface AuthService {

    JsonResult<User> register(User userToAdd);

// Path: src/main/java/com/digag/domain/User.java
// @Entity
// public class User implements Serializable {
// 
//     private static final long serialVersionUID = 3L;
// 
//     @Id
//     @GeneratedValue(generator = "paymentableGenerator")
//     @GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
//     private String id;
// 
//     @Column(nullable = false, unique = true)
//     private String username;
// 
//     @JsonIgnore
//     @Column(nullable = false)
//     private String password;
// 
//     @Column(nullable = false, unique = true)
//     private String account;
// 
//     private Date lastPasswordResetDate;
// 
//     @JsonIgnore
//     @ManyToMany(targetEntity = Role.class, fetch = FetchType.EAGER)
//     @JoinTable(joinColumns = @JoinColumn(name = "ROLE_ID"),
//             inverseJoinColumns = @JoinColumn(name = "USER_ID"))
//     private List<Role> roles;
// 
//     public User() {
//     }
// 
//     public User(String id, String username, String password, String account, Date lastPasswordResetDate, List<Role> roles) {
//         this.id = id;
//         this.username = username;
//         this.password = password;
//         this.account = account;
//         this.lastPasswordResetDate = lastPasswordResetDate;
//         this.roles = roles;
//     }
// 
//     public String getId() {
//         return id;
//     }
// 
//     public void setId(String id) {
//         this.id = id;
//     }
// 
//     public String getUsername() {
//         return username;
//     }
// 
//     public void setUsername(String username) {
//         this.username = username;
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public void setPassword(String password) {
//         this.password = password;
//     }
// 
//     public String getAccount() {
//         return account;
//     }
// 
//     public void setAccount(String account) {
//         this.account = account;
//     }
// 
//     public Date getLastPasswordResetDate() {
//         return lastPasswordResetDate;
//     }
// 
//     public void setLastPasswordResetDate(Date lastPasswordResetDate) {
//         this.lastPasswordResetDate = lastPasswordResetDate;
//     }
// 
//     public List<Role> getRoles() {
//         return roles;
//     }
// 
//     public void setRoles(List<Role> roles) {
//         this.roles = roles;
//     }
// }
// 
// Path: src/main/java/com/digag/util/JsonResult.java
// public class JsonResult<T> {
// 
//     private final boolean success;
// 
//     private final T data;
// 
//     private final String error;
// 
//     private JsonResult(JsonResultBuilder<T> builder) {
//         this.success = builder.success;
//         this.data = builder.data;
//         this.error = builder.error;
//     }
// 
//     public static <T>JsonResult.JsonResultBuilder<T> builder(){
//         return new JsonResultBuilder<>();
//     }
// 
//     public boolean isSuccess() {
//         return success;
//     }
// 
//     public T getData() {
//         return data;
//     }
// 
//     public String getError() {
//         return error;
//     }
// 
//     @Override
//     public String toString() {
//         return "JsonResult{" +
//                 "success=" + success +
//                 ", data=" + data +
//                 ", error='" + error + '\'' +
//                 '}';
//     }
// 
//     public static final class JsonResultBuilder<T> {
// 
//         private boolean success;
// 
//         private T data;
// 
//         private String error;
// 
//         private JsonResultBuilder() {
// 
//         }
// 
//         public JsonResultBuilder error(String error) {
//             this.error = error;
//             this.success = false;
//             return this;
//         }
// 
//         public JsonResultBuilder data(T data) {
//             this.data = data;
//             this.success = true;
//             return this;
//         }
// 
//         public JsonResult build() {
//             return new JsonResult<>(this);
//         }
//     }
// 
//     public static void main(String[] args) {
//         System.out.print(JsonResult.<String>builder().data("asd").build().toString());
//     }
// 
// }


// Path: src/main/java/com/digag/service/AuthService.java
import com.digag.domain.User;
import com.digag.util.JsonResult;

package com.digag.service;


/**
 * Created by Yuicon on 2017/5/20.
 * https://segmentfault.com/u/yuicon
 */
public interface AuthService {

    JsonResult<User> register(User userToAdd);

    JsonResult<String> login(String username, String password);