94 lines
2.0 KiB
Go
94 lines
2.0 KiB
Go
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)
|
|
}
|