feat(chat): add private message unlock flow
This commit is contained in:
@@ -68,6 +68,39 @@ export class ChatRepository implements IChatRepository {
|
||||
);
|
||||
}
|
||||
|
||||
/** 把本地缓存中的私密消息标记为已解锁。 */
|
||||
async markPrivateMessageUnlockedInLocal(
|
||||
messageId: string,
|
||||
content: string,
|
||||
): Promise<Result<void>> {
|
||||
return Result.wrap(async () => {
|
||||
const localResult = await this.getLocalMessages();
|
||||
if (Result.isErr(localResult)) {
|
||||
throw localResult.error;
|
||||
}
|
||||
|
||||
let changed = false;
|
||||
const updatedMessages = localResult.data.map((message) => {
|
||||
if (message.id !== messageId) return message;
|
||||
changed = true;
|
||||
return ChatMessage.from({
|
||||
...message.toJson(),
|
||||
content,
|
||||
isPrivate: message.isPrivate ?? true,
|
||||
privateLocked: false,
|
||||
privateHint: null,
|
||||
});
|
||||
});
|
||||
|
||||
if (!changed) return;
|
||||
|
||||
const saveResult = await this.saveMessagesToLocal(updatedMessages);
|
||||
if (Result.isErr(saveResult)) {
|
||||
throw saveResult.error;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// ============ 本地(Dexie)操作 ============
|
||||
|
||||
/** 把一条消息写入本地存储。 */
|
||||
@@ -125,6 +158,9 @@ export class ChatRepository implements IChatRepository {
|
||||
content: message.content,
|
||||
createdAt: message.createdAt,
|
||||
imageUrl: message.imageUrl,
|
||||
isPrivate: message.isPrivate,
|
||||
privateLocked: message.privateLocked,
|
||||
privateHint: message.privateHint,
|
||||
sessionId: "",
|
||||
});
|
||||
}
|
||||
@@ -137,6 +173,9 @@ export class ChatRepository implements IChatRepository {
|
||||
content: local.content,
|
||||
createdAt: local.createdAt,
|
||||
imageUrl: local.imageUrl,
|
||||
isPrivate: local.isPrivate,
|
||||
privateLocked: local.privateLocked,
|
||||
privateHint: local.privateHint,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,12 @@ export interface IChatRepository {
|
||||
/** 解锁私密消息。 */
|
||||
unlockPrivateMessage(messageId: string): Promise<Result<UnlockPrivateResponse>>;
|
||||
|
||||
/** 把本地缓存中的私密消息标记为已解锁。 */
|
||||
markPrivateMessageUnlockedInLocal(
|
||||
messageId: string,
|
||||
content: string,
|
||||
): Promise<Result<void>>;
|
||||
|
||||
/** 把一条消息写入本地存储。 */
|
||||
saveMessageToLocal(message: ChatMessage): Promise<Result<void>>;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user