mirror of https://github.com/shuang854/Turtle
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.
91 lines
1.7 KiB
TypeScript
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"
|
|
// },
|