# Source Folder Documentation

The `src` folder contains the core modules, services, configurations, utilities, and other components for the application. Below is a detailed explanation of its structure and purpose.

## Folder Structure

### 1. **common/**
   - This folder contains reusable services, utilities, and configurations shared across the application.
   - **Sub Folders:**
     - **config/**:
       - Contains configuration files for logging, exception handling, and other utilities.
       - Files:
         - `logging.service.ts`: Handles application-wide logging.
         - `exceptions-logger.ts`: Custom exception filters for error handling.
         - `upload-s3-file-using-link.ts`: Utility for uploading files to S3.
         - `recaptcha.service.ts`: Verifies human users via reCAPTCHA.
         - `send-mail.service.ts`: ends emails using configured SMTP.
         - `etc...`
     - **services/**:
       - Houses services for external integrations and reusable logic.
       - **Sub Folders:**
         - **facebook/**:
           - Manages Facebook API integrations.
           - Files:
             - `facebook.module.ts`: Facebook module definition.
             - `facebook.service.ts`: Service for interacting with Facebook APIs.
         - **instagram/**:
           - Handles Instagram API integrations.
           - Files:
             - `instagram.module.ts`: Instagram module definition.
             - `instagram.service.ts`: Service for interacting with Instagram APIs.
         - **payment-gateway/**:
           - Contains payment gateway integrations like Stripe.
           - Files:
             - `stripe.module.ts`: Stripe module definition.
             - `stripe.service.ts`: Service for handling Stripe payments.
         - **youtube/**:
           - Manages YouTube API integrations.
           - Files:
             - `youtube.module.ts`: YouTube module definition.
             - `youtube.service.ts`: Service for interacting with YouTube APIs.
         - **tiktok/**:
           - Handles TikTok API integrations.
           - Files:
             - `tiktok.module.ts`: TikTok module definition.
             - `tiktok.service.ts`: Service for interacting with TikTok APIs.
         - **apify/**:
           - Manages Apify scraping services.
           - Files:
             - `apify.module.ts`: Apify module definition.
             - `apify.service.ts`: Service for scraping data using Apify.
         - **encryption/**:
           - Provides encryption and decryption utilities for sensitive data.
           - Files:
             - `encryption.module.ts`: Encryption module definition.
             - `encryption.service.ts`: Service for encryption and decryption.
         - **notification/**:
           - Handles notification services.
           - Files:
             - `notification.module.ts`: Notification module definition.
             - `notification.service.ts`: Service for sending notifications.
         - **socket/**:
           - Manages WebSocket communication.
           - Files:
             - `socket.gateway.ts`: WebSocket gateway for real-time communication.
         - `etc...`

### 2. **modules/**
   - Contains feature-specific modules, each encapsulating its controllers, services, and repositories.
   - **Sub Folders:**
     - **auth/**:
       - Handles authentication and authorization logic.
       - Folders
         - `dtos` : Contain the validation dtos files
       - Files:
         - `auth.module.ts`: Auth module definition.
         - `auth.controller.ts`: Controller for authentication endpoints.
         - `auth.service.ts`: Service for authentication logic.
         - **strategies/**:
           - Contains authentication strategies.
           - Files:
             - `jwt.strategy.ts`: JWT strategy for token validation.
             - `local.strategy.ts`: Local strategy for username/password authentication.
         - **guards/**:
           - Contains guards for route protection.
           - Files:
             - `auth.guard.ts`: Guard for protecting routes.
     - **brand-register/**:
       - Manages brand registration processes.
       - Folders
         - `dtos` : Contain the validation dtos files
       - Files:
         - `brand-register.module.ts`: Brand registration module definition.
         - `brand-register.controller.ts`: Controller for brand registration endpoints.
         - `brand-register.service.ts`: Service for brand registration logic.
         - `brand-register.repository.ts`: Repository for brand registration database operations.
     - **campaign/**:
       - Handles campaign creation, management, and related operations.
       - Folders
         - `dtos` : Contain the validation dtos files
       - Files:
         - `campaign.module.ts`: Campaign module definition.
         - `campaign.controller.ts`: Controller for campaign endpoints.
         - `campaign.service.ts`: Service for campaign logic.
         - `campaign.repository.ts`: Repository for campaign database operations.
         - `report.services.ts`: Service for generating campaign reports.
     - **common/**:
       - Provides shared functionality like notifications and file management.
       - Folders
         - `dtos` : Contain the validation dtos files
       - Files:
         - `common.module.ts`: Common module definition.
         - `common.service.ts`: Service for shared logic.
         - `common.controller.ts`: Controller for shared endpoints.
         - `common.repository.ts`: Repository for shared database operations.
     - **dispute/**:
       - Manages disputes between users.
       - Folders
         - `dtos` : Contain the validation dtos files
       - Files:
         - `dispute.module.ts`: Dispute module definition.
         - `dispute.controller.ts`: Controller for dispute endpoints.
         - `dispute.service.ts`: Service for dispute logic.
         - `dispute.repository.ts`: Repository for dispute database operations.
     - **file-manager/**:
       - Handles file uploads, storage, and management.
       - Folders
         - `dtos` : Contain the validation dtos files
       - Files:
         - `file-manager.module.ts`: File manager module definition.
         - `file-manager.controller.ts`: Controller for file management endpoints.
         - `file-manager.service.ts`: Service for file management logic.
         - `file-manager.repository.ts`: Repository for file management database operations.
     - **influencer-register/**:
       - Manages influencer registration processes.
       - Folders
         - `dtos` : Contain the validation dtos files
       - Files:
         - `influencer-register.module.ts`: Influencer registration module definition.
         - `influencer-register.controller.ts`: Controller for influencer registration endpoints.
         - `influencer-register.service.ts`: Service for influencer registration logic.
         - `influencer-register.repository.ts`: Repository for influencer registration database operations.
     - **payment/**:
       - Handles payment processing and subscription management.
       - Folders
         - `dtos` : Contain the validation dtos files
       - Files:
         - `payment.module.ts`: Payment module definition.
         - `payment.controller.ts`: Controller for payment endpoints.
         - `payment.service.ts`: Service for payment logic.
         - `payment.repository.ts`: Repository for payment database operations.
     - **settings/**:
       - Manages application settings and configurations.
       - Folders
         - `dtos` : Contain the validation dtos files
       - Files:
         - `settings.module.ts`: Settings module definition.
         - `settings.controller.ts`: Controller for settings endpoints.
         - `settings.service.ts`: Service for settings logic.
     - **browse-influencer/**:
       - Handles browsing and filtering influencers.
       - Folders
         - `dtos` : Contain the validation dtos files
       - Files:
         - `browse-influencer.module.ts`: Browse influencer module definition.
         - `browse-influencer.controller.ts`: Controller for browsing influencers.
         - `browse-influencer.service.ts`: Service for influencer browsing logic.
         - `browse-influencer.repository.ts`: Repository for influencer browsing database operations.
     - **advertisement/**:
       - Manages advertisements in the application.
       - Folders
         - `dtos` : Contain the validation dtos files
       - Files:
         - `advertisement.module.ts`: Advertisement module definition.
         - `advertisement.controller.ts`: Controller for advertisement endpoints.
         - `advertisement.service.ts`: Service for advertisement logic.
         - `advertisement.repository.ts`: Repository for advertisement database operations.
     - **etc...**:

### 3. **entities/**
   - Contains TypeORM entity definitions that map to database tables.
   - Files:
     - `users.entity.ts`: Represents the `users` table.
     - `campaign.entity.ts`: Represents the `campaigns` table.
     - `subscription.entity.ts`: Represents the `subscriptions` table.
     - `plan.entity.ts`: Represents the `plans` table.
     - `settings.entity.ts`: Represents the `settings` table.
     - `notifications.entity.ts`: Represents the `notifications` table.
     - `social-medias.entity.ts`: Represents the `social_medias` table.
     - `etc...`

### 4. **cron/**
   - Contains scheduled tasks and cron jobs for periodic operations.
   - Files:
     - `cron.module.ts`: Cron module definition.
     - `cron.service.ts`: Service for defining and running cron jobs.

### 5. **validation-pipe/**
   - Contains custom validation pipes for request validation.
   - Files:
     - `validation.pipe.ts`: A custom pipe for validating incoming request data.

### 6. **middleware/**
   - Contains middleware for processing requests and responses.
   - Files:
     - `logging.middleware.ts`: Logs incoming requests and outgoing responses.
     - `rate-limiter.middleware.ts`: Implements rate limiting to prevent abuse.

### 7. **seeder/**
   - Contains scripts for seeding initial data into the database.
   - Files:
     - `run-seeder.ts`: Executes all seeders.
     - `user-seeder.ts`: Seeds initial user data.
     - `campaign-seeder.ts`: Seeds initial campaign data.

### 8. **messages/**
   - Contains message files for responses, notifications, and emails.
   - Files:
     - `response-messages.ts`: Contains predefined response messages for API endpoints.
     - `notifications-messages.ts`: Contains predefined notification messages.
     - `email-messages.ts`: Contains predefined email templates and messages.

### 9. **migration/**
   - Contains database migration scripts for schema changes.
   - Files:
     - `timestamp_create_users_table.ts`: Migration script for creating the `users` table.
     - `timestamp_create_campaigns_table.ts`: Migration script for creating the `campaigns` table.

### 10. **app.module.ts**
   - The root module of the application.
   - Imports and configures all other modules.
   - Example:
     - Registers global services like `AuthModule`, `PaymentModule`, etc.

### 11. **main.ts**
   - The entry point of the application.
   - Initializes the server, middleware, and Swagger documentation.
   - Example:
     - Configures global pipes, exception filters, and CORS.

## Example Structure

```
src/
├── common/
│   ├── config/
│   │   ├── logging.service.ts
│   │   ├── exceptions-logger.ts
│   │   ├── upload-s3-file-using-link.ts
│   │   ├── etc...
│   ├── services/
│   │   ├── facebook/
│   │   │   ├── facebook.module.ts
│   │   │   ├── facebook.service.ts
│   │   ├── instagram/
│   │   │   ├── instagram.module.ts
│   │   │   ├── instagram.service.ts
│   │   ├── payment-gateway/
│   │   │   ├── stripe.module.ts
│   │   │   ├── stripe.service.ts
│   │   ├── youtube/
│   │   │   ├── youtube.module.ts
│   │   │   ├── youtube.service.ts
│   │   ├── tiktok/
│   │   │   ├── tiktok.module.ts
│   │   │   ├── tiktok.service.ts
│   │   ├── apify/
│   │   │   ├── apify.module.ts
│   │   │   ├── apify.service.ts
│   │   ├── encryption/
│   │   │   ├── encryption.module.ts
│   │   │   ├── encryption.service.ts
│   │   ├── notification/
│   │   │   ├── notification.module.ts
│   │   │   ├── notification.service.ts
│   │   ├── socket/
│   │   │   ├── socket.gateway.ts
│   │   ├── etc...
├── modules/
│   ├── auth/
│   │   ├── auth.module.ts
│   │   ├── auth.controller.ts
│   │   ├── auth.service.ts
│   │   ├── strategies/
│   │   │   ├── jwt.strategy.ts
│   │   │   ├── local.strategy.ts
│   │   ├── guards/
│   │   │   ├── auth.guard.ts
│   ├── brand-register/
│   │   ├── brand-register.module.ts
│   │   ├── brand-register.controller.ts
│   │   ├── brand-register.service.ts
│   │   ├── brand-register.repository.ts
│   ├── campaign/
│   │   ├── campaign.module.ts
│   │   ├── campaign.controller.ts
│   │   ├── campaign.service.ts
│   │   ├── campaign.repository.ts
│   │   ├── report.services.ts
│   ├── common/
│   │   ├── common.module.ts
│   │   ├── common.service.ts
│   │   ├── common.controller.ts
│   │   ├── common.repository.ts
│   ├── dispute/
│   │   ├── dispute.module.ts
│   │   ├── dispute.controller.ts
│   │   ├── dispute.service.ts
│   │   ├── dispute.repository.ts
│   ├── file-manager/
│   │   ├── file-manager.module.ts
│   │   ├── file-manager.controller.ts
│   │   ├── file-manager.service.ts
│   │   ├── file-manager.repository.ts
│   ├── influencer-register/
│   │   ├── influencer-register.module.ts
│   │   ├── influencer-register.controller.ts
│   │   ├── influencer-register.service.ts
│   │   ├── influencer-register.repository.ts
│   ├── payment/
│   │   ├── payment.module.ts
│   │   ├── payment.controller.ts
│   │   ├── payment.service.ts
│   │   ├── payment.repository.ts
│   ├── settings/
│   │   ├── settings.module.ts
│   │   ├── settings.controller.ts
│   │   ├── settings.service.ts
│   ├── browse-influencer/
│   │   ├── browse-influencer.module.ts
│   │   ├── browse-influencer.controller.ts
│   │   ├── browse-influencer.service.ts
│   │   ├── browse-influencer.repository.ts
│   ├── advertisement/
│   │   ├── advertisement.module.ts
│   │   ├── advertisement.controller.ts
│   │   ├── advertisement.service.ts
│   │   ├── advertisement.repository.ts
│   ├── etc...
├── entities/
│   ├── users.entity.ts
│   ├── campaign.entity.ts
│   ├── subscription.entity.ts
│   ├── plan.entity.ts
│   ├── settings.entity.ts
│   ├── notifications.entity.ts
│   ├── social-medias.entity.ts
│   ├── etc...
├── cron/
│   ├── cron.module.ts
│   ├── cron.service.ts
├── validation-pipe/
│   ├── validation.pipe.ts
├── middleware/
│   ├── logging.middleware.ts
│   ├── rate-limiter.middleware.ts
├── seeder/
│   ├── run-seeder.ts
│   ├── user-seeder.ts
│   ├── campaign-seeder.ts
├── messages/
│   ├── response-messages.ts
│   ├── notifications-messages.ts
│   ├── email-messages.ts
├── migration/
│   ├── timestamp_create_users_table.ts
│   ├── timestamp_create_campaigns_table.ts
│   ├── etc...
├── app.module.ts
└── main.ts
```

## Notes
- Each module follows the NestJS modular structure with controllers, services, and repositories.
- The `common` folder contains reusable components to avoid duplication.
- The `entities` folder defines the database schema using TypeORM.
- The `cron` folder automates periodic tasks like data updates.
- The `messages` folder centralizes all predefined messages for consistency.
- The `migration` folder contains scripts for database schema changes.
- The `main.ts` file is the starting point of the application.

This documentation provides a comprehensive overview of the folder structure and its purpose.
