After a conversation with one of our partner teachers, a clear requirement emerged: when students are collaborating with each other, or a teacher is trying to provide feedback, there needs to be some way of having conversations about the project, both to coordinate and discuss ideas asynchronously, and for teachers to provide feedback. The key requirements are:
[ ] There must be a way to share feedback about code and the project in general, as well as more general communication.
[ ] Communication must only be visible to project owners, collaborators, and if the project is in a gallery, the gallery owners. It should otherwise be private.
[ ] It must be possible for an individual user to know whether there are new communications that they have not yet read, in both the project, but also in a project preview.
This must be available before February 1st in order to meet the teacher's teaching requirements.
What is your idea?
The simplest idea that would meet these requirements would be a simple chat mechanism.
[ ] Create a new tile in ProjectView to store the chat that loads the chat history separate from the project and has a real time listener to the specific chat document associated with the project
[ ] Add a new chat ID field to the project data that can be null when a chat hasn't been started.
[ ] Chats are not started until a user explicitly starts one. The panel shows a button to start a chat, also explaining that chats can be used to take notes and jot ideas as well, but they will be visible to collaborators.
[ ] Chat content would be stored separately from the project data and instead be a new document in Firestore
[ ] Chat documents are an object that contain a projectid field, contributors field which is a list of Firebase user IDs, and chat field, which is a list of chats. Each chat has a message, UTC timestamp, creator user ID, and a list of viewed user IDs that have viewed the message.
[ ] Firestore rules on the chat documents enforce that a user is the owner, collaborator, or gallery owner
[ ] When a chat is submitted, the document is updated with the message and sent to the database
[ ] When a real time update is received as an update to the chat document, the chat log is merged by timestamp before it is persisted, to avoid collision data loss
[ ] When a chat is viewed, it is marked as read and the chat is synced to the cloud.
[ ] Chat messages can be deleted by their author.
[ ] If a project has unread chats, there should be an indicator in the chat tile.
[ ] In the site footer, the CreatorView should indicate whether there are unread chats in a project on which they are a collaborator.
An optional feature, but one that would be very nice to have, would be referring to a specific node in the program (code anaphora), but this requires the ability to have a version history of programs as well, so we can indicate not only the path, but the specific code version from the past. If we implement that version history, then we could add this feature. If this isn't, create a new issue for this request.
Because this is time sensitive and we're approaching a break, I'm going to assign myself. If anyone wants to help with this, I'm happy to collaborate. I'll likely work on it during winter break.
What are you trying to do that you can't?
After a conversation with one of our partner teachers, a clear requirement emerged: when students are collaborating with each other, or a teacher is trying to provide feedback, there needs to be some way of having conversations about the project, both to coordinate and discuss ideas asynchronously, and for teachers to provide feedback. The key requirements are:
This must be available before February 1st in order to meet the teacher's teaching requirements.
What is your idea?
The simplest idea that would meet these requirements would be a simple chat mechanism.
ProjectView
to store the chat that loads the chat history separate from the project and has a real time listener to the specific chat document associated with the projectprojectid
field,contributors
field which is a list of Firebase user IDs, andchat
field, which is a list of chats. Each chat has amessage
, UTCtimestamp
,creator
user ID, and a list ofviewed
user IDs that have viewed the message.CreatorView
should indicate whether there are unread chats in a project on which they are a collaborator.An optional feature, but one that would be very nice to have, would be referring to a specific node in the program (code anaphora), but this requires the ability to have a version history of programs as well, so we can indicate not only the path, but the specific code version from the past. If we implement that version history, then we could add this feature. If this isn't, create a new issue for this request.