in lambda/database.ts [112:186]
public async userSave(user: any): Promise<string | boolean> {
let isNewUser = false;
if (!user.id) {
user.id = uuid.v4();
isNewUser = true;
const exResp = await this.ddb.query({
ExpressionAttributeValues: {
':u': {
'S': user.username,
},
},
IndexName: 'username-index',
KeyConditionExpression: 'username = :u',
TableName: this.userTable,
}).promise();
if (exResp.Items?.length) {
console.log(`User with username ${user.username} already exists`);
return false;
}
}
const expressionAttributeValues:any = {
':username': {
'S': user.username,
},
':emailAddress': {
'S': user.emailAddress,
},
':firstName': {
'S': user.firstName,
},
':lastName': {
'S': user.lastName,
}
};
let updateExpression = 'SET username = :username,' +
' email_address = :emailAddress,' +
' first_name = :firstName, ' +
' last_name = :lastName';
const now = new Date().toISOString();
if (isNewUser) {
expressionAttributeValues[':createdOn'] = {
'S': now
};
updateExpression += ', created_on = :createdOn';
} else {
expressionAttributeValues[':updatedOn'] = {
'S': now
};
updateExpression += ', updated_on = :updatedOn';
}
// Upsert the record (creates a new item if it doesn't exist)
await this.ddb.updateItem({
ExpressionAttributeValues: expressionAttributeValues,
Key: {
'id': {
'S': user.id,
}
},
TableName: this.userTable,
UpdateExpression: updateExpression
}).promise();
return user.id;
}