#summary One-sentence summary of this page.
#labels 2013DeveloperDoc

= Introduction =

Document describing how information is stored and managed on Melange. It describes the relationships between the data entities and how those entities are transformed into UI elements.

= Details =

== Data model architecture ==

=== Jargon ===

  * Model - Structural and relational definition of the data.
  * Entity - An instance of the data model which is stored.

=== User Information ===

  * User model stores the user's public name, the Google account with which the user signed up for Melange and the user's link id.
  * Profile information is stored in the Profile model which is in turn inherited from Role model. The user entity of the user to whom profile belongs to serves as the parent of the profile entity. For students there is an additional StudentInfo model which stores student specific information such as school name, project and proposal counts in GSoC and so on. Profile model is the parent of the StudentInfo model. Both the Profile model and StudentInfo model contains user supplied information and derived properties.


=== Program Information ===

  * The program model stores the settings such as total number of slots available, age restrictions for participants, program's current visibility that are related to the entire program.
  * The timeline model stores the program's timeline. However the timeline corresponding to organization application and mentor and student midterm and final evaluations are stored as part of the corresponding surveys outside this GSoCTimeline model. There exists a 1:1 relationship between the program model and the timeline model. program model references the timeline model through "timeline" reference property and timeline model references program model through "scope" reference property.
  * The program messages model stores the message bodies of the emails that are sent by hosts to different various participants. Message model is a descendent of program model.
  * The organization model stores both the information pertaining to the organization that are publicly visible such as organization name, contact details etc. and organization specific settings such as their GSoC proposal scoring scale, accepted and rejected messages, etc. This model also stores some derived information such as the number of mentors assigned to proposals, slots allocated and so on.




Relationship between entities: