Invup is a startup that aimed at creating a social platform for organizations (companies, fraternities, schools) to track and quantify their philanthropy.
By bringing game dynamics into a good hours and donations tracking software, we thought we could get people - employees and employers alike - to join forces for the greater good. The plan was to allow users to join teams, track their good deeds, see statistics, dashboards and whatnot. Everything to show them they could make a difference and motivate them to give more.
Invup code overview and solution organization
This is the main API of Invup. It contains interfaces for Commands and Queries.
Each of them are separated and fully functional on their own. Commanders are implemented directly in there, because they contain business logic.
It is a very basic form of CQRS where the commands use the domain directly for atomic operations, and the queries rely on straight up SQL to
This is the domain of interest for Invup. It contains all classes, interfaces and services necessary to make the web site work. It is built using Domain Driven Design in general.
This project contains all the code required to persist the domain in a database using NHibernate.
The configurations are made with FluentNHibernate.
This basically only has a bunch of HTML email templates to send in the Commanders on specific actions. It parses cshtml files using the Razor engine.
This project contains implementations of the Query inquisitors. Most of them only do SQL queries via the Dapper mini-framework.
Others can query a Solr server for faster and more efficient searching.
The ASP.NET MVC 3 project that contains all the web interface. It will most probably be used directly for the API once we get there.
This folder contains a project for each database that we have. It uses DotNetMigrations, a migration framework that only relies on SQL files. We currently only have one database, so only one project.
This folder contains projects with scripts for data mining, data fixing and any other script we will need.
The plan is to have a project with tasks that are regularly scheduled (email sending, notification creation, calendar stuff)
A simple console program for testing simple stuff. Barely used.
Unit tests for that specific project. Unit tests never rely on actual data and simply test business or domain logic.
Integration tests for that specific project. Integration tests are usually tests that verify that Data mappins are working. i.e. NHibernate repository mappings and queries return the right results. Insertions, updates and deletes are done properly. Dapper queries return the right results.
External libraries or tools
- Project by us hosted on Google Code
- URL: https://googlecode.com/p/awesome-utilities
- Contains a lot of utility classes, methods, etc.
- Project by us hosted on Google Code
- URL: https://googlecode.com/p/awesome-sql-builder
- Classes to easily build and modify SQL queries without doing string manipulation by hand.
- Forked at https://github.com/invup/bootstrap
- It's copied locally in ~/content/stylesheets/bootstrap/, but no changes should be made. We use the fork to keep up to date with the main branch.
- When the main branch updates, the fork should be pull/updated, and the files then overriden locally. NEVER CHANGE THE BOOTSTRAP FILES!
Jquery.UI in general
- Specifically, an add-on to the datepicker
- URL: http://trentrichardson.com/examples/timepicker/
CSS Sticky footer
- For ordering, sorting, etc. of tables.
- For form tooltips
- Applies .LESS filters to CSS files.
- Takes care of everything OpenID related. Also good support for OAuth.
Facebook C# SDK
- Facebook integration
- FirstGiving SDK for C#
- Also maintained by us
- URL: http://code.google.com/p/firstgiving-csharp-sdk/
- Wrapper around the REST API of FirstGiving donations.
- Persistence of POCO objects via external configuration
- Allows us to use .NET 4 ISet<T> instead of IESI.Collections
- URL: https://bitbucket.org/cdroulers/nhibernate.setfornet4/overview
- Branch to fix a small bug.
- ADO.NET driver for PostgreSQL
- ADO.NET driver for SQLite
- Built by hand. We don't use NuGet yet. Maybe we should!
- TODO Find a way to get these things to output HTML5 attributes, so the browser can be more awesome.
- Mini framework for querying SQL and mapping results to objects.
- Document indexer and searcher. Used to index and search our 1.6 million non-profits faster than PostgreSQL.