Overview

Short write-up about the project

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 &emdash; employees and employers alike &emdash; 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

Invup

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

Invup.Domain.Core

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.

Invup.Domain.Core.Repositories

This project contains all the code required to persist the domain in a database using NHibernate.

The configurations are made with FluentNHibernate.

Invup.Mailing

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.

Invup.Queries.Dapper

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.

Invup.Web

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.

Folders

Databases

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.

Scripts

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)

Tests

Invup.Scratch

A simple console program for testing simple stuff. Barely used.

{Something}.Test.Unit

Unit tests for that specific project. Unit tests never rely on actual data and simply test business or domain logic.

{Something}.Test.Integration

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

Everywhere

Invup.Web:

Invup.Database.Main

Invup.Domain.Core

Invup.Domain.Core.Repositories

Invup

Invup.Queries.Dapper

Test projects