TKK_E32231405/app/actions.ts

155 lines
5.2 KiB
TypeScript

'use server'
import { supabase } from '@/lib/supabase'
import { redirect } from 'next/navigation'
import { cookies } from 'next/headers'
export async function login(prevState: any, formData: FormData) {
const username = formData.get('username') as string
const password = formData.get('password') as string
const kodeUnikNik = formData.get('kode_unik_nik') as string
const remember = formData.get('remember') === 'on'
if (!username || !password || !kodeUnikNik) {
return { message: 'Username, password, dan Kode Unik / NIK wajib diisi' }
}
try {
// 1. Check Petugas (Admin - Role 1/Admin)
const { data: petugas, error: petugasError } = await supabase
.from('petugas_posyandu')
.select('*')
.eq('username', username)
.eq('password', password) // Plain text password check as requested
.single()
if (petugas) {
if (petugas.kode_unik !== kodeUnikNik) {
return { message: 'Kode Unik tidak valid' }
}
// Set session/cookie for Admin
// In a real app, use a secure session library. For this demo, simple cookies.
const cookieStore = await cookies()
cookieStore.set('user_session', JSON.stringify({
id: petugas.id,
role: 'admin',
username: petugas.username,
name: petugas.nama
}), { secure: true, httpOnly: true, maxAge: remember ? 60 * 60 * 24 * 7 : 60 * 60 * 24 })
redirect('/dashboard') // Redirect to dashboard or appropriate page
}
// 2. Check Akun Balita (User - Role 2/User)
const { data: user, error: userError } = await supabase
.from('akun_balita')
.select('*')
.eq('username', username)
.eq('password', password) // Plain text password check as requested
.single()
if (user) {
if (user.NIK !== kodeUnikNik) {
return { message: 'NIK tidak valid' }
}
// Set session/cookie for User
const cookieStore = await cookies()
cookieStore.set('user_session', JSON.stringify({
id: user.id,
role: 'user',
username: user.username,
name: user.nama_orang_tua // Or nama_anak depending on preference
}), { secure: true, httpOnly: true, maxAge: remember ? 60 * 60 * 24 * 7 : 60 * 60 * 24 })
redirect('/user-dashboard') // Redirect to user dashboard
}
return { message: 'Username atau password salah' }
} catch (error: any) {
if (error.message === 'NEXT_REDIRECT') {
throw error
}
console.error('Login error:', error)
return { message: 'An error occurred during login' }
}
}
export async function logout() {
const cookieStore = await cookies()
cookieStore.delete('user_session')
redirect('/')
}
export async function updatePetugas(prevState: any, formData: FormData) {
const id = formData.get('id') as string
const nama = formData.get('nama') as string
const username = formData.get('username') as string
const no_telp = formData.get('no_telp') as string
const password = formData.get('password') as string
if (!id || !nama || !username || !password) {
return { success: false, message: 'Semua field wajib diisi.' }
}
try {
const { error } = await supabase
.from('petugas_posyandu')
.update({
nama,
username,
no_telp,
password
})
.eq('id', id)
if (error) throw error
return { success: true, message: 'Profil berhasil diperbarui!' }
} catch (error) {
console.error('Error updating profile:', error)
return { success: false, message: 'Gagal memperbarui profil. Coba lagi.' }
}
}
export async function updateAkunBalita(prevState: any, formData: FormData) {
const id = formData.get('id') as string
const nama_orang_tua = formData.get('nama_orang_tua') as string
const alamat = formData.get('alamat') as string
const no_whatsapp = formData.get('no_whatsapp') as string
const nama_anak = formData.get('nama_anak') as string
const tanggal_lahir = formData.get('tanggal_lahir') as string
const username = formData.get('username') as string
const password = formData.get('password') as string
if (!id || !nama_orang_tua || !nama_anak || !username || !password) {
return { success: false, message: 'Field wajib tidak boleh kosong.' }
}
try {
const { error } = await supabase
.from('akun_balita')
.update({
nama_orang_tua,
alamat,
no_whatsapp,
nama_anak,
tanggal_lahir: tanggal_lahir || null,
username,
password,
})
.eq('id', id)
if (error) throw error
return { success: true, message: 'Data pengguna berhasil diperbarui!' }
} catch (error) {
console.error('Error updating akun balita:', error)
return { success: false, message: 'Gagal memperbarui data pengguna. Coba lagi.' }
}
}