# William Fabric - Laravel Project Structure

## Project Overview
William Fabric is a Laravel-based application for managing workspaces and data pipelines, built with a clean, organized structure following modern Laravel best practices.

## Directory Structure

```
william-fabric/
├── app/
│   ├── Http/
│   │   ├── Controllers/
│   │   │   ├── Auth/                 # Authentication controllers
│   │   │   ├── Api/                  # API controllers
│   │   │   ├── Admin/                # Admin-specific controllers
│   │   │   ├── WorkspaceController.php
│   │   │   └── PipelineController.php
│   │   ├── Requests/                 # Form request validation classes
│   │   │   └── WorkspaceStoreRequest.php
│   │   ├── Resources/                # API resource classes
│   │   │   └── WorkspaceResource.php
│   │   └── Middleware/
│   │       └── CheckWorkspaceOwnership.php
│   ├── Models/
│   │   ├── User.php
│   │   ├── Workspace.php
│   │   └── Pipeline.php
│   ├── Services/                     # Business logic layer
│   │   ├── WorkspaceService.php
│   │   └── PipelineService.php
│   ├── Repositories/                 # Data access layer
│   │   └── WorkspaceRepository.php
│   ├── Traits/                       # Reusable traits
│   │   └── ApiResponseTrait.php
│   └── Helpers/                      # Helper classes
│       └── DateHelper.php
├── config/
│   └── workspace.php                 # Custom workspace configuration
├── database/
│   ├── migrations/
│   │   ├── create_users_table.php
│   │   ├── create_workspaces_table.php
│   │   ├── create_pipelines_table.php
│   │   └── add_company_to_users_table.php
│   └── seeders/
│       └── WorkspaceSeeder.php
├── resources/
│   └── views/
│       ├── auth/                     # Authentication views
│       ├── workspaces/               # Workspace CRUD views
│       │   ├── index.blade.php
│       │   ├── create.blade.php
│       │   ├── show.blade.php
│       │   └── edit.blade.php
│       └── layouts/
└── routes/
    ├── web.php                       # Web routes
    └── api.php                       # API routes
```

## Key Features

### 1. **Authentication System**
- User registration with company information
- Email verification
- Login/logout functionality
- Custom authentication views matching design requirements

### 2. **Workspace Management**
- Create, read, update, delete workspaces
- User-specific workspace isolation
- Workspace-pipeline relationships

### 3. **Pipeline Management**
- Pipeline creation and management within workspaces
- Status tracking (In Progress, Completed, Failed, etc.)
- Run scheduling and duration tracking

### 4. **API Layer**
- RESTful API endpoints for all resources
- API resources for consistent JSON responses
- Authentication via Sanctum (configured)

### 5. **Service Layer Architecture**
- Business logic separated from controllers
- Repository pattern for data access
- Dependency injection throughout

## Design Patterns Used

### 1. **Repository Pattern**
- Abstracts data access logic
- Located in `app/Repositories/`
- Example: `WorkspaceRepository`

### 2. **Service Layer Pattern**
- Contains business logic
- Located in `app/Services/`
- Example: `WorkspaceService`, `PipelineService`

### 3. **Form Request Validation**
- Validation logic separated from controllers
- Located in `app/Http/Requests/`
- Example: `WorkspaceStoreRequest`

### 4. **API Resources**
- Consistent API response formatting
- Located in `app/Http/Resources/`
- Example: `WorkspaceResource`

### 5. **Traits for Code Reuse**
- Reusable functionality across classes
- Located in `app/Traits/`
- Example: `ApiResponseTrait`

## Configuration

### Database Configuration
- MySQL database: `william_fabric`
- Host: `localhost`
- Username: `root`
- Password: `manager`

### Application Settings
- App Name: "William Fabric"
- Environment: Local development
- Email verification enabled

## API Endpoints

### Workspaces
- `GET /api/workspaces` - List user workspaces
- `POST /api/workspaces` - Create new workspace
- `GET /api/workspaces/{id}` - Show workspace details
- `PUT /api/workspaces/{id}` - Update workspace
- `DELETE /api/workspaces/{id}` - Delete workspace

### Authentication Required
All API endpoints require authentication via Sanctum tokens.

## Development Setup

1. Install dependencies: `composer install && npm install`
2. Configure environment: Copy `.env.example` to `.env` and update database settings
3. Generate app key: `php artisan key:generate`
4. Run migrations: `php artisan migrate`
5. Seed database: `php artisan db:seed --class=WorkspaceSeeder`
6. Build assets: `npm run build`
7. Start server: `php artisan serve`

## Security Features

- CSRF protection on all forms
- SQL injection prevention via Eloquent ORM
- User input validation via Form Requests
- Authorization middleware for workspace access
- Password hashing with bcrypt

## Testing

The application includes:
- PHPUnit configuration
- Pest testing framework
- Feature and unit test structure
- Database factories for testing data

This structure provides a scalable, maintainable codebase following Laravel best practices and modern PHP development standards.
