57 lines
1.3 KiB
TypeScript
57 lines
1.3 KiB
TypeScript
import {
|
|
addDoc,
|
|
collection,
|
|
doc,
|
|
Firestore,
|
|
getFirestore,
|
|
serverTimestamp,
|
|
setDoc,
|
|
} from "firebase/firestore";
|
|
import Room, { RoomStatus } from "../models/room";
|
|
import { Collections } from "./collections";
|
|
|
|
export default class RoomService {
|
|
private db: Firestore = getFirestore();
|
|
|
|
async createOrUpdateRoom(room: Room) {
|
|
if (room.id) {
|
|
//update
|
|
await this.updateRoom(room);
|
|
} else {
|
|
//create
|
|
const roomDocRef = await addDoc(collection(this.db, Collections.rooms), {
|
|
...room,
|
|
createdDate: serverTimestamp(),
|
|
});
|
|
}
|
|
}
|
|
|
|
async updateMembersInRoom(roomId: string, newMembersInRoom: string[]) {
|
|
// if the room is going to be empty, then change status accordingly
|
|
var status: RoomStatus = RoomStatus.live;
|
|
if (newMembersInRoom.length == 0) {
|
|
status = RoomStatus.empty;
|
|
}
|
|
|
|
const docRef = doc(this.db, Collections.rooms, roomId);
|
|
await setDoc(
|
|
docRef,
|
|
{
|
|
status,
|
|
membersInRoom: newMembersInRoom,
|
|
lastUpdatedDate: serverTimestamp(),
|
|
},
|
|
{ merge: true }
|
|
);
|
|
}
|
|
|
|
async updateRoom(room: Room) {
|
|
const docRef = doc(this.db, Collections.rooms, room.id);
|
|
await setDoc(
|
|
docRef,
|
|
{ ...room, lastUpdatedDate: serverTimestamp() },
|
|
{ merge: true }
|
|
);
|
|
}
|
|
}
|