← back to dorjindahouz__Geree

Function bodies 81 total

All specs Real LLM only Function bodies
getContract function · typescript · L19-L28 (10 LOC)
lib/api/contracts.ts
export async function getContract(id: string): Promise<ActiveContract | null> {
  const { data, error } = await supabase
    .from('active_contracts')
    .select('*, template:contract_templates(*), party_a:profiles!party_a_id(*), party_b:profiles!party_b_id(*)')
    .eq('id', id)
    .single();

  if (error) throw error;
  return data;
}
createContract function · typescript · L30-L51 (22 LOC)
lib/api/contracts.ts
export async function createContract(params: {
  template_id: string;
  party_a_id: string;
  user_inputs: Record<string, any>;
  party_b_phone?: string;
  party_b_email?: string;
  payment_amount?: number;
}): Promise<ActiveContract> {
  const { data, error } = await supabase
    .from('active_contracts')
    .insert({
      ...params,
      status: 'pending_acceptance' as ContractStatus,
    })
    .select()
    .single();

  if (error) throw error;

  await logContractEvent(data.id, params.party_a_id, 'contract_created', {});
  return data;
}
updateContractStatus function · typescript · L53-L70 (18 LOC)
lib/api/contracts.ts
export async function updateContractStatus(
  contractId: string,
  status: ContractStatus,
  actorId: string,
  updates?: Partial<ActiveContract>
): Promise<ActiveContract> {
  const { data, error } = await supabase
    .from('active_contracts')
    .update({ status, ...updates, updated_at: new Date().toISOString() })
    .eq('id', contractId)
    .select()
    .single();

  if (error) throw error;

  await logContractEvent(contractId, actorId, `status_changed_to_${status}`, { status });
  return data;
}
acceptContract function · typescript · L72-L101 (30 LOC)
lib/api/contracts.ts
export async function acceptContract(
  contractId: string,
  partyBId: string,
  partyBInputs: Record<string, any>
): Promise<ActiveContract> {
  const { data: existing } = await supabase
    .from('active_contracts')
    .select('user_inputs')
    .eq('id', contractId)
    .single();

  const mergedInputs = { ...(existing?.user_inputs || {}), ...partyBInputs };

  const { data, error } = await supabase
    .from('active_contracts')
    .update({
      party_b_id: partyBId,
      user_inputs: mergedInputs,
      status: 'pending_payment' as ContractStatus,
      updated_at: new Date().toISOString(),
    })
    .eq('id', contractId)
    .select()
    .single();

  if (error) throw error;

  await logContractEvent(contractId, partyBId, 'contract_accepted', {});
  return data;
}
logContractEvent function · typescript · L103-L115 (13 LOC)
lib/api/contracts.ts
export async function logContractEvent(
  contractId: string,
  actorId: string,
  eventType: string,
  metadata: Record<string, any>
): Promise<void> {
  await supabase.from('contract_events').insert({
    contract_id: contractId,
    actor_id: actorId,
    event_type: eventType,
    metadata,
  });
}
getContractEvents function · typescript · L117-L126 (10 LOC)
lib/api/contracts.ts
export async function getContractEvents(contractId: string) {
  const { data, error } = await supabase
    .from('contract_events')
    .select('*, actor:profiles(*)')
    .eq('contract_id', contractId)
    .order('created_at', { ascending: true });

  if (error) throw error;
  return data || [];
}
getNotifications function · typescript · L4-L13 (10 LOC)
lib/api/notifications.ts
export async function getNotifications(userId: string): Promise<Notification[]> {
  const { data, error } = await supabase
    .from('notifications')
    .select('*')
    .eq('user_id', userId)
    .order('created_at', { ascending: false });

  if (error) throw error;
  return data || [];
}
Repobility · code-quality intelligence platform · https://repobility.com
markAsRead function · typescript · L15-L20 (6 LOC)
lib/api/notifications.ts
export async function markAsRead(notificationId: string): Promise<void> {
  await supabase
    .from('notifications')
    .update({ is_read: true })
    .eq('id', notificationId);
}
markAllAsRead function · typescript · L22-L28 (7 LOC)
lib/api/notifications.ts
export async function markAllAsRead(userId: string): Promise<void> {
  await supabase
    .from('notifications')
    .update({ is_read: true })
    .eq('user_id', userId)
    .eq('is_read', false);
}
getUnreadCount function · typescript · L30-L39 (10 LOC)
lib/api/notifications.ts
export async function getUnreadCount(userId: string): Promise<number> {
  const { count, error } = await supabase
    .from('notifications')
    .select('*', { count: 'exact', head: true })
    .eq('user_id', userId)
    .eq('is_read', false);

  if (error) throw error;
  return count || 0;
}
getProfile function · typescript · L4-L13 (10 LOC)
lib/api/profiles.ts
export async function getProfile(userId: string): Promise<Profile | null> {
  const { data, error } = await supabase
    .from('profiles')
    .select('*')
    .eq('id', userId)
    .single();

  if (error) throw error;
  return data;
}
updateProfile function · typescript · L15-L28 (14 LOC)
lib/api/profiles.ts
export async function updateProfile(
  userId: string,
  updates: Partial<Pick<Profile, 'full_name' | 'phone' | 'register_number' | 'avatar_url' | 'preferred_locale'>>
): Promise<Profile> {
  const { data, error } = await supabase
    .from('profiles')
    .update({ ...updates, updated_at: new Date().toISOString() })
    .eq('id', userId)
    .select()
    .single();

  if (error) throw error;
  return data;
}
getTemplates function · typescript · L4-L13 (10 LOC)
lib/api/templates.ts
export async function getTemplates(): Promise<ContractTemplate[]> {
  const { data, error } = await supabase
    .from('contract_templates')
    .select('*')
    .eq('is_active', true)
    .order('created_at', { ascending: true });

  if (error) throw error;
  return data || [];
}
getTemplateBySlug function · typescript · L15-L25 (11 LOC)
lib/api/templates.ts
export async function getTemplateBySlug(slug: string): Promise<ContractTemplate | null> {
  const { data, error } = await supabase
    .from('contract_templates')
    .select('*')
    .eq('slug', slug)
    .eq('is_active', true)
    .single();

  if (error) throw error;
  return data;
}
AuthProvider function · typescript · L30-L108 (79 LOC)
lib/auth/provider.tsx
export function AuthProvider({ children }: { children: React.ReactNode }) {
  const [session, setSession] = useState<Session | null>(null);
  const [profile, setProfile] = useState<Profile | null>(null);
  const [loading, setLoading] = useState(true);

  const fetchProfile = useCallback(async (userId: string) => {
    const { data } = await supabase
      .from('profiles')
      .select('*')
      .eq('id', userId)
      .single();
    setProfile(data);
  }, []);

  useEffect(() => {
    supabase.auth.getSession().then(({ data: { session } }) => {
      setSession(session);
      if (session?.user) fetchProfile(session.user.id);
      setLoading(false);
    });

    const { data: { subscription } } = supabase.auth.onAuthStateChange((_event, session) => {
      setSession(session);
      if (session?.user) {
        fetchProfile(session.user.id);
      } else {
        setProfile(null);
      }
    });

    return () => subscription.unsubscribe();
  }, [fetchProfile]);

  const signInWi
Repobility — the code-quality scanner for AI-generated software · https://repobility.com
useAuth function · typescript · L4-L10 (7 LOC)
lib/auth/useAuth.ts
export function useAuth() {
  const context = useContext(AuthContext);
  if (!context) {
    throw new Error('useAuth must be used within an AuthProvider');
  }
  return context;
}
I18nProvider function · typescript · L21-L42 (22 LOC)
lib/i18n/provider.tsx
export function I18nProvider({ children, initialLocale = 'mn' }: { children: React.ReactNode; initialLocale?: Locale }) {
  const [locale, setLocale] = useState<Locale>(initialLocale);

  const t = useCallback(
    (key: string, params?: Record<string, string | number>) => {
      let text = translations[locale]?.[key] || translations['mn']?.[key] || key;
      if (params) {
        Object.entries(params).forEach(([k, v]) => {
          text = text.replace(`{{${k}}}`, String(v));
        });
      }
      return text;
    },
    [locale]
  );

  return (
    <I18nContext.Provider value={{ locale, setLocale, t }}>
      {children}
    </I18nContext.Provider>
  );
}
useTranslation function · typescript · L4-L6 (3 LOC)
lib/i18n/useTranslation.ts
export function useTranslation() {
  return useContext(I18nContext);
}
generateSignatureHash function · typescript · L11-L17 (7 LOC)
supabase/functions/mock-sign/index.ts
async function generateSignatureHash(data: string): Promise<string> {
  const encoder = new TextEncoder();
  const dataBuffer = encoder.encode(data);
  const hashBuffer = await crypto.subtle.digest('SHA-256', dataBuffer);
  const hashArray = Array.from(new Uint8Array(hashBuffer));
  return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
}
canTransition function · typescript · L15-L17 (3 LOC)
utils/contract-status.ts
export function canTransition(from: ContractStatus, to: ContractStatus): boolean {
  return VALID_TRANSITIONS[from]?.includes(to) ?? false;
}
getStatusColor function · typescript · L19-L32 (14 LOC)
utils/contract-status.ts
export function getStatusColor(status: ContractStatus): string {
  switch (status) {
    case 'draft': return '#94A3B8';
    case 'pending_acceptance':
    case 'pending_payment':
    case 'pending_signature': return '#D97706';
    case 'paid':
    case 'signed': return '#2563EB';
    case 'completed': return '#16A34A';
    case 'cancelled':
    case 'expired': return '#DC2626';
    default: return '#94A3B8';
  }
}
isActiveStatus function · typescript · L34-L36 (3 LOC)
utils/contract-status.ts
export function isActiveStatus(status: ContractStatus): boolean {
  return !['completed', 'cancelled', 'expired'].includes(status);
}
createContractAcceptLink function · typescript · L3-L5 (3 LOC)
utils/deep-link.ts
export function createContractAcceptLink(contractId: string): string {
  return Linking.createURL(`/contract/accept/${contractId}`);
}
All rows above produced by Repobility · https://repobility.com
createContractSignLink function · typescript · L7-L9 (3 LOC)
utils/deep-link.ts
export function createContractSignLink(contractId: string): string {
  return Linking.createURL(`/contract/sign/${contractId}`);
}
formatCurrency function · typescript · L1-L7 (7 LOC)
utils/format.ts
export function formatCurrency(amount: number): string {
  return new Intl.NumberFormat('mn-MN', {
    style: 'decimal',
    minimumFractionDigits: 0,
    maximumFractionDigits: 0,
  }).format(amount) + '₮';
}
formatDate function · typescript · L9-L16 (8 LOC)
utils/format.ts
export function formatDate(dateString: string, locale: 'mn' | 'en' = 'mn'): string {
  const date = new Date(dateString);
  return date.toLocaleDateString(locale === 'mn' ? 'mn-MN' : 'en-US', {
    year: 'numeric',
    month: 'long',
    day: 'numeric',
  });
}
formatDateTime function · typescript · L18-L27 (10 LOC)
utils/format.ts
export function formatDateTime(dateString: string, locale: 'mn' | 'en' = 'mn'): string {
  const date = new Date(dateString);
  return date.toLocaleDateString(locale === 'mn' ? 'mn-MN' : 'en-US', {
    year: 'numeric',
    month: 'short',
    day: 'numeric',
    hour: '2-digit',
    minute: '2-digit',
  });
}
formatPhone function · typescript · L29-L35 (7 LOC)
utils/format.ts
export function formatPhone(phone: string): string {
  const cleaned = phone.replace(/\D/g, '');
  if (cleaned.length === 8) {
    return `${cleaned.slice(0, 4)}-${cleaned.slice(4)}`;
  }
  return phone;
}
isValidPhone function · typescript · L1-L4 (4 LOC)
utils/validators.ts
export function isValidPhone(phone: string): boolean {
  const cleaned = phone.replace(/\D/g, '');
  return /^[89]\d{7}$/.test(cleaned);
}
isValidEmail function · typescript · L6-L8 (3 LOC)
utils/validators.ts
export function isValidEmail(email: string): boolean {
  return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
}
isValidRegisterNumber function · typescript · L10-L12 (3 LOC)
utils/validators.ts
export function isValidRegisterNumber(rn: string): boolean {
  return /^[А-Яа-яЁё]{2}\d{8}$/.test(rn);
}
‹ prevpage 2 / 2