// Path: website/src/main/java/app/api/AccountAJAXWebService.java
// public interface AccountAJAXWebService {
//     @PUT
//     @Path("/ajax/login")
//     LoginAJAXResponse login(LoginAJAXRequest request);
// 
//     @PUT
//     @Path("/ajax/logout")
//     void logout();
// 
//     @GET
//     @Path("/ajax/currentUser")
//     CurrentUserAJAXResponse currentUser();
// }
// 
// Path: website/src/main/java/app/api/user/CurrentUserAJAXResponse.java
// public class CurrentUserAJAXResponse {
//     @NotNull
//     @Property(name = "loggedIn")
//     public Boolean loggedIn;
// 
//     @Property(name = "name")
//     public String name;
// 
//     @Property(name = "role")
//     public String role;
// }
// 
// Path: website/src/main/java/app/api/user/LoginAJAXRequest.java
// public class LoginAJAXRequest {
//     @NotNull
//     @Property(name = "username")
//     public String username;
// 
//     @NotNull
//     @Size(min = 3)
//     @Property(name = "password")
//     public String password;
// }
// 
// Path: website/src/main/java/app/api/user/LoginAJAXResponse.java
// public class LoginAJAXResponse {
//     @NotNull
//     @Property(name = "success")
//     public Boolean success;
// 
//     @Property(name = "name")
//     public String name;
// 
//     @Property(name = "role")
//     public String role;
// 
//     @Property(name = "errorMessage")
//     public String errorMessage;
// }
// 
// Path: website/src/main/java/app/web/Sessions.java
// public final class Sessions {
//     private static final String USER = "LOGIN_USER";
// 
//     public static boolean isUserLogin(Request request) {
//         return request.session().get(USER).isPresent();
//     }
// 
//     public static LoginUser loginUser(Request request) {
//         String loginUser = request.session().get(USER).orElseThrow(() -> new UnauthorizedException("user not login"));
//         return JSON.fromJSON(LoginUser.class, loginUser);
//     }
// 
//     public static void setLoginUser(Request request, LoginUser user) {
//         request.session().set(USER, JSON.toJSON(user));
//     }
// }
// 
// Path: website/src/main/java/app/web/session/LoginUser.java
// public class LoginUser {
//     @Property(name = "userId")
//     public String userId;
// 
//     @Property(name = "name")
//     public String name;
// 
//     @Property(name = "role")
//     public String role;
// }


import app.api.AccountAJAXWebService;
import app.api.user.CurrentUserAJAXResponse;
import app.api.user.LoginAJAXRequest;
import app.api.user.LoginAJAXResponse;
import app.web.Sessions;
import app.web.session.LoginUser;
import core.framework.inject.Inject;
import core.framework.web.WebContext;
package app.web.controller;


/**
 * @author neo
 */
public class AccountAJAXWebServiceImpl implements AccountAJAXWebService {
    @Inject
    WebContext context;

    @Override
    public LoginAJAXResponse login(LoginAJAXRequest request) {
        LoginAJAXResponse response = new LoginAJAXResponse();
        if ("user".equals(request.username) && "123".equals(request.password)) {
            LoginUser loginUser = new LoginUser();
            loginUser.userId = "1";
            loginUser.name = "user";
            loginUser.role = "user";
            Sessions.setLoginUser(context.request(), loginUser);
            response.success = Boolean.TRUE;
            response.name = "user";
            response.role = "user";
        } else if ("admin".equals(request.username) && "123".equals(request.password)) {
            LoginUser loginUser = new LoginUser();
            loginUser.userId = "2";
            loginUser.name = "admin";
            loginUser.role = "admin";
// Path: website/src/main/java/app/api/AccountAJAXWebService.java
// public interface AccountAJAXWebService {
//     @PUT
//     @Path("/ajax/login")
//     LoginAJAXResponse login(LoginAJAXRequest request);
// 
//     @PUT
//     @Path("/ajax/logout")
//     void logout();
// 
//     @GET
//     @Path("/ajax/currentUser")
//     CurrentUserAJAXResponse currentUser();
// }
// 
// Path: website/src/main/java/app/api/user/CurrentUserAJAXResponse.java
// public class CurrentUserAJAXResponse {
//     @NotNull
//     @Property(name = "loggedIn")
//     public Boolean loggedIn;
// 
//     @Property(name = "name")
//     public String name;
// 
//     @Property(name = "role")
//     public String role;
// }
// 
// Path: website/src/main/java/app/api/user/LoginAJAXRequest.java
// public class LoginAJAXRequest {
//     @NotNull
//     @Property(name = "username")
//     public String username;
// 
//     @NotNull
//     @Size(min = 3)
//     @Property(name = "password")
//     public String password;
// }
// 
// Path: website/src/main/java/app/api/user/LoginAJAXResponse.java
// public class LoginAJAXResponse {
//     @NotNull
//     @Property(name = "success")
//     public Boolean success;
// 
//     @Property(name = "name")
//     public String name;
// 
//     @Property(name = "role")
//     public String role;
// 
//     @Property(name = "errorMessage")
//     public String errorMessage;
// }
// 
// Path: website/src/main/java/app/web/Sessions.java
// public final class Sessions {
//     private static final String USER = "LOGIN_USER";
// 
//     public static boolean isUserLogin(Request request) {
//         return request.session().get(USER).isPresent();
//     }
// 
//     public static LoginUser loginUser(Request request) {
//         String loginUser = request.session().get(USER).orElseThrow(() -> new UnauthorizedException("user not login"));
//         return JSON.fromJSON(LoginUser.class, loginUser);
//     }
// 
//     public static void setLoginUser(Request request, LoginUser user) {
//         request.session().set(USER, JSON.toJSON(user));
//     }
// }
// 
// Path: website/src/main/java/app/web/session/LoginUser.java
// public class LoginUser {
//     @Property(name = "userId")
//     public String userId;
// 
//     @Property(name = "name")
//     public String name;
// 
//     @Property(name = "role")
//     public String role;
// }


// Path: website/src/main/java/app/web/controller/AccountAJAXWebServiceImpl.java
import app.api.AccountAJAXWebService;
import app.api.user.CurrentUserAJAXResponse;
import app.api.user.LoginAJAXRequest;
import app.api.user.LoginAJAXResponse;
import app.web.Sessions;
import app.web.session.LoginUser;
import core.framework.inject.Inject;
import core.framework.web.WebContext;

package app.web.controller;


/**
 * @author neo
 */
public class AccountAJAXWebServiceImpl implements AccountAJAXWebService {
    @Inject
    WebContext context;

    @Override
    public LoginAJAXResponse login(LoginAJAXRequest request) {
        LoginAJAXResponse response = new LoginAJAXResponse();
        if ("user".equals(request.username) && "123".equals(request.password)) {
            LoginUser loginUser = new LoginUser();
            loginUser.userId = "1";
            loginUser.name = "user";
            loginUser.role = "user";
            Sessions.setLoginUser(context.request(), loginUser);
            response.success = Boolean.TRUE;
            response.name = "user";
            response.role = "user";
        } else if ("admin".equals(request.username) && "123".equals(request.password)) {
            LoginUser loginUser = new LoginUser();
            loginUser.userId = "2";
            loginUser.name = "admin";
            loginUser.role = "admin";
            Sessions.setLoginUser(context.request(), loginUser);