Skip to content

Instantly share code, notes, and snippets.

View sulton-max's full-sized avatar
📌
Focusing

Sultonbek Murodbekovich Rakhimov sulton-max

📌
Focusing
View GitHub Profile
@sulton-max
sulton-max / EfCoreEntityStorageBroker.cs
Last active August 9, 2023 08:56
Entity Storage Broker using EF Core
using System.Linq.Expressions;
using Microsoft.EntityFrameworkCore;
using TodoApp.Api.Models.Common;
namespace TodoApp.Api.Brokers.EntityStorage.Users;
/// <summary>
/// Provides entity storage operations using Entity Framework Core
/// </summary>
public sealed class EfCoreEntityStorageBroker : DbContext
@sulton-max
sulton-max / EntityServiceBase.cs
Last active April 1, 2023 13:12
C# BLL generic entity service base
/// <summary>
/// Provides common business logic for manipulating entities
/// </summary>
/// <typeparam name="TEntity">Entity type</typeparam>
public class EntityServiceBase<TEntity> : IEntityServiceBase<TEntity> where TEntity : class, IEntity, IQueryableEntity
{
private readonly IEntityRepositoryBase<TEntity> EntityRepository;
public EntityServiceBase(IEntityRepositoryBase<TEntity> entityRepository)
{
@sulton-max
sulton-max / UUID.cs
Created November 25, 2022 11:00
C# Custom UUID from GUID with checksum and validation
/// <summary>
/// Represents Universal Unique Identifier
/// </summary>
public class UUID
{
/// <summary>
/// Digits used for checksum
/// </summary>
private static int ChecksumDigits = 4;
@sulton-max
sulton-max / IEmailService.cs
Created November 28, 2022 05:00
Email and SMTP client service interface
/// <summary>
/// Defines methods for Email and SMTP client operations
/// </summary>
public interface IEmailService
{
/// <summary>
/// Creates SMTP client
/// </summary>
/// <param name="emailConfiguration">Email configuration for SMTP host server</param>
/// <returns>Created SMTP client</returns>
@sulton-max
sulton-max / EmailService.cs
Created November 28, 2022 05:01
Email and SMTP client service implementation
/// <summary>
/// Provides methods for Email and SMTP client operations
/// </summary>
public class EmailService : IEmailService
{
public async Task<SmtpClient> CreateClientAsync(EmailConfiguration emailConfiguration)
{
if (_emailConfiguration == null)
throw new InvalidOperationException();
@sulton-max
sulton-max / ConvertZip.cs
Last active November 29, 2022 20:48
Convert UploadFile to Zip
public static async Task<byte[]> ToZipAsync(this IEnumerable<UploadFile> uploadfiles)
{
if (uploadfiles == null || uploadfiles.Count() == 0)
throw new ArgumentException();
return await Task.Run(() =>
{
// Create streams
using var memoryStream = new MemoryStream();
using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
@sulton-max
sulton-max / TextInputFormatter.cs
Created December 5, 2022 14:27
Plain text Input Formatter
public class TextInputFormatter : InputFormatter
{
private string _mimeType = "text/plain";
public TextInputFormatter()
{
SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse(_mimeType));
}
public override bool CanRead(InputFormatterContext context) => context.HttpContext.Request.ContentType?.StartsWith(_mimeType) ?? false;
@sulton-max
sulton-max / SqlTableToCsClass.sql
Created December 12, 2022 06:46
Converts SQL table to C# class
declare @TableName sysname = 'TableName'
declare @Result varchar(max) = 'public class ' + @TableName + '
{'
select @Result = @Result + '
public ' + ColumnType + NullableSign + ' ' + ColumnName + ' { get; set; }
'
from
(
select
@sulton-max
sulton-max / QueryExpressions.cs
Last active December 21, 2022 07:39
Query expressions to easily create entity filter
/// <summary>
/// Provides extension methods to create complex queries
/// </summary>
public static class QueryExtensions
{
#region Querying
/// <summary>
/// Applies given query options to query source
/// </summary>
@sulton-max
sulton-max / TypeExtensions.cs
Created December 16, 2022 18:27
Type extensions that help query extensions
using System.Linq.Expressions;
using System.Reflection;
using Cerulean.DAL.Models.Query;
namespace Cerulean.DAL.Extensions;
public static class TypeExtensions
{
public static MethodInfo GetCompareMethod(this Type type)
{