package org.shujito.ucs.models;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.ws.rs.core.Response.Status;
import org.shujito.ucs.ApiException;
import org.shujito.ucs.Constants;
import org.shujito.ucs.db.Database;
import com.google.gson.annotations.SerializedName;
public class Session
{
public static final String TAG = Session.class.getSimpleName();
public static final String ACCESS_TOKEN = "access_token";
public static final String EXPIRES_AT = "expires_at";
public static final String USER_AGENT = "user_agent";
public static final String USER_UUID = "user_uuid";
@SerializedName(USER_UUID)
public final String userUuid;
@SerializedName(ACCESS_TOKEN)
public byte[] accessToken;
@SerializedName(EXPIRES_AT)
public Long expiresAt;
@SerializedName(USER_AGENT)
public String userAgent;
public Session(String userUuid, String userAgent)
{
this.userUuid = userUuid;
this.userAgent = userAgent;
}
public void save() throws Exception
{
try (PreparedStatement psm = Database
.prepareStatement("insert into sessions(user_uuid,user_agent) values(?,?)"))
{
psm.setString(1, this.userUuid);
psm.setString(2, this.userAgent);
if (psm.executeUpdate() == 0)
throw new ApiException(Constants.Strings.USER_DOES_NOT_EXIST, Status.NOT_FOUND.getStatusCode());
}
try (PreparedStatement psm = Database
.prepareStatement("select expires_at, access_token from sessions where user_uuid=? order by expires_at desc limit 1"))
{
psm.setString(1, this.userUuid);
try (ResultSet rs = psm.executeQuery())
{
if (rs.next())
{
this.accessToken = rs.getBytes("access_token");
this.expiresAt = rs.getLong("expires_at");
}
}
}
}
}