Skip to content

Instantly share code, notes, and snippets.

View Muhammad-1990's full-sized avatar
💭
eat sleep code repeat

Muhammad Ahmod Muhammad-1990

💭
eat sleep code repeat
  • NovationTechnologies
  • Cape Town, South Africa
  • 02:39 (UTC +02:00)
  • LinkedIn in/muhammad-ahmod
View GitHub Profile
@Muhammad-1990
Muhammad-1990 / ObjectInitializer.cs
Last active July 10, 2024 13:13
You can use object initializers to initialize type objects in a declarative manner without explicitly invoking a constructor for the type. The following example shows how to use object initializers with named objects.
namespace ObjectIntitializer;
public class Program
{
public static void Main()
{
// Initialize objects by using an object initializer.
var currency = new Currency { Id = 128, Code = "ZAR", Name = "Rand", Country = "South Africa" };
// Id = 128, Code = ZAR, Name = South Africa, Country = South Africa
@Muhammad-1990
Muhammad-1990 / DataMask.cs
Last active July 11, 2024 22:54
You can extend built in functionality in the form of an extension method to provide consistent way of accessing a feature. The following example shows how to override the toString method and take advantage of built in string functionality in the form of an extension method.
namespace DataMask;
public class Program
{
public static void Main()
{
var creditCard = new CreditCard()
{
NameOnCard = "Muhammad Ahmod",
Pan = "1234 5678 6787 2332",
@Muhammad-1990
Muhammad-1990 / TupleDeconstruction.cs
Created July 12, 2024 01:06
You can simplify method outputs by returning multiple values using tuples and deconstruction. The following example shows how to implement a tuple with 3 return items and how to discard unwanted returns.
namespace TupleDeconstruction;
public class Program
{
public static void Main()
{
// When deconstructing you can use _ to discard unwanted variables.
var (Status, _, Reason) = WorkflowProgress.GetPaymentProgress("PMT_01J17CQ41K2Y0D5C3D8VG8");
// Status: ProvisionallyAccepted
@Muhammad-1990
Muhammad-1990 / CleanCache.cs
Last active July 17, 2024 10:30
Combine Predicates and Actions for a clean and efficient way to manage in memory lists.
using System.Globalization;
var _cache = new Dictionary<string, CacheItem<Transfer>>() {
{ "1", new CacheItem<Transfer> { Item = new Transfer { Id = 100, Status = TransferStatus.Completed, LastModified = DateTime.ParseExact("2024-07-16 11:00", "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture) } } },
{ "2", new CacheItem<Transfer> { Item = new Transfer { Id = 200, Status = TransferStatus.Incomplete, LastModified = DateTime.ParseExact("2024-07-16 11:00", "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture) } } },
{ "3", new CacheItem<Transfer> { Item = new Transfer { Id = 300, Status = TransferStatus.Canceled, LastModified = DateTime.ParseExact("2024-07-16 11:00", "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture) } } },
};
// Global method to access and clean up cache.
void CleanUpCache<T>(KeyValuePair<string, CacheItem<T>> entry) =>
@Muhammad-1990
Muhammad-1990 / CardConfiguration.cs
Created July 16, 2024 21:32
Control Entity Id generation with Entity Framework Core
public class CardConfiguration : IEntityTypeConfiguration<Card>
{
public void Configure(EntityTypeBuilder<Card> builder) =>
builder.Property(c => c.EntityId)
.HasValueGenerator<CardIdGenerator>()
.HasColumnType("nvarchar")
.HasColumnOrder(1)
.HasMaxLength(30)
.IsRequired();
@Muhammad-1990
Muhammad-1990 / EnumConverterConfiguration.cs
Created July 16, 2024 21:46
Using EF Core to convert Enums to string.
public enum CardStatus : int
{
Active = 1,
Expired = 2,
PendingVerification = 3
}
public record CardEntity(CardStatus Status);
public class CardConfiguration : IEntityTypeConfiguration<Card>
@Muhammad-1990
Muhammad-1990 / Garnet.cs
Created July 19, 2024 14:46
Garnet is a remote caching storage system developed by Microsoft
using Garnet;
using Garnet.client;
// Server.Program.cs
using var server = new GarnetServer(args);
server.Start();
// Client.Program.cs
using var db = new GarnetClient("localhost", 6379, null);
db.Connect();
@Muhammad-1990
Muhammad-1990 / ValidationFilterExtension.cs
Last active March 13, 2025 11:33
Smart Minimal API Validation for Vertical-slice architecture
public static class RouteHandlerBuilderExtensions
{
public static RouteHandlerBuilder ValidateRequest<TRequest>(this RouteHandlerBuilder builder) =>
builder.AddEndpointFilter<ValidationFilter<TRequest>>();
}
public class ValidationFilter<TRequest>(ILogger<RequestValidationFilter<TRequest>> logger, IValidator<TRequest>? validator = null) : IEndpointFilter
{
public async ValueTask<object?> InvokeAsync(EndpointFilterInvocationContext context, EndpointFilterDelegate next)
{ return await next(context); }
}
@Muhammad-1990
Muhammad-1990 / OutputCache.cs
Last active March 13, 2025 11:30
Output Caching Middleware
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOutputCache(options =>
{
options.AddPolicy("ManualExpire", builder =>
{
builder.Expire(TimeSpan.FromDays(14));
builder.Tag("StaticCollections");
});
@Muhammad-1990
Muhammad-1990 / docker-compose.yml
Last active March 13, 2025 11:29
HAProxy URL Shortner
version: "3"
services:
shorturl.gateway:
container_name: shorturl.gateway
image: haproxytech/haproxy-ubuntu
build:
context: ./shorturl/gateway
env_file:
- ./shorturl/gateway/.env
ports: