#summary Wiki Page for the Google Code-In with new Architecture Project.
#labels Phase-Design

<wiki:toc max_depth="3" />

=Introduction=
This document contains information regarding the progress and details of the Google Code-In with New Architecture project (GSOC 2011).

----

= Rough draft of the project plan = 
== Pre-Coding Phase == 
 * Minor changes to the GCI models to make student/org_admin/mentor to refer to profile
 * Move list generator from gsoc module to the core and fix the corresponding imports
 * A RequestHandler to perform required customizations to handle HTTP requests
 * Construct GCI related URL patterns
 * Access checker specific to GCI
 * Views for Profile and the Program

==First two weeks of the Coding Phase==
 * Views for Program homepage
 * Organistaion registration, profile and homepage
 * Starting the  Dashboard functionality
 * Templates till this stage

----

= Meetings and Agendas =
== Tuesday, May 17:10:00 in UTC ==
=== Meeting Notes ===

Location : Skype <br />
Time : Tuesday, May 17:10:00 in UTC <br />
Conducted by: Lennard de Rijk, Madhusudan C.S <br /> 
Notes taken by : Selwyn Jacob <br />

 * General Discussion on the approach to start the project.
  * Change the GCI models such that the fields that refer to student/org admin/mentor should now refer to Profile as we are getting rid of Mentor/OrgAdmin entities and Students are defined by their StudentInfo coupled to the profile.And use mapreduce or Task API to go over all entities in GCI that need to have their reference updated.
  * Move the List generating module from gsoc.views.helper to soc.views and change corresponding imports as even GCI needs this. 
  * Create GCI specific RequestHandler and RequestData object created for each request in GCI before starting with writing the views.
  * Start with the dashboard functionality.