chore: test deploy snapshot
This commit is contained in:
@@ -310,3 +310,120 @@ export async function resolveChatShareTokenRoomSessionIds(tokenId: string) {
|
||||
const rooms = await listChatShareTokenRoomMaps(tokenId);
|
||||
return rooms.map((item) => item.sessionId).filter(Boolean);
|
||||
}
|
||||
|
||||
export async function archiveChatShareTokenRoomMap(tokenId: string, sessionId: string) {
|
||||
const normalizedTokenId = tokenId.trim();
|
||||
const normalizedSessionId = sessionId.trim();
|
||||
|
||||
if (!normalizedTokenId || !normalizedSessionId) {
|
||||
return {
|
||||
archived: false,
|
||||
archivedRoom: null,
|
||||
nextDefaultRoom: null,
|
||||
} as const;
|
||||
}
|
||||
|
||||
await ensureChatShareTokenRoomMapTable();
|
||||
|
||||
return db.transaction(async (trx) => {
|
||||
const current = await trx(`${CHAT_SHARE_TOKEN_ROOM_MAP_TABLE} as room_map`)
|
||||
.leftJoin(`${CHAT_CONVERSATION_TABLE} as conversation`, 'conversation.session_id', 'room_map.session_id')
|
||||
.select(
|
||||
'room_map.shared_resource_token_id',
|
||||
'room_map.session_id',
|
||||
'room_map.root_request_id',
|
||||
'room_map.is_default',
|
||||
'room_map.sort_order',
|
||||
'room_map.created_by_client_id',
|
||||
'room_map.created_at',
|
||||
'room_map.updated_at',
|
||||
'conversation.title',
|
||||
'conversation.request_badge_label',
|
||||
'conversation.chat_type_id',
|
||||
'conversation.last_chat_type_id',
|
||||
'conversation.context_label',
|
||||
'conversation.context_description',
|
||||
'conversation.notify_offline',
|
||||
'conversation.updated_at as conversation_updated_at',
|
||||
)
|
||||
.where({
|
||||
'room_map.shared_resource_token_id': normalizedTokenId,
|
||||
'room_map.session_id': normalizedSessionId,
|
||||
})
|
||||
.whereNull('room_map.archived_at')
|
||||
.first();
|
||||
|
||||
if (!current) {
|
||||
return {
|
||||
archived: false,
|
||||
archivedRoom: null,
|
||||
nextDefaultRoom: null,
|
||||
} as const;
|
||||
}
|
||||
|
||||
await trx(CHAT_SHARE_TOKEN_ROOM_MAP_TABLE)
|
||||
.where({
|
||||
shared_resource_token_id: normalizedTokenId,
|
||||
session_id: normalizedSessionId,
|
||||
})
|
||||
.whereNull('archived_at')
|
||||
.update({
|
||||
archived_at: db.fn.now(),
|
||||
updated_at: db.fn.now(),
|
||||
});
|
||||
|
||||
let nextDefaultRoom: ChatShareTokenRoomMapItem | null = null;
|
||||
|
||||
if (current.is_default) {
|
||||
const nextDefaultRow = await trx(`${CHAT_SHARE_TOKEN_ROOM_MAP_TABLE} as room_map`)
|
||||
.leftJoin(`${CHAT_CONVERSATION_TABLE} as conversation`, 'conversation.session_id', 'room_map.session_id')
|
||||
.select(
|
||||
'room_map.shared_resource_token_id',
|
||||
'room_map.session_id',
|
||||
'room_map.root_request_id',
|
||||
'room_map.is_default',
|
||||
'room_map.sort_order',
|
||||
'room_map.created_by_client_id',
|
||||
'room_map.created_at',
|
||||
'room_map.updated_at',
|
||||
'conversation.title',
|
||||
'conversation.request_badge_label',
|
||||
'conversation.chat_type_id',
|
||||
'conversation.last_chat_type_id',
|
||||
'conversation.context_label',
|
||||
'conversation.context_description',
|
||||
'conversation.notify_offline',
|
||||
'conversation.updated_at as conversation_updated_at',
|
||||
)
|
||||
.where({ 'room_map.shared_resource_token_id': normalizedTokenId })
|
||||
.whereNull('room_map.archived_at')
|
||||
.orderBy('room_map.sort_order', 'asc')
|
||||
.orderBy('room_map.created_at', 'asc')
|
||||
.first();
|
||||
|
||||
if (nextDefaultRow) {
|
||||
await trx(CHAT_SHARE_TOKEN_ROOM_MAP_TABLE)
|
||||
.where({
|
||||
shared_resource_token_id: normalizedTokenId,
|
||||
session_id: nextDefaultRow.session_id,
|
||||
})
|
||||
.whereNull('archived_at')
|
||||
.update({
|
||||
is_default: true,
|
||||
updated_at: db.fn.now(),
|
||||
});
|
||||
|
||||
nextDefaultRoom = mapChatShareTokenRoomRow({
|
||||
...nextDefaultRow,
|
||||
is_default: true,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
archived: true,
|
||||
archivedRoom: mapChatShareTokenRoomRow(current),
|
||||
nextDefaultRoom,
|
||||
} as const;
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user