diff --git a/packages/server/src/config/data.ts b/packages/server/src/config/data.ts index ccc36943..c3f8310e 100644 --- a/packages/server/src/config/data.ts +++ b/packages/server/src/config/data.ts @@ -170,6 +170,7 @@ export const updateConfig = async function(config: ConfigUpdateRequest) { const attributes: ExpressionAttributeValueMap = {}; const attributeNames: ExpressionAttributeNameMap = {}; let updateExp = ''; + let removeExp = ''; if (config.name) { attributes[':name'] = { S: config.name }; updateExp = 'SET n = :name'; @@ -183,6 +184,13 @@ export const updateConfig = async function(config: ConfigUpdateRequest) { attributeNames['#aT'] = 'aT'; updateExp += `${updateExp ? ',' : 'SET'} #aT = :activateTo`; } + if (config.activateFrom === null) { + removeExp += `${removeExp ? ',' : 'REMOVE'} aF`; + } + if (config.activateTo === null) { + attributeNames['#aT'] = 'aT'; + removeExp += `${removeExp ? ',' : 'REMOVE'} #aT`; + } if ((config as ServiceConfigUpdateRequest).buildings) { const buildings = (config as ServiceConfigUpdateRequest).buildings; attributes[':buildings'] = { M: Object.fromEntries(Object.entries(buildings).map(([s, b]) => [s, { M: toBuildingData(b) }])) }; @@ -199,9 +207,9 @@ export const updateConfig = async function(config: ConfigUpdateRequest) { type: { S: 'config' }, id: { S: config.id } }, - UpdateExpression: updateExp, + UpdateExpression: updateExp + `${removeExp ? ' ' + removeExp : ''}`, ...(Object.keys(attributeNames).length && { ExpressionAttributeNames: attributeNames }), - ExpressionAttributeValues: attributes + ...(Object.keys(attributes).length && { ExpressionAttributeValues: attributes }) }; await dynamoDB.updateItem(req).promise(); return config; diff --git a/packages/server/src/user/data.ts b/packages/server/src/user/data.ts index 6152deaa..9a171332 100644 --- a/packages/server/src/user/data.ts +++ b/packages/server/src/user/data.ts @@ -31,7 +31,7 @@ export const toUserDao = (user: User): UserDao => ({ ...(user.claimedUntil && { cU: { S: user.claimedUntil } }) }); -export const getUser = async function(id: string): Promise { +export const getUser = async function (id: string): Promise { const req: GetItemInput = { TableName, Key: { @@ -46,7 +46,7 @@ export const getUser = async function(id: string): Promise { const dao: UserDao = res.Item as unknown as UserDao; return fromUserDao(dao); }; -export const queryUser = async function(startsWith: string): Promise> { +export const queryUser = async function (startsWith: string): Promise> { let composedRes: Array = []; const req: QueryInput = { TableName, @@ -77,9 +77,10 @@ export const queryUser = async function(startsWith: string): Promise return composedRes; }; -export const updateUser = async function(info: UserUpdateRequest): Promise { +export const updateUser = async function (info: UserUpdateRequest): Promise { const attributes: ExpressionAttributeValueMap = {}; let updateExp = ''; + let removeExp = ''; if (info.name) { attributes[':name'] = { S: info.name }; updateExp = 'SET n = :name'; @@ -100,20 +101,26 @@ export const updateUser = async function(info: UserUpdateRequest): Promise { +export const deleteUser = async function (id: string): Promise { const req: DeleteItemInput = { TableName, Key: { @@ -124,7 +131,7 @@ export const deleteUser = async function(id: string): Promise { await dynamoDB.deleteItem(req).promise(); return id; }; -export const batchPutUser = async function(infos: Array): Promise> { +export const batchPutUser = async function (infos: Array): Promise> { if (infos.length === 0) return infos; if (infos.length > 25) throw new ResponsibleError(500, 'Maximum amount of batch creation is 25'); const requests: WriteRequest[] = infos.map((v: User) => ({ @@ -143,7 +150,7 @@ export const batchPutUser = async function(infos: Array): Promise): Promise> { +export const batchDeleteUser = async function (ids: Array): Promise> { if (ids.length === 0) return ids; if (ids.length > 25) throw new ResponsibleError(500, 'Maximum amount of batch creation is 25'); const requests: WriteRequest[] = ids.map((v: string) => ({ @@ -165,4 +172,4 @@ export const batchDeleteUser = async function(ids: Array): Promise