package utils import ( "strconv" "time" "github.com/google/uuid" "golang.org/x/crypto/bcrypt" ) func HashPassword(password string) (string, error) { bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14) return string(bytes), err } func CheckPasswordHash(password, hash string) bool { err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password)) return err == nil } func StringToUint(s string) uint { id, err := strconv.ParseUint(s, 10, 64) if err != nil { return 0 } return uint(id) } func ParseInt(s string) int { i, err := strconv.Atoi(s) if err != nil { return 0 } return i } func ParseNullableUUID(s *string) *uuid.UUID { if s == nil || *s == "" { return nil } id := ParseUUID(*s) return &id } func ParseUUID(s string) uuid.UUID { id, err := uuid.Parse(s) if err != nil { return uuid.Nil } return id } // StringToDate parses a string to time.Time with layout "2006-01-02" func StringToDate(s string) time.Time { if t, err := time.Parse("2006-01-02", s); err == nil { now := time.Now() // Gabungkan tanggal dari input dengan jam:menit:detik dari waktu sekarang return time.Date( t.Year(), t.Month(), t.Day(), now.Hour(), now.Minute(), now.Second(), now.Nanosecond(), now.Location(), ) } return time.Time{} } // StringToDateTime parses a string to time.Time with layout "2006-01-02T15:04:05Z07:00" func StringToDateTime(s string) time.Time { // Coba parse RFC3339 dulu if t, err := time.Parse(time.RFC3339, s); err == nil { return t } // Jika gagal, coba parse "2006-01-02" if t, err := time.Parse("2006-01-02", s); err == nil { now := time.Now() // Gabungkan tanggal dari input dengan jam:menit:detik dari waktu sekarang return time.Date( t.Year(), t.Month(), t.Day(), now.Hour(), now.Minute(), now.Second(), now.Nanosecond(), now.Location(), ) } // Jika gagal semua, return zero time return time.Time{} } func DateToString(t time.Time) string { return t.Format("2006-01-02") } func DateTimeToString(t time.Time) string { return t.Format(time.RFC3339) }