Skip to content

Instantly share code, notes, and snippets.

View devhammed's full-sized avatar
💭
Changing the world, one dollar sign in my PHP code at a time!

Hammed Oyedele devhammed

💭
Changing the world, one dollar sign in my PHP code at a time!
View GitHub Profile
@devhammed
devhammed / Laravel.Dockerfile
Last active October 11, 2025 20:00
Laravel Docker Setup (NGINX, PHP-FPM, Queue Worker, Scheduler, Reverb)
# Stage 1: Build
FROM php:8.4-cli AS build
# Setup build root
WORKDIR /app
# Install dependencies
RUN apt-get update && apt-get install -y \
git \
unzip \
@devhammed
devhammed / scroll-area.tsx
Created October 10, 2025 17:50
Shadcn UI Scroll Area with Overflow Fading Support
import { cn } from '@/lib/utils';
import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
import * as React from 'react';
import { useEffect, useRef, useState } from 'react';
const ScrollArea = React.forwardRef<
React.ComponentRef<typeof ScrollAreaPrimitive.Root>,
React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root> & { fade?: boolean }
>(({ className, fade, children, ...props }, ref) => {
const viewPortRef = useRef<HTMLDivElement | null>(null);
@devhammed
devhammed / use-api-form.ts
Last active October 12, 2025 19:31
Laravel Inertia JSON API Form Helper Hook
import { FormDataKeys, FormDataType, Method } from '@inertiajs/core';
// @ts-expect-error TS2307
import type { Response } from '@inertiajs/core/types/response';
import type { InertiaFormProps } from '@inertiajs/react';
import { useForm } from '@inertiajs/react';
import axios, { AxiosProgressEvent, AxiosRequestConfig, AxiosResponse } from 'axios';
import { cloneDeep } from 'lodash-es';
import { useCallback, useMemo, useRef, useState } from 'react';
type HttpMethod = 'get' | 'post' | 'put' | 'patch' | 'delete';
@devhammed
devhammed / MoneyCast.php
Last active October 10, 2025 07:49
Brick Money Cast for Laravel Eloquent Models (handles storing to database, getting from database & JSON serialization)
<?php
namespace App\Casts;
use Brick\Money\Money;
use UnexpectedValueException;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use Illuminate\Contracts\Database\Eloquent\SerializesCastableAttributes;
@devhammed
devhammed / input-tags.tsx
Last active October 10, 2025 17:52
Shadcn UI Tags Input
import { Badge } from '@/components/ui/badge';
import { Button } from '@/components/ui/button';
import { XIcon } from '@/components/ui/icons';
import { cn } from '@/lib/utils';
import {
type ChangeEvent,
type ComponentProps,
type KeyboardEvent,
forwardRef,
useCallback,
@devhammed
devhammed / 01-audit.module.ts
Last active September 12, 2025 09:42
Nest.js Audit Module (request with all database operations that happened in the request-response flow)
import {
forwardRef,
MiddlewareConsumer,
Module,
NestModule,
} from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Audit } from '@/audit/entities/audit.entity';
import { AuditMiddleware } from '@/audit/middlewares/audit.middleware';
import { APP_GUARD } from '@nestjs/core';
@devhammed
devhammed / 01-UrlGenerator.php
Last active September 3, 2025 16:52
Laravel Locale-aware URL generator.
<?php
namespace App\Support\Routing;
use Illuminate\Routing\UrlGenerator as BaseUrlGenerator;
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
class UrlGenerator extends BaseUrlGenerator
{
public function to($path, $extra = [], $secure = null): string
@devhammed
devhammed / 01-comparison.validator.ts
Last active August 31, 2025 09:06
Nest.js Comparison Class Validator
import { Injectable } from '@nestjs/common';
import {
ValidationArguments,
ValidatorConstraint,
ValidatorConstraintInterface,
} from 'class-validator';
import { ComparisonValidatorType } from '@/app/enums/comparison-validator-type.enum';
export type ComparisonValidatorConstraint<T extends object> = [
keyof T,
@devhammed
devhammed / 01-presence.validator.ts
Last active August 31, 2025 09:11
Nest.js Database Presence Class Validator
import {
EntityManager,
EntityTarget,
ObjectLiteral,
SelectQueryBuilder,
} from 'typeorm';
import { Injectable } from '@nestjs/common';
import {
ValidationArguments,
ValidatorConstraint,
@devhammed
devhammed / typeorm-query-failed.filter.ts
Last active August 31, 2025 09:24
Nest.js TypeORM QueryFailedError Friendly Messages Filter
import {
Catch,
ExceptionFilter,
HttpException,
HttpStatus,
} from '@nestjs/common';
import { QueryFailedError } from 'typeorm';
import { camelCase } from 'typeorm/util/StringUtils';
export enum PostgresErrorCode {