Skip to content

Services

Shared services in src/lib/services/ encapsulate Firebase operations that are used across multiple modules.

File: user.service.ts

User profile and account operations:

class UserService {
updateRole(userId, role);
updateInfo(userId, info);
updateWorkHours(userId, hours);
updateMetadata(userId, metadata);
deleteUser(userId);
getUserByUserName(userName); // Check username existence
}

File: email.service.ts (Singleton)

Email queue system using Firestore mail collection:

class EmailService {
sendEmail(to, subject, html);
sendDisputeNotificationEmail(disputeData);
sendDisputeResolutionEmails(resolutionData);
}

Emails are queued in the mail Firestore collection and processed by a Firebase extension/function.

File: storage-user.service.ts

Tracks file uploads and storage usage per user:

class StorageUserService {
findFileByPath(path);
initializeStorage(userId);
createStorage(fileData);
updateStorage(fileId, updates);
deleteStorage(fileId);
updateStorageSpace(userId, delta);
}

Firestore path: storageUser/{userId}/files/{fileId}

File: user-registry-service.ts

Manages the user registration system configuration (for private beta):

class UserRegistryService {
initializeConfig();
updateConfig(updates);
setUserLimit(limit);
toggleEnabled(enabled);
}

Firestore path: config/userRegistry

File: checkout.service.ts

Stripe checkout session management with platform fee calculation:

class CheckoutService {
// Platform fee constant
static PLATFORM_FEE_PERCENT = 0.05; // 5%
createCheckoutSession(price, metadata, options);
createMarketplaceCheckout({
priceId,
sellerStripeAccountId,
amountInCents,
metadata
});
createCheckoutSessionCustom(price, options, metadata);
getCheckoutSession(sessionId);
watchCheckoutSession(sessionId, callback);
}

Marketplace checkout flow:

  1. Creates a checkout session on the seller’s Stripe Connect account
  2. Calculates 5% platform fee as application_fee_amount
  3. Stores session in Firestore: users/{buyerId}/checkout_sessions/{sessionId}
  4. Returns Stripe checkout URL for redirect

File: src/lib/server/stripe-connect.service.ts

Server-side Stripe Connect account management:

class StripeConnectService {
createExpressAccount(userId, userData);
// Creates Express account with card_payments and transfers
// Returns { accountId, accountLink }
getAccountStatus(accountId);
// Returns { chargesEnabled, payoutsEnabled }
}