You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Turtle/schema.ts

91 lines
1.7 KiB
TypeScript

// Database schema
/**
* Notes:
* - hierarchy consists of many collections, but shallow depth in each collection. This works nicely with subscribing
* listeners in useEffect. Also if collections are combined, single document updates may become too frequent.
*/
// Firestore
const collection = {
playlists: [
{
roomId: {
createdAt: 'timestamp',
url: 'https://youtube.com',
},
},
],
rooms: [
{
roomId: {
createdAt: 'timestamp',
ownerId: 'userId',
requests: [
{
createdAt: 'timestamp',
data: '01:25:44', // Contents of data depend on type of request
type: 'updateState',
senderId: 'userId',
},
],
},
},
],
states: [
{
roomId: {
time: 'timestamp',
isPlaying: true,
},
},
],
users: [
{
userId: {
name: 'Anonymous',
},
},
],
};
// Realtime Database - needed for tracking user presence
const turtle = {
// Needed for database triggers updating Firestore
available: {
roomId: {
createdAt: '2020-08-12T00:13:16.273Z',
},
},
// Keep chats in Realtime DB could potentially lower cost
chats: {
roomId: {
messageId: {
content: 'Message content',
senderId: 'userId',
createdAt: 'timestamp',
},
},
},
// Keeping track of which users are present in a room
rooms: {
roomId: {
userId: {
name: 'Username',
},
userCount: 0,
},
},
};
// TODO: Put in firebase.json
// "functions": {
// "predeploy": [
// "npm --prefix \"$RESOURCE_DIR\" run lint",
// "npm --prefix \"$RESOURCE_DIR\" run build"
// ],
// "source": "functions"
// },