NotesTagger for Android and iOS

Monday 18th of February 2013 09:14:20 AM


  Toggle Advanced Options



NotesTagger project

NotesTagger will be an intuitive, tags-oriented note taking app for students and teachers with sensible semantic web integration.


NotesTagger - Tags-oriented note taking app for students and teachers


Use case

A user will use the app on their mobile device to create (and manage) a set of notes. A user can add one or more tags to individual notes to describe and to classify notes for subsequent browsing and / or searching. Furthermore, semantic web searches will (on-the-fly) display related articles, videos, and images for each individual note.

Notes can be listed and sorted by creation date, modification date, and the note's label. Likewise, all tags can be viewed and sorted by tag count, creation date, and the tag's label. Notes can be filtered by selecting one tag or a combination of tags.

Personas

  • Student: [Pending...]
  • Teacher: [Pending...]

Initial thoughts on implementation

The application's object model will consist of the following entity models and each model will map to the corresponding database table (between parentheses):

  • Note (note)
  • Tag (tag)
  • Meta datum (metadatum)
  • User (user)

Furthermore, the Entity-Relationship (ER) diagram can be summarized as follows:

  • note 1:M meta datum
  • note M:M tag

Hence, there will be a separate link table between the note and tag tables, i.e., notetag.

The tables will have the following columns:

  • note
    • id
    • label
    • data
    • creation_date
    • modification_date
    • namespace
  • metadatum
    • id
    • name
    • value
    • creation_date
    • note_fk
    • namespace
  • tag
    • id
    • label
    • namespace
  • notetag
    • note_fk
    • tag_fk
    • namespace
  • user
    • id
    • username (email)
    • first_name
    • surname
    • creation_date

Furthermore, the application will use the domain store pattern for persistence. Finally, from an OO point of view, all classes will be stand-alone with no inheritance; if any relationships need to be established between classes, composition will be favoured which has the added benefit of making the Builder pattern (i.e., fluent interface) on the models more straight forward to implement.

RESTful API URL design

  • Notes
    • GET HTTP method
      • Entire collection of notes
        • GET http://api.notestagger.com/rest/notes; HTTP response code 200 (Ok), list of all notes (paginated)
      • Specific note
        • GET http://api.notestagger.com/rest/notes/{note-id}; HTTP response code 200 (Ok), or 204 (No Content), or 404 (Not Found) if ID is not found or invalid
    • PUT HTTP method
      • Entire collection of notes
        • PUT http://api.notestagger.com/rest/notes; HTTP response code 404 (Not Found)
      • Specific note
        • PUT http://api.notestagger.com/rest/notes/{note-id}; HTTP response code 200 (Ok), or 204 (No Content), or 404 (Not Found) if ID is not found or invalid
    • POST HTTP method
      • Entire collection of notes
        • POST http://api.notestagger.com/rest/notes; HTTP response code 201 (Created), with 'location' header with URI to /notes/{note-id} containing new ID
      • Specific note
        • POST http://api.notestagger.com/rest/notes/{note-id}; HTTP response code 404 (Not Found)
    • DELETE HTTP method
      • Entire collection of notes
        • DELETE http://api.notestagger.com/rest/notes; HTTP response code 404 (Not Found)
      • Specific note
        • DELETE http://api.notestagger.com/rest/notes/{note-id}; HTTP response code 200 (Ok), 404 (Not Found) if ID is not found or invalid
  • Tags
    • GET HTTP method
      • Entire collection of tags
        • GET http://api.notestagger.com/rest/tags; HTTP response code 200 (Ok), list of all tags (paginated)
      • Specific tag
        • GET http://api.notestagger.com/rest/tags/{tag}; HTTP response code 200 (Ok), or 204 (No Content), or 404 (Not Found) if tag is not found or invalid
    • PUT HTTP method
      • Entire collection of tags
        • PUT http://api.notestagger.com/rest/tags; HTTP response code 404 (Not Found)
      • Specific tag
        • PUT http://api.notestagger.com/rest/tags/{tag}; HTTP response code 200 (Ok), or 204 (No Content), or 404 (Not Found) if tag is not found or invalid
    • POST HTTP method
      • Entire collection of tags
        • POST http://api.notestagger.com/rest/tags; HTTP response code 201 (Created), with 'location' header with URI to /tags/{tag} containing new tag
      • Specific tag
        • POST http://api.notestagger.com/rest/tags/{tag}; HTTP response code 404 (Not Found)
    • DELETE HTTP method
      • Entire collection of tag
        • DELETE http://api.notestagger.com/rest/tags; HTTP response code 404 (Not Found)
      • Specific tag
        • DELETE http://api.notestagger.com/rest/tags/{tag}; HTTP response code 200 (Ok), 404 (Not Found) if tag is not found or invalid
  • Tags and notes as sub-resources
    • GET HTTP method
      • All tags for a given note
        • GET http://api.notestagger.com/rest/notes/{note-id}/tags; HTTP response code 200 (Ok), list of all tags (paginated)
      • All notes for a given tag
        • GET http://api.notestagger.com/rest/tags/{tag}/notes; HTTP response code 200 (Ok), list of all notes (paginated)

Time frames

  • Web
    • Store (including models): 2 weeks
    • Application: 4 weeks
  • Android: 8 weeks
  • iOS: 12 weeks



Comments

Learning iOS and Core Data@13-11-20 13:01:07 by Brett Kromkamp

It's my intention to develop NotesTagger to cement my understanding of iOS (in combination with Core Data) development.






Google