-
Notifications
You must be signed in to change notification settings - Fork 3
Firestore Architecture
Jeffery edited this page Oct 2, 2024
·
16 revisions
We use Firestore to manage the database infrastructure. All firestore types should be defined and documented in server/src/data-layer/models/firebase.ts
.
Furthermore, new collections need to be created in server/src/data-layer/adapters/FirestoreCollections.ts
After a user signs up through the web app, extra information will be populated through this collection on top of the Firebase User object.
Field | Type | Example Value |
---|---|---|
date_of_birth | timestamp | 1 January 1970 at 00:00:00 |
does_freestyle | boolean | true |
does_racing | boolean | false |
does_snowboarding | boolean | false |
does_ski | boolean | true |
gender | string | female |
emergency_name | string | Jane Doe |
emergency_phone | string | 123 456 789 |
emergency_relation | string | Friend |
first_name | string | John |
last_name | string | Doe |
dietary requirements | string | "no dairy" |
faculty | string or undefined | Engineering |
university | 'UoA' or string or undefined | 'Waikato' |
student_id | string or undefined | 123456789 |
returning | boolean | true |
university_year | string | "2nd" or "Graduate" |
stripe_id | string | "asdsdsdssd" |
An individual slot a user can book on. These slots should be for a specific day.
Field | Type | Description | Example Value |
---|---|---|---|
description | string? | An optional description for this date | Beginners Weekend |
date | timestamp | The date this booking slot refers to | 23 July 2024 at 00:00:00 |
max_bookings | number | The maximum number of bookings that can exist on this date | 30 |
This manages the link between users and booking IDs
Field | Type | Example Value |
---|---|---|
user_id | reference | /users/lVsOjAp06AfD6atT8bnrVEpcdcg2 |
booking_slot_id | reference | /booking_slot/sddsdsdsds |
stripe_payment_id | string | 'cs_test_a11YYufWQzNY63zpQ6QSNRQhkUpVph4WRmzW0zWJO2znZKdVujZ0N0S22u' |
An event slot and supposedly upcoming events collection that is linked to these slots
Field | Type | Description | Example |
---|---|---|---|
title | string | The title of this event | Snowboarding race! |
description | string? | An optional description for this event in markdown format | Come join your friends in this exciting UASC event and race! |
image_url | string? | The link for the image to display on the event page | |
location | string | The location of this event | University of Auckland |
start_date | Timestamp | Start date of the event in UTC time | |
end_date | Timestamp | The signup period end date. | |
physical_start_date | Timestamp | Event start date for the event i.e the day members should meet at shads, | |
physical_end_date? | Timestamp | Event end time for the event i.e the last day members will be at the lodge, is optionial in case of one day events. | |
max_occupancy | number? | Max number of attendees at this event, left as optional for uncapped | 30 |
All documents in this collection will contain the following fields:
Field | Type | Description | Example |
---|---|---|---|
timestamp | Timestamp |
The time which the booking operation was performed. MUST be in UTC format | 2024-08-02T07:38:35Z |
start_date | Timestamp |
The start of the operated on date range | 2024-08-01T00:00:00Z |
end_date | Timestamp |
The end of the operated on date range | 2024-08-01T23:59:59Z |
event_type | "added_user_to_booking" | "removed_user_from_booking" | "changed_date_availability" |
The type of event that the admin performed, used for parsing on the front-end | "added_user_to_booking" |
Based on the type of event, there will also be additional fields:
Field | Type | Description | Example |
---|---|---|---|
uid | string |
The id corresponding to the user who had a manually added booking | user123 |
event_type | "added_user_to_booking" |
The type of event that the admin performed, used for parsing on the front-end | "added_user_to_booking" |
Field | Type | Description | Example |
---|---|---|---|
uid | string |
The id corresponding to the user who had a manually deleted booking | user456 |
event_type | "removed_user_from_booking" |
The type of event that the admin performed, used for parsing on the front-end | "removed_user_from_booking" |
Field | Type | Description | Example |
---|---|---|---|
change | number |
The signed difference between the newly available slots and the previously available slots | -32 |
event_type | "changed_date_availability" |
The type of event that the admin performed, used for parsing on the front-end | "changed_date_availability" |