## Tổng quan dự án

- **Tên**: daily-lvt-mkt (Laravel 11)
- **Mục tiêu**: Quản lý dữ liệu AdMob và Google Ads; nhập liệu, tổng hợp báo cáo theo ngày/tháng/năm; phân quyền người dùng; cấu hình hiển thị Dashboard.
- **Tech stack**:
    - Backend: Laravel 11 (PHP ^8.2)
    - Packages: `google/apiclient`, `googleads/google-ads-php`, `maatwebsite/excel`
    - Frontend: Vite, Bootstrap 5, jQuery/DataTables, SweetAlert2, Select2
    - Job/Schedule: Laravel Scheduler, Queue worker

## Chức năng chính (Features)

- **Xác thực & Phân quyền**
    - Đăng nhập/đăng xuất (`/login`, middleware `auth` cho admin)
    - Quản lý Vai trò (Role) và Người dùng (User)

- **Quản lý App**
    - CRUD App: tạo/sửa/xóa, cấu hình liên kết Google Ads name

- **Quản lý AdMob Accounts**
    - CRUD AdMob
    - OAuth login AdMob, lấy report tổng quan, theo AdUnit, theo Country

- **Quản lý Google Ads Accounts**
    - CRUD Google Ads
    - OAuth login Google Ads, lấy báo cáo (cost, conversions, v.v.)

- **Báo cáo & Nhập liệu**
    - AdMob Reports: nhập file, hiển thị danh sách, phân trang (component blade)
    - Google Ads Reports: nhập file, hiển thị danh sách
    - Báo cáo theo AdUnit (AdMob)
    - Báo cáo theo Country (AdMob, Google Ads)

- **Dashboard theo thời gian**
    - Daily/Month/Year dashboard (`/admin/daily/daily-day|daily-month|daily-year`)
    - Tùy chọn `is_layout_two` để đổi layout header

- **Cấu hình hiển thị Dashboard**
    - Màn hình Setting (`/admin/setting`), lưu `is_layout_two`

- **Tác vụ nền (Cron/Schedule)**
    - Tự động chạy lấy báo cáo Google Ads và AdMob theo giờ
    - Queue worker mỗi phút

## Các route quan trọng (rút gọn)

- Prefix bắt buộc: tất cả URL chạy dưới `/report/*`

- Public/Guest
    - `/` → redirect → `/report`
    - `/report/login` (GET), `/report/login-from` (POST)

- Admin (middleware `auth`) – lưu ý tất cả nằm sau `/report`
    - App: `/report/admin/app` (index, create, store, edit, update, delete)
    - Google Ads: `/report/admin/google-ads` (CRUD), OAuth: `/report/admin/google-ads/google/login|callback|report`
    - Google Ads Report: `/report/admin/google-ads-report` (CRUD, import)
    - AdMob: `/report/admin/admob` (CRUD), OAuth/Report: `/report/admin/admob/google login|callback|report`
    - AdMob Reports: `/report/admin/admob_reports` (CRUD, import)
    - AdMob AdUnit: `/report/admin/admob_adunit` (index, report)
    - AdMob Country: `/report/admin/admob_country` (index, reportAll, sampleCountryReport)
    - Role: `/report/admin/role` (CRUD)
    - User: `/report/admin/user` (CRUD)
    - Setting: `/report/admin/setting` (index, store)
    - Dashboard: `/report/admin/daily/daily-day|daily-month|daily-year`

## Console commands & Schedule

- Commands (thư mục `app/Console/Commands`):
    - `report:google-ads` (lấy báo cáo Google Ads)
    - `report:admob` (lấy báo cáo AdMob)
    - `test:cron` (demo)

- Lịch chạy (`routes/console.php`):
    - `report:google-ads` → hourly (ghi log `storage/logs/google-ads-report.log`)
    - `report:admob` → hourly (ghi log `storage/logs/admob-report.log`)
    - `queue:work --stop-when-empty` → everyMinute

## Database & Gợi ý chỉ mục

- Các bảng báo cáo chính: `google_ads_reports`, `admob_reports`, `admob_report_countries`, `admob_report_adunits`, `google_ads_report_countries`
- README có mô tả thêm các lệnh ALTER/CREATE INDEX đề xuất để tối ưu truy vấn Dashboard và Reports.

## Hướng dẫn chạy nhanh

1. Cài đặt thư viện PHP/JS

```bash
composer install
npm install
```

2. Cấu hình môi trường

```bash
cp .env.example .env
php artisan key:generate
php artisan migrate
```

3. Chạy dev server

```bash
npm run serve
# tương đương chạy song song: php artisan serve + vite
```

4. Cron/queue (tùy môi trường)

```bash
php artisan schedule:work
php artisan queue:work
```

## Demo luồng sử dụng nhanh

- Đăng nhập: truy cập `/login`
- Quản lý App: vào `/admin/app`, thêm App và cấu hình `google_ads_name` nếu cần mapping
- Kết nối Google Ads: `/admin/google-ads/google/login` để OAuth → sau đó `/admin/google-ads/google/report`
- Kết nối AdMob: `/admin/admob/google/login` để OAuth → sau đó `/admin/admob/google/report`
- Nhập báo cáo thủ công:
    - AdMob: `/admin/admob_reports` → Import (route `admob_reports.import`)
    - Google Ads: `/admin/google-ads-report` → Import (route `google.ads.report.import`)
- Xem Dashboard theo thời gian: `/admin/daily/daily-day`, `/admin/daily/daily-month`, `/admin/daily/daily-year`
- Chuyển layout hiển thị: `/admin/setting` đặt `is_layout_two = 1` để dùng `header_v2`

## Giao diện & Assets

- Layout chính: `resources/views/admin/layout/app.blade.php`
    - Dùng SB Admin 2 CSS, FontAwesome, DataTables, Vite assets (`resources/css/app.css`, `resources/js/app.js`)
    - Include header/topbar/footer; chuyển layout dựa vào `Auth::check() && Auth::user()->is_layout_two`

## Ghi chú

- Các file HTML ở root (`index.html`, `index_month.html`, `index_year.html`, `layout_v2.html`, v.v.) có thể là tài liệu hoặc prototype hỗ trợ.
- Có các script hỗ trợ OAuth/token (`get_refresh_token.php`, `get_token_admob.php`) ở root.

## Chạy bằng Docker

### 1) Yêu cầu

- Docker Desktop (Windows/macOS) hoặc Docker Engine (Linux)

### 2) Cấu trúc đã thêm

- `Dockerfile`: build PHP 8.2 FPM + extensions cần thiết
- `docker-compose.yml`: services `app` (php-fpm), `nginx`, `db` (MySQL 8), `queue`, `scheduler`
- `deploy/nginx/default.conf`: cấu hình virtual host cho Nginx
- `.dockerignore`: tối ưu build context

### 3) Thiết lập môi trường

Sao chép file env và cập nhật biến DB/OAuth theo nhu cầu:

```bash
cp .env.example .env
```

Sửa `.env` để trỏ DB vào service `db`:

```
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=daily_lvt_mkt
DB_USERNAME=daily
DB_PASSWORD=secret
```

### 4) Khởi động

```bash
docker compose up -d --build
```

Truy cập: `http://localhost`

### 5) Lần đầu khởi tạo (trong container `app`)

```bash
docker compose exec app php artisan key:generate
docker compose exec app php artisan migrate --force
```

Nếu cần seed hoặc tạo user admin, chạy thêm lệnh tương ứng.

### 6) Queue & Scheduler

- Queue worker và scheduler đã chạy trong các service riêng (`queue`, `scheduler`).
- Có thể xem log bằng:

```bash
docker compose logs -f queue
docker compose logs -f scheduler
```

### 7) Quản lý composer/npm (tuỳ chọn)

- Cài vendor: `docker compose exec app composer install`
- Build assets (nếu dùng): có thể chạy `npm` bên ngoài host rồi mount vào container, hoặc tạo thêm service Node riêng nếu cần.

### 8) Dừng/cleanup

```bash
docker compose down
```
# DB subdomain
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=subdomain_daily
DB_USERNAME=root
DB_PASSWORD=

# DB server

DB_CONNECTION=mysql
DB_HOST=103.90.225.162
DB_PORT=3306
DB_DATABASE=lvtglob2_report
DB_USERNAME=lvtglob2_quangnv
DB_PASSWORD=quangnv@


