Add support for more audience fields. (#4145)
* Add support for more audience fields. * Only update audience when defined audience_id.
This commit is contained in:
committed by
Florent Vilmart
parent
9fbb5e29e8
commit
4dce3bd63c
@@ -10,6 +10,8 @@ const transformKey = (className, fieldName, schema) => {
|
||||
case 'createdAt': return '_created_at';
|
||||
case 'updatedAt': return '_updated_at';
|
||||
case 'sessionToken': return '_session_token';
|
||||
case 'lastUsed': return '_last_used';
|
||||
case 'timesUsed': return 'times_used';
|
||||
}
|
||||
|
||||
if (schema.fields[fieldName] && schema.fields[fieldName].__type == 'Pointer') {
|
||||
@@ -77,6 +79,16 @@ const transformKeyValueForUpdate = (className, restKey, restValue, parseFormatSc
|
||||
case '_rperm':
|
||||
case '_wperm':
|
||||
return {key: key, value: restValue};
|
||||
case 'lastUsed':
|
||||
case '_last_used':
|
||||
key = '_last_used';
|
||||
timeField = true;
|
||||
break;
|
||||
case 'timesUsed':
|
||||
case 'times_used':
|
||||
key = 'times_used';
|
||||
timeField = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if ((parseFormatSchema.fields[key] && parseFormatSchema.fields[key].type === 'Pointer') || (!parseFormatSchema.fields[key] && restValue && restValue.__type == 'Pointer')) {
|
||||
@@ -200,6 +212,14 @@ function transformQueryKeyValue(className, key, value, schema) {
|
||||
return {key: '$or', value: value.map(subQuery => transformWhere(className, subQuery, schema))};
|
||||
case '$and':
|
||||
return {key: '$and', value: value.map(subQuery => transformWhere(className, subQuery, schema))};
|
||||
case 'lastUsed':
|
||||
if (valueAsDate(value)) {
|
||||
return {key: '_last_used', value: valueAsDate(value)}
|
||||
}
|
||||
key = '_last_used';
|
||||
break;
|
||||
case 'timesUsed':
|
||||
return {key: 'times_used', value: value};
|
||||
default: {
|
||||
// Other auth data
|
||||
const authDataMatch = key.match(/^authData\.([a-zA-Z0-9_]+)\.id$/);
|
||||
@@ -923,11 +943,15 @@ const mongoObjectToParseObject = (className, mongoObject, schema) => {
|
||||
case '_expiresAt':
|
||||
restObject['expiresAt'] = Parse._encode(new Date(mongoObject[key]));
|
||||
break;
|
||||
case 'lastUsed':
|
||||
case '_last_used':
|
||||
restObject['lastUsed'] = Parse._encode(new Date(mongoObject[key])).iso;
|
||||
break;
|
||||
case 'timesUsed':
|
||||
case 'times_used':
|
||||
restObject['timesUsed'] = mongoObject[key];
|
||||
break;
|
||||
default:
|
||||
if (className === '_Audience' && (key === '_last_used' || key === 'times_used')) {
|
||||
// Ignore these parse.com legacy fields
|
||||
break;
|
||||
}
|
||||
// Check other auth data keys
|
||||
var authDataMatch = key.match(/^_auth_data_([a-zA-Z0-9_]+)$/);
|
||||
if (authDataMatch) {
|
||||
|
||||
@@ -54,6 +54,20 @@ export class PushController {
|
||||
}).then(() => {
|
||||
onPushStatusSaved(pushStatus.objectId);
|
||||
return badgeUpdate();
|
||||
}).then(() => {
|
||||
// Update audience lastUsed and timesUsed
|
||||
if (body.audience_id) {
|
||||
const audienceId = body.audience_id;
|
||||
|
||||
var updateAudience = {
|
||||
lastUsed: { __type: "Date", iso: new Date().toISOString() },
|
||||
timesUsed: { __op: "Increment", "amount": 1 }
|
||||
};
|
||||
const write = new RestWrite(config, master(config), '_Audience', {objectId: audienceId}, updateAudience);
|
||||
write.execute();
|
||||
}
|
||||
// Don't wait for the audience update promise to resolve.
|
||||
return Promise.resolve();
|
||||
}).then(() => {
|
||||
if (body.hasOwnProperty('push_time') && config.hasPushScheduledSupport) {
|
||||
return Promise.resolve();
|
||||
|
||||
@@ -113,12 +113,14 @@ const defaultColumns = Object.freeze({
|
||||
},
|
||||
_GlobalConfig: {
|
||||
"objectId": {type: 'String'},
|
||||
"params": {type: 'Object'}
|
||||
"params": {type: 'Object'}
|
||||
},
|
||||
_Audience: {
|
||||
"objectId": {type:'String'},
|
||||
"name": {type:'String'},
|
||||
"query": {type:'String'} //storing query as JSON string to prevent "Nested keys should not contain the '$' or '.' characters" error
|
||||
"objectId": {type:'String'},
|
||||
"name": {type:'String'},
|
||||
"query": {type:'String'}, //storing query as JSON string to prevent "Nested keys should not contain the '$' or '.' characters" error
|
||||
"lastUsed": {type:'Date'},
|
||||
"timesUsed": {type:'Number'}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user