mirror of
https://code.equilibrium.co.ao/ITO/doneit-web.git
synced 2026-04-20 21:35:50 +00:00
create offline direct message
This commit is contained in:
@@ -2,6 +2,7 @@ import { SessionStore } from "src/app/store/session.service";
|
||||
import { BaseEntity } from "src/app/utils/entity";
|
||||
import { z } from "zod"
|
||||
import { MessageEntitySchema } from "./message";
|
||||
import { IDBoolean } from "src/app/infra/database/dexie/type";
|
||||
|
||||
export enum RoomType {
|
||||
Group = 1,
|
||||
@@ -23,7 +24,8 @@ const MemberSchema = z.object({
|
||||
});
|
||||
|
||||
export const RoomEntitySchema = z.object({
|
||||
id: z.string(),
|
||||
$id: z.string(),
|
||||
id: z.string().uuid().optional(),
|
||||
roomName: z.string(),
|
||||
createdBy: z.object({
|
||||
wxUserId: z.number(),
|
||||
@@ -32,16 +34,19 @@ export const RoomEntitySchema = z.object({
|
||||
userPhoto: z.string().nullable().optional()// api check
|
||||
}),
|
||||
createdAt: z.any(),
|
||||
expirationDate: z.any().nullable(),
|
||||
expirationDate: z.any().nullable().optional(),
|
||||
roomType: z.nativeEnum(RoomType),
|
||||
members: z.array(MemberSchema).optional(),
|
||||
messages: MessageEntitySchema.array().optional()
|
||||
messages: MessageEntitySchema.array().optional(),
|
||||
local: z.nativeEnum(IDBoolean).optional(),
|
||||
receiverId: z.number().optional()
|
||||
})
|
||||
|
||||
export type IRoom = z.infer<typeof RoomEntitySchema>
|
||||
|
||||
export class RoomEntity extends BaseEntity<RoomEntity>(RoomEntitySchema) implements IRoom{
|
||||
|
||||
$id: typeof RoomEntitySchema._input.$id
|
||||
id: typeof RoomEntitySchema._input.id
|
||||
roomName: typeof RoomEntitySchema._input.roomName
|
||||
createdBy: typeof RoomEntitySchema._input.createdBy
|
||||
@@ -50,13 +55,40 @@ export class RoomEntity extends BaseEntity<RoomEntity>(RoomEntitySchema) implem
|
||||
roomType: typeof RoomEntitySchema._input.roomType
|
||||
members: typeof RoomEntitySchema._input.members
|
||||
messages: typeof RoomEntitySchema._input.messages
|
||||
receiverId: typeof RoomEntitySchema._input.receiverId
|
||||
|
||||
constructor(data: IRoom) {
|
||||
super();
|
||||
Object.assign(this, data)
|
||||
|
||||
if(data.roomType == RoomType.Direct) {
|
||||
this.setName()
|
||||
}
|
||||
|
||||
if(!this.$id) {
|
||||
this.setLocalId()
|
||||
}
|
||||
|
||||
|
||||
if(this.roomType == RoomType.Direct && !this.receiverId && this.members.length == 2) {
|
||||
this.setReceiver()
|
||||
}
|
||||
}
|
||||
|
||||
setLocalId() {
|
||||
const receiver = this.members?.find((e) => e.user.wxUserId != SessionStore.user.UserId)
|
||||
|
||||
if(receiver) {
|
||||
this.$id =receiver.user.wxUserId.toString()
|
||||
}
|
||||
}
|
||||
|
||||
setReceiver() {
|
||||
const receiver = this.members?.find((e) => e.user.wxUserId != SessionStore.user.UserId)
|
||||
|
||||
if(receiver) {
|
||||
this.receiverId = receiver.user.wxUserId
|
||||
}
|
||||
}
|
||||
|
||||
setName() {
|
||||
|
||||
@@ -35,7 +35,7 @@ export const MessageEntityAttachmentSchema = z.object({
|
||||
export const MessageEntitySchema = z.object({
|
||||
$id: z.any().optional(),
|
||||
id: z.string().uuid().optional(),
|
||||
roomId: z.string().uuid().optional(),
|
||||
roomId: z.string().optional(),
|
||||
receiverId: z.number().optional(),
|
||||
message: z.string().nullable().optional(),
|
||||
messageType: z.nativeEnum(IMessageType),
|
||||
|
||||
@@ -3,11 +3,17 @@ import { DexieRepository } from "src/app/infra/repository/dexie/dexie-repository
|
||||
import { MessageEntity } from "../../entity/message";
|
||||
import { Observable as DexieObservable, PromiseExtended } from 'Dexie';
|
||||
import { Observable } from "rxjs";
|
||||
import { Result } from "neverthrow";
|
||||
|
||||
export interface IDirectMessages {
|
||||
receiverId: string,
|
||||
roomId: string
|
||||
}
|
||||
|
||||
export abstract class IMessageLocalRepository extends DexieRepository<MessageTable, MessageEntity> {
|
||||
abstract setAllSenderToFalse(): void
|
||||
abstract getItems(roomId: string): PromiseExtended<MessageEntity[]>
|
||||
abstract getItemsLive(roomId: string): DexieObservable<MessageEntity[]>
|
||||
abstract getOfflineMessages(): Promise<MessageEntity[]>
|
||||
abstract onCreateObservable(): Observable<MessageTable>
|
||||
abstract getDirectMessages(input: IDirectMessages): Promise<Result<MessageEntity[], any>>
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user