use of com.bluenimble.platform.db.DatabaseObject in project serverless by bluenimble.
the class QueryEntitySpi method execute.
@Override
public ApiOutput execute(Api api, final ApiConsumer consumer, ApiRequest request, ApiResponse response) throws ApiServiceExecutionException {
String provider = (String) request.get(CommonSpec.Provider);
String sEntity = (String) request.get(CommonSpec.Entity);
String serializer = (String) request.get(CommonSpec.Serializer);
String[] levels = Lang.split(serializer, Lang.COMMA);
int allStopLevel = 2;
if (levels != null && levels.length > 0) {
try {
allStopLevel = Integer.valueOf(levels[0]);
} catch (Exception ex) {
}
}
int minStopLevel = 3;
if (levels != null && levels.length > 0) {
try {
minStopLevel = Integer.valueOf(levels[1]);
} catch (Exception ex) {
}
}
JsonObject payload = (JsonObject) request.get(ApiRequest.Payload);
payload.set(Database.Fields.Entity, sEntity);
ApiSpace space;
try {
space = MgmUtils.space(consumer, api);
} catch (ApiAccessDeniedException e) {
throw new ApiServiceExecutionException(e.getMessage(), e).status(ApiResponse.FORBIDDEN);
}
List<DatabaseObject> records = null;
try {
Database db = space.feature(Database.class, provider, request);
records = db.find(null, new JsonQuery(payload), null);
} catch (DatabaseException e) {
throw new ApiServiceExecutionException(e.getMessage(), e);
}
JsonObject result = new JsonObject();
JsonArray aRecords = new JsonArray();
result.set(Output.Records, aRecords);
if (records == null || records.isEmpty()) {
return new JsonApiOutput(result);
}
for (int i = 0; i < records.size(); i++) {
aRecords.add(records.get(i).toJson(new DefaultDatabaseObjectSerializer(allStopLevel, minStopLevel)));
}
return new JsonApiOutput(result);
}
use of com.bluenimble.platform.db.DatabaseObject in project serverless by bluenimble.
the class DeleteRecordSpi method execute.
@Override
public ApiOutput execute(Api api, final ApiConsumer consumer, ApiRequest request, ApiResponse response) throws ApiServiceExecutionException {
String provider = (String) request.get(CommonSpec.Provider);
String sEntity = (String) request.get(CommonSpec.Entity);
String record = (String) request.get(Spec.Record);
ApiSpace space;
try {
space = MgmUtils.space(consumer, api);
} catch (ApiAccessDeniedException e) {
throw new ApiServiceExecutionException(e.getMessage(), e).status(ApiResponse.FORBIDDEN);
}
try {
Database db = space.feature(Database.class, provider, request);
DatabaseObject oRecord = db.get(sEntity, record);
if (oRecord == null) {
return new JsonApiOutput((JsonObject) new JsonObject().set(CommonOutput.Deleted, false));
}
oRecord.delete();
} catch (DatabaseException e) {
throw new ApiServiceExecutionException(e.getMessage(), e);
}
return new JsonApiOutput((JsonObject) new JsonObject().set(CommonOutput.Deleted, true));
}
use of com.bluenimble.platform.db.DatabaseObject in project serverless by bluenimble.
the class DatabaseApiRequestTrack method finish.
@Override
public void finish(JsonObject feedback) {
final Date now = new Date();
Json.getObject(track, Fields.Time.class.getSimpleName().toLowerCase()).set(Fields.Time.Finished, now);
int code = Json.getInteger(feedback, ApiResponse.Error.Code, ApiResponse.OK.getCode());
boolean isError = code >= ApiResponse.BAD_REQUEST.getCode();
track.set(Fields.Status, isError ? 0 : 1);
track.set(Fields.Feedback, feedback);
JsonObject metrics = Json.getObject(track, Fields.Metrics.class.getSimpleName().toLowerCase());
if (MX.isCurrentThreadCpuTimeSupported()) {
metrics.set(Fields.Metrics.Cpu, MX.getCurrentThreadUserTime());
}
if (MX.isCurrentThreadCpuTimeSupported()) {
metrics.set(Fields.Metrics.Memory, MX.getThreadAllocatedBytes(Thread.currentThread().getId()));
}
try {
tracker.executor().execute(new Runnable() {
@Override
public void run() {
// shrink
track.shrink();
JsonObject oTracking = api.getTracking();
// put
Database db = null;
try {
db = api.space().feature(Database.class, Json.getString(oTracking, Spec.Feature, ApiSpace.Features.Default), tracker.context());
if (db == null) {
api.tracer().log(Tracer.Level.Error, "CantStore[{0}] due to database declared in the api is not defined at the space level", track.toString());
return;
}
// put
DatabaseObject entity = db.create(Json.getString(oTracking, Spec.Entity, DefaultEntity));
entity.load(track);
entity.save();
} catch (DatabaseException e) {
api.tracer().log(Tracer.Level.Error, "CantStore[{0}] due to {1}", track.toString(), e.getMessage());
api.tracer().log(Tracer.Level.Error, Lang.BLANK, e);
} finally {
if (db != null) {
db.recycle();
}
}
}
});
} catch (Exception ex) {
api.tracer().log(Tracer.Level.Error, Lang.BLANK, ex);
}
}
use of com.bluenimble.platform.db.DatabaseObject in project serverless by bluenimble.
the class ActivateServiceSpi method execute.
@Override
public ApiOutput execute(Api api, ApiConsumer consumer, ApiRequest request, ApiResponse response) throws ApiServiceExecutionException {
JsonObject config = request.getService().getCustom();
Database db = api.space().feature(Database.class, Json.getString(config, Config.Database, ApiSpace.Features.Default), request);
DatabaseObject account = null;
try {
JsonObject query = Json.getObject(config, Config.Query);
if (query == null) {
query = new JsonObject();
JsonObject where = new JsonObject();
query.set(Query.Construct.where.name(), where);
where.set(Json.getString(config, Config.ActivationCodeProperty, Defaults.ActivationCode), request.get(Spec.ActivationCode));
}
account = db.findOne(Json.getString(config, Config.UsersEntity, Defaults.Users), new JsonQuery(query));
} catch (Exception ex) {
throw new ApiServiceExecutionException(ex.getMessage(), ex);
}
if (account == null) {
throw new ApiServiceExecutionException("account not found").status(ApiResponse.NOT_FOUND);
}
Date now = new Date();
// remove activationCode
account.remove(Json.getString(config, Config.ActivationCodeProperty, Defaults.ActivationCode));
// update lastLogin
try {
account.set(Json.getString(config, Config.LastLoginProperty, Fields.LastLogin), now);
account.save();
} catch (Exception ex) {
throw new ApiServiceExecutionException(ex.getMessage(), ex);
}
JsonObject oAccount = account.toJson(DefaultDatabaseObjectSerializer.Default);
// create token
String[] tokenAndExpiration = SecurityUtils.tokenAndExpiration(api, oAccount, now);
oAccount.remove(Json.getString(config, Config.PasswordProperty, Spec.Password));
oAccount.set(Defaults.Token, tokenAndExpiration[0]);
oAccount.set(Defaults.ExpiresOn, tokenAndExpiration[1]);
// call onFinish if any
JsonObject onFinish = Json.getObject(config, Config.onFinish.class.getSimpleName());
ApiOutput onFinishOutput = SecurityUtils.onFinish(api, consumer, request, onFinish, oAccount);
if (onFinishOutput != null) {
oAccount.set(Json.getString(onFinish, Config.onFinish.ResultProperty, Config.onFinish.class.getSimpleName()), onFinishOutput.data());
}
return new JsonApiOutput(oAccount);
}
use of com.bluenimble.platform.db.DatabaseObject in project serverless by bluenimble.
the class ChangePasswordSpi method execute.
@Override
public ApiOutput execute(Api api, ApiConsumer consumer, ApiRequest request, ApiResponse response) throws ApiServiceExecutionException {
JsonObject config = request.getService().getCustom();
Database db = api.space().feature(Database.class, Json.getString(config, Config.Database, ApiSpace.Features.Default), request);
DatabaseObject account = null;
try {
account = db.get(Json.getString(config, Config.UsersEntity, Defaults.Users), (String) consumer.get(ApiConsumer.Fields.Id));
account.set(Json.getString(config, Config.PasswordProperty, Spec.Password), Lang.md5((String) request.get(Spec.Password)));
account.save();
} catch (Exception ex) {
throw new ApiServiceExecutionException(ex.getMessage(), ex);
}
ApiOutput result = new JsonApiOutput(JsonObject.Blank);
// call extend if any
if (config.containsKey(Config.onFinish.class.getSimpleName())) {
JsonObject oAccount = account.toJson(null);
result = SecurityUtils.onFinish(api, consumer, request, Json.getObject(config, Config.onFinish.class.getSimpleName()), oAccount);
}
return result;
}
Aggregations