MIF_E31222823/Assets/SCRIPT/DatabaseManager.cs

94 lines
2.6 KiB
C#

using Firebase.Database;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Text.RegularExpressions;
using System.Threading.Tasks; // Tambahan
public class DatabaseManager : MonoBehaviour
{
public InputField Name;
public InputField NomorAbsen;
private DatabaseReference dbReference;
void Start()
{
dbReference = FirebaseDatabase.DefaultInstance.RootReference;
NomorAbsen.contentType = InputField.ContentType.IntegerNumber;
Name.onValueChanged.AddListener(FilterNamaInput);
}
public async void CreateUser()
{
// Validasi input kosong
if (string.IsNullOrEmpty(Name.text) || string.IsNullOrEmpty(NomorAbsen.text))
{
return;
}
// Validasi nama
if (!Regex.IsMatch(Name.text, @"^[a-zA-Z\s]+$"))
{
return;
}
// Validasi absen harus angka
int absen;
if (!int.TryParse(NomorAbsen.text, out absen))
{
return;
}
// Generate userID unik
string userID = Name.text.ToLower().Replace(" ", "_") + "_" + NomorAbsen.text;
PlayerPrefs.SetString("UserID", userID);
PlayerPrefs.Save();
DataSnapshot snapshot = await dbReference.Child("users").Child(userID).GetValueAsync();
if (snapshot.Exists)
{
// Ambil skor jika sudah ada
object scorePretestObj = snapshot.Child("score_pretest").Value;
int scorePretest = scorePretestObj != null ? int.Parse(scorePretestObj.ToString()) : 0;
object scoreQuisObj = snapshot.Child("score_quis").Value;
int scoreQuis = scoreQuisObj != null ? int.Parse(scoreQuisObj.ToString()) : 0;
PlayerPrefs.SetInt("ScorePretest", scorePretest);
PlayerPrefs.SetInt("ScoreQuis", scoreQuis);
PlayerPrefs.Save();
Debug.Log("User ditemukan. Skor dimuat dari Firebase.");
}
else
{
// Buat user baru
User newUser = new User(Name.text, absen);
string json = JsonUtility.ToJson(newUser);
await dbReference.Child("users").Child(userID).SetRawJsonValueAsync(json);
PlayerPrefs.SetInt("ScorePretest", 0);
PlayerPrefs.SetInt("ScoreQuis", 0);
PlayerPrefs.Save();
Debug.Log("User berhasil dibuat: " + Name.text);
}
SceneManager.LoadScene("PRETEST");
}
private void FilterNamaInput(string input)
{
string filtered = Regex.Replace(input, @"[^a-zA-Z\s]", "");
if (filtered != input)
{
Name.text = filtered;
}
}
}