Giter Site home page Giter Site logo

finance-tracker's Introduction

Finance Tracker

What I am trying to build is a Finance Tracker application using some new techniques for me:

  • 3-rd party authentication (e.g Auth0)
  • CQRS
  • Domain Driven Design (Rich domain model)

Features

  • Auth0 authentication
  • Create budget
  • Create/Remove categories
  • Add/remove income/outcome sources. Sources can be one-time / regular payments
  • Pick a taxation strategy (e.g ФОП 3-тя група and so on)
  • Calculate netto profit, possible filters by income sources / categories
  • Saving goal. Customer can specify a saving goal (e.g save 10% of the netto profit this month), the application have to calculate the maximum amount of money he can spend each day (until the end of the business month) so that he fits in the saving plan. If customer spends more money than expected, we have to adjust the limit

Architecure

The solution consists of multiple projects:

  • FinanceTracker.Api - Handles client requests
  • FinanceTracker.Application - Handles application logic, mainly unites the domain logic
  • FinanceTracker.Domain - Handles core domain logic, the most important part of the application
  • FinanceTracker.Persistence - Handles all of the database communications

Domain

Bounded Context

finance-tracker's People

Stargazers

 avatar

Watchers

 avatar

finance-tracker's Issues

Strongly Typed Ids

As for now I can't find a proper way to make strongly-typed ids work properly with Entity Framework Core. In order not to get stuck forever, I decided to postpone the work on this issue. What I have tried so far:

  1. Implement technique provided in this video. The problem is that in fact it works, but the way it works ruins the whole idea of strongly-typed ids. The following example shows that we have to manually create a new instance of an id in order to satisfy the types
var customer = new Customer(TaxationTypes.Fop3, new Email("[email protected]"));
var budget = new Budget(customer.Id); // error: CustomerId is not assignable to AggreagateRootId<Guid>
var budget = new Budget(new CustomerId(customer.Id));
  1. This repository provides a workaround by duplicating the CustomerId in all of the domains but as for me it looks like a useless overhead

As for now I'll stick to usual primitive-type ids, and come back to this issue later

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.