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
  • 13:47 (UTC +02:00)
  • LinkedIn in/muhammad-ahmod
View GitHub Profile
@Muhammad-1990
Muhammad-1990 / Convert.js
Created March 15, 2025 12:55
Convert HTML to PDF Using Puppeteer
const puppeteer = require('puppeteer');
const fs = require('fs');
(async () => {
// Launch headless Chrome
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Load the HTML file (Replace 'my_resume.html' with your actual file path)
const html = fs.readFileSync('my_resume.html', 'utf8');
@Muhammad-1990
Muhammad-1990 / CandidatesEndpoints.cs
Last active March 13, 2025 11:26
JSON-LD and HATEOAS in minimal Api
public static class CandidatesEndpoints
{
public static void MapCandidatesEndpoints(this IEndpointRouteBuilder routes)
{
routes.MapGet("/candidates", () => Results.Ok(new GetCandidatesQuery()))
.WithName("GetCandidates")
.WithJsonLdResponse(CandidatesEnricher);
}
static Func<HttpContext, GetCandidatesQueryResult, object> CandidatesEnricher = (context, result) =>
@Muhammad-1990
Muhammad-1990 / QueryStringBinding.cs
Created February 25, 2025 12:30
Parameter binding is the process of converting request data into strongly typed parameters that are expressed by route handlers.
// ?orderid=ORD-12345&lineitems[0]=PRD-123,2&lineitems[1]=PRD-456,3&SomeOtherProperty=IgnoreValue
// routes.MapGet("/orders", (Order myorder) => Results.Ok(myorder));
// {"orderId":"ORD-12345","items":[{"itemId":"PRD-123","quantity":2},{"itemId":"PRD-456","quantity":3}]}
public class Order
{
public string? OrderId { get; set; }
public List<LineItem> Items { get; set; } = [];
@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:
@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 / 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 / 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 / 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 / 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 / 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) =>