const consolePrefix = 'socket.io key new'
const sharedIoRedis = require('../shared')
module.exports = async(options) => {
const {socket,payload } = options;
const redis = socket.p3xrs.ioredis
try {
const { model } = payload;
model.score = model.score === null ? undefined : model.score
model.index = model.index === null ? undefined : model.index
model.hashKey = model.hashKey === null ? undefined : model.hashKey
console.warn(consolePrefix, model)
switch(model.type) {
case 'string':
await redis.set(model.key, model.value)
break;
case 'list':
if (model.index === undefined) {
await redis.rpush(model.key, model.value)
} else {
if (model.index === -1) {
await redis.lpush(model.key, model.value)
} else {
const size = await redis.llen(model.key);
if (model.index > -1 && model.index < size) {
await redis.lset(model.key, model.index, model.value)
} else {
const listOutOBoundsError = new Error('list-out-of-bounds')
listOutOBoundsError.code = 'list-out-of-bounds'
throw listOutOBoundsError
}
}
}
break;
case 'hash':
break;
case 'set':
break;
case 'zset':
break;
}
await sharedIoRedis.getFullInfoAndSendSocket({
redis: redis,
responseEvent: options.responseEvent,
socket: socket,
extend: {
key: model.key
}
})
} catch(e) {
console.error(e)
socket.emit(options.responseEvent, {
status: 'error',
error: e
})
}
}