= 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 +TO_JSON() +update() } class Bookmarks { +dbh +base_uri +search() : Bookmarks::Search } class Bookmarks::List <> { +bookmarks: Bookmarks +search: Bookmarks::Search +title } class Bookmarks::Search <> { +query +tags +limit +offset +results } class Bookmarks::Controller { +dbname +bookmarks : Bookmarks +base_uri : URI +request : Plack::Request } class BookmarksApp { } Bookmarks <- Bookmarks::List : bookmarks Bookmarks::List --> Bookmarks::Search : search Bookmark - Bookmarks : collection > Bookmarks::Controller ..> Bookmarks::List Bookmarks::Controller --> Bookmarks : bookmarks BookmarksApp .> Bookmarks::Controller @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]