= Bookmarks = This project is my personal replacement for del.icio.us. It has also been a very good way for me to learn about [perldoc:PSGI] and [perldoc:Plack], and some of the more modern ways of writing Perl web applications. == Source Code == - [source:bookmarks Source code browser] - [http://svn.echodin.net/bookmarks/ SVN repository] == Database Design == The database consists of three tables: `bookmarks`, `resources`, and `tags`. I separated `resources` (which hold the URI and title of the targets of the bookmarks) from `bookmarks` (which have an ID, a creation timestamp, and a last-modified timestamp) as a matter of conceptual purity. Since the `tags` table references `resources`, it is clear from the database structure that the tag (like the title) is a property of the ''resource'', not the bookmark. == Classes == {{{#!plantuml @startuml class Bookmark { +id +uri +title +ctime +mtime +tags +bookmark_uri +exists +collection: Bookmarks } class Bookmarks { +dbh +base_uri } class Bookmarks::List { +bookmarks: Bookmarks +search: Bookmarks::Search +results +title } class Bookmarks::Search { +query +tags +limit +offset } class Bookmarks::Controller { } class BookmarksApp { } Bookmarks::List o- Bookmarks : bookmarks > Bookmarks::List o- Bookmarks::Search : search > Bookmark - Bookmarks : collection > @enduml }}} == CPAN Modules == The application currently depends on the following CPAN modules: * [perldoc:YAML] * [perldoc:Plack::Builder] * [perldoc:Plack::Request] * [perldoc:Router::Resource] * [perldoc:Moose] * [perldoc:HTTP::Date] * [perldoc:SQL::Interp] * [perldoc:URI] * [perldoc:Encode] * [perldoc:JSON] * [perldoc:Template]