# Modul Aktivitas

Modul ini menangani pencatatan aktivitas harian pengguna, termasuk jam mulai, jam selesai, aktivitas yang dilakukan, dan output.

## Daftar Isi
- [Endpoint API](#endpoint-api)
- [Pengaturan Aktivitas](#pengaturan-aktivitas)
- [Membuat Aktivitas](#membuat-aktivitas)
- [Mengupdate Aktivitas](#mengupdate-aktivitas)
- [Mendapatkan Aktivitas Harian](#mendapatkan-aktivitas-harian)
- [Integrasi Mobile](#integrasi-mobile)

## Endpoint API

| Method | Endpoint | Deskripsi |
|--------|----------|-----------|
| GET | `/api/settings/activity` | Mendapatkan pengaturan aktivitas |
| POST | `/api/activities` | Membuat aktivitas baru |
| PUT | `/api/activities/{id}` | Mengupdate aktivitas |
| GET | `/api/activities` | Mendapatkan aktivitas harian |

## Pengaturan Aktivitas

Endpoint ini digunakan untuk mendapatkan pengaturan aktivitas.

### Request
```http
GET /api/settings/activity
Authorization: Bearer {token}
```

### Response
```json
{
  "activity_settings": {
    "backdate_enabled": "boolean"
  }
}
```

### Deskripsi Field
- `backdate_enabled`: Status apakah pengguna dapat membuat aktivitas untuk tanggal sebelumnya

## Membuat Aktivitas

Endpoint ini digunakan untuk membuat aktivitas baru.

### Request
```http
POST /api/activities
Authorization: Bearer {token}
Content-Type: application/json
```

**Body:**
```json
{
  "date": "date",
  "start_time": "time",
  "end_time": "time",
  "activity": "string",
  "output": "string"
}
```

### Response
```json
{
  "success": "boolean",
  "activity": {
    "id": "int",
    "date": "date",
    "start_time": "time",
    "end_time": "time",
    "activity": "string",
    "output": "string"
  }
}
```

### Validasi
- `date`: Wajib, format tanggal (YYYY-MM-DD)
- `start_time`: Wajib, format waktu (HH:MM)
- `end_time`: Wajib, format waktu (HH:MM)
- `activity`: Wajib, deskripsi aktivitas
- `output`: Wajib, deskripsi output

## Mengupdate Aktivitas

Endpoint ini digunakan untuk mengupdate aktivitas yang sudah ada.

### Request
```http
PUT /api/activities/{id}
Authorization: Bearer {token}
Content-Type: application/json
```

**Body:**
```json
{
  "start_time": "time",
  "end_time": "time",
  "activity": "string",
  "output": "string"
}
```

### Response
```json
{
  "success": "boolean",
  "activity": {
    "id": "int",
    "date": "date",
    "start_time": "time",
    "end_time": "time",
    "activity": "string",
    "output": "string"
  }
}
```

### Validasi
- `start_time`: Wajib, format waktu (HH:MM)
- `end_time`: Wajib, format waktu (HH:MM)
- `activity`: Wajib, deskripsi aktivitas
- `output`: Wajib, deskripsi output

## Mendapatkan Aktivitas Harian

Endpoint ini digunakan untuk mendapatkan aktivitas pada tanggal tertentu.

### Request
```http
GET /api/activities?date={date}
Authorization: Bearer {token}
```

### Response
```json
{
  "activities": [
    {
      "id": "int",
      "date": "date",
      "start_time": "time",
      "end_time": "time",
      "activity": "string",
      "output": "string"
    }
  ]
}
```

### Query Parameter
- `date`: Tanggal untuk mendapatkan aktivitas (format: YYYY-MM-DD)

## Integrasi Mobile

### Alur Aktivitas
1. Aplikasi mobile memanggil endpoint `/api/settings/activity` untuk mendapatkan pengaturan
2. Jika `backdate_enabled` true, pengguna dapat membuat aktivitas untuk tanggal sebelumnya
3. Setelah check-in, tampilkan form untuk mengisi aktivitas
4. Sebelum check-out atau saat check-out, pastikan aktivitas sudah diisi
5. Jika output belum diisi saat check-out, tampilkan form untuk mengisi output

### Validasi Waktu
- Pastikan `end_time` tidak sebelum `start_time`
- Validasi di sisi mobile sebelum mengirim ke backend
- Tampilkan error jika waktu tidak valid

### Pengisian Output
- Output bisa diisi setelah aktivitas dibuat
- Tampilkan notifikasi jika output belum diisi setelah check-out
- Berikan kemudahan untuk mengedit output yang sudah ada