Ediplan is...
- cd to project folder
- type npm i
- npm run dev
Updated 17/01/2024
🔴 = Not yet started | 🟡 = Started | 🟢 = Complete
🟡 Must have an intuitive and great looking layout
🔴 Display a dashboard with basic analytics
🔴 Allow user to CRUD assets
🔴 Allow user to filter by property
🔴 Allow user to search by property
🔴 Nice to have: Allow user to assign asset to a group
🔴 Each asset must be given a type: personel/room/equipment/misc
🔴 Tabbed types
🔴 Nice to have: Persistant associations between assets
🔴 Allow creation of groups
🔴
🔴 Allow users to CRUD bookings
🔴 Allow users to assign any type and number of assets to a booking
🔴 Allow users to assign to a project
🔴 Nice to have: Some kind of quote generator
🟡 Implement side scrolling timeline that displays bookings in lanes or 'tracks' for each asset type, group, or project.
🔴 Allow users to plus and minus lanes chosing which asset to display from the current type
🔴 Display a popup on hover showing booking details
🔴 When clicking on a booking it should take the user to the bookings page
🔴 Nice to have: Tabbed timelines for groups
🔴 Implemenet some kind of utilisation statistics
🔴 Display upcoming bookings/changes
🔴 Include user authorization
🔴 Dark mode option
🔴 Nice to have: E-mail notification options
🟡 Front-end must be connected to a backend database (PostgreSQL)
- Landing page
- Login
- AppLayout
- Dashboard
- Timeline
- Bookings
- Assets
- Groups
- Settings
- Email notification settings
- React
- React Router
- React Query
- Styled Components
- Node.js
- Express
- PostgreSQL
- Axios
- react-table
- time-fns
Tables:
-
Assets Table:
- Attributes: UniqueID (Primary Key), Type, PricePerHour
- This table holds common attributes for all assets.
-
PersonAttributes Table:
- Attributes: UniqueID (Foreign Key referencing Assets), Name, Address
- This table holds attributes specific to the "Person" asset type.
-
EquipmentAttributes Table:
- Attributes: UniqueID (Foreign Key referencing Assets), Make, Model
- This table holds attributes specific to the "Equipment" asset type.
- RoomAttributes Table:
- Attributes: UniqueID (Foreign Key referencing Assets), Size
- This table holds attributes specific to the "Room" asset type.
- One-to-One Relationship:
- Each entry in the Assets table corresponds to exactly one entry in either PersonAttributes, EquipmentAttributes, or RoomAttributes.
- Use foreign keys in the specific attribute tables to link them to the Assets table.
-
Foreign Keys:
- Each specific attribute table should have a foreign key referencing the Assets table.
- This ensures that each entry in the attribute tables corresponds to a valid entry in the Assets table.
-
Joins:
- When querying use JOIN operations to retrieve information about a specific asset type.
- For efficiency it might be wise to index foreign keys and columns frequently used in joins.
-
Consistency:
- Ensure data consistency by using transactions when updating related tables to maintain the integrity of the database.
-
Data Validation:
- Implement checks and constraints to ensure that data entered adheres to the expected format and types.
-
Documentation:
- Clearly document the relationships, foreign keys, and any constraints for future reference.
-
Testing:
- Thoroughly test the database design with sample data to ensure that it meets your requirements and performs well.
| Route | Method | Action |
|---|---|---|
| /equip | GET | Fetch all equipment. Basic level of detail for populating tables |
| /rooms | GET | Fetch all rooms. Table detail only. |
| /personnel | GET | Fetch all personnel. Table level detail only |
| /:id | GET | Fetch individual asset by ID. Get all related information. |
| /equip | POST | Create new equipment asset. |
| /rooms | POST | Create new room asset |
| /personnel | POST | Create new person asset |
| /:id | PUT | Update asset with particular ID |
| /:id | DELETE | Delete asset with particular ID. |
Example returned object from GET request to /asset/:id
asset {
id: 1,
created_date: '',
modified_date: '',
groups: [{}],
bookings: [{}],
}
Class Booking {
id: 0,
startDate: {}, // Format yet to be defined
endDate: {},
duration: 0, // Could this be derived?
productionName: '',
assets: [{}],
guests: [''],
}