change detector for room list

This commit is contained in:
Peter Maquiran
2024-06-11 17:29:04 +01:00
parent 540cbbc911
commit 39bc8979a8
5 changed files with 51 additions and 28 deletions
@@ -82,9 +82,9 @@ export class RoomLocalDataSourceService {
const createResult = await this.createRoom(data) const createResult = await this.createRoom(data)
if(createResult.isOk()) { if(createResult.isOk()) {
return this.updateRoom(data)
} else {
return createResult return createResult
} else {
return this.updateRoom(data)
} }
} }
@@ -6,7 +6,7 @@ export const RoomOutPutDTOSchema = z.object({
data: z.object({ data: z.object({
id: z.string(), id: z.string(),
roomName: z.string(), roomName: z.string(),
createdBy: z.any(), createdBy: z.any().nullable(),
createdAt: z.string(), createdAt: z.string(),
expirationDate: z.string().nullable(), expirationDate: z.string().nullable(),
roomType: z.any() roomType: z.any()
@@ -11,6 +11,7 @@ import { UserRemoveListInputDTO } from '../dto/room/userRemoveListInputDTO';
import { roomMemberListDetermineChanges } from '../async/rooms/roomMembersChangeDetector'; import { roomMemberListDetermineChanges } from '../async/rooms/roomMembersChangeDetector';
import { captureAndReraiseAsync } from 'src/app/services/decorators/captureAndReraiseAsync'; import { captureAndReraiseAsync } from 'src/app/services/decorators/captureAndReraiseAsync';
import { RoomUpdateInputDTO } from '../dto/room/roomUpdateInputDTO'; import { RoomUpdateInputDTO } from '../dto/room/roomUpdateInputDTO';
import { SessionStore } from 'src/app/store/session.service';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
@@ -64,17 +65,19 @@ export class RoomRepositoryService {
const result = await this.roomRemoteDataSourceService.getRoom(id) const result = await this.roomRemoteDataSourceService.getRoom(id)
if(result.isOk()) { if(result.isOk()) {
const localListRoom = await this.roomLocalDataSourceService.getRoomList()
const { roomsToDelete, roomsToInsert, roomsToUpdate } = roomListDetermineChanges([result.value.data], localListRoom)
for( const roomData of roomsToUpdate) {
this.roomLocalDataSourceService.updateRoom(roomData)
}
// ============================
const localList = await this.roomLocalDataSourceService.getRoomMemberById(id) const localList = await this.roomLocalDataSourceService.getRoomMemberById(id)
const { membersToInsert, membersToUpdate, membersToDelete } = roomMemberListDetermineChanges(result.value.data.members, localList, id) const { membersToInsert, membersToUpdate, membersToDelete } = roomMemberListDetermineChanges(result.value.data.members, localList, id)
const a = await this.roomLocalDataSourceService.createOrUpdateRoom(result.value.data)
if(a.isErr()) {
return a
}
for (const user of membersToInsert) { for (const user of membersToInsert) {
this.roomLocalDataSourceService.addMember({...user, roomId:id}) this.roomLocalDataSourceService.addMember({...user, roomId:id})
} }
@@ -94,6 +97,14 @@ export class RoomRepositoryService {
const result = await this.roomRemoteDataSourceService.createRoom(data) const result = await this.roomRemoteDataSourceService.createRoom(data)
if(result.isOk()) { if(result.isOk()) {
if(!result.value.data.createdBy) {
result.value.data.createdBy = {
wxeMail: SessionStore.user.Email,
wxFullName: SessionStore.user.FullName,
wxUserId: SessionStore.user.UserId
}
}
this.roomMemoryDataSourceService.dispatch(addRoom(result.value)) this.roomMemoryDataSourceService.dispatch(addRoom(result.value))
this.roomLocalDataSourceService.createRoom(result.value.data) this.roomLocalDataSourceService.createRoom(result.value.data)
} }
@@ -14,7 +14,7 @@
</div> </div>
<div> <div>
<button class="btn-no-color adicionar" (click)="updateGroup()"> <button class="btn-no-color adicionar" (click)="updateGroup()">
<ion-label>Adicionar bug</ion-label> <ion-label>Adicionar</ion-label>
</button> </button>
</div> </div>
</div> </div>
@@ -82,6 +82,8 @@ export class GroupContactsPage implements OnInit {
const getallChatUsers = await this.contactsRepositoryService.getUsers() const getallChatUsers = await this.contactsRepositoryService.getUsers()
const getRoomById = await this.RoomRepositoryService.getRoomById(this.roomId) const getRoomById = await this.RoomRepositoryService.getRoomById(this.roomId)
console.log({getallChatUsers, getRoomById})
if(getallChatUsers.isOk() && getRoomById.isOk()) { if(getallChatUsers.isOk() && getRoomById.isOk()) {
this.allChatUsers = getallChatUsers.value.data.result.sort((a,b) => { this.allChatUsers = getallChatUsers.value.data.result.sort((a,b) => {
@@ -96,6 +98,8 @@ export class GroupContactsPage implements OnInit {
const currentMemberToMap = await this.RoomRepositoryService.getRoomMemberById(this.roomId) const currentMemberToMap = await this.RoomRepositoryService.getRoomMemberById(this.roomId)
console.log({currentMemberToMap})
this.currentMembers = currentMemberToMap.map((e)=> ({ this.currentMembers = currentMemberToMap.map((e)=> ({
userPhoto: e.user.userPhoto, userPhoto: e.user.userPhoto,
wxeMail: e.user.wxeMail, wxeMail: e.user.wxeMail,
@@ -103,14 +107,6 @@ export class GroupContactsPage implements OnInit {
wxUserId: e.user.wxUserId wxUserId: e.user.wxUserId
})) }))
}
else if (getRoomById.isErr() && getRoomById.error instanceof HttpResponse) {
this.httpErrorHandle.httpStatusHandle(getRoomById.error)
} else if (getallChatUsers.isErr() && getallChatUsers.error instanceof HttpResponse) {
this.httpErrorHandle.httpStatusHandle(getallChatUsers.error)
} else {
this.toastService._badRequest("Pedimos desculpa mas não foi possível executar a acção. Por favor, contacte o apoio técnico.")
}
const currentMemberIds = this.currentMembers.map(e => e.wxUserId) const currentMemberIds = this.currentMembers.map(e => e.wxUserId)
@@ -130,6 +126,22 @@ export class GroupContactsPage implements OnInit {
} }
} }
} }
}
else if (getRoomById.isErr() && getRoomById.error instanceof HttpResponse) {
this.httpErrorHandle.httpStatusHandle(getRoomById.error)
} else if (getallChatUsers.isErr() && getallChatUsers.error instanceof HttpResponse) {
this.httpErrorHandle.httpStatusHandle(getallChatUsers.error)
} else if (getRoomById.isErr() ) {
console.log(getRoomById.error)
} else if (getallChatUsers.isErr() ) {
console.log(getallChatUsers.error)
} else {
this.toastService._badRequest("Pedimos desculpa mas não foi possível executar a acção. Por favor, contacte o apoio técnico.")
}
this.showLoader = false; this.showLoader = false;
} }