Skip to content

Instantly share code, notes, and snippets.

@milannankov
milannankov / BankAccount.cs
Created December 24, 2018 07:50
domain-models-2
public class BankAccount
{
public string Id { get; }
public Money Balance { get; private set; }
public BankAccount(string id, Money balance)
{
if(string.IsNullOrEmpty(id))
{
@milannankov
milannankov / anemic.cs
Created December 24, 2018 07:49
domain-models-1
public class BankAccount
{
public string Id { get; set; }
public decimal Balance { get; set }
public string Currency { get; set; }
}
@milannankov
milannankov / Program.cs
Created December 7, 2018 17:11
value-objects-usage
using (var context = new CompanyContext())
{
var company = new Company(Guid.NewGuid(), "My Company");
company.AssignAddress(new CompanyAddress("Sofia", "Mladost 4"));
company.AssignAddress(new CompanyAddress("Plovdiv", "blvd. Bulgaria 105"));
context.Companies.Add(company);
context.SaveChanges();
}
@milannankov
milannankov / CompanyContext.cs
Created December 7, 2018 17:10
value-objects-model-creation
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Company>().OwnsMany<CompanyAddress>("Addresses", a =>
{
a.HasForeignKey("CompanyId");
a.Property(ca => ca.City);
a.Property(ca => ca.AddressLine1);
a.HasKey("CompanyId", "City", "AddressLine1");
});
}
@milannankov
milannankov / Company.cs
Created December 7, 2018 17:07
value-objects-classes
public class Company
{
private List<CompanyAddress> addresses = new List<CompanyAddress>();
public Company(Guid id, string name)
{
Assertions.AssertNotNullAndNotEmpty(name, "Must provide name");
this.Id = id;
this.Name = name;
}
@milannankov
milannankov / hashing.cs
Created November 20, 2018 08:22
Hashing
private static string GetHash(string xmlText)
{
var xml = XElement.Parse(xmlText);
// Some xml operations omitted.
var xmlOutput = xml.ToString();
var sha = new SHA512Managed();
var hash = sha.ComputeHash(Encoding.UTF8.GetBytes(xmlOutput));
return BitConverter.ToString(hash).Replace("-", String.Empty)
@milannankov
milannankov / updated-index.js
Created November 7, 2018 06:32
Serverless Backend for Data Transformation (Part 1) - updated index.js
const transformStatement = require('./bank-statement-transform');
module.exports = function (context, req) {
if (req.body) {
let statement = req.body.toString();
let transformedStatement = transformStatement(statement);
context.res = {
body: transformedStatement,
headers: {
@milannankov
milannankov / bank-statement-transform.js
Created November 7, 2018 06:30
Serverless Backend for Data Transformation (Part 1) - bank-statement-transform.js
const moment = require('moment');
const columnIndices = {
"datetime": 0,
"amount": 2,
"dtkt": 3,
"reference": 1,
"transactionName": 4,
}
@milannankov
milannankov / sample-result.md
Created November 7, 2018 06:28
Serverless Backend for Data Transformation (Part 1) - sample result
date amount_signed reference details
2018-08-11 4000 001FTЗЗ182121504 Credit received - invoice 12345
2018-08-15 -0.6 001ЗЗMRBGNL55001 Account maintenance fee
2018-08-15 -1.4 001ЗЗMRBGNL55001 Account maintenance fee
2018-08-16 -25.96 001AЗЗF182149938 POS merchant sale - Visa
2018-08-18 -200 001AЗЗ4182122509 ATM withdrawal
2018-08-18 -1.06 001AЗЗ4182122509 ATM withdrawal fee
@milannankov
milannankov / sample.md
Created November 7, 2018 05:54
Serverless Backend for Data Transformation (Part 1) - sample
datetime reference amount dtkt trname
11/08/2018 11:01:07 001FTЗЗ182121504 4000.00 K Credit received - invoice 12345
15/08/2018 00:00:00 001ЗЗMRBGNL55001 0.60 D Account maintenance fee
15/08/2018 00:00:00 001ЗЗMRBGNL55001 1.40 D Account maintenance fee
16/08/2018 12:31:20 001AЗЗF182149938 25.96 D POS merchant sale - Visa
18/08/2018 11:46:57 001AЗЗ4182122509 200.00 D ATM withdrawal
18/08/2018 11:46:57 001AЗЗ4182122509 1.06 D ATM withdrawal fee