create offline direct message

This commit is contained in:
Peter Maquiran
2024-09-17 16:02:12 +01:00
parent 9be19bfc78
commit 1bc5707321
266 changed files with 860 additions and 2771 deletions
+35 -3
View File
@@ -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() {