GitHub
Tests: 12 • Commercial: 2 • Pet projects: 4 • Legacy: 4
Total: 22

.NET Framework

Test
2021

Project Request

ASP.NET MVC • C# • SQL Server
Idea of the project: if someone wants to order a project development, here you can send an application.
Test
2020

ProjectC

ASP.NET MVC • C# • JSON • jQuery
JSON data processing.
Test
2020

Vehicle Maintenance

ASP.NET MVC • VB.NET • JSON
Idea of the project: if someone wants to order a project development, here you can send an application.
Test
2019

Movie Navigator

ASP.NET MVC • VB.NET
Request information about movie from IMDB.
Test
2018

Customers Exchange

ASP.NET MVC • C# • SQL Server
Automated teller machine emulation.
Test
2016

ATM

ASP.NET MVC • C#
Automated teller machine emulation.

.NET Core

Pet project
2022

Mail Daemon

.NET 8 • Console • JSON
Utility to send mails with customizable settings.

Custom

Code
2024

Buns of code

.NET Framework • C# • JavaScript
Code snippets from my projects, ready to use; tiny tests; code examples.

PHP

Test
2024

Mediabox

PHP 8 • Laravel 11 • Vue.js • Composer • SQLite
Test project for media files management.
Test
2020

Loan Castle

PHP • MariaDB
Jums jāizstrādā kāda lielāk projekta prototips. Izstrādājot prototipu, paturiet prātā, ka projektam attīstoties, šo prototipu varētu vajadzēt pilnveidot.
Test
2020

Content Management

PHP • MySQL • AJAX
Создать простой сайт, где будет страница с формой для авторизации и страница для авторизованного пользователя.
Test
2019

Laravel

PHP • Laravel • Vue.js • Composer • SQLite
Izveidot aplikāciju, kura ik pēc noteikta intervāla (60 sekundes) veic ierakstu datubāzē izmantojot Laravel freimworka iebūvēto funkcionalitāti.
Test
2019

Phone Check

PHP • JavaScript • JSON • Docker
Implement application to detect country by phone number.

Frontend

Test
2021

Forex Wall

npm • React
For this exercise, what we need is a simple live wall for tracking currencies.

Business projects

Commercial
2008

Certification Center

.NET Framework 4.8 • ASP.NET Web Forms • C# • LINQ • SQL Server • ADO.NET • Dapper • JavaScript • jQuery • Git
Transport registration and certification services in Latvia, Customer Relationship Management.
Commercial
2000

Amerikas Auto

.NET Framework 4.8 • ASP.NET Web Forms • C# • LINQ • SQL Server • ADO.NET • Entity Framework • JavaScript • jQuery • Git
Car service and spare parts for all USA and European car models, Customer Relationship Management.

Pet projects

Pet project
2023

Geolocation Assistant

.NET 8 • ASP.NET Core • C# • Web API • JSON • Git
Website for determining geolocation by IP or geotagged photo.
Pet project
2008

Web Dynamics

.NET Framework 4.8 • ASP.NET Web Forms • C# • LINQ • Web API • JSON • SQL Server • Dapper • JavaScript • jQuery • SVG • Git
Software development blog. Articles, books, videos, content management.
Pet project
2000

Blackball

.NET Framework 4.8 • ASP.NET Web Forms • C# • LINQ • Web API • JSON • XML • SQL Server • Dapper • JavaScript • jQuery • SVG • Git
My entertainment portal created from scratch.

Good old times

Legacy
2000

DOS Clock

Turbo Pascal • Assembler
Digital clock.
Legacy
2000

BrainOut

Turbo Pascal • Assembler
Tank battle game.
Legacy
1999

Airport Administrator

Turbo Pascal
Курсовая работа в институте.
Legacy
1998

Atomizer

Turbo Pascal • Assembler
Atomizer, aka «Studio2D». Graphic raster editor. AGI is my own «Atomizer Generated Image» file format.

ATM

2016 Test

Automated teller machine emulation.

ASP.NET MVC C#
Information
Source code
  ATM
  Home
Root / SergeyDrozdovATM.BLL / ATMService.cs
using System; using System.Collections.Generic; using System.Linq; using SergeyDrozdovATM.Data; namespace SergeyDrozdovATM.BLL {     public class ATMService : IATMService     {         public IEnumerable<Currency> GetCurrenciesList()         {             var currencies = new List<Currency>();             using (var dbContext = new SergeyDrozdovATMDbContext())             {                 foreach (var dbCurrency in dbContext.Currencies)                 {                     currencies.Add(new Currency()                     {                         Id = dbCurrency.Id,                         Name = dbCurrency.Name                     });                 }             }             return currencies;         }         public void CreateAccount(int userId, int currencyId)         {             using (var dbContext = new SergeyDrozdovATMDbContext())             {                 var dbAccount = new Accounts                 {                     UserId = userId,                     CurrencyId = currencyId,                     CashAmount = 0                 };                 dbContext.Accounts.Add(dbAccount);                 dbContext.SaveChanges();             }         }         public Account GetAccountById(int accountId)         {             var account = new Account();             using (var dbContext = new SergeyDrozdovATMDbContext())             {                 var dbAccount = dbContext.Accounts.FirstOrDefault(x => x.Id == accountId);                 if (dbAccount == null)                 {                     throw new Exception("Account not found.");                 }                 account.Id = dbAccount.Id;                 account.UserId = dbAccount.UserId;                 account.Currency = dbContext.Currencies.Where(x => x.Id == dbAccount.CurrencyId).Select(c => new Currency { Id = c.Id, Name = c.Name }).FirstOrDefault();                 account.Balance = dbAccount.CashAmount;             }             return account;         }         public IEnumerable<Account> GetAccountsList(int userId)         {             var accounts = new List<Account>();             using (var dbContext = new SergeyDrozdovATMDbContext())             {                 foreach (var dbAccount in dbContext.Accounts.Where(x => x.UserId == userId))                 {                     accounts.Add(new Account                     {                         Id = dbAccount.Id,                         UserId = dbAccount.UserId,                         Currency = dbContext.Currencies.Where(x => x.Id == dbAccount.CurrencyId).Select(c => new Currency { Id = c.Id, Name = c.Name }).FirstOrDefault(),                         Balance = dbAccount.CashAmount                     });                 }             }             return accounts;         }         public CurrencyRate GetCurrencyRate(Account sourceAccount, Account destinationAccount)         {             CurrencyRate currencyRate = null;             using (var dbContext = new SergeyDrozdovATMDbContext())             {                 var dbRate = dbContext.CurrencyRates.FirstOrDefault(x => x.SourceCurrencyId == sourceAccount.Currency.Id && x.DestinationCurrencyId == destinationAccount.Currency.Id);                 if (dbRate == null)                 {                     throw new Exception("Currency rate not found.");                 }                 currencyRate = new CurrencyRate                 {                     Id = dbRate.Id,                     SourceCurrency = sourceAccount.Currency,                     DestinationCurrency = destinationAccount.Currency,                     Rate = dbRate.Rate                 };             }             return currencyRate;         }         public void Deposit(Account account, decimal cashAmount)         {             if (account == null)             {                 throw new Exception("Account not found.");             }             if (cashAmount <= 0)             {                 throw new Exception("Cash amount should be more than zero.");             }             using (var dbContext = new SergeyDrozdovATMDbContext())             {                 var dbAccountInfo = dbContext.Accounts.FirstOrDefault(x => x.Id == account.Id);                 if (dbAccountInfo == null)                 {                     throw new Exception("Account not found.");                 }                 dbAccountInfo.CashAmount += cashAmount;                 dbContext.SaveChanges();             }         }         public void Withdraw(Account account, decimal cashAmount)         {             if (account == null)             {                 throw new Exception("Account not found.");             }             if (cashAmount <= 0)             {                 throw new Exception("Cash amount should be more than zero.");             }             using (var dbContext = new SergeyDrozdovATMDbContext())             {                 var dbAccountInfo = dbContext.Accounts.FirstOrDefault(x => x.Id == account.Id);                 if (dbAccountInfo == null)                 {                     throw new Exception("Account not found.");                 }                 if (ValidateAccountBalance(account, cashAmount))                 {                     dbAccountInfo.CashAmount -= cashAmount;                     dbContext.SaveChanges();                 }             }         }         public bool ValidateAccountBalance(Account account, decimal cashAmount)         {             if (account == null)             {                 throw new Exception("Account not found.");             }             if (account.Balance < cashAmount)             {                 throw new Exception("Not enough money.");             }             return true;         }         public void ConvertCurrency(Account sourceAccount, Account destinationAccount, decimal cashAmount)         {             if (sourceAccount == null)             {                 throw new Exception("Source account not found.");             }             if (destinationAccount == null)             {                 throw new Exception("Destination account not found.");             }             if (sourceAccount.Currency.Id == destinationAccount.Currency.Id)             {                 throw new Exception("Currency accounts should be different.");             }             if (cashAmount <= 0)             {                 throw new Exception("Cash amount should be more than zero.");             }             using (var dbContext = new SergeyDrozdovATMDbContext())             {                 var dbSourceAccount = dbContext.Accounts.FirstOrDefault(x => x.Id == sourceAccount.Id);                 var currencyRate = GetCurrencyRate(sourceAccount, destinationAccount);                 var transferCashAmount = cashAmount * currencyRate.Rate;                 var dbDestinationAccount = dbContext.Accounts.FirstOrDefault(x => x.Id == destinationAccount.Id);                 dbSourceAccount.CashAmount -= cashAmount;                 dbDestinationAccount.CashAmount += transferCashAmount;                 dbContext.SaveChanges();             }         }     } }