# SISADIK - Sistem Informasi Siswa dan Administrasi Sekolah

Sistem informasi lengkap untuk pengelolaan data siswa, guru, dan administrasi sekolah berbasis Next.js dengan PostgreSQL.

## 🚀 Fitur Utama

### ✅ Sudah Diimplementasikan:

- **Authentication System**: Login/Register dengan role-based access
- **Data Siswa**: CRUD lengkap untuk manajemen data siswa
- **Data Guru**: CRUD lengkap untuk manajemen data guru
- **Setting Sekolah**: Konfigurasi informasi sekolah lengkap
- **Database PostgreSQL**: Dengan Prisma ORM
- **SWR Integration**: Data fetching yang optimized
- **UI Components**: Menggunakan shadcn/ui
- **Form Validation**: Dengan Zod schema validation
- **Toast Notifications**: User feedback yang baik

### 🔧 Tech Stack:

- **Frontend**: Next.js 16 (App Router), React 19, TypeScript
- **Database**: PostgreSQL dengan Prisma ORM
- **UI**: Tailwind CSS + shadcn/ui
- **State Management**: SWR untuk server state, Redux Toolkit untuk global state
- **Form Handling**: React Hook Form + Zod
- **Authentication**: Custom JWT-like dengan Context API
- **Architecture**: Colocation-first architecture pattern

## 📊 Database Schema

### Users Table

```sql
- id (String, Primary Key)
- email (String, Unique)
- password (String, Hashed)
- role (Enum: USER, ADMIN, GURU, SISWA)
- createdAt, updatedAt
```

### Siswa Table

```sql
- id (String, Primary Key)
- no (Int, Auto Increment)
- nisn (String, Unique)
- nis (String, Unique)
- tingkat (String)
- kelas (String)
- jurusan (String)
- nama (String)
- jk (Enum: L, P)
- agama (String)
- noWa (String, Optional)
- noWaOrtu (String, Optional)
- createdAt, updatedAt
```

### Guru Table

```sql
- id (String, Primary Key)
- no (Int, Auto Increment)
- nip (String, Unique)
- nama (String)
- noWa (String, Optional)
- createdAt, updatedAt
```

### SettingSekolah Table

```sql
- id (String, Primary Key)
- namaSekolah (String)
- jenjang (String)
- kementrian (String)
- npsn (String, Unique)
- semester (String)
- tahunPelajaran (String)
- tanggalRapor (DateTime)
- noWa, alamat, desa, kecamatan, kabupaten, propinsi
- email, kepalaSekolah, nipKepalaSekolah
- logo, stempel, ttdKepsek (File paths)
- headerLaporan, kopSekolah, namaYayasan, ketuaYayasan
- createdAt, updatedAt
```

## 🚀 Quick Start

### 1. Clone & Install

```bash
git clone [repository]
cd sisadik
npm install
```

### 2. Environment Setup

```bash
# Copy .env file yang sudah ada
# DATABASE_URL sudah dikonfigurasi untuk PostgreSQL lokal

# Pastikan PostgreSQL running di localhost:5432
```

### 3. Database Setup

```bash
# Generate Prisma Client
npx prisma generate

# Push schema ke database
npx prisma db push

# Seed initial data
npx tsx prisma/seed.ts
```

### 4. Development Server

```bash
npm run dev
```

Akses aplikasi di http://localhost:3000

## 🔐 Default Login

Setelah seeding, gunakan akun berikut:

- **Email**: admin@sisadik.com
- **Password**: admin123
- **Role**: ADMIN

## 📁 Project Structure

```
src/
├── app/
│   ├── api/                    # API Routes
│   │   ├── auth/              # Authentication endpoints
│   │   ├── siswa/             # Siswa CRUD endpoints
│   │   ├── guru/              # Guru CRUD endpoints
│   │   └── setting-sekolah/   # School settings endpoints
│   ├── (main)/
│   │   ├── auth/              # Login/Register pages
│   │   └── dashboard/         # Dashboard & management pages
│   │       ├── siswa/         # Student management
│   │       ├── guru/          # Teacher management
│   │       └── setting-sekolah/ # School settings
│   └── layout.tsx             # Root layout with providers
├── components/
│   ├── ui/                    # shadcn/ui components
│   └── protected-route.tsx    # Route protection component
├── contexts/
│   └── auth-context.tsx       # Authentication context
├── hooks/
│   ├── use-siswa.ts          # Student data hooks
│   ├── use-guru.ts           # Teacher data hooks
│   └── use-setting-sekolah.ts # School settings hooks
├── lib/
│   └── prisma.ts             # Prisma client instance
├── navigation/
│   └── sidebar/              # Navigation configuration
└── providers/
    ├── store-provider.tsx    # Redux store provider
    └── swr-provider.tsx      # SWR configuration
```

## 🛠️ Development

### API Endpoints

#### Authentication

- `POST /api/auth/login` - Login user
- `POST /api/auth/register` - Register new user

#### Siswa Management

- `GET /api/siswa` - Get all students
- `POST /api/siswa` - Create student
- `GET /api/siswa/[id]` - Get student by ID
- `PUT /api/siswa/[id]` - Update student
- `DELETE /api/siswa/[id]` - Delete student

#### Guru Management

- `GET /api/guru` - Get all teachers
- `POST /api/guru` - Create teacher
- `GET /api/guru/[id]` - Get teacher by ID
- `PUT /api/guru/[id]` - Update teacher
- `DELETE /api/guru/[id]` - Delete teacher

#### School Settings

- `GET /api/setting-sekolah` - Get school settings
- `POST /api/setting-sekolah` - Create/Update school settings

### Adding New Features

1. **Database Changes**: Update `prisma/schema.prisma`
2. **API Routes**: Add new endpoints in `src/app/api/`
3. **Hooks**: Create SWR hooks in `src/hooks/`
4. **UI Components**: Add pages in appropriate route folders
5. **Navigation**: Update `src/navigation/sidebar/sidebar-items.ts`

## 🔮 Next Steps

Fitur yang bisa ditambahkan selanjutnya:

- **Kelas Management**: Pengelolaan data kelas
- **Mata Pelajaran**: CRUD mata pelajaran
- **Jadwal Pelajaran**: Manajemen jadwal
- **Nilai & Rapor**: Sistem penilaian
- **Absensi**: Sistem kehadiran
- **Pembayaran SPP**: Manajemen keuangan
- **Export/Import**: Excel/PDF export
- **Dashboard Analytics**: Charts & statistics
- **Notification System**: Real-time notifications
- **File Upload**: Image/document management

## 🤝 Contributing

1. Fork repository ini
2. Buat feature branch (`git checkout -b feature/amazing-feature`)
3. Commit changes (`git commit -m 'Add amazing feature'`)
4. Push ke branch (`git push origin feature/amazing-feature`)
5. Buat Pull Request

## 📝 License

MIT License - lihat file LICENSE untuk detail lengkap.

---

**SISADIK** - Sistem Informasi Siswa dan Administrasi Sekolah
Dibuat dengan ❤️ menggunakan Next.js dan PostgreSQL
