# SYSTEM PLAN

## Architecture

Browser
|
Laravel Application
|
Service Layer
|
Repository Layer
|
MySQL

## Modules

### Organization Module

- Kelola organisasi
- Pengaturan status organisasi
- Dasar isolasi data antar organisasi

### Event Module

- Kelola event voting
- Jadwal aktif dan nonaktif
- Status event

### Candidate Module

- Kelola kandidat per event
- Urutan tampil kandidat
- Metadata kandidat

### Voter Module

- Input dan import voter
- Validasi email voter
- Status voting per voter

### OTP Module

- Generate OTP
- Kirim OTP ke email
- Validasi OTP
- Expiration handling

### Voting Module

- Proses voting anonim
- Satu voter satu suara
- Transaction lock saat submit vote

### Result Module

- Rekap suara per event
- Monitoring hasil real-time
- Statistik partisipasi

### Audit Module

- Catat aktivitas penting
- Log login, OTP, voting, dan administrasi
- Jangan simpan pilihan suara di audit log

## Voting Flow

Landing Page
↓
Select Event
↓
Input Email
↓
Validate Voter
↓
Send OTP
↓
Verify OTP
↓
Vote
↓
Confirmation
↓
Store Vote
↓
Mark Voter Voted
↓
Finish

## Anonymous Strategy

### Table voters

- id
- email
- has_voted

### Table votes

- id
- event_id
- candidate_id

Tidak ada relasi `voter_id` pada table `votes`.

## Security Layer

- OTP Expiration
- Rate Limiter
- CSRF Protection
- Email Verification
- Session Expiration
- Audit Logging
- Transaction Lock

## Infrastructure Notes

- Queue dipakai untuk pengiriman OTP email.
- Scheduler dipakai untuk membersihkan OTP expired dan tugas monitoring berkala.
- Mail service dipakai untuk notifikasi dan verifikasi email.

## Development Order

Urutan yang direkomendasikan:

1. Authentication Organizer
2. Organization Module
3. Event Module
4. Candidate Module
5. Voter Import Module
6. OTP Module
7. Voting Engine
8. Audit Log
9. Result Dashboard
10. Landing Page
11. Report Export
12. Testing
13. Security Hardening

